From 982ac918afe6a1c02d5cf735d7b6c56443a048cc Mon Sep 17 00:00:00 2001 From: marha Date: Fri, 7 Feb 2014 23:28:38 +0100 Subject: xkbcomp xkeyboard-config libxcb libxtrans fontconfig libX11 libxcb mesa xserver git update 7 Feb 2014 Update to openssl1.0.1f xserver commit 83e38eb73fd8c852513aac2da2975b4c01070ec2 libxcb commit d7eb0bdf3b5b11ee9f40ee5e73df8fc0bdfa59f3 xkeyboard-config commit 7596672b96315465df8d8d691e3a567a52f70743 libX11 commit aacf95dacc7c598e7297894580d4d655593813b2 xkbcomp commit 31b90ee4ffc774e0da540277907fc5540c0b012c libxtrans commit 3f0de269abe59353acbd7a5587d68ce0da91db67 fontconfig commit e310d2fac2d874d5aa76c609df70cc7b871c0b6d mesa commit dd2229d4c68ed78a50104637aef904f8ab6d7dd3 --- X11/xtrans/Xtrans.c | 16 + X11/xtrans/Xtrans.h | 4 + X11/xtrans/configure.ac | 2 +- fontconfig/configure.ac | 2 +- fontconfig/doc/fcdircache.fncs | 10 + fontconfig/src/fccompat.c | 35 +- fontconfig/src/fcfreetype.c | 4 +- fontconfig/src/fcstat.c | 3 + libX11/nls/en_US.UTF-8/Compose.pre | 20 - libX11/nls/fi_FI.UTF-8/Compose.pre | 710 +-- libX11/src/XErrorDB | 12 + libxcb/Makefile.am | 2 +- libxcb/configure.ac | 163 +- libxcb/doc/Makefile.am | 6 +- libxcb/m4/xcb.m4 | 89 - libxcb/man/.gitignore | 1 + libxcb/man/Makefile.am | 18 + libxcb/man/xcb-examples.man | 59 + libxcb/man/xcb-requests.man | 165 + libxcb/src/Makefile.am | 19 +- libxcb/src/c_client.py | 52 +- libxcb/src/man/.gitignore | 5 +- libxcb/src/man/xcb-examples.3 | 59 - libxcb/src/man/xcb-requests.3 | 165 - mesalib/.dir-locals.el | 1 + mesalib/VERSION | 2 +- mesalib/configure.ac | 53 +- mesalib/docs/GL3.txt | 68 +- mesalib/docs/README.UVD | 31 + mesalib/docs/egl.html | 14 - mesalib/docs/index.html | 6 + mesalib/docs/relnotes.html | 1 + mesalib/docs/relnotes/10.0.3.html | 206 + mesalib/docs/relnotes/10.1.html | 4 + mesalib/docs/relnotes/10.2.html | 61 + mesalib/include/GL/gl.h | 2 +- mesalib/include/GL/glxext.h | 13 +- mesalib/include/GL/internal/dri_interface.h | 1 + mesalib/include/HaikuGL/GLRenderer.h | 10 +- mesalib/include/c11/threads_win32.h | 1 + mesalib/install-lib-links.mk | 14 + mesalib/src/gallium/auxiliary/hud/font.c | 2 +- .../src/gallium/auxiliary/util/u_index_modify.c | 6 +- mesalib/src/gallium/auxiliary/util/u_vbuf.c | 2 +- mesalib/src/glsl/ast.h | 37 +- mesalib/src/glsl/ast_to_hir.cpp | 128 +- mesalib/src/glsl/ast_type.cpp | 15 + mesalib/src/glsl/builtin_variables.cpp | 68 + mesalib/src/glsl/glcpp/glcpp-lex.l | 2 - mesalib/src/glsl/glcpp/glcpp-parse.y | 49 +- mesalib/src/glsl/glcpp/glcpp.c | 3 +- mesalib/src/glsl/glcpp/glcpp.h | 5 +- mesalib/src/glsl/glcpp/pp.c | 4 +- mesalib/src/glsl/glsl_lexer.ll | 3 +- mesalib/src/glsl/glsl_parser.yy | 96 +- mesalib/src/glsl/glsl_parser_extras.cpp | 58 +- mesalib/src/glsl/glsl_parser_extras.h | 21 + mesalib/src/glsl/ir.h | 2 +- mesalib/src/glsl/ir_constant_expression.cpp | 17 + mesalib/src/glsl/linker.cpp | 79 +- mesalib/src/glsl/lower_instructions.cpp | 14 +- mesalib/src/glsl/main.cpp | 16 +- mesalib/src/glsl/opt_algebraic.cpp | 67 + mesalib/src/glsl/opt_vectorize.cpp | 66 +- mesalib/src/glsl/standalone_scaffolding.cpp | 12 + mesalib/src/glsl/standalone_scaffolding.h | 2 + mesalib/src/loader/Makefile.am | 5 +- mesalib/src/loader/loader.c | 86 +- mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml | 40 + mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml | 15 + mesalib/src/mapi/glapi/gen/Makefile.am | 1 + mesalib/src/mapi/glapi/gen/gl_API.xml | 6 +- mesalib/src/mapi/glapi/gen/gl_genexec.py | 3 + mesalib/src/mesa/Makefile.am | 12 +- mesalib/src/mesa/Makefile.sources | 3 + mesalib/src/mesa/SConscript | 3 + mesalib/src/mesa/drivers/common/driverfuncs.c | 4 +- mesalib/src/mesa/drivers/common/meta.c | 251 +- mesalib/src/mesa/drivers/dri/common/dri_util.c | 44 +- mesalib/src/mesa/drivers/dri/common/dri_util.h | 4 +- mesalib/src/mesa/drivers/dri/common/utils.c | 26 +- mesalib/src/mesa/drivers/dri/common/utils.h | 2 +- mesalib/src/mesa/drivers/dri/swrast/swrast.c | 30 +- .../src/mesa/drivers/haiku/swrast/SoftwareRast.cpp | 10 +- mesalib/src/mesa/main/accum.c | 8 +- mesalib/src/mesa/main/api_arrayelt.c | 48 +- mesalib/src/mesa/main/api_validate.c | 36 +- mesalib/src/mesa/main/arrayobj.c | 130 +- mesalib/src/mesa/main/arrayobj.h | 46 +- mesalib/src/mesa/main/attrib.c | 42 +- mesalib/src/mesa/main/blend.c | 6 +- mesalib/src/mesa/main/blend.h | 4 +- mesalib/src/mesa/main/blit.c | 513 ++ mesalib/src/mesa/main/blit.h | 39 + mesalib/src/mesa/main/bufferobj.c | 35 +- mesalib/src/mesa/main/buffers.c | 8 +- mesalib/src/mesa/main/compute.c | 54 + mesalib/src/mesa/main/compute.h | 38 + mesalib/src/mesa/main/config.h | 9 + mesalib/src/mesa/main/context.c | 27 +- mesalib/src/mesa/main/dd.h | 99 +- mesalib/src/mesa/main/debug.c | 18 +- mesalib/src/mesa/main/enable.c | 44 +- mesalib/src/mesa/main/extensions.c | 6 +- mesalib/src/mesa/main/fbobject.c | 695 +-- mesalib/src/mesa/main/fbobject.h | 29 - mesalib/src/mesa/main/ffvertex_prog.c | 2 +- mesalib/src/mesa/main/format_pack.c | 736 +-- mesalib/src/mesa/main/format_pack.h | 26 +- mesalib/src/mesa/main/format_unpack.c | 532 +-- mesalib/src/mesa/main/format_unpack.h | 16 +- mesalib/src/mesa/main/formats.c | 1286 +++--- mesalib/src/mesa/main/formats.h | 710 ++- mesalib/src/mesa/main/framebuffer.c | 16 +- mesalib/src/mesa/main/genmipmap.c | 131 + mesalib/src/mesa/main/genmipmap.h | 36 + mesalib/src/mesa/main/get.c | 41 +- mesalib/src/mesa/main/get_hash_params.py | 29 +- mesalib/src/mesa/main/getstring.c | 18 +- mesalib/src/mesa/main/matrix.c | 13 +- mesalib/src/mesa/main/mipmap.c | 4 +- mesalib/src/mesa/main/mipmap.h | 2 +- mesalib/src/mesa/main/mtypes.h | 85 +- mesalib/src/mesa/main/objectlabel.c | 2 +- mesalib/src/mesa/main/readpix.c | 14 +- mesalib/src/mesa/main/scissor.c | 2 + mesalib/src/mesa/main/shaderapi.c | 31 + mesalib/src/mesa/main/shaderimage.c | 100 +- mesalib/src/mesa/main/shaderobj.h | 2 + mesalib/src/mesa/main/state.c | 6 +- mesalib/src/mesa/main/texcompress.c | 58 +- mesalib/src/mesa/main/texcompress.h | 10 +- mesalib/src/mesa/main/texcompress_etc.c | 10 +- mesalib/src/mesa/main/texcompress_etc.h | 4 +- mesalib/src/mesa/main/texcompress_fxt1.c | 2 +- mesalib/src/mesa/main/texcompress_fxt1.h | 2 +- mesalib/src/mesa/main/texcompress_rgtc.c | 34 +- mesalib/src/mesa/main/texcompress_rgtc.h | 2 +- mesalib/src/mesa/main/texcompress_s3tc.c | 2 +- mesalib/src/mesa/main/texcompress_s3tc.h | 2 +- mesalib/src/mesa/main/texformat.c | 450 +- mesalib/src/mesa/main/texformat.h | 2 +- mesalib/src/mesa/main/texgetimage.c | 4 +- mesalib/src/mesa/main/teximage.c | 290 +- mesalib/src/mesa/main/teximage.h | 24 +- mesalib/src/mesa/main/texobj.c | 20 +- mesalib/src/mesa/main/texobj.h | 3 + mesalib/src/mesa/main/texparam.c | 89 +- mesalib/src/mesa/main/texstorage.c | 14 +- mesalib/src/mesa/main/texstore.c | 688 +-- mesalib/src/mesa/main/texstore.h | 6 +- mesalib/src/mesa/main/textureview.c | 4 +- mesalib/src/mesa/main/varray.c | 135 +- mesalib/src/mesa/program/prog_print.c | 3 + mesalib/src/mesa/program/program.c | 20 + mesalib/src/mesa/program/program.h | 9 + .../src/mesa/state_tracker/st_cb_bufferobjects.c | 9 +- mesalib/src/mesa/state_tracker/st_cb_drawpixels.c | 4 +- mesalib/src/mesa/state_tracker/st_cb_eglimage.c | 2 +- mesalib/src/mesa/state_tracker/st_cb_fbo.c | 4 +- mesalib/src/mesa/state_tracker/st_cb_texture.c | 18 +- mesalib/src/mesa/state_tracker/st_extensions.c | 19 +- mesalib/src/mesa/state_tracker/st_format.c | 514 ++- mesalib/src/mesa/state_tracker/st_format.h | 6 +- mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 + mesalib/src/mesa/state_tracker/st_manager.c | 6 +- mesalib/src/mesa/state_tracker/st_program.c | 19 +- mesalib/src/mesa/state_tracker/st_vdpau.c | 6 +- mesalib/src/mesa/swrast/s_blit.c | 8 +- mesalib/src/mesa/swrast/s_depth.c | 46 +- mesalib/src/mesa/swrast/s_drawpix.c | 14 +- mesalib/src/mesa/swrast/s_renderbuffer.c | 18 +- mesalib/src/mesa/swrast/s_stencil.c | 10 +- mesalib/src/mesa/swrast/s_texfetch.c | 290 +- mesalib/src/mesa/swrast/s_texfetch_tmp.h | 126 +- mesalib/src/mesa/swrast/s_texfilter.c | 16 +- mesalib/src/mesa/swrast/s_texrender.c | 2 +- mesalib/src/mesa/swrast/s_triangle.c | 40 +- mesalib/src/mesa/vbo/vbo_exec_array.c | 56 +- mesalib/src/mesa/vbo/vbo_save_api.c | 4 +- openssl/CHANGES | 163 +- openssl/Configure | 2 +- openssl/Makefile | 5 +- openssl/Makefile.org | 3 +- openssl/NEWS | 184 +- openssl/README | 2 +- openssl/apps/Makefile | 17 +- openssl/apps/apps.h | 2 + openssl/apps/openssl.c | 1 + openssl/apps/pkcs12.c | 9 +- openssl/config | 2 +- openssl/crypto/Makefile | 4 +- openssl/crypto/aes/asm/aes-parisc.pl | 3 +- openssl/crypto/aes/asm/bsaes-x86_64.pl | 73 +- openssl/crypto/armcap.c | 2 +- openssl/crypto/asn1/a_int.c | 2 +- openssl/crypto/bio/bss_dgram.c | 6 +- openssl/crypto/bn/Makefile | 4 +- openssl/crypto/bn/asm/mips-mont.pl | 2 +- openssl/crypto/bn/asm/mips.pl | 44 +- openssl/crypto/bn/asm/parisc-mont.pl | 4 +- openssl/crypto/bn/asm/x86_64-gf2m.pl | 3 +- openssl/crypto/bn/asm/x86_64-mont5.pl | 4 +- openssl/crypto/bn/bn_nist.c | 55 +- openssl/crypto/buffer/buffer.c | 4 +- openssl/crypto/buffer/buffer.h | 2 +- openssl/crypto/ec/ec_ameth.c | 2 +- openssl/crypto/ec/ec_asn1.c | 6 +- openssl/crypto/ec/ec_lib.c | 10 +- openssl/crypto/engine/eng_rdrand.c | 1 + openssl/crypto/evp/Makefile | 2 +- openssl/crypto/evp/digest.c | 7 +- openssl/crypto/evp/e_aes.c | 16 +- openssl/crypto/evp/e_aes_cbc_hmac_sha1.c | 5 +- openssl/crypto/evp/e_des3.c | 6 +- openssl/crypto/evp/p5_crpt2.c | 40 +- openssl/crypto/modes/Makefile | 5 +- openssl/crypto/modes/asm/ghash-alpha.pl | 25 +- openssl/crypto/modes/asm/ghash-parisc.pl | 1 + openssl/crypto/modes/cbc128.c | 25 +- openssl/crypto/modes/ccm128.c | 2 +- openssl/crypto/modes/cts128.c | 28 +- openssl/crypto/modes/gcm128.c | 104 +- openssl/crypto/modes/modes_lcl.h | 9 +- openssl/crypto/opensslv.h | 6 +- openssl/crypto/pariscid.pl | 41 +- openssl/crypto/pem/pem_info.c | 1 + openssl/crypto/pkcs12/p12_crt.c | 7 + openssl/crypto/rand/md_rand.c | 22 +- openssl/crypto/rand/rand.h | 1 + openssl/crypto/rand/rand_err.c | 1 + openssl/crypto/rand/rand_lib.c | 8 + openssl/crypto/rc4/asm/rc4-parisc.pl | 3 +- openssl/crypto/rsa/rsa_ameth.c | 8 +- openssl/crypto/rsa/rsa_chk.c | 6 + openssl/crypto/rsa/rsa_pmeth.c | 2 + openssl/crypto/sha/Makefile | 4 +- openssl/crypto/sha/asm/sha1-parisc.pl | 3 +- openssl/crypto/sha/asm/sha1-x86_64.pl | 4 +- openssl/crypto/sha/asm/sha512-mips.pl | 2 +- openssl/crypto/sha/asm/sha512-parisc.pl | 2 + openssl/crypto/sha/sha512.c | 9 +- openssl/crypto/srp/srp_grps.h | 816 ++-- openssl/crypto/srp/srp_lib.c | 18 +- openssl/crypto/x509/x509_vfy.c | 11 + openssl/crypto/x509/x_all.c | 2 + openssl/crypto/x86cpuid.pl | 2 + openssl/demos/x509/mkreq.c | 5 +- openssl/doc/apps/rsa.pod | 15 + openssl/doc/crypto/X509_STORE_CTX_get_error.pod | 2 + openssl/doc/crypto/ecdsa.pod | 10 +- openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod | 8 +- openssl/doc/ssl/SSL_CTX_set_options.pod | 5 +- openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod | 4 + openssl/doc/ssl/SSL_accept.pod | 10 +- openssl/doc/ssl/SSL_connect.pod | 10 +- openssl/doc/ssl/SSL_do_handshake.pod | 10 +- openssl/doc/ssl/SSL_shutdown.pod | 10 +- openssl/engines/ccgost/gost89.h | 4 - openssl/ms/bcb4.bat | 12 +- openssl/ms/do_nt.bat | 14 +- openssl/ms/tenc.bat | 28 +- openssl/ms/tencce.bat | 38 +- openssl/ms/testenc.bat | 188 +- openssl/ms/testencce.bat | 194 +- openssl/ms/testpem.bat | 64 +- openssl/ms/testpemce.bat | 84 +- openssl/ms/testss.bat | 196 +- openssl/ms/testssce.bat | 208 +- openssl/ms/tpem.bat | 12 +- openssl/ms/tpemce.bat | 16 +- openssl/openssl.spec | 9 +- openssl/ssl/d1_both.c | 13 +- openssl/ssl/d1_clnt.c | 36 +- openssl/ssl/d1_lib.c | 1 + openssl/ssl/d1_pkt.c | 7 + openssl/ssl/d1_srvr.c | 29 +- openssl/ssl/s23_clnt.c | 29 +- openssl/ssl/s3_both.c | 8 +- openssl/ssl/s3_cbc.c | 2 +- openssl/ssl/s3_clnt.c | 7 +- openssl/ssl/s3_lib.c | 20 +- openssl/ssl/s3_pkt.c | 10 +- openssl/ssl/s3_srvr.c | 16 +- openssl/ssl/ssl.h | 11 +- openssl/ssl/ssl3.h | 9 + openssl/ssl/ssl_lib.c | 8 +- openssl/ssl/ssl_locl.h | 3 + openssl/ssl/ssltest.c | 8 +- openssl/ssl/t1_enc.c | 28 +- openssl/ssl/t1_lib.c | 104 +- openssl/test/cms-test.pl | 4 +- openssl/util/shlib_wrap.sh | 6 +- packages.txt | 2 +- xkbcomp/man/Makefile.am | 2 + xkbcomp/man/xkbcomp.man | 2 +- xorg-server/Makefile.am | 12 +- xorg-server/Xi/xichangehierarchy.c | 4 + xorg-server/Xi/xipassivegrab.c | 2 +- xorg-server/config/Makefile.am | 24 +- xorg-server/config/config-backends.h | 35 +- xorg-server/config/config.c | 25 +- xorg-server/config/dbus-core.c | 32 +- xorg-server/config/dbus.c | 407 -- xorg-server/config/hal.c | 7 +- xorg-server/config/xorg-server.conf | 13 - xorg-server/configure.ac | 66 +- xorg-server/dix/dixfonts.c | 9 +- xorg-server/dix/protocol.txt | 11 + xorg-server/glamor/Makefile.am | 36 +- xorg-server/glamor/compat-api.h | 107 - xorg-server/glamor/compiler.h | 59 - xorg-server/glamor/glamor.c | 809 ++-- xorg-server/glamor/glamor.h | 259 +- xorg-server/glamor/glamor_addtraps.c | 34 +- xorg-server/glamor/glamor_compositerects.c | 458 +- xorg-server/glamor/glamor_copyarea.c | 1161 +++-- xorg-server/glamor/glamor_copyplane.c | 50 +- xorg-server/glamor/glamor_copywindow.c | 34 +- xorg-server/glamor/glamor_core.c | 827 ++-- xorg-server/glamor/glamor_debug.h | 9 - xorg-server/glamor/glamor_egl.c | 1181 +++-- xorg-server/glamor/glamor_egl_stubs.c | 64 + xorg-server/glamor/glamor_eglmodule.c | 24 +- xorg-server/glamor/glamor_fbo.c | 849 ++-- xorg-server/glamor/glamor_fill.c | 589 ++- xorg-server/glamor/glamor_fillspans.c | 121 +- xorg-server/glamor/glamor_getimage.c | 97 +- xorg-server/glamor/glamor_getspans.c | 91 +- xorg-server/glamor/glamor_gl_dispatch.c | 138 +- xorg-server/glamor/glamor_gl_dispatch.h | 244 +- xorg-server/glamor/glamor_glext.h | 1 - xorg-server/glamor/glamor_glyphblt.c | 83 +- xorg-server/glamor/glamor_glyphs.c | 2945 ++++++------ xorg-server/glamor/glamor_gradient.c | 2608 ++++++----- xorg-server/glamor/glamor_largepixmap.c | 2429 +++++----- xorg-server/glamor/glamor_picture.c | 111 +- xorg-server/glamor/glamor_pixmap.c | 2245 +++++---- xorg-server/glamor/glamor_polyfillrect.c | 135 +- xorg-server/glamor/glamor_polylines.c | 155 +- xorg-server/glamor/glamor_polyops.c | 43 +- xorg-server/glamor/glamor_priv.h | 927 ++-- xorg-server/glamor/glamor_putimage.c | 559 +-- xorg-server/glamor/glamor_render.c | 3724 ++++++++------- xorg-server/glamor/glamor_setspans.c | 119 +- xorg-server/glamor/glamor_tile.c | 514 +-- xorg-server/glamor/glamor_trapezoid.c | 3230 ++++++------- xorg-server/glamor/glamor_triangles.c | 61 +- xorg-server/glamor/glamor_utils.h | 1756 +++---- xorg-server/glamor/glamor_window.c | 102 +- xorg-server/glamor/glamor_xv.c | 1022 ++-- xorg-server/glamor/glapi.h | 121 - xorg-server/glx/glxdri2.c | 2 +- xorg-server/glx/glxdricommon.c | 2 +- xorg-server/hw/xfree86/common/xf86.h | 6 + xorg-server/hw/xfree86/common/xf86Events.c | 299 +- xorg-server/hw/xfree86/common/xf86Helper.c | 7 +- xorg-server/hw/xfree86/common/xf86Init.c | 8 +- xorg-server/hw/xfree86/modes/xf86EdidModes.c | 5 + xorg-server/hw/xfree86/vgahw/Makefile.am | 1 + xorg-server/include/Makefile.am | 2 +- xorg-server/include/dbus-core.h | 56 + xorg-server/include/dix-config.h.in | 16 +- xorg-server/pseudoramiX/pseudoramiX.c | 8 + .../test/xi2/protocol-xipassivegrabdevice.c | 9 +- xorg-server/xkeyboard-config/NEWS | 3 + xorg-server/xkeyboard-config/configure.ac | 2 +- xorg-server/xkeyboard-config/keycodes/xfree86 | 4 +- xorg-server/xkeyboard-config/po/bg.po | 1348 +++--- xorg-server/xkeyboard-config/po/ca.po | 1355 +++--- xorg-server/xkeyboard-config/po/da.po | 1680 +++---- xorg-server/xkeyboard-config/po/de.po | 1384 +++--- xorg-server/xkeyboard-config/po/eo.po | 1373 +++--- xorg-server/xkeyboard-config/po/es.po | 4877 +++++++++++--------- xorg-server/xkeyboard-config/po/fr.po | 1357 +++--- xorg-server/xkeyboard-config/po/hu.po | 1356 +++--- xorg-server/xkeyboard-config/po/id.po | 4855 ++++++++++--------- xorg-server/xkeyboard-config/po/nl.po | 1360 +++--- xorg-server/xkeyboard-config/po/pl.po | 1352 +++--- xorg-server/xkeyboard-config/po/pt_BR.po | 1357 +++--- xorg-server/xkeyboard-config/po/ru.po | 1453 +++--- xorg-server/xkeyboard-config/po/uk.po | 1356 +++--- .../xkeyboard-config/po/xkeyboard-config.pot | 1336 +++--- .../xkeyboard-config/rules/base.extras.xml.in | 55 +- xorg-server/xkeyboard-config/rules/base.xml.in | 61 +- xorg-server/xkeyboard-config/symbols/Makefile.am | 2 +- xorg-server/xkeyboard-config/symbols/af | 12 +- xorg-server/xkeyboard-config/symbols/ba | 16 +- xorg-server/xkeyboard-config/symbols/ca | 11 +- xorg-server/xkeyboard-config/symbols/cm | 16 +- xorg-server/xkeyboard-config/symbols/de | 30 +- xorg-server/xkeyboard-config/symbols/dk | 8 + xorg-server/xkeyboard-config/symbols/es | 8 + xorg-server/xkeyboard-config/symbols/eu | 63 + xorg-server/xkeyboard-config/symbols/fi | 8 + xorg-server/xkeyboard-config/symbols/fr | 2 - xorg-server/xkeyboard-config/symbols/hr | 17 +- xorg-server/xkeyboard-config/symbols/in | 42 +- xorg-server/xkeyboard-config/symbols/inet | 34 +- xorg-server/xkeyboard-config/symbols/ir | 2 +- xorg-server/xkeyboard-config/symbols/is | 3 +- xorg-server/xkeyboard-config/symbols/it | 10 +- xorg-server/xkeyboard-config/symbols/jp | 4 +- xorg-server/xkeyboard-config/symbols/ma | 2 +- xorg-server/xkeyboard-config/symbols/nl | 2 - xorg-server/xkeyboard-config/symbols/no | 8 + xorg-server/xkeyboard-config/symbols/rs | 33 +- xorg-server/xkeyboard-config/symbols/ru | 4 +- xorg-server/xkeyboard-config/symbols/se | 8 +- xorg-server/xkeyboard-config/symbols/si | 13 +- xorg-server/xkeyboard-config/symbols/tm | 6 +- xorg-server/xkeyboard-config/symbols/tw | 12 +- xorg-server/xkeyboard-config/symbols/ua | 2 +- xorg-server/xkeyboard-config/symbols/us | 41 +- 414 files changed, 39212 insertions(+), 36054 deletions(-) create mode 100644 libxcb/man/.gitignore create mode 100644 libxcb/man/Makefile.am create mode 100644 libxcb/man/xcb-examples.man create mode 100644 libxcb/man/xcb-requests.man delete mode 100644 libxcb/src/man/xcb-examples.3 delete mode 100644 libxcb/src/man/xcb-requests.3 create mode 100644 mesalib/docs/relnotes/10.0.3.html create mode 100644 mesalib/docs/relnotes/10.2.html create mode 100644 mesalib/install-lib-links.mk create mode 100644 mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml create mode 100644 mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml create mode 100644 mesalib/src/mesa/main/blit.c create mode 100644 mesalib/src/mesa/main/blit.h create mode 100644 mesalib/src/mesa/main/compute.c create mode 100644 mesalib/src/mesa/main/compute.h create mode 100644 mesalib/src/mesa/main/genmipmap.c create mode 100644 mesalib/src/mesa/main/genmipmap.h delete mode 100644 xorg-server/config/dbus.c delete mode 100644 xorg-server/config/xorg-server.conf delete mode 100644 xorg-server/glamor/compat-api.h delete mode 100644 xorg-server/glamor/compiler.h create mode 100644 xorg-server/glamor/glamor_egl_stubs.c delete mode 100644 xorg-server/glamor/glapi.h create mode 100644 xorg-server/include/dbus-core.h create mode 100644 xorg-server/xkeyboard-config/symbols/eu diff --git a/X11/xtrans/Xtrans.c b/X11/xtrans/Xtrans.c index 225f4c88c..d9e32d01f 100644 --- a/X11/xtrans/Xtrans.c +++ b/X11/xtrans/Xtrans.c @@ -801,6 +801,22 @@ TRANS(NoListen) (const char * protocol) return ret; } +int +TRANS(IsListening) (const char * protocol) +{ + Xtransport *trans; + + if ((trans = TRANS(SelectTransport)(protocol)) == NULL) + { + prmsg (1,"TransIsListening: unable to find transport: %s\n", + protocol); + + return 0; + } + + return !(trans->flags & TRANS_NOLISTEN); +} + int TRANS(ResetListener) (XtransConnInfo ciptr) diff --git a/X11/xtrans/Xtrans.h b/X11/xtrans/Xtrans.h index 1754720c9..5807b6728 100644 --- a/X11/xtrans/Xtrans.h +++ b/X11/xtrans/Xtrans.h @@ -311,6 +311,10 @@ int TRANS(NoListen) ( const char* /* protocol*/ ); +int TRANS(IsListening) ( + const char* /* protocol*/ +); + int TRANS(ResetListener)( XtransConnInfo /* ciptr */ ); diff --git a/X11/xtrans/configure.ac b/X11/xtrans/configure.ac index 998fb06cf..6898c6d25 100644 --- a/X11/xtrans/configure.ac +++ b/X11/xtrans/configure.ac @@ -21,7 +21,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([xtrans], [1.3.2], +AC_INIT([xtrans], [1.3.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xtrans]) AC_CONFIG_SRCDIR([Makefile.am]) diff --git a/fontconfig/configure.ac b/fontconfig/configure.ac index 89fe117ca..331bd32aa 100644 --- a/fontconfig/configure.ac +++ b/fontconfig/configure.ac @@ -138,7 +138,7 @@ dnl ========================================================================== # Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h regex.h stdlib.h string.h unistd.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h]) +AC_CHECK_HEADERS([fcntl.h regex.h stdlib.h string.h unistd.h sys/statvfs.h sys/vfs.h sys/statfs.h sys/param.h sys/mount.h]) AX_CREATE_STDINT_H([src/fcstdint.h]) # Checks for typedefs, structures, and compiler characteristics. diff --git a/fontconfig/doc/fcdircache.fncs b/fontconfig/doc/fcdircache.fncs index 24dea8bc5..ab5e3d9a0 100644 --- a/fontconfig/doc/fcdircache.fncs +++ b/fontconfig/doc/fcdircache.fncs @@ -54,6 +54,16 @@ exists, returns NULL. The name of the cache file is returned in FcDirCacheRead. @@ +@RET@ FcCache * +@FUNC@ FcDirCacheRescan +@TYPE1@ const FcChar8 * @ARG1@ dir +@TYPE2@ FcConfig * @ARG2@ config +@PURPOSE@ Re-scan a directory cache +@DESC@ +Re-scan directories only at dir and update the cache. +returns NULL if failed. +@@ + @RET@ FcCache * @FUNC@ FcDirCacheRead @TYPE1@ const FcChar8 * @ARG1@ dir diff --git a/fontconfig/src/fccompat.c b/fontconfig/src/fccompat.c index 1c2ba8bed..f4f3f5fdc 100644 --- a/fontconfig/src/fccompat.c +++ b/fontconfig/src/fccompat.c @@ -170,14 +170,27 @@ FcRandom(void) static struct random_data fcrandbuf; static char statebuf[256]; static FcBool initialized = FcFalse; +#ifdef _AIX + static char *retval; + long res; +#endif if (initialized != FcTrue) { - initstate_r(time(NULL), statebuf, 256, &fcrandbuf); +#ifdef _AIX + initstate_r (time (NULL), statebuf, 256, &retval, &fcrandbuf); +#else + initstate_r (time (NULL), statebuf, 256, &fcrandbuf); +#endif initialized = FcTrue; } - random_r(&fcrandbuf, &result); +#ifdef _AIX + random_r (&res, &fcrandbuf); + result = (int32_t)res; +#else + random_r (&fcrandbuf, &result); +#endif #elif HAVE_RANDOM static char statebuf[256]; char *state; @@ -185,30 +198,30 @@ FcRandom(void) if (initialized != FcTrue) { - state = initstate(time(NULL), statebuf, 256); + state = initstate (time (NULL), statebuf, 256); initialized = FcTrue; } else - state = setstate(statebuf); + state = setstate (statebuf); - result = random(); + result = random (); - setstate(state); + setstate (state); #elif HAVE_LRAND48 - result = lrand48(); + result = lrand48 (); #elif HAVE_RAND_R - static unsigned int seed = time(NULL); + static unsigned int seed = time (NULL); - result = rand_r(&seed); + result = rand_r (&seed); #elif HAVE_RAND static FcBool initialized = FcFalse; if (initialized != FcTrue) { - srand(time(NULL)); + srand (time (NULL)); initialized = FcTrue; } - result = rand(); + result = rand (); #else # error no random number generator function available. #endif diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c index e39430762..d271d69e2 100644 --- a/fontconfig/src/fcfreetype.c +++ b/fontconfig/src/fcfreetype.c @@ -1586,7 +1586,7 @@ FcFreeTypeQueryFace (const FT_Face face, } if (width == -1 && FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 && - prop.type == BDF_PROPERTY_TYPE_ATOM) + prop.type == BDF_PROPERTY_TYPE_ATOM && prop.u.atom != NULL) { width = FcIsWidth ((FcChar8 *) prop.u.atom); if (FcDebug () & FC_DBG_SCANV) @@ -1716,7 +1716,7 @@ bail3: /* For PCF fonts, override the computed spacing with the one from the property */ if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 && - prop.type == BDF_PROPERTY_TYPE_ATOM) { + prop.type == BDF_PROPERTY_TYPE_ATOM && prop.u.atom != NULL) { if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C")) spacing = FC_CHARCELL; else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M")) diff --git a/fontconfig/src/fcstat.c b/fontconfig/src/fcstat.c index ff8e88455..f384767cc 100644 --- a/fontconfig/src/fcstat.c +++ b/fontconfig/src/fcstat.c @@ -30,6 +30,9 @@ #ifdef HAVE_SYS_VFS_H #include #endif +#ifdef HAVE_SYS_STATVFS_H +#include +#endif #ifdef HAVE_SYS_STATFS_H #include #endif diff --git a/libX11/nls/en_US.UTF-8/Compose.pre b/libX11/nls/en_US.UTF-8/Compose.pre index 7314d7f7d..5434425b1 100644 --- a/libX11/nls/en_US.UTF-8/Compose.pre +++ b/libX11/nls/en_US.UTF-8/Compose.pre @@ -2800,7 +2800,6 @@ XCOMM Part 3 : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE - : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE @@ -2810,7 +2809,6 @@ XCOMM Part 3 : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE - : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE @@ -2820,56 +2818,48 @@ XCOMM Part 3 : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE - : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE - : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE - : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE - : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE - : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE - : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW - : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW - : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW @@ -2884,7 +2874,6 @@ XCOMM Part 3 : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE - : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE @@ -2894,7 +2883,6 @@ XCOMM Part 3 : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE - : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE @@ -2904,56 +2892,48 @@ XCOMM Part 3 : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE - : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE - : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE - : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE - : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE - : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE - : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW - : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW - : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW diff --git a/libX11/nls/fi_FI.UTF-8/Compose.pre b/libX11/nls/fi_FI.UTF-8/Compose.pre index fbe859721..f4d6a4a83 100644 --- a/libX11/nls/fi_FI.UTF-8/Compose.pre +++ b/libX11/nls/fi_FI.UTF-8/Compose.pre @@ -21,407 +21,407 @@ XCOMM from en_US.UTF-8/Compose if such a sequence was provided already XCOMM Sequences from Annex 3 XCOMM Sequences with COMBINING ACUTE ACCENT / - : "´" # ACUTE ACCENT - : "á" # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" # LATIN CAPITAL LETTER A WITH ACUTE - : "ć" # LATIN SMALL LETTER C WITH ACUTE - : "Ć" # LATIN CAPITAL LETTER C WITH ACUTE - : "é" # LATIN SMALL LETTER E WITH ACUTE - : "É" # LATIN CAPITAL LETTER E WITH ACUTE - : "í" # LATIN SMALL LETTER I WITH ACUTE - : "Í" # LATIN CAPITAL LETTER I WITH ACUTE - : "ĺ" # LATIN SMALL LETTER L WITH ACUTE - : "Ĺ" # LATIN CAPITAL LETTER L WITH ACUTE - : "ń" # LATIN SMALL LETTER N WITH ACUTE - : "Ń" # LATIN CAPITAL LETTER N WITH ACUTE - : "ó" # LATIN SMALL LETTER O WITH ACUTE - : "Ó" # LATIN CAPITAL LETTER O WITH ACUTE - : "ŕ" # LATIN SMALL LETTER R WITH ACUTE - : "Ŕ" # LATIN CAPITAL LETTER R WITH ACUTE - : "ś" # LATIN SMALL LETTER S WITH ACUTE - : "Ś" # LATIN CAPITAL LETTER S WITH ACUTE - : "ú" # LATIN SMALL LETTER U WITH ACUTE - : "Ú" # LATIN CAPITAL LETTER U WITH ACUTE - : "ẃ" # LATIN SMALL LETTER W WITH ACUTE - : "Ẃ" # LATIN CAPITAL LETTER W WITH ACUTE - : "ý" # LATIN SMALL LETTER Y WITH ACUTE - : "Ý" # LATIN CAPITAL LETTER Y WITH ACUTE - : "ź" # LATIN SMALL LETTER Z WITH ACUTE - : "Ź" # LATIN CAPITAL LETTER Z WITH ACUTE - : "ǽ" # LATIN SMALL LETTER AE WITH ACUTE - : "Ǽ" # LATIN CAPITAL LETTER AE WITH ACUTE - : "ǿ" # LATIN SMALL LETTER O WITH STROKE AND ACUTE - : "Ǿ" # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE - : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE - : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE + : "´" U00B4 # ACUTE ACCENT + : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE + : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE + : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE + : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE + : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE + : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE + : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE + : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE + : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE + : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE + : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE + : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE + : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE + : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE + : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE + : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE + : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE + : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE + : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE + : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE + : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE + : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE + : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE + : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE + : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE + : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE + : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE + : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE + : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE + : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE + : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE + : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE XCOMM Sequences with COMBINING BREVE / - : "˘" # BREVE - : "ă" # LATIN SMALL LETTER A WITH BREVE - : "Ă" # LATIN CAPITAL LETTER A WITH BREVE - : "ĕ" # LATIN SMALL LETTER E WITH BREVE - : "Ĕ" # LATIN CAPITAL LETTER E WITH BREVE - : "ğ" # LATIN SMALL LETTER G WITH BREVE - : "Ğ" # LATIN CAPITAL LETTER G WITH BREVE - : "ĭ" # LATIN SMALL LETTER I WITH BREVE - : "Ĭ" # LATIN CAPITAL LETTER I WITH BREVE - : "ŏ" # LATIN SMALL LETTER O WITH BREVE - : "Ŏ" # LATIN CAPITAL LETTER O WITH BREVE - : "ŭ" # LATIN SMALL LETTER U WITH BREVE - : "Ŭ" # LATIN CAPITAL LETTER U WITH BREVE + : "˘" U02D8 # BREVE + : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE + : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE + : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE + : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE + : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE + : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE + : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE + : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE + : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE + : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE + : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE + : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE XCOMM Sequences with COMBINING CARON / - : "ˇ" # CARON - : "ǎ" # LATIN SMALL LETTER A WITH CARON - : "Ǎ" # LATIN CAPITAL LETTER A WITH CARON - : "č" # LATIN SMALL LETTER C WITH CARON - : "Č" # LATIN CAPITAL LETTER C WITH CARON - : "ď" # LATIN SMALL LETTER D WITH CARON - : "Ď" # LATIN CAPITAL LETTER D WITH CARON - : "ě" # LATIN SMALL LETTER E WITH CARON - : "Ě" # LATIN CAPITAL LETTER E WITH CARON - : "ǧ" # LATIN SMALL LETTER G WITH CARON - : "Ǧ" # LATIN CAPITAL LETTER G WITH CARON - : "ȟ" # LATIN SMALL LETTER H WITH CARON - : "Ȟ" # LATIN CAPITAL LETTER H WITH CARON - : "ǐ" # LATIN SMALL LETTER I WITH CARON - : "Ǐ" # LATIN CAPITAL LETTER I WITH CARON - : "ǩ" # LATIN SMALL LETTER K WITH CARON - : "Ǩ" # LATIN CAPITAL LETTER K WITH CARON - : "ľ" # LATIN SMALL LETTER L WITH CARON - : "Ľ" # LATIN CAPITAL LETTER L WITH CARON - : "ň" # LATIN SMALL LETTER N WITH CARON - : "Ň" # LATIN CAPITAL LETTER N WITH CARON - : "ǒ" # LATIN SMALL LETTER O WITH CARON - : "Ǒ" # LATIN CAPITAL LETTER O WITH CARON - : "ř" # LATIN SMALL LETTER R WITH CARON - : "Ř" # LATIN CAPITAL LETTER R WITH CARON - : "š" # LATIN SMALL LETTER S WITH CARON - : "Š" # LATIN CAPITAL LETTER S WITH CARON - : "ť" # LATIN SMALL LETTER T WITH CARON - : "Ť" # LATIN CAPITAL LETTER T WITH CARON - : "ǔ" # LATIN SMALL LETTER U WITH CARON - : "Ǔ" # LATIN CAPITAL LETTER U WITH CARON - : "ž" # LATIN SMALL LETTER Z WITH CARON - : "Ž" # LATIN CAPITAL LETTER Z WITH CARON - : "ǯ" # LATIN SMALL LETTER EZH WITH CARON - : "Ǯ" # LATIN CAPITAL LETTER EZH WITH CARON + : "ˇ" U02C7 # CARON + : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON + : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON + : "č" U010D # LATIN SMALL LETTER C WITH CARON + : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON + : "ď" U010F # LATIN SMALL LETTER D WITH CARON + : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON + : "ě" U011B # LATIN SMALL LETTER E WITH CARON + : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON + : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON + : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON + : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON + : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON + : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON + : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON + : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON + : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON + : "ľ" U013E # LATIN SMALL LETTER L WITH CARON + : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON + : "ň" U0148 # LATIN SMALL LETTER N WITH CARON + : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON + : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON + : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON + : "ř" U0159 # LATIN SMALL LETTER R WITH CARON + : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON + : "š" U0161 # LATIN SMALL LETTER S WITH CARON + : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON + : "ť" U0165 # LATIN SMALL LETTER T WITH CARON + : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON + : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON + : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON + : "ž" U017E # LATIN SMALL LETTER Z WITH CARON + : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON + : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON + : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON XCOMM Sequences with COMBINING CEDILLA / - : "¸" # CEDILLA - : "ç" # LATIN SMALL LETTER C WITH CEDILLA - : "Ç" # LATIN CAPITAL LETTER C WITH CEDILLA - : "ģ" # LATIN SMALL LETTER G WITH CEDILLA - : "Ģ" # LATIN CAPITAL LETTER G WITH CEDILLA - : "ķ" # LATIN SMALL LETTER K WITH CEDILLA - : "Ķ" # LATIN CAPITAL LETTER K WITH CEDILLA - : "ļ" # LATIN SMALL LETTER L WITH CEDILLA - : "Ļ" # LATIN CAPITAL LETTER L WITH CEDILLA - : "ņ" # LATIN SMALL LETTER N WITH CEDILLA - : "Ņ" # LATIN CAPITAL LETTER N WITH CEDILLA - : "ŗ" # LATIN SMALL LETTER R WITH CEDILLA - : "Ŗ" # LATIN CAPITAL LETTER R WITH CEDILLA - : "ş" # LATIN SMALL LETTER S WITH CEDILLA - : "Ş" # LATIN CAPITAL LETTER S WITH CEDILLA - : "ţ" # LATIN SMALL LETTER T WITH CEDILLA - : "Ţ" # LATIN CAPITAL LETTER T WITH CEDILLA + : "¸" U00B8 # CEDILLA + : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA + : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA + : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA + : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA + : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA + : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA + : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA + : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA + : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA + : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA + : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA + : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA + : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA + : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA + : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA + : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / - : "^" # CIRCUMFLEX - : "â" # LATIN SMALL LETTER A WITH CIRCUMFLEX - : "Â" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - : "ĉ" # LATIN SMALL LETTER C WITH CIRCUMFLEX - : "Ĉ" # LATIN CAPITAL LETTER C WITH CIRCUMFLEX - : "ê" # LATIN SMALL LETTER E WITH CIRCUMFLEX - : "Ê" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - : "ĝ" # LATIN SMALL LETTER G WITH CIRCUMFLEX - : "Ĝ" # LATIN CAPITAL LETTER G WITH CIRCUMFLEX - : "ĥ" # LATIN SMALL LETTER H WITH CIRCUMFLEX - : "Ĥ" # LATIN CAPITAL LETTER H WITH CIRCUMFLEX - : "î" # LATIN SMALL LETTER I WITH CIRCUMFLEX - : "Î" # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - : "ĵ" # LATIN SMALL LETTER J WITH CIRCUMFLEX - : "Ĵ" # LATIN CAPITAL LETTER J WITH CIRCUMFLEX - : "ô" # LATIN SMALL LETTER O WITH CIRCUMFLEX - : "Ô" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - : "ŝ" # LATIN SMALL LETTER S WITH CIRCUMFLEX - : "Ŝ" # LATIN CAPITAL LETTER S WITH CIRCUMFLEX - : "û" # LATIN SMALL LETTER U WITH CIRCUMFLEX - : "Û" # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - : "ŵ" # LATIN SMALL LETTER W WITH CIRCUMFLEX - : "Ŵ" # LATIN CAPITAL LETTER W WITH CIRCUMFLEX - : "ŷ" # LATIN SMALL LETTER Y WITH CIRCUMFLEX - : "Ŷ" # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX + : "^" U005E # CIRCUMFLEX + : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX + : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX + : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX + : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX + : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX + : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX + : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX + : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX + : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX + : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX + : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX + : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX + : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX + : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX + : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX + : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX + : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX + : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX + : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX XCOMM Sequences with COMBINING DIAERESIS / - : "¨" # DIAERESIS - : "ä" # LATIN SMALL LETTER A WITH DIAERESIS - : "Ä" # LATIN CAPITAL LETTER A WITH DIAERESIS - : "ë" # LATIN SMALL LETTER E WITH DIAERESIS - : "Ë" # LATIN CAPITAL LETTER E WITH DIAERESIS - : "ï" # LATIN SMALL LETTER I WITH DIAERESIS - : "Ï" # LATIN CAPITAL LETTER I WITH DIAERESIS - : "ö" # LATIN SMALL LETTER O WITH DIAERESIS - : "Ö" # LATIN CAPITAL LETTER O WITH DIAERESIS - : "ü" # LATIN SMALL LETTER U WITH DIAERESIS - : "Ü" # LATIN CAPITAL LETTER U WITH DIAERESIS - : "ẅ" # LATIN SMALL LETTER W WITH DIAERESIS - : "Ẅ" # LATIN CAPITAL LETTER W WITH DIAERESIS - : "ÿ" # LATIN SMALL LETTER Y WITH DIAERESIS - : "Ÿ" # LATIN CAPITAL LETTER Y WITH DIAERESIS + : "¨" U00A8 # DIAERESIS + : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS + : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS + : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS + : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS + : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS + : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS + : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS + : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS + : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS + : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS + : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS + : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS + : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS + : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS XCOMM Sequences with COMBINING DOT ABOVE / - : "˙" # DOT ABOVE - : "ḃ" # LATIN SMALL LETTER B WITH DOT ABOVE - : "Ḃ" # LATIN CAPITAL LETTER B WITH DOT ABOVE - : "ċ" # LATIN SMALL LETTER C WITH DOT ABOVE - : "Ċ" # LATIN CAPITAL LETTER C WITH DOT ABOVE - : "ḋ" # LATIN SMALL LETTER D WITH DOT ABOVE - : "Ḋ" # LATIN CAPITAL LETTER D WITH DOT ABOVE - : "ė" # LATIN SMALL LETTER E WITH DOT ABOVE - : "Ė" # LATIN CAPITAL LETTER E WITH DOT ABOVE - : "ḟ" # LATIN SMALL LETTER F WITH DOT ABOVE - : "Ḟ" # LATIN CAPITAL LETTER F WITH DOT ABOVE - : "ġ" # LATIN SMALL LETTER G WITH DOT ABOVE - : "Ġ" # LATIN CAPITAL LETTER G WITH DOT ABOVE - : "İ" # LATIN CAPITAL LETTER I WITH DOT ABOVE - : "ṁ" # LATIN SMALL LETTER M WITH DOT ABOVE - : "Ṁ" # LATIN CAPITAL LETTER M WITH DOT ABOVE -

: "ṗ" # LATIN SMALL LETTER P WITH DOT ABOVE -

: "Ṗ" # LATIN CAPITAL LETTER P WITH DOT ABOVE - : "ṡ" # LATIN SMALL LETTER S WITH DOT ABOVE - : "Ṡ" # LATIN CAPITAL LETTER S WITH DOT ABOVE - : "ṫ" # LATIN SMALL LETTER T WITH DOT ABOVE - : "Ṫ" # LATIN CAPITAL LETTER T WITH DOT ABOVE - : "ż" # LATIN SMALL LETTER Z WITH DOT ABOVE - : "Ż" # LATIN CAPITAL LETTER Z WITH DOT ABOVE + : "˙" U02D9 # DOT ABOVE + : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE + : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE + : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE + : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE + : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE + : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE + : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE + : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE + : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE + : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE + : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE + : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE + : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE + : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE + : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +

: "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +

-
egl_glx
-
- -

This driver provides a wrapper to GLX. It uses exclusively GLX to implement -the EGL API. It supports both direct and indirect rendering when the GLX does. -It is accelerated when the GLX is. As such, it cannot provide functions that -is not available in GLX or GLX extensions.

-
- -

Packaging

The ABI between the main library and its drivers are not stable. Nor is @@ -262,10 +252,6 @@ is disabled by default.

src/egl/. The sources of the egl state tracker can be found at src/gallium/state_trackers/egl/.

-

The suggested way to learn to write a EGL driver is to see how other drivers -are written. egl_glx should be a good reference. It works in any -environment that has GLX support, and it is simpler than most drivers.

-

Lifetime of Display Resources

Contexts and surfaces are examples of display resources. They might live diff --git a/mesalib/docs/index.html b/mesalib/docs/index.html index 1d3772899..4f92801b5 100644 --- a/mesalib/docs/index.html +++ b/mesalib/docs/index.html @@ -16,6 +16,12 @@

News

+

February 3, 2014

+

+Mesa 10.0.3 is released. +This is a bug-fix release. +

+

January 9, 2014

Mesa 10.0.2 is released. diff --git a/mesalib/docs/relnotes.html b/mesalib/docs/relnotes.html index c3c277dea..430274c52 100644 --- a/mesalib/docs/relnotes.html +++ b/mesalib/docs/relnotes.html @@ -22,6 +22,7 @@ The release notes summarize what's new or changed in each Mesa release.

  • 10.1 release notes +
  • 10.0.3 release notes
  • 10.0.2 release notes
  • 10.0.1 release notes
  • 10.0 release notes diff --git a/mesalib/docs/relnotes/10.0.3.html b/mesalib/docs/relnotes/10.0.3.html new file mode 100644 index 000000000..ad7b50864 --- /dev/null +++ b/mesalib/docs/relnotes/10.0.3.html @@ -0,0 +1,206 @@ + + + + + Mesa Release Notes + + + + +
    +

    The Mesa 3D Graphics Library

    +
    + + +
    + +

    Mesa 10.0.3 Release Notes / (February 3, 2014)

    + +

    +Mesa 10.0.3 is a bug fix release which fixes bugs found since the 10.0.2 release. +

    +

    +Mesa 10.0.3 implements the OpenGL 3.3 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.3. OpenGL +3.3 is only available if requested at context creation +because compatibility contexts not supported. +

    + + +

    MD5 checksums

    +
    +5f9f463ef08129f6762106b434910adb  MesaLib-10.0.3.tar.bz2
    +fb3997b6500e153bc32370cb3fc4ca9e  MesaLib-10.0.3.tar.gz
    +a07b4b6b9eb449b88a6cb5061e51c331  MesaLib-10.0.3.zip
    +
    + + +

    New features

    +

    None

    + +

    Bug fixes

    + +

    This list is likely incomplete.

    + +
      + +
    • Bug 72708 - Master fails to build with older gcc due to -msse4.1
    • + +
    • Bug 72926 - [REGRESSION,swrast] Memory-related crash with anti-aliasing enabled
    • + +
    • Bug 73096 - Query GL_RGBA_SIGNED_COMPONENTS_EXT missing
    • + +
    • Bug 73100 - Please use AC_PATH_TOOL instead of AC_PATH_PROG for llvm-config
    • + +
    • Bug 73418 - OpenCL hangs graphics on CAYMAN
    • + +
    • Bug 73473 - Potential crash bug in src/gallium/auxiliary/rtasm/rtasm_execmem.c
    • + +
    • Bug 73915 - sample shading + centroid broken since f5cfb4a
    • + +
    • Bug 73956 - SIGSEGV when passing GL_NONE to glReadBuffer
    • + +
    • Bug 74026 - Compiler rejects chained assignments involving array dereferences
    • + +
    + +

    Changes

    + +

    The full set of changes can be viewed by using the following git command:

    + +
    +  git log mesa-10.0.2..mesa-10.0.3
    +
    + +

    Aaron Watry (2):

    +
      +
    • radeon: Move gfx/dma cs cleanup to r600_common_context_cleanup
    • +
    • st/dri: prevent leak of dri option default values
    • +
    + +

    Andreas Fänger (1):

    +
      +
    • swrast: fix delayed texel buffer allocation regression for OpenMP
    • +
    + +

    Anuj Phogat (3):

    +
      +
    • glsl: Disable ARB_texture_rectangle in shader version 100.
    • +
    • i965: Use sample barycentric coordinates with per sample shading
    • +
    • i965: Ignore 'centroid' interpolation qualifier in case of persample shading
    • +
    + +

    Brian Paul (3):

    +
      +
    • mesa: implement missing glGet(GL_RGBA_SIGNED_COMPONENTS_EXT) query
    • +
    • st/mesa: fix glReadBuffer(GL_NONE) segfault
    • +
    • draw: fix incorrect vertex size computation in LLVM drawing code
    • +
    + +

    Carl Worth (5):

    +
      +
    • Add md5sums for 10.0.2. release.
    • +
    • cherry-ignore: Ignore several patches not yet ready for the stable branch
    • +
    • Drop another couple of patches.
    • +
    • cherry-ignore: Ignore 4 patches at teh request of the author, (Anuj).
    • +
    • Update version to 10.0.3
    • +
    + +

    Chad Versace (1):

    +
      +
    • i965/gen6/blorp: Emit more flushes to workaround hangs
    • +
    + +

    Chris Forbes (1):

    +
      +
    • i965: fold offset into coord for textureOffset(gsampler2DRect)
    • +
    + +

    Emil Velikov (5):

    +
      +
    • mesa: use signed temporary variable to store _ColorDrawBufferIndexes
    • +
    • st/mesa: use signed temporary variable to store _ColorDrawBufferIndexes
    • +
    • nv50: access only the available amount of textures
    • +
    • nv50: access only the available amount of constbuf
    • +
    • gallium/rtasm: handle mmap failures appropriately
    • +
    + +

    Eric Anholt (2):

    +
      +
    • i965: Fix handling of MESA_pack_invert in blit (PBO) readpixels.
    • +
    • i965: Don't do the temporary-and-blit-copy for INVALIDATE_RANGE maps.
    • +
    + +

    Ian Romanick (2):

    +
      +
    • mesa: Add COMPRESSED_RGBA_S3TC_DXT1_EXT to COMPRESSED_TEXTURE_FORMATS for GLES
    • +
    • radeon / r200: Pass the API into _mesa_initialize_context
    • +
    + +

    Ilia Mirkin (2):

    +
      +
    • mesa: fix GL_COLOR_SUM enum for drivers without ARB_vertex_program
    • +
    • st/vdpau: don't return a device if the screen doesn't support NPOT
    • +
    + +

    José Fonseca (1):

    +
      +
    • mesa: Use IROUND instead of roundf.
    • +
    + +

    Kenneth Graunke (2):

    +
      +
    • glsl: Rename "expr" to "lhs_expr" in vector_extract munging code.
    • +
    • glsl: Fix chained assignments of vector channels.
    • +
    + +

    Lauri Kasanen (1):

    +
      +
    • mesa: Fix build to properly check for supported compiler flags
    • +
    + +

    Marek Olšák (2):

    +
      +
    • st/mesa: use sRGB formats for MSAA resolving if destination is sRGB
    • +
    • gallium/util: util_format_srgb should not return FORMAT_NONE for sRGB formats
    • +
    + +

    Matt Turner (2):

    +
      +
    • glcpp: Define GL_EXT_shader_integer_mix in both GL and ES.
    • +
    • glx: Update glxext.h to revision 24777.
    • +
    + +

    Michał Górny (1):

    +
      +
    • Use AC_PATH_TOOL instead of AC_PATH_PROG for llvm-config.
    • +
    + +

    Paul Berry (1):

    +
      +
    • i965: Ensure that all necessary state is re-emitted if we run out of aperture.
    • +
    + +

    Paul Seidler (1):

    +
      +
    • build: move ARCH_LIBS definition outside of ASM definition
    • +
    + +

    Thomas Sondergaard (4):

    +
      +
    • mesa: Preliminary support for MSVC_VERSION=12.0
    • +
    • mesa: Fix compile error with MSVC 2013
    • +
    • mesa: Work around internal compiler error
    • +
    • mesa: Namespace qualify fma to override ambiguity with fma from math.h
    • +
    + +

    Tom Stellard (1):

    +
      +
    • r600g/compute: Emit DEALLOC_STATE on cayman after dispatching a compute shader.
    • +
    + +
    + + diff --git a/mesalib/docs/relnotes/10.1.html b/mesalib/docs/relnotes/10.1.html index 14b635f24..c9566adfc 100644 --- a/mesalib/docs/relnotes/10.1.html +++ b/mesalib/docs/relnotes/10.1.html @@ -47,8 +47,12 @@ Note: some of the new features are only available with certain drivers.
  • GL_ARB_draw_indirect on i965.
  • GL_ARB_clear_buffer_object
  • GL_ARB_viewport_array on i965.
  • +
  • GL_ARB_map_buffer_alignment on all drivers that did not previously support +it.
  • GL_AMD_shader_trinary_minmax.
  • +
  • GL_EXT_framebuffer_blit on r200 and radeon.
  • Reduced memory usage for display lists.
  • +
  • OpenGL 3.3 support on nv50, nvc0, r600 and radeonsi
diff --git a/mesalib/docs/relnotes/10.2.html b/mesalib/docs/relnotes/10.2.html new file mode 100644 index 000000000..332c33a3f --- /dev/null +++ b/mesalib/docs/relnotes/10.2.html @@ -0,0 +1,61 @@ + + + + + Mesa Release Notes + + + + +
+

The Mesa 3D Graphics Library

+
+ + +
+ +

Mesa 10.2 Release Notes / TBD

+ +

+Mesa 10.2 is a new development release. +People who are concerned with stability and reliability should stick +with a previous release or wait for Mesa 10.2.1. +

+

+Mesa 10.2 implements the OpenGL 3.3 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.3. OpenGL +3.3 is only available if requested at context creation +because compatibility contexts are not supported. +

+ + +

MD5 checksums

+
+TBD.
+
+ + +

New features

+ +

+Note: some of the new features are only available with certain drivers. +

+ +
    +
+ + +

Bug fixes

+ +TBD. + +

Changes

+ +
    +
+ +
+ + diff --git a/mesalib/include/GL/gl.h b/mesalib/include/GL/gl.h index 48343f65d..4e2932df7 100644 --- a/mesalib/include/GL/gl.h +++ b/mesalib/include/GL/gl.h @@ -694,7 +694,7 @@ typedef double GLclampd; /* double precision float in [0,1] */ #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000FFFFF +#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF /* OpenGL 1.1 */ diff --git a/mesalib/include/GL/glxext.h b/mesalib/include/GL/glxext.h index 713238519..8c642f354 100644 --- a/mesalib/include/GL/glxext.h +++ b/mesalib/include/GL/glxext.h @@ -33,10 +33,10 @@ extern "C" { ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** -** Khronos $Revision: 23422 $ on $Date: 2013-10-08 15:40:45 -0700 (Tue, 08 Oct 2013) $ +** Khronos $Revision: 24777 $ on $Date: 2014-01-14 14:02:32 -0800 (Tue, 14 Jan 2014) $ */ -#define GLX_GLXEXT_VERSION 20131008 +#define GLX_GLXEXT_VERSION 20140114 /* Generated C header for: * API: glx @@ -49,6 +49,7 @@ extern "C" { #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 +typedef XID GLXContextID; typedef struct __GLXFBConfigRec *GLXFBConfig; typedef XID GLXWindow; typedef XID GLXPbuffer; @@ -432,6 +433,14 @@ void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLe #endif #endif /* GLX_NV_copy_image */ +#ifndef GLX_NV_delay_before_swap +#define GLX_NV_delay_before_swap 1 +typedef Bool ( *PFNGLXDELAYBEFORESWAPNVPROC) (Display *dpy, GLXDrawable drawable, GLfloat seconds); +#ifdef GLX_GLXEXT_PROTOTYPES +Bool glXDelayBeforeSwapNV (Display *dpy, GLXDrawable drawable, GLfloat seconds); +#endif +#endif /* GLX_NV_delay_before_swap */ + #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/mesalib/include/GL/internal/dri_interface.h b/mesalib/include/GL/internal/dri_interface.h index 81f7e60e5..9e829045e 100644 --- a/mesalib/include/GL/internal/dri_interface.h +++ b/mesalib/include/GL/internal/dri_interface.h @@ -1041,6 +1041,7 @@ struct __DRIdri2ExtensionRec { #define __DRI_IMAGE_FOURCC_XRGB8888 0x34325258 #define __DRI_IMAGE_FOURCC_ABGR8888 0x34324241 #define __DRI_IMAGE_FOURCC_XBGR8888 0x34324258 +#define __DRI_IMAGE_FOURCC_SARGB8888 0x83324258 #define __DRI_IMAGE_FOURCC_YUV410 0x39565559 #define __DRI_IMAGE_FOURCC_YUV411 0x31315559 #define __DRI_IMAGE_FOURCC_YUV420 0x32315559 diff --git a/mesalib/include/HaikuGL/GLRenderer.h b/mesalib/include/HaikuGL/GLRenderer.h index 7ffcc34bb..a93113b17 100644 --- a/mesalib/include/HaikuGL/GLRenderer.h +++ b/mesalib/include/HaikuGL/GLRenderer.h @@ -25,7 +25,7 @@ class BGLRenderer // Private unimplemented copy constructors BGLRenderer(const BGLRenderer &); BGLRenderer & operator=(const BGLRenderer &); - + public: BGLRenderer(BGLView *view, ulong bgl_options, BGLDispatcher *dispatcher); @@ -36,14 +36,14 @@ public: virtual void LockGL(); virtual void UnlockGL(); - + virtual void SwapBuffers(bool VSync = false); virtual void Draw(BRect updateRect); virtual status_t CopyPixelsOut(BPoint source, BBitmap *dest); virtual status_t CopyPixelsIn(BBitmap *source, BPoint dest); - virtual void FrameResized(float width, float height); - + virtual void FrameResized(float width, float height); + virtual void DirectConnected(direct_buffer_info *info); virtual void EnableDirectMode(bool enabled); @@ -61,7 +61,7 @@ private: virtual status_t _Reserved_Renderer_3(int32, void *); virtual status_t _Reserved_Renderer_4(int32, void *); - volatile int32 fRefCount; // How much we're still usefull? + int32 fRefCount; // How much we're still useful BGLView* fView; // Never forget who is the boss! ulong fOptions; // Keep that tune in memory BGLDispatcher* fDispatcher;// Our personal GL API call dispatcher diff --git a/mesalib/include/c11/threads_win32.h b/mesalib/include/c11/threads_win32.h index ee2946025..be1a38957 100644 --- a/mesalib/include/c11/threads_win32.h +++ b/mesalib/include/c11/threads_win32.h @@ -30,6 +30,7 @@ #include #include #include // MSVCRT +#include /* Configuration macro: diff --git a/mesalib/install-lib-links.mk b/mesalib/install-lib-links.mk new file mode 100644 index 000000000..73d9e14e6 --- /dev/null +++ b/mesalib/install-lib-links.mk @@ -0,0 +1,14 @@ +# Provide compatibility with scripts for the old Mesa build system for +# a while by putting a link to the driver into /lib of the build tree. + +all-local : .libs/install-mesa-links + +.libs/install-mesa-links : $(lib_LTLIBRARIES) + $(MKDIR_P) $(top_builddir)/$(LIB_DIR) + for f in $(lib_LTLIBRARIES:%.la=.libs/%.so*); do \ + if test -h .libs/$$f; then \ + cp -d $$f $(top_builddir)/$(LIB_DIR); \ + else \ + ln -f $$f $(top_builddir)/$(LIB_DIR); \ + fi; \ + done && touch $@ diff --git a/mesalib/src/gallium/auxiliary/hud/font.c b/mesalib/src/gallium/auxiliary/hud/font.c index 6747874ee..03e35d945 100644 --- a/mesalib/src/gallium/auxiliary/hud/font.c +++ b/mesalib/src/gallium/auxiliary/hud/font.c @@ -401,7 +401,7 @@ util_font_create_fixed_8x13(struct pipe_context *pipe, tex_templ.height0 = 256; tex_templ.depth0 = 1; tex_templ.array_size = 1; - tex_templ.usage = PIPE_USAGE_STATIC; + tex_templ.usage = PIPE_USAGE_DEFAULT; tex_templ.bind = PIPE_BIND_SAMPLER_VIEW; tex = screen->resource_create(screen, &tex_templ); diff --git a/mesalib/src/gallium/auxiliary/util/u_index_modify.c b/mesalib/src/gallium/auxiliary/util/u_index_modify.c index 5e3fd463e..e13489482 100644 --- a/mesalib/src/gallium/auxiliary/util/u_index_modify.c +++ b/mesalib/src/gallium/auxiliary/util/u_index_modify.c @@ -71,7 +71,7 @@ void util_shorten_ubyte_elts(struct pipe_context *context, new_elts = pipe_buffer_create(context->screen, PIPE_BIND_INDEX_BUFFER, - PIPE_USAGE_STATIC, + PIPE_USAGE_DEFAULT, 2 * count); out_map = pipe_buffer_map(context, new_elts, PIPE_TRANSFER_WRITE, @@ -130,7 +130,7 @@ void util_rebuild_ushort_elts(struct pipe_context *context, new_elts = pipe_buffer_create(context->screen, PIPE_BIND_INDEX_BUFFER, - PIPE_USAGE_STATIC, + PIPE_USAGE_DEFAULT, 2 * count); out_map = pipe_buffer_map(context, new_elts, @@ -189,7 +189,7 @@ void util_rebuild_uint_elts(struct pipe_context *context, new_elts = pipe_buffer_create(context->screen, PIPE_BIND_INDEX_BUFFER, - PIPE_USAGE_STATIC, + PIPE_USAGE_DEFAULT, 2 * count); out_map = pipe_buffer_map(context, new_elts, diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.c b/mesalib/src/gallium/auxiliary/util/u_vbuf.c index 52b360ed7..0c9c349e0 100644 --- a/mesalib/src/gallium/auxiliary/util/u_vbuf.c +++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.c @@ -370,7 +370,7 @@ u_vbuf_translate_buffers(struct u_vbuf *mgr, struct translate_key *key, /* Subtract min_index so that indexing with the index buffer works. */ if (unroll_indices) { - map -= vb->stride * min_index; + map -= (ptrdiff_t)vb->stride * min_index; } tr->set_buffer(tr, i, map, vb->stride, ~0); diff --git a/mesalib/src/glsl/ast.h b/mesalib/src/glsl/ast.h index 0bda28d20..61fd923bc 100644 --- a/mesalib/src/glsl/ast.h +++ b/mesalib/src/glsl/ast.h @@ -460,6 +460,12 @@ struct ast_type_qualifier { unsigned prim_type:1; unsigned max_vertices:1; /** \} */ + + /** + * local_size_{x,y,z} flags for compute shaders. Bit 0 represents + * local_size_x, and so on. + */ + unsigned local_size:3; } /** \brief Set of flags, accessed by name. */ q; @@ -509,6 +515,13 @@ struct ast_type_qualifier { */ int offset; + /** + * Local size specified via GL_ARB_compute_shader's "local_size_{x,y,z}" + * layout qualifier. Element i of this array is only valid if + * flags.q.local_size & (1 << i) is set. + */ + int local_size[3]; + /** * Return true if and only if an interpolation qualifier is present. */ @@ -888,14 +901,13 @@ public: ast_node *body; -private: /** * Generate IR from the condition of a loop * * This is factored out of ::hir because some loops have the condition * test at the top (for and while), and others have it at the end (do-while). */ - void condition_to_hir(class ir_loop *, struct _mesa_glsl_parse_state *); + void condition_to_hir(exec_list *, struct _mesa_glsl_parse_state *); }; @@ -990,6 +1002,27 @@ private: const GLenum prim_type; }; + +/** + * AST node representing a decalaration of the input layout for compute + * shaders. + */ +class ast_cs_input_layout : public ast_node +{ +public: + ast_cs_input_layout(const struct YYLTYPE &locp, const unsigned *local_size) + { + memcpy(this->local_size, local_size, sizeof(this->local_size)); + set_location(locp); + } + + virtual ir_rvalue *hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state); + +private: + unsigned local_size[3]; +}; + /*@}*/ extern void diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 1bfb4e531..c89a26bf9 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -77,6 +77,7 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) state->toplevel_ir = instructions; state->gs_input_prim_type_specified = false; + state->cs_input_local_size_specified = false; /* Section 4.2 of the GLSL 1.20 specification states: * "The built-in functions are scoped in a scope outside the global scope @@ -2155,6 +2156,12 @@ validate_explicit_location(const struct ast_type_qualifier *qual, fail = true; break; + + case MESA_SHADER_COMPUTE: + _mesa_glsl_error(loc, state, + "compute shader variables cannot be given " + "explicit locations"); + return; }; if (fail) { @@ -2275,6 +2282,13 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, var->data.mode = ir_var_uniform; if (!is_parameter && is_varying_var(var, state->stage)) { + /* User-defined ins/outs are not permitted in compute shaders. */ + if (state->stage == MESA_SHADER_COMPUTE) { + _mesa_glsl_error(loc, state, + "user-defined input and output variables are not " + "permitted in compute shaders"); + } + /* This variable is being used to link data between shader stages (in * pre-glsl-1.30 parlance, it's a "varying"). Check that it has a type * that is allowed for such purposes. @@ -2337,6 +2351,9 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, if (var->data.mode == ir_var_shader_in) var->data.invariant = true; break; + case MESA_SHADER_COMPUTE: + /* Invariance isn't meaningful in compute shaders. */ + break; } } @@ -4029,17 +4046,22 @@ ast_jump_statement::hir(exec_list *instructions, _mesa_glsl_error(& loc, state, "break may only appear in a loop or a switch"); } else { - /* For a loop, inline the for loop expression again, - * since we don't know where near the end of - * the loop body the normal copy of it - * is going to be placed. + /* For a loop, inline the for loop expression again, since we don't + * know where near the end of the loop body the normal copy of it is + * going to be placed. Same goes for the condition for a do-while + * loop. */ if (state->loop_nesting_ast != NULL && - mode == ast_continue && - state->loop_nesting_ast->rest_expression) { - state->loop_nesting_ast->rest_expression->hir(instructions, - state); - } + mode == ast_continue) { + if (state->loop_nesting_ast->rest_expression) { + state->loop_nesting_ast->rest_expression->hir(instructions, + state); + } + if (state->loop_nesting_ast->mode == + ast_iteration_statement::ast_do_while) { + state->loop_nesting_ast->condition_to_hir(instructions, state); + } + } if (state->switch_state.is_switch_innermost && mode == ast_break) { @@ -4369,14 +4391,14 @@ ast_case_label::hir(exec_list *instructions, } void -ast_iteration_statement::condition_to_hir(ir_loop *stmt, +ast_iteration_statement::condition_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) { void *ctx = state; if (condition != NULL) { ir_rvalue *const cond = - condition->hir(& stmt->body_instructions, state); + condition->hir(instructions, state); if ((cond == NULL) || !cond->type->is_boolean() || !cond->type->is_scalar()) { @@ -4397,7 +4419,7 @@ ast_iteration_statement::condition_to_hir(ir_loop *stmt, new(ctx) ir_loop_jump(ir_loop_jump::jump_break); if_stmt->then_instructions.push_tail(break_stmt); - stmt->body_instructions.push_tail(if_stmt); + instructions->push_tail(if_stmt); } } } @@ -4432,7 +4454,7 @@ ast_iteration_statement::hir(exec_list *instructions, state->switch_state.is_switch_innermost = false; if (mode != ast_do_while) - condition_to_hir(stmt, state); + condition_to_hir(&stmt->body_instructions, state); if (body != NULL) body->hir(& stmt->body_instructions, state); @@ -4441,7 +4463,7 @@ ast_iteration_statement::hir(exec_list *instructions, rest_expression->hir(& stmt->body_instructions, state); if (mode == ast_do_while) - condition_to_hir(stmt, state); + condition_to_hir(&stmt->body_instructions, state); if (mode != ast_do_while) state->symbols->pop_scope(); @@ -5289,6 +5311,84 @@ ast_gs_input_layout::hir(exec_list *instructions, } +ir_rvalue * +ast_cs_input_layout::hir(exec_list *instructions, + struct _mesa_glsl_parse_state *state) +{ + YYLTYPE loc = this->get_location(); + + /* If any compute input layout declaration preceded this one, make sure it + * was consistent with this one. + */ + if (state->cs_input_local_size_specified) { + for (int i = 0; i < 3; i++) { + if (state->cs_input_local_size[i] != this->local_size[i]) { + _mesa_glsl_error(&loc, state, + "compute shader input layout does not match" + " previous declaration"); + return NULL; + } + } + } + + /* From the ARB_compute_shader specification: + * + * If the local size of the shader in any dimension is greater + * than the maximum size supported by the implementation for that + * dimension, a compile-time error results. + * + * It is not clear from the spec how the error should be reported if + * the total size of the work group exceeds + * MAX_COMPUTE_WORK_GROUP_INVOCATIONS, but it seems reasonable to + * report it at compile time as well. + */ + GLuint64 total_invocations = 1; + for (int i = 0; i < 3; i++) { + if (this->local_size[i] > state->ctx->Const.MaxComputeWorkGroupSize[i]) { + _mesa_glsl_error(&loc, state, + "local_size_%c exceeds MAX_COMPUTE_WORK_GROUP_SIZE" + " (%d)", 'x' + i, + state->ctx->Const.MaxComputeWorkGroupSize[i]); + break; + } + total_invocations *= this->local_size[i]; + if (total_invocations > + state->ctx->Const.MaxComputeWorkGroupInvocations) { + _mesa_glsl_error(&loc, state, + "product of local_sizes exceeds " + "MAX_COMPUTE_WORK_GROUP_INVOCATIONS (%d)", + state->ctx->Const.MaxComputeWorkGroupInvocations); + break; + } + } + + state->cs_input_local_size_specified = true; + for (int i = 0; i < 3; i++) + state->cs_input_local_size[i] = this->local_size[i]; + + /* We may now declare the built-in constant gl_WorkGroupSize (see + * builtin_variable_generator::generate_constants() for why we didn't + * declare it earlier). + */ + ir_variable *var = new(state->symbols) + ir_variable(glsl_type::ivec3_type, "gl_WorkGroupSize", ir_var_auto); + var->data.how_declared = ir_var_declared_implicitly; + var->data.read_only = true; + instructions->push_tail(var); + state->symbols->add_variable(var); + ir_constant_data data; + memset(&data, 0, sizeof(data)); + for (int i = 0; i < 3; i++) + data.i[i] = this->local_size[i]; + var->constant_value = new(var) ir_constant(glsl_type::ivec3_type, &data); + var->constant_initializer = + new(var) ir_constant(glsl_type::ivec3_type, &data); + var->data.has_initializer = true; + + return NULL; +} + + static void detect_conflicting_assignments(struct _mesa_glsl_parse_state *state, exec_list *instructions) diff --git a/mesalib/src/glsl/ast_type.cpp b/mesalib/src/glsl/ast_type.cpp index 637da0dfb..bbc430808 100644 --- a/mesalib/src/glsl/ast_type.cpp +++ b/mesalib/src/glsl/ast_type.cpp @@ -118,6 +118,7 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, ubo_layout_mask.flags.q.shared = 1; ast_type_qualifier ubo_binding_mask; + ubo_binding_mask.flags.i = 0; ubo_binding_mask.flags.q.explicit_binding = 1; ubo_binding_mask.flags.q.explicit_offset = 1; @@ -158,6 +159,20 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, if ((q.flags.i & ubo_layout_mask.flags.i) != 0) this->flags.i &= ~ubo_layout_mask.flags.i; + for (int i = 0; i < 3; i++) { + if (q.flags.q.local_size & (1 << i)) { + if ((this->flags.q.local_size & (1 << i)) && + this->local_size[i] != q.local_size[i]) { + _mesa_glsl_error(loc, state, + "compute shader set conflicting values for " + "local_size_%c (%d and %d)", 'x' + i, + this->local_size[i], q.local_size[i]); + return false; + } + this->local_size[i] = q.local_size[i]; + } + } + this->flags.i |= q.flags.i; if (q.flags.q.explicit_location) diff --git a/mesalib/src/glsl/builtin_variables.cpp b/mesalib/src/glsl/builtin_variables.cpp index d6bc3c073..cc423383d 100644 --- a/mesalib/src/glsl/builtin_variables.cpp +++ b/mesalib/src/glsl/builtin_variables.cpp @@ -356,6 +356,7 @@ public: void generate_vs_special_vars(); void generate_gs_special_vars(); void generate_fs_special_vars(); + void generate_cs_special_vars(); void generate_varyings(); private: @@ -389,6 +390,7 @@ private: enum ir_variable_mode mode, int slot); ir_variable *add_uniform(const glsl_type *type, const char *name); ir_variable *add_const(const char *name, int value); + ir_variable *add_const_ivec3(const char *name, int x, int y, int z); void add_varying(int slot, const glsl_type *type, const char *name, const char *name_as_gs_input); @@ -529,6 +531,25 @@ builtin_variable_generator::add_const(const char *name, int value) } +ir_variable * +builtin_variable_generator::add_const_ivec3(const char *name, int x, int y, + int z) +{ + ir_variable *const var = add_variable(name, glsl_type::ivec3_type, + ir_var_auto, -1); + ir_constant_data data; + memset(&data, 0, sizeof(data)); + data.i[0] = x; + data.i[1] = y; + data.i[2] = z; + var->constant_value = new(var) ir_constant(glsl_type::ivec3_type, &data); + var->constant_initializer = + new(var) ir_constant(glsl_type::ivec3_type, &data); + var->data.has_initializer = true; + return var; +} + + void builtin_variable_generator::generate_constants() { @@ -659,6 +680,37 @@ builtin_variable_generator::generate_constants() add_const("gl_MaxTessControlAtomicCounters", 0); add_const("gl_MaxTessEvaluationAtomicCounters", 0); } + + if (state->is_version(430, 0) || state->ARB_compute_shader_enable) { + add_const_ivec3("gl_MaxComputeWorkGroupCount", + state->Const.MaxComputeWorkGroupCount[0], + state->Const.MaxComputeWorkGroupCount[1], + state->Const.MaxComputeWorkGroupCount[2]); + add_const_ivec3("gl_MaxComputeWorkGroupSize", + state->Const.MaxComputeWorkGroupSize[0], + state->Const.MaxComputeWorkGroupSize[1], + state->Const.MaxComputeWorkGroupSize[2]); + + /* From the GLSL 4.40 spec, section 7.1 (Built-In Language Variables): + * + * The built-in constant gl_WorkGroupSize is a compute-shader + * constant containing the local work-group size of the shader. The + * size of the work group in the X, Y, and Z dimensions is stored in + * the x, y, and z components. The constants values in + * gl_WorkGroupSize will match those specified in the required + * local_size_x, local_size_y, and local_size_z layout qualifiers + * for the current shader. This is a constant so that it can be + * used to size arrays of memory that can be shared within the local + * work group. It is a compile-time error to use gl_WorkGroupSize + * in a shader that does not declare a fixed local group size, or + * before that shader has declared a fixed local group size, using + * local_size_x, local_size_y, and local_size_z. + * + * To prevent the shader from trying to refer to gl_WorkGroupSize before + * the layout declaration, we don't define it here. Intead we define it + * in ast_cs_input_layout::hir(). + */ + } } @@ -867,6 +919,16 @@ builtin_variable_generator::generate_fs_special_vars() } +/** + * Generate variables which only exist in compute shaders. + */ +void +builtin_variable_generator::generate_cs_special_vars() +{ + /* TODO: finish this. */ +} + + /** * Add a single "varying" variable. The variable's type and direction (input * or output) are adjusted as appropriate for the type of shader being @@ -888,6 +950,9 @@ builtin_variable_generator::add_varying(int slot, const glsl_type *type, case MESA_SHADER_FRAGMENT: add_input(slot, type, name); break; + case MESA_SHADER_COMPUTE: + /* Compute shaders don't have varyings. */ + break; } } @@ -975,5 +1040,8 @@ _mesa_glsl_initialize_variables(exec_list *instructions, case MESA_SHADER_FRAGMENT: gen.generate_fs_special_vars(); break; + case MESA_SHADER_COMPUTE: + gen.generate_cs_special_vars(); + break; } } diff --git a/mesalib/src/glsl/glcpp/glcpp-lex.l b/mesalib/src/glsl/glcpp/glcpp-lex.l index f1fa192c5..ea3b862e4 100644 --- a/mesalib/src/glsl/glcpp/glcpp-lex.l +++ b/mesalib/src/glsl/glcpp/glcpp-lex.l @@ -155,8 +155,6 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]? /* Single-line comments */ "//"[^\n]* { - if (parser->commented_newlines) - BEGIN NEWLINE_CATCHUP; } /* Multi-line comments */ diff --git a/mesalib/src/glsl/glcpp/glcpp-parse.y b/mesalib/src/glsl/glcpp/glcpp-parse.y index 184e5c237..eeafa4d39 100644 --- a/mesalib/src/glsl/glcpp/glcpp-parse.y +++ b/mesalib/src/glsl/glcpp/glcpp-parse.y @@ -30,6 +30,7 @@ #include "glcpp.h" #include "main/core.h" /* for struct gl_extensions */ +#include "main/mtypes.h" /* for gl_api enum */ static void yyerror (YYLTYPE *locp, glcpp_parser_t *parser, const char *error); @@ -194,7 +195,7 @@ line: ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); } | HASH_LINE { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } pp_tokens NEWLINE { if (parser->skip_stack == NULL || @@ -254,10 +255,10 @@ define: control_line: HASH_DEFINE { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } define | HASH_UNDEF { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } IDENTIFIER NEWLINE { macro_t *macro = hash_table_find (parser->defines, $3); if (macro) { @@ -267,7 +268,7 @@ control_line: ralloc_free ($3); } | HASH_IF { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } conditional_tokens NEWLINE { /* Be careful to only evaluate the 'if' expression if * we are not skipping. When we are skipping, we @@ -299,14 +300,14 @@ control_line: _glcpp_parser_skip_stack_push_if (parser, & @1, 0); } | HASH_IFDEF { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } IDENTIFIER junk NEWLINE { macro_t *macro = hash_table_find (parser->defines, $3); ralloc_free ($3); _glcpp_parser_skip_stack_push_if (parser, & @1, macro != NULL); } | HASH_IFNDEF { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } IDENTIFIER junk NEWLINE { macro_t *macro = hash_table_find (parser->defines, $3); ralloc_free ($3); @@ -374,13 +375,19 @@ control_line: _glcpp_parser_skip_stack_pop (parser, & @1); } NEWLINE | HASH_VERSION integer_constant NEWLINE { + if (parser->version_resolved) { + glcpp_error(& @1, parser, "#version must appear on the first line"); + } _glcpp_parser_handle_version_declaration(parser, $2, NULL, true); } | HASH_VERSION integer_constant IDENTIFIER NEWLINE { + if (parser->version_resolved) { + glcpp_error(& @1, parser, "#version must appear on the first line"); + } _glcpp_parser_handle_version_declaration(parser, $2, $3, true); } | HASH NEWLINE { - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); } ; @@ -1186,7 +1193,7 @@ static void add_builtin_define(glcpp_parser_t *parser, } glcpp_parser_t * -glcpp_parser_create (const struct gl_extensions *extensions) +glcpp_parser_create (const struct gl_extensions *extensions, gl_api api) { glcpp_parser_t *parser; @@ -1215,6 +1222,7 @@ glcpp_parser_create (const struct gl_extensions *extensions) parser->error = 0; parser->extensions = extensions; + parser->api = api; parser->version_resolved = false; parser->has_new_line_number = 0; @@ -2024,6 +2032,9 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio { const struct gl_extensions *extensions = parser->extensions; + if (parser->version_resolved) + return; + parser->version_resolved = true; add_builtin_define (parser, "__VERSION__", version); @@ -2043,6 +2054,8 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio } else { add_builtin_define(parser, "GL_ARB_draw_buffers", 1); add_builtin_define(parser, "GL_ARB_texture_rectangle", 1); + add_builtin_define(parser, "GL_AMD_shader_trinary_minmax", 1); + if (extensions != NULL) { if (extensions->EXT_texture_array) @@ -2108,11 +2121,11 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio if (extensions->ARB_shader_atomic_counters) add_builtin_define(parser, "GL_ARB_shader_atomic_counters", 1); - if (extensions->AMD_shader_trinary_minmax) - add_builtin_define(parser, "GL_AMD_shader_trinary_minmax", 1); - if (extensions->ARB_viewport_array) add_builtin_define(parser, "GL_ARB_viewport_array", 1); + + if (extensions->ARB_compute_shader) + add_builtin_define(parser, "GL_ARB_compute_shader", 1); } } @@ -2140,15 +2153,19 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio } } -/* GLSL version is no version is explicitly specified. */ +/* GLSL version if no version is explicitly specified. */ #define IMPLICIT_GLSL_VERSION 110 +/* GLSL ES version if no version is explicitly specified. */ +#define IMPLICIT_GLSL_ES_VERSION 100 + void -glcpp_parser_resolve_version(glcpp_parser_t *parser) +glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser) { - if (parser->version_resolved) - return; + int language_version = parser->api == API_OPENGLES2 ? + IMPLICIT_GLSL_ES_VERSION : + IMPLICIT_GLSL_VERSION; - _glcpp_parser_handle_version_declaration(parser, IMPLICIT_GLSL_VERSION, + _glcpp_parser_handle_version_declaration(parser, language_version, NULL, false); } diff --git a/mesalib/src/glsl/glcpp/glcpp.c b/mesalib/src/glsl/glcpp/glcpp.c index c9c2ff29e..07b1500b6 100644 --- a/mesalib/src/glsl/glcpp/glcpp.c +++ b/mesalib/src/glsl/glcpp/glcpp.c @@ -30,7 +30,7 @@ #include "main/mtypes.h" #include "main/shaderobj.h" -extern int yydebug; +extern int glcpp_parser_debug; void _mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, @@ -101,6 +101,7 @@ load_text_file(void *ctx, const char *filename) static void init_fake_gl_context (struct gl_context *gl_ctx) { + gl_ctx->API = API_OPENGL_COMPAT; gl_ctx->Const.DisableGLSLLineContinuations = false; } diff --git a/mesalib/src/glsl/glcpp/glcpp.h b/mesalib/src/glsl/glcpp/glcpp.h index 4aa200a63..79ccb234f 100644 --- a/mesalib/src/glsl/glcpp/glcpp.h +++ b/mesalib/src/glsl/glcpp/glcpp.h @@ -183,6 +183,7 @@ struct glcpp_parser { size_t info_log_length; int error; const struct gl_extensions *extensions; + gl_api api; bool version_resolved; bool has_new_line_number; int new_line_number; @@ -194,7 +195,7 @@ struct glcpp_parser { struct gl_extensions; glcpp_parser_t * -glcpp_parser_create (const struct gl_extensions *extensions); +glcpp_parser_create (const struct gl_extensions *extensions, gl_api api); int glcpp_parser_parse (glcpp_parser_t *parser); @@ -203,7 +204,7 @@ void glcpp_parser_destroy (glcpp_parser_t *parser); void -glcpp_parser_resolve_version(glcpp_parser_t *parser); +glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser); int glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, diff --git a/mesalib/src/glsl/glcpp/pp.c b/mesalib/src/glsl/glcpp/pp.c index 637a58f9c..4a623f81e 100644 --- a/mesalib/src/glsl/glcpp/pp.c +++ b/mesalib/src/glsl/glcpp/pp.c @@ -139,7 +139,7 @@ glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, const struct gl_extensions *extensions, struct gl_context *gl_ctx) { int errors; - glcpp_parser_t *parser = glcpp_parser_create (extensions); + glcpp_parser_t *parser = glcpp_parser_create (extensions, gl_ctx->API); if (! gl_ctx->Const.DisableGLSLLineContinuations) *shader = remove_line_continuations(parser, *shader); @@ -151,7 +151,7 @@ glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, if (parser->skip_stack) glcpp_error (&parser->skip_stack->loc, parser, "Unterminated #if\n"); - glcpp_parser_resolve_version(parser); + glcpp_parser_resolve_implicit_version(parser); ralloc_strcat(info_log, parser->info_log); diff --git a/mesalib/src/glsl/glsl_lexer.ll b/mesalib/src/glsl/glsl_lexer.ll index 50875bf3b..3208b32da 100644 --- a/mesalib/src/glsl/glsl_lexer.ll +++ b/mesalib/src/glsl/glsl_lexer.ll @@ -349,7 +349,8 @@ layout { || yyextra->ARB_explicit_attrib_location_enable || yyextra->ARB_uniform_buffer_object_enable || yyextra->ARB_fragment_coord_conventions_enable - || yyextra->ARB_shading_language_420pack_enable) { + || yyextra->ARB_shading_language_420pack_enable + || yyextra->ARB_compute_shader_enable) { return LAYOUT_TOK; } else { yylval->identifier = strdup(yytext); diff --git a/mesalib/src/glsl/glsl_parser.yy b/mesalib/src/glsl/glsl_parser.yy index 928c57e20..dc35c1a51 100644 --- a/mesalib/src/glsl/glsl_parser.yy +++ b/mesalib/src/glsl/glsl_parser.yy @@ -1291,6 +1291,34 @@ layout_qualifier_id: } } + static const char *local_size_qualifiers[3] = { + "local_size_x", + "local_size_y", + "local_size_z", + }; + for (int i = 0; i < 3; i++) { + if (match_layout_qualifier(local_size_qualifiers[i], $1, + state) == 0) { + if ($3 <= 0) { + _mesa_glsl_error(& @3, state, + "invalid %s of %d specified", + local_size_qualifiers[i], $3); + YYERROR; + } else if (!state->is_version(430, 0) && + !state->ARB_compute_shader_enable) { + _mesa_glsl_error(& @3, state, + "%s qualifier requires GLSL 4.30 or " + "ARB_compute_shader", + local_size_qualifiers[i]); + YYERROR; + } else { + $$.flags.q.local_size |= (1 << i); + $$.local_size[i] = $3; + } + break; + } + } + /* If the identifier didn't match any known layout identifiers, * emit an error. */ @@ -1466,7 +1494,7 @@ type_qualifier: "just before storage qualifiers"); } $$ = $1; - $$.flags.i |= $2.flags.i; + $$.merge_qualifier(&@1, state, $2); } | storage_qualifier type_qualifier { @@ -2334,29 +2362,53 @@ layout_defaults: { void *ctx = state; $$ = NULL; - if (state->stage != MESA_SHADER_GEOMETRY) { + switch (state->stage) { + case MESA_SHADER_GEOMETRY: { + if (!$1.flags.q.prim_type) { + _mesa_glsl_error(& @1, state, + "input layout qualifiers must specify a primitive" + " type"); + } else { + /* Make sure this is a valid input primitive type. */ + switch ($1.prim_type) { + case GL_POINTS: + case GL_LINES: + case GL_LINES_ADJACENCY: + case GL_TRIANGLES: + case GL_TRIANGLES_ADJACENCY: + $$ = new(ctx) ast_gs_input_layout(@1, $1.prim_type); + break; + default: + _mesa_glsl_error(&@1, state, + "invalid geometry shader input primitive type"); + break; + } + } + } + break; + case MESA_SHADER_COMPUTE: { + if ($1.flags.q.local_size == 0) { + _mesa_glsl_error(& @1, state, + "input layout qualifiers must specify a local " + "size"); + } else { + /* Infer a local_size of 1 for every unspecified dimension */ + unsigned local_size[3]; + for (int i = 0; i < 3; i++) { + if ($1.flags.q.local_size & (1 << i)) + local_size[i] = $1.local_size[i]; + else + local_size[i] = 1; + } + $$ = new(ctx) ast_cs_input_layout(@1, local_size); + } + } + break; + default: _mesa_glsl_error(& @1, state, "input layout qualifiers only valid in " - "geometry shaders"); - } else if (!$1.flags.q.prim_type) { - _mesa_glsl_error(& @1, state, - "input layout qualifiers must specify a primitive" - " type"); - } else { - /* Make sure this is a valid input primitive type. */ - switch ($1.prim_type) { - case GL_POINTS: - case GL_LINES: - case GL_LINES_ADJACENCY: - case GL_TRIANGLES: - case GL_TRIANGLES_ADJACENCY: - $$ = new(ctx) ast_gs_input_layout(@1, $1.prim_type); - break; - default: - _mesa_glsl_error(&@1, state, - "invalid geometry shader input primitive type"); - break; - } + "geometry and compute shaders"); + break; } } diff --git a/mesalib/src/glsl/glsl_parser_extras.cpp b/mesalib/src/glsl/glsl_parser_extras.cpp index 87784ed69..b822d2292 100644 --- a/mesalib/src/glsl/glsl_parser_extras.cpp +++ b/mesalib/src/glsl/glsl_parser_extras.cpp @@ -56,7 +56,8 @@ static unsigned known_desktop_glsl_versions[] = _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, gl_shader_stage stage, void *mem_ctx) - : ctx(_ctx), switch_state() + : ctx(_ctx), cs_input_local_size_specified(false), cs_input_local_size(), + switch_state() { assert(stage < MESA_SHADER_STAGES); this->stage = stage; @@ -123,6 +124,12 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, this->Const.MaxCombinedAtomicCounters = ctx->Const.MaxCombinedAtomicCounters; this->Const.MaxAtomicBufferBindings = ctx->Const.MaxAtomicBufferBindings; + /* Compute shader constants */ + for (unsigned i = 0; i < Elements(this->Const.MaxComputeWorkGroupCount); i++) + this->Const.MaxComputeWorkGroupCount[i] = ctx->Const.MaxComputeWorkGroupCount[i]; + for (unsigned i = 0; i < Elements(this->Const.MaxComputeWorkGroupSize); i++) + this->Const.MaxComputeWorkGroupSize[i] = ctx->Const.MaxComputeWorkGroupSize[i]; + this->current_function = NULL; this->toplevel_ir = NULL; this->found_return = false; @@ -519,6 +526,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { EXT(ARB_sample_shading, true, false, ARB_sample_shading), EXT(AMD_shader_trinary_minmax, true, false, dummy_true), EXT(ARB_viewport_array, true, false, ARB_viewport_array), + EXT(ARB_compute_shader, true, false, ARB_compute_shader), }; #undef EXT @@ -1332,23 +1340,45 @@ set_shader_inout_layout(struct gl_shader *shader, /* Should have been prevented by the parser. */ assert(!state->gs_input_prim_type_specified); assert(!state->out_qualifier->flags.i); - return; } - shader->Geom.VerticesOut = 0; - if (state->out_qualifier->flags.q.max_vertices) - shader->Geom.VerticesOut = state->out_qualifier->max_vertices; - - if (state->gs_input_prim_type_specified) { - shader->Geom.InputType = state->gs_input_prim_type; - } else { - shader->Geom.InputType = PRIM_UNKNOWN; + if (shader->Stage != MESA_SHADER_COMPUTE) { + /* Should have been prevented by the parser. */ + assert(!state->cs_input_local_size_specified); } - if (state->out_qualifier->flags.q.prim_type) { - shader->Geom.OutputType = state->out_qualifier->prim_type; - } else { - shader->Geom.OutputType = PRIM_UNKNOWN; + switch (shader->Stage) { + case MESA_SHADER_GEOMETRY: + shader->Geom.VerticesOut = 0; + if (state->out_qualifier->flags.q.max_vertices) + shader->Geom.VerticesOut = state->out_qualifier->max_vertices; + + if (state->gs_input_prim_type_specified) { + shader->Geom.InputType = state->gs_input_prim_type; + } else { + shader->Geom.InputType = PRIM_UNKNOWN; + } + + if (state->out_qualifier->flags.q.prim_type) { + shader->Geom.OutputType = state->out_qualifier->prim_type; + } else { + shader->Geom.OutputType = PRIM_UNKNOWN; + } + break; + + case MESA_SHADER_COMPUTE: + if (state->cs_input_local_size_specified) { + for (int i = 0; i < 3; i++) + shader->Comp.LocalSize[i] = state->cs_input_local_size[i]; + } else { + for (int i = 0; i < 3; i++) + shader->Comp.LocalSize[i] = 0; + } + break; + + default: + /* Nothing to do. */ + break; } } diff --git a/mesalib/src/glsl/glsl_parser_extras.h b/mesalib/src/glsl/glsl_parser_extras.h index 8a4cbf14c..7d661473d 100644 --- a/mesalib/src/glsl/glsl_parser_extras.h +++ b/mesalib/src/glsl/glsl_parser_extras.h @@ -196,6 +196,21 @@ struct _mesa_glsl_parse_state { */ GLenum gs_input_prim_type; + /** + * True if a compute shader input local size was specified using a layout + * directive. + * + * Note: this value is computed at ast_to_hir time rather than at parse + * time. + */ + bool cs_input_local_size_specified; + + /** + * If cs_input_local_size_specified is true, the local size that was + * specified. Otherwise ignored. + */ + unsigned cs_input_local_size[3]; + /** Output layout qualifiers from GLSL 1.50. (geometry shader controls)*/ struct ast_type_qualifier *out_qualifier; @@ -250,6 +265,10 @@ struct _mesa_glsl_parse_state { unsigned MaxFragmentAtomicCounters; unsigned MaxCombinedAtomicCounters; unsigned MaxAtomicBufferBindings; + + /* ARB_compute_shader */ + unsigned MaxComputeWorkGroupCount[3]; + unsigned MaxComputeWorkGroupSize[3]; } Const; /** @@ -356,6 +375,8 @@ struct _mesa_glsl_parse_state { bool AMD_shader_trinary_minmax_warn; bool ARB_viewport_array_enable; bool ARB_viewport_array_warn; + bool ARB_compute_shader_enable; + bool ARB_compute_shader_warn; /*@}*/ /** Extensions supported by the OpenGL implementation. */ diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h index 19e8383b2..e266328b2 100644 --- a/mesalib/src/glsl/ir.h +++ b/mesalib/src/glsl/ir.h @@ -471,7 +471,7 @@ public: void reinit_interface_type(const struct glsl_type *type) { if (this->max_ifc_array_access != NULL) { -#ifndef _NDEBUG +#ifndef NDEBUG /* Redeclaring gl_PerVertex is only allowed if none of the built-ins * it defines have been accessed yet; so it's safe to throw away the * old max_ifc_array_access pointer, since all of its values are diff --git a/mesalib/src/glsl/ir_constant_expression.cpp b/mesalib/src/glsl/ir_constant_expression.cpp index f811fd138..7fa5a09d4 100644 --- a/mesalib/src/glsl/ir_constant_expression.cpp +++ b/mesalib/src/glsl/ir_constant_expression.cpp @@ -1397,6 +1397,23 @@ ir_expression::constant_expression_value(struct hash_table *variable_context) break; } + case ir_binop_bfm: { + int bits = op[0]->value.i[0]; + int offset = op[1]->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 for bitfieldInsert, per spec. */ + else if (offset + bits > 32) + data.u[c] = 0; /* Undefined for bitfieldInsert, per spec. */ + else + data.u[c] = ((1 << bits) - 1) << offset; + } + break; + } + case ir_binop_ldexp: for (unsigned c = 0; c < components; c++) { data.f[c] = ldexp(op[0]->value.f[c], op[1]->value.i[c]); diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp index 93b475497..bcd739476 100644 --- a/mesalib/src/glsl/linker.cpp +++ b/mesalib/src/glsl/linker.cpp @@ -1287,6 +1287,69 @@ link_gs_inout_layout_qualifiers(struct gl_shader_program *prog, prog->Geom.VerticesOut = linked_shader->Geom.VerticesOut; } + +/** + * Perform cross-validation of compute shader local_size_{x,y,z} layout + * qualifiers for the attached compute shaders, and propagate them to the + * linked CS and linked shader program. + */ +static void +link_cs_input_layout_qualifiers(struct gl_shader_program *prog, + struct gl_shader *linked_shader, + struct gl_shader **shader_list, + unsigned num_shaders) +{ + for (int i = 0; i < 3; i++) + linked_shader->Comp.LocalSize[i] = 0; + + /* This function is called for all shader stages, but it only has an effect + * for compute shaders. + */ + if (linked_shader->Stage != MESA_SHADER_COMPUTE) + return; + + /* From the ARB_compute_shader spec, in the section describing local size + * declarations: + * + * If multiple compute shaders attached to a single program object + * declare local work-group size, the declarations must be identical; + * otherwise a link-time error results. Furthermore, if a program + * object contains any compute shaders, at least one must contain an + * input layout qualifier specifying the local work sizes of the + * program, or a link-time error will occur. + */ + for (unsigned sh = 0; sh < num_shaders; sh++) { + struct gl_shader *shader = shader_list[sh]; + + if (shader->Comp.LocalSize[0] != 0) { + if (linked_shader->Comp.LocalSize[0] != 0) { + for (int i = 0; i < 3; i++) { + if (linked_shader->Comp.LocalSize[i] != + shader->Comp.LocalSize[i]) { + linker_error(prog, "compute shader defined with conflicting " + "local sizes\n"); + return; + } + } + } + for (int i = 0; i < 3; i++) + linked_shader->Comp.LocalSize[i] = shader->Comp.LocalSize[i]; + } + } + + /* Just do the intrastage -> interstage propagation right now, + * since we already know we're in the right type of shader program + * for doing it. + */ + if (linked_shader->Comp.LocalSize[0] == 0) { + linker_error(prog, "compute shader didn't declare local size\n"); + return; + } + for (int i = 0; i < 3; i++) + prog->Comp.LocalSize[i] = linked_shader->Comp.LocalSize[i]; +} + + /** * Combine a group of shaders for a single stage to generate a linked shader * @@ -1391,6 +1454,7 @@ link_intrastage_shaders(void *mem_ctx, ralloc_steal(linked, linked->UniformBlocks); link_gs_inout_layout_qualifiers(prog, linked, shader_list, num_shaders); + link_cs_input_layout_qualifiers(prog, linked, shader_list, num_shaders); populate_symbol_table(linked); @@ -2045,6 +2109,13 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) goto done; } + /* Compute shaders have additional restrictions. */ + if (num_shaders[MESA_SHADER_COMPUTE] > 0 && + num_shaders[MESA_SHADER_COMPUTE] != prog->NumShaders) { + linker_error(prog, "Compute shaders may not be linked with any other " + "type of shader\n"); + } + for (unsigned int i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] != NULL) ctx->Driver.DeleteShader(ctx, prog->_LinkedShaders[i]); @@ -2098,7 +2169,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) unsigned prev; - for (prev = 0; prev < MESA_SHADER_STAGES; prev++) { + for (prev = 0; prev <= MESA_SHADER_FRAGMENT; prev++) { if (prog->_LinkedShaders[prev] != NULL) break; } @@ -2106,7 +2177,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) /* Validate the inputs of each stage with the output of the preceding * stage. */ - for (unsigned i = prev + 1; i < MESA_SHADER_STAGES; i++) { + for (unsigned i = prev + 1; i <= MESA_SHADER_FRAGMENT; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -2201,7 +2272,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) } unsigned first; - for (first = 0; first < MESA_SHADER_STAGES; first++) { + for (first = 0; first <= MESA_SHADER_FRAGMENT; first++) { if (prog->_LinkedShaders[first] != NULL) break; } @@ -2233,7 +2304,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) * eliminated if they are (transitively) not used in a later stage. */ int last, next; - for (last = MESA_SHADER_STAGES-1; last >= 0; last--) { + for (last = MESA_SHADER_FRAGMENT; last >= 0; last--) { if (prog->_LinkedShaders[last] != NULL) break; } diff --git a/mesalib/src/glsl/lower_instructions.cpp b/mesalib/src/glsl/lower_instructions.cpp index 8f8d448ea..44a6e8021 100644 --- a/mesalib/src/glsl/lower_instructions.cpp +++ b/mesalib/src/glsl/lower_instructions.cpp @@ -384,10 +384,10 @@ lower_instructions_visitor::ldexp_to_arith(ir_expression *ir) /* Constants */ ir_constant *zeroi = ir_constant::zero(ir, ivec); - ir_constant *sign_mantissa_mask = new(ir) ir_constant(0x807fffffu, vec_elem); ir_constant *sign_mask = new(ir) ir_constant(0x80000000u, vec_elem); ir_constant *exp_shift = new(ir) ir_constant(23u, vec_elem); + ir_constant *exp_width = new(ir) ir_constant(8u, vec_elem); /* Temporary variables */ ir_variable *x = new(ir) ir_variable(ir->type, "x", ir_var_temporary); @@ -449,11 +449,17 @@ lower_instructions_visitor::ldexp_to_arith(ir_expression *ir) */ ir_constant *exp_shift_clone = exp_shift->clone(ir, NULL); - ir->operation = ir_unop_bitcast_u2f; - ir->operands[0] = bit_or(bit_and(bitcast_f2u(x), sign_mantissa_mask), - lshift(i2u(resulting_biased_exp), exp_shift_clone)); + ir->operation = ir_unop_bitcast_i2f; + ir->operands[0] = bitfield_insert(bitcast_f2i(x), resulting_biased_exp, + exp_shift_clone, exp_width); ir->operands[1] = NULL; + /* Don't generate new IR that would need to be lowered in an additional + * pass. + */ + if (lowering(BITFIELD_INSERT_TO_BFM_BFI)) + bitfield_insert_to_bfm_bfi(ir->operands[0]->as_expression()); + this->progress = true; } diff --git a/mesalib/src/glsl/main.cpp b/mesalib/src/glsl/main.cpp index 03b7c786b..3a0f812f2 100644 --- a/mesalib/src/glsl/main.cpp +++ b/mesalib/src/glsl/main.cpp @@ -50,6 +50,17 @@ initialize_context(struct gl_context *ctx, gl_api api) */ ctx->Const.GLSLVersion = glsl_version; ctx->Extensions.ARB_ES3_compatibility = true; + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; + ctx->Const.MaxComputeWorkGroupSize[0] = 1024; + ctx->Const.MaxComputeWorkGroupSize[1] = 1024; + ctx->Const.MaxComputeWorkGroupSize[2] = 64; + ctx->Const.MaxComputeWorkGroupInvocations = 1024; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits = 16; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */ + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */ switch (ctx->Const.GLSLVersion) { case 100: @@ -221,7 +232,7 @@ load_text_file(void *ctx, const char *file_name) if (bytes < size - total_read) { free(text); text = NULL; - break; + goto error; } if (bytes == 0) { @@ -232,6 +243,7 @@ load_text_file(void *ctx, const char *file_name) } while (total_read < size); text[total_read] = '\0'; +error:; } fclose(fp); @@ -360,6 +372,8 @@ main(int argc, char **argv) shader->Type = GL_GEOMETRY_SHADER; else if (strncmp(".frag", ext, 5) == 0) shader->Type = GL_FRAGMENT_SHADER; + else if (strncmp(".comp", ext, 5) == 0) + shader->Type = GL_COMPUTE_SHADER; else usage_fail(argv[0]); shader->Stage = _mesa_shader_enum_to_shader_stage(shader->Type); diff --git a/mesalib/src/glsl/opt_algebraic.cpp b/mesalib/src/glsl/opt_algebraic.cpp index d1f6435f4..1b4d31936 100644 --- a/mesalib/src/glsl/opt_algebraic.cpp +++ b/mesalib/src/glsl/opt_algebraic.cpp @@ -218,6 +218,11 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) this->mem_ctx = ralloc_parent(ir); switch (ir->operation) { + case ir_unop_bit_not: + if (op_expr[0] && op_expr[0]->operation == ir_unop_bit_not) + return op_expr[0]->operands[0]; + break; + case ir_unop_abs: if (op_expr[0] == NULL) break; @@ -240,6 +245,42 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) } break; + case ir_unop_exp: + if (op_expr[0] == NULL) + break; + + if (op_expr[0]->operation == ir_unop_log) { + return op_expr[0]->operands[0]; + } + break; + + case ir_unop_log: + if (op_expr[0] == NULL) + break; + + if (op_expr[0]->operation == ir_unop_exp) { + return op_expr[0]->operands[0]; + } + break; + + case ir_unop_exp2: + if (op_expr[0] == NULL) + break; + + if (op_expr[0]->operation == ir_unop_log2) { + return op_expr[0]->operands[0]; + } + break; + + case ir_unop_log2: + if (op_expr[0] == NULL) + break; + + if (op_expr[0]->operation == ir_unop_exp2) { + return op_expr[0]->operands[0]; + } + break; + case ir_unop_logic_not: { enum ir_expression_operation new_op = ir_unop_logic_not; @@ -479,6 +520,10 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) if (is_vec_one(op_const[0])) return op_const[0]; + /* x^1 == x */ + if (is_vec_one(op_const[1])) + return ir->operands[0]; + /* pow(2,x) == exp2(x) */ if (is_vec_two(op_const[0])) return expr(ir_unop_exp2, ir->operands[1]); @@ -502,15 +547,37 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) break; + case ir_triop_fma: + /* Operands are op0 * op1 + op2. */ + if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1])) { + return ir->operands[2]; + } else if (is_vec_zero(op_const[2])) { + return mul(ir->operands[0], ir->operands[1]); + } else if (is_vec_one(op_const[0])) { + return add(ir->operands[1], ir->operands[2]); + } else if (is_vec_one(op_const[1])) { + return add(ir->operands[0], ir->operands[2]); + } + break; + case ir_triop_lrp: /* Operands are (x, y, a). */ if (is_vec_zero(op_const[2])) { return ir->operands[0]; } else if (is_vec_one(op_const[2])) { return ir->operands[1]; + } else if (ir->operands[0]->equals(ir->operands[1])) { + return ir->operands[0]; } break; + case ir_triop_csel: + if (is_vec_one(op_const[0])) + return ir->operands[1]; + if (is_vec_zero(op_const[0])) + return ir->operands[2]; + break; + default: break; } diff --git a/mesalib/src/glsl/opt_vectorize.cpp b/mesalib/src/glsl/opt_vectorize.cpp index 9ca811a86..8ee81f1a3 100644 --- a/mesalib/src/glsl/opt_vectorize.cpp +++ b/mesalib/src/glsl/opt_vectorize.cpp @@ -82,6 +82,8 @@ public: virtual ir_visitor_status visit_enter(ir_assignment *); virtual ir_visitor_status visit_enter(ir_swizzle *); + virtual ir_visitor_status visit_enter(ir_if *); + virtual ir_visitor_status visit_enter(ir_loop *); virtual ir_visitor_status visit_leave(ir_assignment *); @@ -104,9 +106,10 @@ public: * the nodes of the tree (expression float log2 (swiz z (var_ref v0))), * rewriting it into (expression vec3 log2 (swiz xyz (var_ref v0))). * - * The function modifies only ir_expressions and ir_swizzles. For expressions - * it sets a new type and swizzles any scalar dereferences into appropriately - * sized vector arguments. For example, if combining + * The function operates on ir_expressions (and its operands) and ir_swizzles. + * For expressions it sets a new type and swizzles any non-expression and non- + * swizzle scalar operands into appropriately sized vector arguments. For + * example, if combining * * (assign (x) (var_ref r1) (expression float + (swiz x (var_ref v0) (var_ref v1)))) * (assign (y) (var_ref r1) (expression float + (swiz y (var_ref v0) (var_ref v1)))) @@ -144,9 +147,10 @@ rewrite_swizzle(ir_instruction *ir, void *data) mask->num_components, 1); for (unsigned i = 0; i < 4; i++) { if (expr->operands[i]) { - ir_dereference *deref = expr->operands[i]->as_dereference(); - if (deref && deref->type->is_scalar()) { - expr->operands[i] = new(ir) ir_swizzle(deref, 0, 0, 0, 0, + ir_rvalue *rval = expr->operands[i]->as_rvalue(); + if (rval && rval->type->is_scalar() && + !rval->as_expression() && !rval->as_swizzle()) { + expr->operands[i] = new(ir) ir_swizzle(rval, 0, 0, 0, 0, mask->num_components); } } @@ -170,22 +174,31 @@ void ir_vectorize_visitor::try_vectorize() { if (this->last_assignment && this->channels > 1) { - ir_swizzle_mask mask = {0, 1, 2, 3, channels, 0}; - - visit_tree(this->last_assignment->rhs, rewrite_swizzle, &mask); + ir_swizzle_mask mask = {0, 0, 0, 0, channels, 0}; this->last_assignment->write_mask = 0; - for (unsigned i = 0; i < 4; i++) { + for (unsigned i = 0, j = 0; i < 4; i++) { if (this->assignment[i]) { this->last_assignment->write_mask |= 1 << i; if (this->assignment[i] != this->last_assignment) { this->assignment[i]->remove(); } + + switch (j) { + case 0: mask.x = i; break; + case 1: mask.y = i; break; + case 2: mask.z = i; break; + case 3: mask.w = i; break; + } + + j++; } } + visit_tree(this->last_assignment->rhs, rewrite_swizzle, &mask); + this->progress = true; } clear(); @@ -276,6 +289,39 @@ ir_vectorize_visitor::visit_enter(ir_swizzle *ir) return visit_continue; } +/* Since there is no statement to visit between the "then" and "else" + * instructions try to vectorize before, in between, and after them to avoid + * combining statements from different basic blocks. + */ +ir_visitor_status +ir_vectorize_visitor::visit_enter(ir_if *ir) +{ + try_vectorize(); + + visit_list_elements(this, &ir->then_instructions); + try_vectorize(); + + visit_list_elements(this, &ir->else_instructions); + try_vectorize(); + + return visit_continue_with_parent; +} + +/* Since there is no statement to visit between the instructions in the body of + * the loop and the instructions after it try to vectorize before and after the + * body to avoid combining statements from different basic blocks. + */ +ir_visitor_status +ir_vectorize_visitor::visit_enter(ir_loop *ir) +{ + try_vectorize(); + + visit_list_elements(this, &ir->body_instructions); + try_vectorize(); + + return visit_continue_with_parent; +} + /** * Upon leaving an ir_assignment, save a pointer to it in ::assignment[] if * the swizzle mask(s) found were appropriate. Also save a pointer in diff --git a/mesalib/src/glsl/standalone_scaffolding.cpp b/mesalib/src/glsl/standalone_scaffolding.cpp index 91794719b..6c25010b7 100644 --- a/mesalib/src/glsl/standalone_scaffolding.cpp +++ b/mesalib/src/glsl/standalone_scaffolding.cpp @@ -91,6 +91,7 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->Extensions.dummy_false = false; ctx->Extensions.dummy_true = true; + ctx->Extensions.ARB_compute_shader = true; ctx->Extensions.ARB_conservative_depth = true; ctx->Extensions.ARB_draw_instanced = true; ctx->Extensions.ARB_ES2_compatibility = true; @@ -140,6 +141,17 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 32; ctx->Const.MaxDrawBuffers = 1; + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; + ctx->Const.MaxComputeWorkGroupSize[0] = 1024; + ctx->Const.MaxComputeWorkGroupSize[1] = 1024; + ctx->Const.MaxComputeWorkGroupSize[2] = 64; + ctx->Const.MaxComputeWorkGroupInvocations = 1024; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits = 16; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024; + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */ + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */ /* Set up default shader compiler options. */ struct gl_shader_compiler_options options; diff --git a/mesalib/src/glsl/standalone_scaffolding.h b/mesalib/src/glsl/standalone_scaffolding.h index 327fef2df..df783afdb 100644 --- a/mesalib/src/glsl/standalone_scaffolding.h +++ b/mesalib/src/glsl/standalone_scaffolding.h @@ -58,6 +58,8 @@ _mesa_shader_enum_to_shader_stage(GLenum v) return MESA_SHADER_FRAGMENT; case GL_GEOMETRY_SHADER: return MESA_SHADER_GEOMETRY; + case GL_COMPUTE_SHADER: + return MESA_SHADER_COMPUTE; default: assert(!"bad value in _mesa_shader_enum_to_shader_stage()"); return MESA_SHADER_VERTEX; diff --git a/mesalib/src/loader/Makefile.am b/mesalib/src/loader/Makefile.am index 371dd575c..bddf7ac35 100644 --- a/mesalib/src/loader/Makefile.am +++ b/mesalib/src/loader/Makefile.am @@ -29,9 +29,6 @@ libloader_la_CPPFLAGS = \ $(VISIBILITY_CFLAGS) \ $(LIBUDEV_CFLAGS) -libloader_la_LIBADD = \ - $(LIBUDEV_LIBS) - if !HAVE_LIBDRM libloader_la_CPPFLAGS += \ -D__NOT_HAVE_DRM_H @@ -39,7 +36,7 @@ else libloader_la_CPPFLAGS += \ $(LIBDRM_CFLAGS) -libloader_la_LIBADD += \ +libloader_la_LIBADD = \ $(LIBDRM_LIBS) endif diff --git a/mesalib/src/loader/loader.c b/mesalib/src/loader/loader.c index a5bd7692e..811f8a257 100644 --- a/mesalib/src/loader/loader.c +++ b/mesalib/src/loader/loader.c @@ -67,6 +67,10 @@ #include #include #include +#ifdef HAVE_LIBUDEV +#include +#include +#endif #include "loader.h" #ifndef __NOT_HAVE_DRM_H @@ -78,12 +82,11 @@ static void default_logger(int level, const char *fmt, ...) { - if (level >= _LOADER_WARNING) { + if (level <= _LOADER_WARNING) { va_list args; va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); - fprintf(stderr, "\n"); } } @@ -92,21 +95,62 @@ static void (*log_)(int level, const char *fmt, ...) = default_logger; #ifdef HAVE_LIBUDEV #include +static void *udev_handle = NULL; + +static void * +udev_dlopen_handle(void) +{ + if (!udev_handle) { + udev_handle = dlopen("libudev.so.1", RTLD_LOCAL | RTLD_LAZY); + + if (!udev_handle) { + /* libudev.so.1 changed the return types of the two unref functions + * from voids to pointers. We don't use those return values, and the + * only ABI I've heard that cares about this kind of change (calling + * a function with a void * return that actually only returns void) + * might be ia64. + */ + udev_handle = dlopen("libudev.so.0", RTLD_LOCAL | RTLD_LAZY); + + if (!udev_handle) { + log_(_LOADER_FATAL, "Couldn't dlopen libudev.so.1 or libudev.so.0, " + "driver detection may be broken.\n"); + } + } + } + + return udev_handle; +} + +static void * +asserted_dlsym(void *dlopen_handle, const char *name) +{ + void *result = dlsym(dlopen_handle, name); + assert(result); + return result; +} + +#define UDEV_SYMBOL(ret, name, args) \ + ret (*name) args = asserted_dlsym(udev_dlopen_handle(), #name); + + static inline struct udev_device * udev_device_new_from_fd(struct udev *udev, int fd) { struct udev_device *device; struct stat buf; + UDEV_SYMBOL(struct udev_device *, udev_device_new_from_devnum, + (struct udev *udev, char type, dev_t devnum)); if (fstat(fd, &buf) < 0) { - log_(_LOADER_WARNING, "MESA-LOADER: failed to stat fd %d", fd); + log_(_LOADER_WARNING, "MESA-LOADER: failed to stat fd %d\n", fd); return NULL; } device = udev_device_new_from_devnum(udev, 'c', buf.st_rdev); if (device == NULL) { log_(_LOADER_WARNING, - "MESA-LOADER: could not create udev device for fd %d", fd); + "MESA-LOADER: could not create udev device for fd %d\n", fd); return NULL; } @@ -119,6 +163,14 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) struct udev *udev = NULL; struct udev_device *device = NULL, *parent; const char *pci_id; + UDEV_SYMBOL(struct udev *, udev_new, (void)); + UDEV_SYMBOL(struct udev_device *, udev_device_get_parent, + (struct udev_device *)); + UDEV_SYMBOL(const char *, udev_device_get_property_value, + (struct udev_device *, const char *)); + UDEV_SYMBOL(struct udev_device *, udev_device_unref, + (struct udev_device *)); + UDEV_SYMBOL(struct udev *, udev_unref, (struct udev *)); *chip_id = -1; @@ -129,14 +181,14 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) parent = udev_device_get_parent(device); if (parent == NULL) { - log_(_LOADER_WARNING, "MESA-LOADER: could not get parent device"); + log_(_LOADER_WARNING, "MESA-LOADER: could not get parent device\n"); goto out; } pci_id = udev_device_get_property_value(parent, "PCI_ID"); if (pci_id == NULL || sscanf(pci_id, "%x:%x", vendor_id, chip_id) != 2) { - log_(_LOADER_WARNING, "MESA-LOADER: malformed or no PCI ID"); + log_(_LOADER_WARNING, "MESA-LOADER: malformed or no PCI ID\n"); *chip_id = -1; goto out; } @@ -166,11 +218,11 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) version = drmGetVersion(fd); if (!version) { - log_(_LOADER_WARNING, "MESA-LOADER: invalid drm fd"); + log_(_LOADER_WARNING, "MESA-LOADER: invalid drm fd\n"); return FALSE; } if (!version->name) { - log_(_LOADER_WARNING, "MESA-LOADER: unable to determine the driver name"); + log_(_LOADER_WARNING, "MESA-LOADER: unable to determine the driver name\n"); drmFreeVersion(version); return FALSE; } @@ -186,7 +238,7 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) gp.value = chip_id; ret = drmCommandWriteRead(fd, DRM_I915_GETPARAM, &gp, sizeof(gp)); if (ret) { - log_(_LOADER_WARNING, "MESA-LOADER: failed to get param for i915"); + log_(_LOADER_WARNING, "MESA-LOADER: failed to get param for i915\n"); *chip_id = -1; } } @@ -201,7 +253,7 @@ loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id) info.value = (unsigned long) chip_id; ret = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info)); if (ret) { - log_(_LOADER_WARNING, "MESA-LOADER: failed to get info for radeon"); + log_(_LOADER_WARNING, "MESA-LOADER: failed to get info for radeon\n"); *chip_id = -1; } } @@ -240,6 +292,12 @@ loader_get_device_name_for_fd(int fd) struct udev *udev; struct udev_device *device; const char *const_device_name; + UDEV_SYMBOL(struct udev *, udev_new, (void)); + UDEV_SYMBOL(const char *, udev_device_get_devnode, + (struct udev_device *)); + UDEV_SYMBOL(struct udev_device *, udev_device_unref, + (struct udev_device *)); + UDEV_SYMBOL(struct udev *, udev_unref, (struct udev *)); udev = udev_new(); device = udev_device_new_from_fd(udev, fd); @@ -274,12 +332,12 @@ loader_get_driver_for_fd(int fd, unsigned driver_types) drmVersionPtr version = drmGetVersion(fd); if (!version) { - log_(_LOADER_WARNING, "failed to get driver name for fd %d", fd); + log_(_LOADER_WARNING, "failed to get driver name for fd %d\n", fd); return NULL; } driver = strndup(version->name, version->name_len); - log_(_LOADER_INFO, "using driver %s for %d", driver, fd); + log_(_LOADER_INFO, "using driver %s for %d\n", driver, fd); drmFreeVersion(version); #endif @@ -307,8 +365,8 @@ loader_get_driver_for_fd(int fd, unsigned driver_types) } out: - log_(driver ? _LOADER_INFO : _LOADER_WARNING, - "pci id for fd %d: %04x:%04x, driver %s", + log_(driver ? _LOADER_DEBUG : _LOADER_WARNING, + "pci id for fd %d: %04x:%04x, driver %s\n", fd, vendor_id, chip_id, driver); return driver; } diff --git a/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml b/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml new file mode 100644 index 000000000..1db373e99 --- /dev/null +++ b/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml b/mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml new file mode 100644 index 000000000..f915b48d3 --- /dev/null +++ b/mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/mesalib/src/mapi/glapi/gen/Makefile.am b/mesalib/src/mapi/glapi/gen/Makefile.am index 7354725df..9e6fe5261 100644 --- a/mesalib/src/mapi/glapi/gen/Makefile.am +++ b/mesalib/src/mapi/glapi/gen/Makefile.am @@ -91,6 +91,7 @@ API_XML = \ ARB_base_instance.xml \ ARB_blend_func_extended.xml \ ARB_color_buffer_float.xml \ + ARB_compute_shader.xml \ ARB_copy_buffer.xml \ ARB_debug_output.xml \ ARB_depth_buffer_float.xml \ diff --git a/mesalib/src/mapi/glapi/gen/gl_API.xml b/mesalib/src/mapi/glapi/gen/gl_API.xml index 193ee370c..4ef754d5c 100644 --- a/mesalib/src/mapi/glapi/gen/gl_API.xml +++ b/mesalib/src/mapi/glapi/gen/gl_API.xml @@ -8243,6 +8243,8 @@ + + @@ -8466,7 +8468,9 @@ - + + + diff --git a/mesalib/src/mapi/glapi/gen/gl_genexec.py b/mesalib/src/mapi/glapi/gen/gl_genexec.py index b7ac16b06..1765a51ad 100644 --- a/mesalib/src/mapi/glapi/gen/gl_genexec.py +++ b/mesalib/src/mapi/glapi/gen/gl_genexec.py @@ -51,12 +51,14 @@ header = """/** #include "main/atifragshader.h" #include "main/attrib.h" #include "main/blend.h" +#include "main/blit.h" #include "main/bufferobj.h" #include "main/arrayobj.h" #include "main/buffers.h" #include "main/clear.h" #include "main/clip.h" #include "main/colortab.h" +#include "main/compute.h" #include "main/condrender.h" #include "main/context.h" #include "main/convolve.h" @@ -74,6 +76,7 @@ header = """/** #include "main/fog.h" #include "main/fbobject.h" #include "main/framebuffer.h" +#include "main/genmipmap.h" #include "main/hint.h" #include "main/histogram.h" #include "main/imports.h" diff --git a/mesalib/src/mesa/Makefile.am b/mesalib/src/mesa/Makefile.am index cb038a5eb..ffe65990d 100644 --- a/mesalib/src/mesa/Makefile.am +++ b/mesalib/src/mesa/Makefile.am @@ -95,6 +95,12 @@ AM_CPPFLAGS = $(DEFINES) $(INCLUDE_DIRS) AM_CFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CFLAGS) AM_CXXFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CXXFLAGS) +ARCH_LIBS = + +if SSE41_SUPPORTED +ARCH_LIBS += libmesa_sse41.la +endif + MESA_ASM_FILES_FOR_ARCH = if HAVE_X86_ASM @@ -103,12 +109,6 @@ noinst_PROGRAMS = gen_matypes gen_matypes_SOURCES = x86/gen_matypes.c BUILT_SOURCES += matypes.h -ARCH_LIBS = - -if SSE41_SUPPORTED -ARCH_LIBS += libmesa_sse41.la -endif - if HAVE_X86_64_ASM MESA_ASM_FILES_FOR_ARCH += $(X86_64_FILES) AM_CPPFLAGS += -I$(builddir)/x86-64 -I$(srcdir)/x86-64 diff --git a/mesalib/src/mesa/Makefile.sources b/mesalib/src/mesa/Makefile.sources index d14823db9..bd02d3ee8 100644 --- a/mesalib/src/mesa/Makefile.sources +++ b/mesalib/src/mesa/Makefile.sources @@ -18,11 +18,13 @@ MAIN_FILES = \ $(SRCDIR)main/attrib.c \ $(SRCDIR)main/arrayobj.c \ $(SRCDIR)main/blend.c \ + $(SRCDIR)main/blit.c \ $(SRCDIR)main/bufferobj.c \ $(SRCDIR)main/buffers.c \ $(SRCDIR)main/clear.c \ $(SRCDIR)main/clip.c \ $(SRCDIR)main/colortab.c \ + $(SRCDIR)main/compute.c \ $(SRCDIR)main/condrender.c \ $(SRCDIR)main/context.c \ $(SRCDIR)main/convolve.c \ @@ -48,6 +50,7 @@ MAIN_FILES = \ $(SRCDIR)main/format_unpack.c \ $(SRCDIR)main/framebuffer.c \ $(SRCDIR)main/get.c \ + $(SRCDIR)main/genmipmap.c \ $(SRCDIR)main/getstring.c \ $(SRCDIR)main/glformats.c \ $(SRCDIR)main/hash.c \ diff --git a/mesalib/src/mesa/SConscript b/mesalib/src/mesa/SConscript index 77e2aaa7e..b52bbdc23 100644 --- a/mesalib/src/mesa/SConscript +++ b/mesalib/src/mesa/SConscript @@ -46,11 +46,13 @@ main_sources = [ 'main/attrib.c', 'main/arrayobj.c', 'main/blend.c', + 'main/blit.c', 'main/bufferobj.c', 'main/buffers.c', 'main/clear.c', 'main/clip.c', 'main/colortab.c', + 'main/compute.c', 'main/condrender.c', 'main/context.c', 'main/convolve.c', @@ -77,6 +79,7 @@ main_sources = [ 'main/format_pack.c', 'main/format_unpack.c', 'main/framebuffer.c', + 'main/genmipmap.c', 'main/getstring.c', 'main/glformats.c', 'main/hash.c', diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.c b/mesalib/src/mesa/drivers/common/driverfuncs.c index 6d56838cd..6ece5d80e 100644 --- a/mesalib/src/mesa/drivers/common/driverfuncs.c +++ b/mesalib/src/mesa/drivers/common/driverfuncs.c @@ -180,8 +180,8 @@ _mesa_init_driver_functions(struct dd_function_table *driver) _mesa_init_texture_barrier_functions(driver); /* APPLE_vertex_array_object */ - driver->NewArrayObject = _mesa_new_array_object; - driver->DeleteArrayObject = _mesa_delete_array_object; + driver->NewArrayObject = _mesa_new_vao; + driver->DeleteArrayObject = _mesa_delete_vao; driver->BindArrayObject = NULL; _mesa_init_shader_object_functions(driver); diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index 2443a7723..f12bcaab1 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -164,7 +164,7 @@ struct save_state GLuint EnvMode; /* unit[0] only */ /** MESA_META_VERTEX */ - struct gl_array_object *ArrayObj; + struct gl_vertex_array_object *VAO; struct gl_buffer_object *ArrayBufferObj; /** MESA_META_VIEWPORT */ @@ -221,7 +221,7 @@ struct temp_texture */ struct blit_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; GLuint DepthFP; GLuint ShaderProg; @@ -235,7 +235,7 @@ struct blit_state */ struct clear_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; GLuint ShaderProg; GLint ColorLocation; @@ -252,7 +252,7 @@ struct clear_state */ struct copypix_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; }; @@ -262,7 +262,7 @@ struct copypix_state */ struct drawpix_state { - GLuint ArrayObj; + GLuint VAO; GLuint StencilFP; /**< Fragment program for drawing stencil images */ GLuint DepthFP; /**< Fragment program for drawing depth images */ @@ -274,7 +274,7 @@ struct drawpix_state */ struct bitmap_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; struct temp_texture Tex; /**< separate texture from other meta ops */ }; @@ -295,7 +295,7 @@ struct glsl_sampler { */ struct gen_mipmap_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; GLuint FBO; GLuint Sampler; @@ -313,7 +313,7 @@ struct gen_mipmap_state */ struct decompress_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO, FBO, RBO, Sampler; GLint Width, Height; }; @@ -323,7 +323,7 @@ struct decompress_state */ struct drawtex_state { - GLuint ArrayObj; + GLuint VAO; GLuint VBO; }; @@ -350,11 +350,12 @@ struct gl_meta_state struct drawtex_state DrawTex; /**< For _mesa_meta_DrawTex() */ }; -static void meta_glsl_blit_cleanup(struct gl_context *ctx, struct blit_state *blit); -static void cleanup_temp_texture(struct gl_context *ctx, struct temp_texture *tex); -static void meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state *clear); -static void meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, - struct gen_mipmap_state *mipmap); +static void meta_glsl_blit_cleanup(struct blit_state *blit); +static void cleanup_temp_texture(struct temp_texture *tex); +static void meta_glsl_clear_cleanup(struct clear_state *clear); +static void meta_glsl_generate_mipmap_cleanup(struct gen_mipmap_state *mipmap); +static void meta_decompress_cleanup(struct decompress_state *decompress); +static void meta_drawpix_cleanup(struct drawpix_state *drawpix); static GLuint compile_shader_with_debug(struct gl_context *ctx, GLenum target, const GLcharARB *source) @@ -445,10 +446,12 @@ _mesa_meta_free(struct gl_context *ctx) { GET_CURRENT_CONTEXT(old_context); _mesa_make_current(ctx, NULL, NULL); - meta_glsl_blit_cleanup(ctx, &ctx->Meta->Blit); - meta_glsl_clear_cleanup(ctx, &ctx->Meta->Clear); - meta_glsl_generate_mipmap_cleanup(ctx, &ctx->Meta->Mipmap); - cleanup_temp_texture(ctx, &ctx->Meta->TempTex); + meta_glsl_blit_cleanup(&ctx->Meta->Blit); + meta_glsl_clear_cleanup(&ctx->Meta->Clear); + meta_glsl_generate_mipmap_cleanup(&ctx->Meta->Mipmap); + cleanup_temp_texture(&ctx->Meta->TempTex); + meta_decompress_cleanup(&ctx->Meta->Decompress); + meta_drawpix_cleanup(&ctx->Meta->DrawPix); if (old_context) _mesa_make_current(old_context, old_context->WinSysDrawBuffer, old_context->WinSysReadBuffer); else @@ -726,8 +729,8 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) if (state & MESA_META_VERTEX) { /* save vertex array object state */ - _mesa_reference_array_object(ctx, &save->ArrayObj, - ctx->Array.ArrayObj); + _mesa_reference_vao(ctx, &save->VAO, + ctx->Array.VAO); _mesa_reference_buffer_object(ctx, &save->ArrayBufferObj, ctx->Array.ArrayBufferObj); /* set some default state? */ @@ -1092,8 +1095,8 @@ _mesa_meta_end(struct gl_context *ctx) _mesa_reference_buffer_object(ctx, &save->ArrayBufferObj, NULL); /* restore vertex array object */ - _mesa_BindVertexArray(save->ArrayObj->Name); - _mesa_reference_array_object(ctx, &save->ArrayObj, NULL); + _mesa_BindVertexArray(save->VAO->Name); + _mesa_reference_vao(ctx, &save->VAO, NULL); } if (state & MESA_META_VIEWPORT) { @@ -1208,7 +1211,7 @@ init_temp_texture(struct gl_context *ctx, struct temp_texture *tex) } static void -cleanup_temp_texture(struct gl_context *ctx, struct temp_texture *tex) +cleanup_temp_texture(struct temp_texture *tex) { if (!tex->TexObj) return; @@ -1453,20 +1456,19 @@ init_blit_depth_pixels(struct gl_context *ctx) } static void -setup_ff_blit_framebuffer(struct gl_context *ctx, - struct blit_state *blit) +setup_ff_blit_framebuffer(struct blit_state *blit) { struct vertex { GLfloat x, y, s, t; }; struct vertex verts[4]; - if (blit->ArrayObj == 0) { + if (blit->VAO == 0) { /* one-time setup */ /* create vertex array object */ - _mesa_GenVertexArrays(1, &blit->ArrayObj); - _mesa_BindVertexArray(blit->ArrayObj); + _mesa_GenVertexArrays(1, &blit->VAO); + _mesa_BindVertexArray(blit->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &blit->VBO); @@ -1508,11 +1510,11 @@ setup_glsl_blit_framebuffer(struct gl_context *ctx, assert(_mesa_is_desktop_gl(ctx) || texture_2d); /* Check if already initialized */ - if (blit->ArrayObj == 0) { + if (blit->VAO == 0) { /* create vertex array object */ - _mesa_GenVertexArrays(1, &blit->ArrayObj); - _mesa_BindVertexArray(blit->ArrayObj); + _mesa_GenVertexArrays(1, &blit->VAO); + _mesa_BindVertexArray(blit->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &blit->VBO); @@ -1682,10 +1684,10 @@ blitframebuffer_texture(struct gl_context *ctx, _mesa_UseProgram(blit->RectShaderProg); } else { - setup_ff_blit_framebuffer(ctx, &ctx->Meta->Blit); + setup_ff_blit_framebuffer(&ctx->Meta->Blit); } - _mesa_BindVertexArray(blit->ArrayObj); + _mesa_BindVertexArray(blit->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, blit->VBO); _mesa_GenSamplers(1, &sampler); @@ -1867,10 +1869,10 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx, _mesa_UseProgram(blit->RectShaderProg); } else { - setup_ff_blit_framebuffer(ctx, blit); + setup_ff_blit_framebuffer(blit); } - _mesa_BindVertexArray(blit->ArrayObj); + _mesa_BindVertexArray(blit->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, blit->VBO); /* Continue with "normal" approach which involves copying the src rect @@ -1998,11 +2000,11 @@ _mesa_meta_BlitFramebuffer(struct gl_context *ctx, } static void -meta_glsl_blit_cleanup(struct gl_context *ctx, struct blit_state *blit) +meta_glsl_blit_cleanup(struct blit_state *blit) { - if (blit->ArrayObj) { - _mesa_DeleteVertexArrays(1, &blit->ArrayObj); - blit->ArrayObj = 0; + if (blit->VAO) { + _mesa_DeleteVertexArrays(1, &blit->VAO); + blit->VAO = 0; _mesa_DeleteBuffers(1, &blit->VBO); blit->VBO = 0; } @@ -2047,12 +2049,12 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers) _mesa_meta_begin(ctx, metaSave); - if (clear->ArrayObj == 0) { + if (clear->VAO == 0) { /* one-time setup */ /* create vertex array object */ - _mesa_GenVertexArrays(1, &clear->ArrayObj); - _mesa_BindVertexArray(clear->ArrayObj); + _mesa_GenVertexArrays(1, &clear->VAO); + _mesa_BindVertexArray(clear->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &clear->VBO); @@ -2065,7 +2067,7 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers) _mesa_EnableClientState(GL_COLOR_ARRAY); } else { - _mesa_BindVertexArray(clear->ArrayObj); + _mesa_BindVertexArray(clear->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, clear->VBO); } @@ -2180,12 +2182,12 @@ meta_glsl_clear_init(struct gl_context *ctx, struct clear_state *clear) GLuint vs, gs = 0, fs; bool has_integer_textures; - if (clear->ArrayObj != 0) + if (clear->VAO != 0) return; /* create vertex array object */ - _mesa_GenVertexArrays(1, &clear->ArrayObj); - _mesa_BindVertexArray(clear->ArrayObj); + _mesa_GenVertexArrays(1, &clear->VAO); + _mesa_BindVertexArray(clear->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &clear->VBO); @@ -2287,12 +2289,12 @@ meta_glsl_clear_init(struct gl_context *ctx, struct clear_state *clear) } static void -meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state *clear) +meta_glsl_clear_cleanup(struct clear_state *clear) { - if (clear->ArrayObj == 0) + if (clear->VAO == 0) return; - _mesa_DeleteVertexArrays(1, &clear->ArrayObj); - clear->ArrayObj = 0; + _mesa_DeleteVertexArrays(1, &clear->VAO); + clear->VAO = 0; _mesa_DeleteBuffers(1, &clear->VBO); clear->VBO = 0; _mesa_DeleteObjectARB(clear->ShaderProg); @@ -2357,7 +2359,7 @@ _mesa_meta_glsl_Clear(struct gl_context *ctx, GLbitfield buffers) ctx->Color.ClearColor.f); } - _mesa_BindVertexArray(clear->ArrayObj); + _mesa_BindVertexArray(clear->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, clear->VBO); /* GL_COLOR_BUFFER_BIT */ @@ -2470,12 +2472,12 @@ _mesa_meta_CopyPixels(struct gl_context *ctx, GLint srcX, GLint srcY, MESA_META_VERTEX | MESA_META_VIEWPORT)); - if (copypix->ArrayObj == 0) { + if (copypix->VAO == 0) { /* one-time setup */ /* create vertex array object */ - _mesa_GenVertexArrays(1, ©pix->ArrayObj); - _mesa_BindVertexArray(copypix->ArrayObj); + _mesa_GenVertexArrays(1, ©pix->VAO); + _mesa_BindVertexArray(copypix->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, ©pix->VBO); @@ -2490,7 +2492,7 @@ _mesa_meta_CopyPixels(struct gl_context *ctx, GLint srcX, GLint srcY, _mesa_EnableClientState(GL_TEXTURE_COORD_ARRAY); } else { - _mesa_BindVertexArray(copypix->ArrayObj); + _mesa_BindVertexArray(copypix->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, copypix->VBO); } @@ -2543,7 +2545,24 @@ _mesa_meta_CopyPixels(struct gl_context *ctx, GLint srcX, GLint srcY, _mesa_meta_end(ctx); } +static void +meta_drawpix_cleanup(struct drawpix_state *drawpix) +{ + if (drawpix->VAO != 0) { + _mesa_DeleteVertexArrays(1, &drawpix->VAO); + drawpix->VAO = 0; + } + if (drawpix->StencilFP != 0) { + _mesa_DeleteProgramsARB(1, &drawpix->StencilFP); + drawpix->StencilFP = 0; + } + + if (drawpix->DepthFP != 0) { + _mesa_DeleteProgramsARB(1, &drawpix->DepthFP); + drawpix->DepthFP = 0; + } +} /** * When the glDrawPixels() image size is greater than the max rectangle @@ -2825,11 +2844,11 @@ _mesa_meta_DrawPixels(struct gl_context *ctx, verts[3].t = tex->Ttop; } - if (drawpix->ArrayObj == 0) { + if (drawpix->VAO == 0) { /* one-time setup: create vertex array object */ - _mesa_GenVertexArrays(1, &drawpix->ArrayObj); + _mesa_GenVertexArrays(1, &drawpix->VAO); } - _mesa_BindVertexArray(drawpix->ArrayObj); + _mesa_BindVertexArray(drawpix->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &vbo); @@ -3001,12 +3020,12 @@ _mesa_meta_Bitmap(struct gl_context *ctx, MESA_META_VERTEX | MESA_META_VIEWPORT)); - if (bitmap->ArrayObj == 0) { + if (bitmap->VAO == 0) { /* one-time setup */ /* create vertex array object */ - _mesa_GenVertexArraysAPPLE(1, &bitmap->ArrayObj); - _mesa_BindVertexArrayAPPLE(bitmap->ArrayObj); + _mesa_GenVertexArrays(1, &bitmap->VAO); + _mesa_BindVertexArray(bitmap->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &bitmap->VBO); @@ -3023,7 +3042,7 @@ _mesa_meta_Bitmap(struct gl_context *ctx, _mesa_EnableClientState(GL_COLOR_ARRAY); } else { - _mesa_BindVertexArray(bitmap->ArrayObj); + _mesa_BindVertexArray(bitmap->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, bitmap->VBO); } @@ -3361,18 +3380,17 @@ setup_texture_coords(GLenum faceTarget, static void -setup_ff_generate_mipmap(struct gl_context *ctx, - struct gen_mipmap_state *mipmap) +setup_ff_generate_mipmap(struct gen_mipmap_state *mipmap) { struct vertex { GLfloat x, y, tex[3]; }; - if (mipmap->ArrayObj == 0) { + if (mipmap->VAO == 0) { /* one-time setup */ /* create vertex array object */ - _mesa_GenVertexArraysAPPLE(1, &mipmap->ArrayObj); - _mesa_BindVertexArrayAPPLE(mipmap->ArrayObj); + _mesa_GenVertexArrays(1, &mipmap->VAO); + _mesa_BindVertexArray(mipmap->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &mipmap->VBO); @@ -3451,11 +3469,11 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, void *mem_ctx; /* Check if already initialized */ - if (mipmap->ArrayObj == 0) { + if (mipmap->VAO == 0) { /* create vertex array object */ - _mesa_GenVertexArrays(1, &mipmap->ArrayObj); - _mesa_BindVertexArray(mipmap->ArrayObj); + _mesa_GenVertexArrays(1, &mipmap->VAO); + _mesa_BindVertexArray(mipmap->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &mipmap->VBO); @@ -3552,13 +3570,12 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, static void -meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, - struct gen_mipmap_state *mipmap) +meta_glsl_generate_mipmap_cleanup(struct gen_mipmap_state *mipmap) { - if (mipmap->ArrayObj == 0) + if (mipmap->VAO == 0) return; - _mesa_DeleteVertexArrays(1, &mipmap->ArrayObj); - mipmap->ArrayObj = 0; + _mesa_DeleteVertexArrays(1, &mipmap->VAO); + mipmap->VAO = 0; _mesa_DeleteBuffers(1, &mipmap->VBO); mipmap->VBO = 0; @@ -3630,11 +3647,11 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target, _mesa_UseProgram(mipmap->ShaderProg); } else { - setup_ff_generate_mipmap(ctx, mipmap); + setup_ff_generate_mipmap(mipmap); _mesa_set_enable(ctx, target, GL_TRUE); } - _mesa_BindVertexArray(mipmap->ArrayObj); + _mesa_BindVertexArray(mipmap->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, mipmap->VBO); samplerSave = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler ? @@ -3814,7 +3831,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target, * ReadPixels() and passed to Tex[Sub]Image(). */ static GLenum -get_temp_image_type(struct gl_context *ctx, gl_format format) +get_temp_image_type(struct gl_context *ctx, mesa_format format) { GLenum baseFormat; @@ -3945,6 +3962,25 @@ _mesa_meta_CopyTexSubImage(struct gl_context *ctx, GLuint dims, } +static void +meta_decompress_cleanup(struct decompress_state *decompress) +{ + if (decompress->FBO != 0) { + _mesa_DeleteFramebuffers(1, &decompress->FBO); + _mesa_DeleteRenderbuffers(1, &decompress->RBO); + } + + if (decompress->VAO != 0) { + _mesa_DeleteVertexArrays(1, &decompress->VAO); + _mesa_DeleteBuffers(1, &decompress->VBO); + } + + if (decompress->Sampler != 0) + _mesa_DeleteSamplers(1, &decompress->Sampler); + + memset(decompress, 0, sizeof(*decompress)); +} + /** * Decompress a texture image by drawing a quad with the compressed * texture and reading the pixels out of the color buffer. @@ -3981,11 +4017,28 @@ decompress_texture_image(struct gl_context *ctx, target == GL_TEXTURE_2D_ARRAY); } - if (target == GL_TEXTURE_CUBE_MAP) { + switch (target) { + case GL_TEXTURE_1D: + case GL_TEXTURE_1D_ARRAY: + assert(!"No compressed 1D textures."); + return; + + case GL_TEXTURE_3D: + assert(!"No compressed 3D textures."); + return; + + case GL_TEXTURE_2D_ARRAY: + case GL_TEXTURE_CUBE_MAP_ARRAY: + /* These targets are just broken currently. */ + return; + + case GL_TEXTURE_CUBE_MAP: faceTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + texImage->Face; - } - else { + break; + + default: faceTarget = target; + break; } /* save fbo bindings (not saved by _mesa_meta_begin()) */ @@ -4023,10 +4076,10 @@ decompress_texture_image(struct gl_context *ctx, } /* setup VBO data */ - if (decompress->ArrayObj == 0) { + if (decompress->VAO == 0) { /* create vertex array object */ - _mesa_GenVertexArrays(1, &decompress->ArrayObj); - _mesa_BindVertexArray(decompress->ArrayObj); + _mesa_GenVertexArrays(1, &decompress->VAO); + _mesa_BindVertexArray(decompress->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &decompress->VBO); @@ -4041,7 +4094,7 @@ decompress_texture_image(struct gl_context *ctx, _mesa_EnableClientState(GL_TEXTURE_COORD_ARRAY); } else { - _mesa_BindVertexArray(decompress->ArrayObj); + _mesa_BindVertexArray(decompress->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, decompress->VBO); } @@ -4068,18 +4121,17 @@ decompress_texture_image(struct gl_context *ctx, verts[3].tex); /* setup vertex positions */ - verts[0].x = 0.0F; - verts[0].y = 0.0F; - verts[1].x = width; - verts[1].y = 0.0F; - verts[2].x = width; - verts[2].y = height; - verts[3].x = 0.0F; - verts[3].y = height; + verts[0].x = -1.0F; + verts[0].y = -1.0F; + verts[1].x = 1.0F; + verts[1].y = -1.0F; + verts[2].x = 1.0F; + verts[2].y = 1.0F; + verts[3].x = -1.0F; + verts[3].y = 1.0F; _mesa_MatrixMode(GL_PROJECTION); _mesa_LoadIdentity(); - _mesa_Ortho(0.0, width, 0.0, height, -1.0, 1.0); _mesa_set_viewport(ctx, 0, 0, 0, width, height); /* upload new vertex data */ @@ -4179,7 +4231,8 @@ _mesa_meta_GetTexImage(struct gl_context *ctx, * unsigned, normalized values. We could handle signed and unnormalized * with floating point renderbuffers... */ - if (_mesa_is_format_compressed(texImage->TexFormat) && + if (texImage->TexObject->Target != GL_TEXTURE_CUBE_MAP_ARRAY + && _mesa_is_format_compressed(texImage->TexFormat) && _mesa_get_format_datatype(texImage->TexFormat) == GL_UNSIGNED_NORMALIZED) { struct gl_texture_object *texObj = texImage->TexObject; @@ -4236,13 +4289,13 @@ _mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, MESA_META_VERTEX | MESA_META_VIEWPORT)); - if (drawtex->ArrayObj == 0) { + if (drawtex->VAO == 0) { /* one-time setup */ GLint active_texture; /* create vertex array object */ - _mesa_GenVertexArrays(1, &drawtex->ArrayObj); - _mesa_BindVertexArray(drawtex->ArrayObj); + _mesa_GenVertexArrays(1, &drawtex->VAO); + _mesa_BindVertexArray(drawtex->VAO); /* create vertex array buffer */ _mesa_GenBuffers(1, &drawtex->VBO); @@ -4266,7 +4319,7 @@ _mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, _mesa_ClientActiveTexture(GL_TEXTURE0 + active_texture); } else { - _mesa_BindVertexArray(drawtex->ArrayObj); + _mesa_BindVertexArray(drawtex->VAO); _mesa_BindBuffer(GL_ARRAY_BUFFER_ARB, drawtex->VBO); } diff --git a/mesalib/src/mesa/drivers/dri/common/dri_util.c b/mesalib/src/mesa/drivers/dri/common/dri_util.c index d64821112..83841def5 100644 --- a/mesalib/src/mesa/drivers/dri/common/dri_util.c +++ b/mesalib/src/mesa/drivers/dri/common/dri_util.c @@ -806,60 +806,60 @@ driUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv) } uint32_t -driGLFormatToImageFormat(gl_format format) +driGLFormatToImageFormat(mesa_format format) { switch (format) { - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: return __DRI_IMAGE_FORMAT_RGB565; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: return __DRI_IMAGE_FORMAT_XRGB8888; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: return __DRI_IMAGE_FORMAT_ARGB2101010; - case MESA_FORMAT_XRGB2101010_UNORM: + case MESA_FORMAT_B10G10R10X2_UNORM: return __DRI_IMAGE_FORMAT_XRGB2101010; - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: return __DRI_IMAGE_FORMAT_ARGB8888; - case MESA_FORMAT_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_UNORM: return __DRI_IMAGE_FORMAT_ABGR8888; - case MESA_FORMAT_RGBX8888_REV: + case MESA_FORMAT_R8G8B8X8_UNORM: return __DRI_IMAGE_FORMAT_XBGR8888; - case MESA_FORMAT_R8: + case MESA_FORMAT_R_UNORM8: return __DRI_IMAGE_FORMAT_R8; - case MESA_FORMAT_GR88: + case MESA_FORMAT_R8G8_UNORM: return __DRI_IMAGE_FORMAT_GR88; case MESA_FORMAT_NONE: return __DRI_IMAGE_FORMAT_NONE; - case MESA_FORMAT_SARGB8: + case MESA_FORMAT_B8G8R8A8_SRGB: return __DRI_IMAGE_FORMAT_SARGB8; default: return 0; } } -gl_format +mesa_format driImageFormatToGLFormat(uint32_t image_format) { switch (image_format) { case __DRI_IMAGE_FORMAT_RGB565: - return MESA_FORMAT_RGB565; + return MESA_FORMAT_B5G6R5_UNORM; case __DRI_IMAGE_FORMAT_XRGB8888: - return MESA_FORMAT_XRGB8888; + return MESA_FORMAT_B8G8R8X8_UNORM; case __DRI_IMAGE_FORMAT_ARGB2101010: - return MESA_FORMAT_ARGB2101010; + return MESA_FORMAT_B10G10R10A2_UNORM; case __DRI_IMAGE_FORMAT_XRGB2101010: - return MESA_FORMAT_XRGB2101010_UNORM; + return MESA_FORMAT_B10G10R10X2_UNORM; case __DRI_IMAGE_FORMAT_ARGB8888: - return MESA_FORMAT_ARGB8888; + return MESA_FORMAT_B8G8R8A8_UNORM; case __DRI_IMAGE_FORMAT_ABGR8888: - return MESA_FORMAT_RGBA8888_REV; + return MESA_FORMAT_R8G8B8A8_UNORM; case __DRI_IMAGE_FORMAT_XBGR8888: - return MESA_FORMAT_RGBX8888_REV; + return MESA_FORMAT_R8G8B8X8_UNORM; case __DRI_IMAGE_FORMAT_R8: - return MESA_FORMAT_R8; + return MESA_FORMAT_R_UNORM8; case __DRI_IMAGE_FORMAT_GR88: - return MESA_FORMAT_GR88; + return MESA_FORMAT_R8G8_UNORM; case __DRI_IMAGE_FORMAT_SARGB8: - return MESA_FORMAT_SARGB8; + return MESA_FORMAT_B8G8R8A8_SRGB; case __DRI_IMAGE_FORMAT_NONE: return MESA_FORMAT_NONE; default: diff --git a/mesalib/src/mesa/drivers/dri/common/dri_util.h b/mesalib/src/mesa/drivers/dri/common/dri_util.h index a79a4ed7a..a37a0bbbc 100644 --- a/mesalib/src/mesa/drivers/dri/common/dri_util.h +++ b/mesalib/src/mesa/drivers/dri/common/dri_util.h @@ -281,9 +281,9 @@ struct __DRIdrawableRec { }; extern uint32_t -driGLFormatToImageFormat(gl_format format); +driGLFormatToImageFormat(mesa_format format); -extern gl_format +extern mesa_format driImageFormatToGLFormat(uint32_t image_format); extern void diff --git a/mesalib/src/mesa/drivers/dri/common/utils.c b/mesalib/src/mesa/drivers/dri/common/utils.c index 3e35fe2d0..1f29e0b08 100644 --- a/mesalib/src/mesa/drivers/dri/common/utils.c +++ b/mesalib/src/mesa/drivers/dri/common/utils.c @@ -151,7 +151,7 @@ driGetRendererString( char * buffer, const char * hardware_name, * If the function fails and returns \c GL_FALSE, this * value will be unmodified, but some elements in the * linked list may be modified. - * \param format Mesa gl_format enum describing the pixel format + * \param format Mesa mesa_format enum describing the pixel format * \param depth_bits Array of depth buffer sizes to be exposed. * \param stencil_bits Array of stencil buffer sizes to be exposed. * \param num_depth_stencil_bits Number of entries in both \c depth_bits and @@ -176,7 +176,7 @@ driGetRendererString( char * buffer, const char * hardware_name, * \c format). */ __DRIconfig ** -driCreateConfigs(gl_format format, +driCreateConfigs(mesa_format format, const uint8_t * depth_bits, const uint8_t * stencil_bits, unsigned num_depth_stencil_bits, const GLenum * db_modes, unsigned num_db_modes, @@ -184,15 +184,15 @@ driCreateConfigs(gl_format format, GLboolean enable_accum) { static const uint32_t masks_table[][4] = { - /* MESA_FORMAT_RGB565 */ + /* MESA_FORMAT_B5G6R5_UNORM */ { 0x0000F800, 0x000007E0, 0x0000001F, 0x00000000 }, - /* MESA_FORMAT_XRGB8888 */ + /* MESA_FORMAT_B8G8R8X8_UNORM */ { 0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000 }, - /* MESA_FORMAT_ARGB8888 */ + /* MESA_FORMAT_B8G8R8A8_UNORM */ { 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000 }, - /* MESA_FORMAT_XRGB2101010_UNORM */ + /* MESA_FORMAT_B10G10R10X2_UNORM */ { 0x3FF00000, 0x000FFC00, 0x000003FF, 0x00000000 }, - /* MESA_FORMAT_ARGB2101010 */ + /* MESA_FORMAT_B10G10R10A2_UNORM */ { 0x3FF00000, 0x000FFC00, 0x000003FF, 0xC0000000 }, }; @@ -209,20 +209,20 @@ driCreateConfigs(gl_format format, bool is_srgb; switch (format) { - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: masks = masks_table[0]; break; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: masks = masks_table[1]; break; - case MESA_FORMAT_ARGB8888: - case MESA_FORMAT_SARGB8: + case MESA_FORMAT_B8G8R8A8_UNORM: + case MESA_FORMAT_B8G8R8A8_SRGB: masks = masks_table[2]; break; - case MESA_FORMAT_XRGB2101010_UNORM: + case MESA_FORMAT_B10G10R10X2_UNORM: masks = masks_table[3]; break; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: masks = masks_table[4]; break; default: diff --git a/mesalib/src/mesa/drivers/dri/common/utils.h b/mesalib/src/mesa/drivers/dri/common/utils.h index 22af123c3..094143446 100644 --- a/mesalib/src/mesa/drivers/dri/common/utils.h +++ b/mesalib/src/mesa/drivers/dri/common/utils.h @@ -48,7 +48,7 @@ struct __DRIconfigRec { }; extern __DRIconfig ** -driCreateConfigs(gl_format format, +driCreateConfigs(mesa_format format, const uint8_t * depth_bits, const uint8_t * stencil_bits, unsigned num_depth_stencil_bits, const GLenum * db_modes, unsigned num_db_modes, diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast.c b/mesalib/src/mesa/drivers/dri/swrast/swrast.c index 30e6805e9..071192c6f 100644 --- a/mesalib/src/mesa/drivers/dri/swrast/swrast.c +++ b/mesalib/src/mesa/drivers/dri/swrast/swrast.c @@ -71,19 +71,17 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, struct dri_context *dri_ctx; int x, y, w, h; __DRIscreen *sPriv = dPriv->driScreenPriv; - struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; struct gl_texture_image *texImage; struct swrast_texture_image *swImage; uint32_t internalFormat; - gl_format texFormat; + mesa_format texFormat; dri_ctx = pDRICtx->driverPrivate; internalFormat = (texture_format == __DRI_TEXTURE_FORMAT_RGB ? 3 : 4); - texUnit = _mesa_get_current_tex_unit(&dri_ctx->Base); - texObj = _mesa_select_tex_object(&dri_ctx->Base, texUnit, target); + texObj = _mesa_get_current_tex_object(&dri_ctx->Base, target); texImage = _mesa_get_tex_image(&dri_ctx->Base, texObj, target, 0); swImage = swrast_texture_image(texImage); @@ -92,9 +90,9 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, sPriv->swrast_loader->getDrawableInfo(dPriv, &x, &y, &w, &h, dPriv->loaderPrivate); if (texture_format == __DRI_TEXTURE_FORMAT_RGB) - texFormat = MESA_FORMAT_XRGB8888; + texFormat = MESA_FORMAT_B8G8R8X8_UNORM; else - texFormat = MESA_FORMAT_ARGB8888; + texFormat = MESA_FORMAT_B8G8R8A8_UNORM; _mesa_init_teximage_fields(&dri_ctx->Base, texImage, w, h, 1, 0, internalFormat, texFormat); @@ -130,7 +128,7 @@ swrastFillInModes(__DRIscreen *psp, __DRIconfig **configs; unsigned depth_buffer_factor; unsigned back_buffer_factor; - gl_format format; + mesa_format format; /* GLX_SWAP_COPY_OML is only supported because the Intel driver doesn't * support pageflipping at all. @@ -166,13 +164,13 @@ swrastFillInModes(__DRIscreen *psp, switch (pixel_bits) { case 16: - format = MESA_FORMAT_RGB565; + format = MESA_FORMAT_B5G6R5_UNORM; break; case 24: - format = MESA_FORMAT_XRGB8888; + format = MESA_FORMAT_B8G8R8X8_UNORM; break; case 32: - format = MESA_FORMAT_ARGB8888; + format = MESA_FORMAT_B8G8R8A8_UNORM; break; default: fprintf(stderr, "[%s:%u] bad depth %d\n", __func__, __LINE__, @@ -345,25 +343,25 @@ swrast_new_renderbuffer(const struct gl_config *visual, __DRIdrawable *dPriv, switch (pixel_format) { case PF_A8R8G8B8: - rb->Format = MESA_FORMAT_ARGB8888; + rb->Format = MESA_FORMAT_B8G8R8A8_UNORM; rb->InternalFormat = GL_RGBA; rb->_BaseFormat = GL_RGBA; xrb->bpp = 32; break; case PF_X8R8G8B8: - rb->Format = MESA_FORMAT_ARGB8888; /* XXX */ + rb->Format = MESA_FORMAT_B8G8R8A8_UNORM; /* XXX */ rb->InternalFormat = GL_RGB; rb->_BaseFormat = GL_RGB; xrb->bpp = 32; break; case PF_R5G6B5: - rb->Format = MESA_FORMAT_RGB565; + rb->Format = MESA_FORMAT_B5G6R5_UNORM; rb->InternalFormat = GL_RGB; rb->_BaseFormat = GL_RGB; xrb->bpp = 16; break; case PF_R3G3B2: - rb->Format = MESA_FORMAT_RGB332; + rb->Format = MESA_FORMAT_B2G3R3_UNORM; rb->InternalFormat = GL_RGB; rb->_BaseFormat = GL_RGB; xrb->bpp = 8; @@ -627,14 +625,14 @@ viewport(struct gl_context *ctx) swrast_check_and_update_window_size(ctx, read); } -static gl_format swrastChooseTextureFormat(struct gl_context * ctx, +static mesa_format swrastChooseTextureFormat(struct gl_context * ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type) { if (internalFormat == GL_RGB) - return MESA_FORMAT_XRGB8888; + return MESA_FORMAT_B8G8R8X8_UNORM; return _mesa_choose_tex_format(ctx, target, internalFormat, format, type); } diff --git a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp b/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp index df697e4a3..813ad1ff2 100644 --- a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp +++ b/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp @@ -593,23 +593,23 @@ MesaSoftwareRast::_SetupRenderBuffer(struct gl_renderbuffer* rb, switch (colorSpace) { case B_RGBA32: rb->_BaseFormat = GL_RGBA; - rb->Format = MESA_FORMAT_ARGB8888; + rb->Format = MESA_FORMAT_B8G8R8A8_UNORM; break; case B_RGB32: rb->_BaseFormat = GL_RGB; - rb->Format = MESA_FORMAT_XRGB8888; + rb->Format = MESA_FORMAT_B8G8R8X8_UNORM; break; case B_RGB24: rb->_BaseFormat = GL_RGB; - rb->Format = MESA_FORMAT_RGB888; + rb->Format = MESA_FORMAT_BGR_UNORM8; break; case B_RGB16: rb->_BaseFormat = GL_RGB; - rb->Format = MESA_FORMAT_RGB565; + rb->Format = MESA_FORMAT_B5G6R5_UNORM; break; case B_RGB15: rb->_BaseFormat = GL_RGB; - rb->Format = MESA_FORMAT_ARGB1555; + rb->Format = MESA_FORMAT_B5G5R5A1_UNORM; break; default: fprintf(stderr, "Unsupported screen color space %s\n", diff --git a/mesalib/src/mesa/main/accum.c b/mesalib/src/mesa/main/accum.c index 421fe6cc5..ef74468f4 100644 --- a/mesalib/src/mesa/main/accum.c +++ b/mesalib/src/mesa/main/accum.c @@ -138,7 +138,7 @@ _mesa_clear_accum_buffer(struct gl_context *ctx) return; } - if (accRb->Format == MESA_FORMAT_SIGNED_RGBA_16) { + if (accRb->Format == MESA_FORMAT_RGBA_SNORM16) { const GLshort clearR = FLOAT_TO_SHORT(ctx->Accum.ClearColor[0]); const GLshort clearG = FLOAT_TO_SHORT(ctx->Accum.ClearColor[1]); const GLshort clearB = FLOAT_TO_SHORT(ctx->Accum.ClearColor[2]); @@ -193,7 +193,7 @@ accum_scale_or_bias(struct gl_context *ctx, GLfloat value, return; } - if (accRb->Format == MESA_FORMAT_SIGNED_RGBA_16) { + if (accRb->Format == MESA_FORMAT_RGBA_SNORM16) { const GLshort incr = (GLshort) (value * 32767.0f); GLint i, j; if (bias) { @@ -271,7 +271,7 @@ accum_or_load(struct gl_context *ctx, GLfloat value, return; } - if (accRb->Format == MESA_FORMAT_SIGNED_RGBA_16) { + if (accRb->Format == MESA_FORMAT_RGBA_SNORM16) { const GLfloat scale = value * 32767.0f; GLint i, j; GLfloat (*rgba)[4]; @@ -363,7 +363,7 @@ accum_return(struct gl_context *ctx, GLfloat value, continue; } - if (accRb->Format == MESA_FORMAT_SIGNED_RGBA_16) { + if (accRb->Format == MESA_FORMAT_RGBA_SNORM16) { const GLfloat scale = value / 32767.0f; GLint i, j; GLfloat (*rgba)[4], (*dest)[4]; diff --git a/mesalib/src/mesa/main/api_arrayelt.c b/mesalib/src/mesa/main/api_arrayelt.c index f439b7068..29a57c8e5 100644 --- a/mesalib/src/mesa/main/api_arrayelt.c +++ b/mesalib/src/mesa/main/api_arrayelt.c @@ -1472,11 +1472,11 @@ check_vbo(AEcontext *actx, struct gl_buffer_object *vbo) static inline void update_derived_client_arrays(struct gl_context *ctx) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; - if (arrayObj->NewArrays) { - _mesa_update_array_object_client_arrays(ctx, arrayObj); - arrayObj->NewArrays = 0; + if (vao->NewArrays) { + _mesa_update_vao_client_arrays(ctx, vao); + vao->NewArrays = 0; } } @@ -1494,50 +1494,50 @@ _ae_update_state(struct gl_context *ctx) 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; + struct gl_vertex_array_object *vao = ctx->Array.VAO; actx->nr_vbos = 0; /* conventional vertex arrays */ - if (arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR_INDEX]; + if (vao->_VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_COLOR_INDEX]; aa->offset = IndexFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->_VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_EDGEFLAG]; + if (vao->_VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_EDGEFLAG]; aa->offset = _gloffset_EdgeFlagv; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->_VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_NORMAL]; + if (vao->_VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_NORMAL]; aa->offset = NormalFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR0]; + if (vao->_VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_COLOR0]; aa->offset = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR1]; + if (vao->_VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_COLOR1]; aa->offset = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - if (arrayObj->_VertexAttrib[VERT_ATTRIB_FOG].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_FOG]; + if (vao->_VertexAttrib[VERT_ATTRIB_FOG].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_FOG]; aa->offset = FogCoordFuncs[TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) { struct gl_client_array *attribArray = - &arrayObj->_VertexAttrib[VERT_ATTRIB_TEX(i)]; + &vao->_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. @@ -1556,7 +1556,7 @@ _ae_update_state(struct gl_context *ctx) /* 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)]; + &vao->_VertexAttrib[VERT_ATTRIB_GENERIC(i)]; if (attribArray->Enabled) { GLint intOrNorm; at->array = attribArray; @@ -1583,24 +1583,24 @@ _ae_update_state(struct gl_context *ctx) } /* finally, vertex position */ - if (arrayObj->_VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled) { + if (vao->_VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled) { /* Use glVertex(v) instead of glVertexAttrib(0, v) to be sure it's * issued as the last (provoking) attribute). */ - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_GENERIC0]; + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_GENERIC0]; assert(aa->array->Size >= 2); /* XXX fix someday? */ aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - else if (arrayObj->_VertexAttrib[VERT_ATTRIB_POS].Enabled) { - aa->array = &arrayObj->_VertexAttrib[VERT_ATTRIB_POS]; + else if (vao->_VertexAttrib[VERT_ATTRIB_POS].Enabled) { + aa->array = &vao->_VertexAttrib[VERT_ATTRIB_POS]; aa->offset = VertexFuncs[aa->array->Size-2][TYPE_IDX(aa->array->Type)]; check_vbo(actx, aa->array->BufferObj); aa++; } - check_vbo(actx, arrayObj->ElementArrayBufferObj); + check_vbo(actx, vao->IndexBufferObj); ASSERT(at - actx->attribs <= VERT_ATTRIB_MAX); ASSERT(aa - actx->arrays < 32); diff --git a/mesalib/src/mesa/main/api_validate.c b/mesalib/src/mesa/main/api_validate.c index 694558443..af469e046 100644 --- a/mesalib/src/mesa/main/api_validate.c +++ b/mesalib/src/mesa/main/api_validate.c @@ -113,14 +113,14 @@ check_valid_to_render(struct gl_context *ctx, const char *function) case API_OPENGLES2: /* For ES2, we can draw if any vertex array is enabled (and we * should always have a vertex program/shader). */ - if (ctx->Array.ArrayObj->_Enabled == 0x0 || !ctx->VertexProgram._Current) + if (ctx->Array.VAO->_Enabled == 0x0 || !ctx->VertexProgram._Current) return GL_FALSE; break; case API_OPENGLES: /* For OpenGL ES, only draw if we have vertex positions */ - if (!ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled) + if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled) return GL_FALSE; break; @@ -141,8 +141,8 @@ check_valid_to_render(struct gl_context *ctx, const char *function) /* Draw if we have vertex positions (GL_VERTEX_ARRAY or generic * array [0]). */ - return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled || - ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled); + return (ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled || + ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_GENERIC0].Enabled); } } break; @@ -180,15 +180,15 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, GLenum type, memset(&ib, 0, sizeof(ib)); ib.type = type; ib.ptr = indices; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; vbo_get_minmax_indices(ctx, &prim, &ib, &min, &max, 1); if ((int)(min + basevertex) < 0 || - max + basevertex >= ctx->Array.ArrayObj->_MaxElement) { + max + basevertex >= ctx->Array.VAO->_MaxElement) { /* the max element is out of bounds of one or more enabled arrays */ _mesa_warning(ctx, "glDrawElements() index=%u is out of bounds (max=%u)", - max, ctx->Array.ArrayObj->_MaxElement); + max, ctx->Array.VAO->_MaxElement); return GL_FALSE; } @@ -435,10 +435,10 @@ _mesa_validate_DrawElements(struct gl_context *ctx, return GL_FALSE; /* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ - if (index_bytes(type, count) > ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + if (index_bytes(type, count) > ctx->Array.VAO->IndexBufferObj->Size) { _mesa_warning(ctx, "glDrawElements index out of buffer bounds"); return GL_FALSE; } @@ -493,12 +493,12 @@ _mesa_validate_MultiDrawElements(struct gl_context *ctx, return GL_FALSE; /* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ for (i = 0; i < primcount; i++) { if (index_bytes(type, count[i]) > - ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + ctx->Array.VAO->IndexBufferObj->Size) { _mesa_warning(ctx, "glMultiDrawElements index out of buffer bounds"); return GL_FALSE; @@ -570,10 +570,10 @@ _mesa_validate_DrawRangeElements(struct gl_context *ctx, GLenum mode, return GL_FALSE; /* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ - if (index_bytes(type, count) > ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + if (index_bytes(type, count) > ctx->Array.VAO->IndexBufferObj->Size) { _mesa_warning(ctx, "glDrawRangeElements index out of buffer bounds"); return GL_FALSE; } @@ -620,7 +620,7 @@ _mesa_validate_DrawArrays(struct gl_context *ctx, return GL_FALSE; if (ctx->Const.CheckArrayBounds) { - if (start + count > (GLint) ctx->Array.ArrayObj->_MaxElement) + if (start + count > (GLint) ctx->Array.VAO->_MaxElement) return GL_FALSE; } @@ -689,7 +689,7 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi return GL_FALSE; if (ctx->Const.CheckArrayBounds) { - if (first + count > (GLint) ctx->Array.ArrayObj->_MaxElement) + if (first + count > (GLint) ctx->Array.VAO->_MaxElement) return GL_FALSE; } @@ -769,10 +769,10 @@ _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, return GL_FALSE; /* Vertex buffer object tests */ - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { /* use indices in the buffer object */ /* make sure count doesn't go outside buffer bounds */ - if (index_bytes(type, count) > ctx->Array.ArrayObj->ElementArrayBufferObj->Size) { + if (index_bytes(type, count) > ctx->Array.VAO->IndexBufferObj->Size) { _mesa_warning(ctx, "glDrawElementsInstanced index out of buffer bounds"); return GL_FALSE; @@ -901,7 +901,7 @@ valid_draw_indirect_elements(struct gl_context *ctx, * If no element array buffer is bound, an INVALID_OPERATION error is * generated. */ - if (!_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no buffer bound to GL_ELEMENT_ARRAY_BUFFER)", name); return GL_FALSE; diff --git a/mesalib/src/mesa/main/arrayobj.c b/mesalib/src/mesa/main/arrayobj.c index fdcf172ea..b33ba8016 100644 --- a/mesalib/src/mesa/main/arrayobj.c +++ b/mesalib/src/mesa/main/arrayobj.c @@ -27,7 +27,10 @@ /** * \file arrayobj.c - * Functions for the GL_APPLE_vertex_array_object extension. + * + * Implementation of Vertex Array Objects (VAOs), from OpenGL 3.1+, + * the GL_ARB_vertex_array_object extension, or the older + * GL_APPLE_vertex_array_object extension. * * \todo * The code in this file borrows a lot from bufferobj.c. There's a certain @@ -60,13 +63,13 @@ * non-existent. */ -struct gl_array_object * -_mesa_lookup_arrayobj(struct gl_context *ctx, GLuint id) +struct gl_vertex_array_object * +_mesa_lookup_vao(struct gl_context *ctx, GLuint id) { if (id == 0) return NULL; else - return (struct gl_array_object *) + return (struct gl_vertex_array_object *) _mesa_HashLookup(ctx->Array.Objects, id); } @@ -77,7 +80,7 @@ _mesa_lookup_arrayobj(struct gl_context *ctx, GLuint id) * This is done just prior to array object destruction. */ static void -unbind_array_object_vbos(struct gl_context *ctx, struct gl_array_object *obj) +unbind_array_object_vbos(struct gl_context *ctx, struct gl_vertex_array_object *obj) { GLuint i; @@ -95,12 +98,12 @@ unbind_array_object_vbos(struct gl_context *ctx, struct gl_array_object *obj) * This function is intended to be called via * \c dd_function_table::NewArrayObject. */ -struct gl_array_object * -_mesa_new_array_object( struct gl_context *ctx, GLuint name ) +struct gl_vertex_array_object * +_mesa_new_vao(struct gl_context *ctx, GLuint name) { - struct gl_array_object *obj = CALLOC_STRUCT(gl_array_object); + struct gl_vertex_array_object *obj = CALLOC_STRUCT(gl_vertex_array_object); if (obj) - _mesa_initialize_array_object(ctx, obj, name); + _mesa_initialize_vao(ctx, obj, name); return obj; } @@ -112,11 +115,10 @@ _mesa_new_array_object( struct gl_context *ctx, GLuint name ) * \c dd_function_table::DeleteArrayObject. */ void -_mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ) +_mesa_delete_vao(struct gl_context *ctx, struct gl_vertex_array_object *obj) { - (void) ctx; unbind_array_object_vbos(ctx, obj); - _mesa_reference_buffer_object(ctx, &obj->ElementArrayBufferObj, NULL); + _mesa_reference_buffer_object(ctx, &obj->IndexBufferObj, NULL); _glthread_DESTROY_MUTEX(obj->Mutex); free(obj->Label); free(obj); @@ -124,21 +126,21 @@ _mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ) /** - * Set ptr to arrayObj w/ reference counting. - * Note: this should only be called from the _mesa_reference_array_object() + * Set ptr to vao w/ reference counting. + * Note: this should only be called from the _mesa_reference_vao() * inline function. */ void -_mesa_reference_array_object_(struct gl_context *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj) +_mesa_reference_vao_(struct gl_context *ctx, + struct gl_vertex_array_object **ptr, + struct gl_vertex_array_object *vao) { - assert(*ptr != arrayObj); + assert(*ptr != vao); if (*ptr) { /* Unreference the old array object */ GLboolean deleteFlag = GL_FALSE; - struct gl_array_object *oldObj = *ptr; + struct gl_vertex_array_object *oldObj = *ptr; _glthread_LOCK_MUTEX(oldObj->Mutex); ASSERT(oldObj->RefCount > 0); @@ -159,24 +161,24 @@ _mesa_reference_array_object_(struct gl_context *ctx, } ASSERT(!*ptr); - if (arrayObj) { + if (vao) { /* reference new array object */ - _glthread_LOCK_MUTEX(arrayObj->Mutex); - if (arrayObj->RefCount == 0) { + _glthread_LOCK_MUTEX(vao->Mutex); + if (vao->RefCount == 0) { /* this array's being deleted (look just above) */ /* Not sure this can every really happen. Warn if it does. */ _mesa_problem(NULL, "referencing deleted array object"); *ptr = NULL; } else { - arrayObj->RefCount++; + vao->RefCount++; #if 0 printf("ArrayObj %p %d INCR to %d\n", - (void *) arrayObj, arrayObj->Name, arrayObj->RefCount); + (void *) vao, vao->Name, vao->RefCount); #endif - *ptr = arrayObj; + *ptr = vao; } - _glthread_UNLOCK_MUTEX(arrayObj->Mutex); + _glthread_UNLOCK_MUTEX(vao->Mutex); } } @@ -184,7 +186,7 @@ _mesa_reference_array_object_(struct gl_context *ctx, static void init_array(struct gl_context *ctx, - struct gl_array_object *obj, GLuint index, GLint size, GLint type) + struct gl_vertex_array_object *obj, GLuint index, GLint size, GLint type) { struct gl_vertex_attrib_array *array = &obj->VertexAttrib[index]; struct gl_vertex_buffer_binding *binding = &obj->VertexBinding[index]; @@ -213,12 +215,12 @@ init_array(struct gl_context *ctx, /** - * Initialize a gl_array_object's arrays. + * Initialize a gl_vertex_array_object's arrays. */ void -_mesa_initialize_array_object( struct gl_context *ctx, - struct gl_array_object *obj, - GLuint name ) +_mesa_initialize_vao(struct gl_context *ctx, + struct gl_vertex_array_object *obj, + GLuint name) { GLuint i; @@ -257,7 +259,7 @@ _mesa_initialize_array_object( struct gl_context *ctx, } } - _mesa_reference_buffer_object(ctx, &obj->ElementArrayBufferObj, + _mesa_reference_buffer_object(ctx, &obj->IndexBufferObj, ctx->Shared->NullBufferObj); } @@ -266,7 +268,7 @@ _mesa_initialize_array_object( struct gl_context *ctx, * Add the given array object to the array object pool. */ static void -save_array_object( struct gl_context *ctx, struct gl_array_object *obj ) +save_array_object( struct gl_context *ctx, struct gl_vertex_array_object *obj ) { if (obj->Name > 0) { /* insert into hash table */ @@ -280,7 +282,7 @@ save_array_object( struct gl_context *ctx, struct gl_array_object *obj ) * Do not deallocate the array object though. */ static void -remove_array_object( struct gl_context *ctx, struct gl_array_object *obj ) +remove_array_object( struct gl_context *ctx, struct gl_vertex_array_object *obj ) { if (obj->Name > 0) { /* remove from hash table */ @@ -291,11 +293,11 @@ remove_array_object( struct gl_context *ctx, struct gl_array_object *obj ) /** - * Helper for _mesa_update_array_object_max_element(). - * \return min(arrayObj->_VertexAttrib[*]._MaxElement). + * Helper for _mesa_update_vao_max_element(). + * \return min(vao->_VertexAttrib[*]._MaxElement). */ static GLuint -compute_max_element(struct gl_array_object *arrayObj, GLbitfield64 enabled) +compute_max_element(struct gl_vertex_array_object *vao, GLbitfield64 enabled) { GLuint min = ~((GLuint)0); @@ -304,7 +306,7 @@ compute_max_element(struct gl_array_object *arrayObj, GLbitfield64 enabled) GLint attrib = ffsll(enabled) - 1; enabled ^= BITFIELD64_BIT(attrib); - client_array = &arrayObj->_VertexAttrib[attrib]; + client_array = &vao->_VertexAttrib[attrib]; assert(client_array->Enabled); _mesa_update_array_max_element(client_array); min = MIN2(min, client_array->_MaxElement); @@ -315,23 +317,23 @@ compute_max_element(struct gl_array_object *arrayObj, GLbitfield64 enabled) /** - * Examine vertex arrays to update the gl_array_object::_MaxElement field. + * Examine vertex arrays to update the gl_vertex_array_object::_MaxElement field. */ void -_mesa_update_array_object_max_element(struct gl_context *ctx, - struct gl_array_object *arrayObj) +_mesa_update_vao_max_element(struct gl_context *ctx, + struct gl_vertex_array_object *vao) { GLbitfield64 enabled; if (!ctx->VertexProgram._Current || ctx->VertexProgram._Current == ctx->VertexProgram._TnlProgram) { - enabled = _mesa_array_object_get_enabled_ff(arrayObj); + enabled = _mesa_array_object_get_enabled_ff(vao); } else { - enabled = _mesa_array_object_get_enabled_arb(arrayObj); + enabled = _mesa_array_object_get_enabled_arb(vao); } /* _MaxElement is one past the last legal array element */ - arrayObj->_MaxElement = compute_max_element(arrayObj, enabled); + vao->_MaxElement = compute_max_element(vao, enabled); } @@ -340,10 +342,10 @@ _mesa_update_array_object_max_element(struct gl_context *ctx, * or a gl_vertex_buffer_binding has changed. */ void -_mesa_update_array_object_client_arrays(struct gl_context *ctx, - struct gl_array_object *arrayObj) +_mesa_update_vao_client_arrays(struct gl_context *ctx, + struct gl_vertex_array_object *vao) { - GLbitfield64 arrays = arrayObj->NewArrays; + GLbitfield64 arrays = vao->NewArrays; while (arrays) { struct gl_client_array *client_array; @@ -353,9 +355,9 @@ _mesa_update_array_object_client_arrays(struct gl_context *ctx, GLint attrib = ffsll(arrays) - 1; arrays ^= BITFIELD64_BIT(attrib); - attrib_array = &arrayObj->VertexAttrib[attrib]; - buffer_binding = &arrayObj->VertexBinding[attrib_array->VertexBinding]; - client_array = &arrayObj->_VertexAttrib[attrib]; + attrib_array = &vao->VertexAttrib[attrib]; + buffer_binding = &vao->VertexBinding[attrib_array->VertexBinding]; + client_array = &vao->_VertexAttrib[attrib]; _mesa_update_client_array(ctx, client_array, attrib_array, buffer_binding); @@ -376,8 +378,8 @@ _mesa_update_array_object_client_arrays(struct gl_context *ctx, static void bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) { - struct gl_array_object * const oldObj = ctx->Array.ArrayObj; - struct gl_array_object *newObj = NULL; + struct gl_vertex_array_object * const oldObj = ctx->Array.VAO; + struct gl_vertex_array_object *newObj = NULL; ASSERT(oldObj != NULL); @@ -391,11 +393,11 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) /* The spec says there is no array object named 0, but we use * one internally because it simplifies things. */ - newObj = ctx->Array.DefaultArrayObj; + newObj = ctx->Array.DefaultVAO; } else { /* non-default array object */ - newObj = _mesa_lookup_arrayobj(ctx, id); + newObj = _mesa_lookup_vao(ctx, id); if (!newObj) { if (genRequired) { _mesa_error(ctx, GL_INVALID_OPERATION, @@ -426,7 +428,7 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) } ctx->NewState |= _NEW_ARRAY; - _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, newObj); + _mesa_reference_vao(ctx, &ctx->Array.VAO, newObj); /* Pass BindVertexArray call to device driver */ if (ctx->Driver.BindArrayObject && newObj) @@ -477,12 +479,12 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids) GLsizei i; if (n < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteVertexArrayAPPLE(n)"); + _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteVertexArray(n)"); return; } for (i = 0; i < n; i++) { - struct gl_array_object *obj = _mesa_lookup_arrayobj(ctx, ids[i]); + struct gl_vertex_array_object *obj = _mesa_lookup_vao(ctx, ids[i]); if ( obj != NULL ) { ASSERT( obj->Name == ids[i] ); @@ -491,7 +493,7 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids) * for that object reverts to zero and the default vertex array * becomes current." */ - if ( obj == ctx->Array.ArrayObj ) { + if ( obj == ctx->Array.VAO ) { _mesa_BindVertexArray(0); } @@ -501,7 +503,7 @@ _mesa_DeleteVertexArrays(GLsizei n, const GLuint *ids) /* Unreference the array object. * If refcount hits zero, the object will be deleted. */ - _mesa_reference_array_object(ctx, &obj, NULL); + _mesa_reference_vao(ctx, &obj, NULL); } } } @@ -521,7 +523,7 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) GLint i; if (n < 0) { - _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArraysAPPLE"); + _mesa_error(ctx, GL_INVALID_VALUE, "glGenVertexArrays"); return; } @@ -533,12 +535,12 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays) /* Allocate new, empty array objects and return identifiers */ for (i = 0; i < n; i++) { - struct gl_array_object *obj; + struct gl_vertex_array_object *obj; GLuint name = first + i; obj = (*ctx->Driver.NewArrayObject)( ctx, name ); if (!obj) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArraysAPPLE"); + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArrays"); return; } save_array_object(ctx, obj); @@ -581,14 +583,14 @@ _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays) GLboolean GLAPIENTRY _mesa_IsVertexArray( GLuint id ) { - struct gl_array_object * obj; + struct gl_vertex_array_object * obj; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); if (id == 0) return GL_FALSE; - obj = _mesa_lookup_arrayobj(ctx, id); + obj = _mesa_lookup_vao(ctx, id); if (obj == NULL) return GL_FALSE; diff --git a/mesalib/src/mesa/main/arrayobj.h b/mesalib/src/mesa/main/arrayobj.h index 7c3720242..d72761db1 100644 --- a/mesalib/src/mesa/main/arrayobj.h +++ b/mesalib/src/mesa/main/arrayobj.h @@ -45,42 +45,42 @@ struct gl_context; * Internal functions */ -extern struct gl_array_object * -_mesa_lookup_arrayobj(struct gl_context *ctx, GLuint id); +extern struct gl_vertex_array_object * +_mesa_lookup_vao(struct gl_context *ctx, GLuint id); -extern struct gl_array_object * -_mesa_new_array_object( struct gl_context *ctx, GLuint name ); +extern struct gl_vertex_array_object * +_mesa_new_vao(struct gl_context *ctx, GLuint name); extern void -_mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj ); +_mesa_delete_vao(struct gl_context *ctx, struct gl_vertex_array_object *obj); extern void -_mesa_reference_array_object_(struct gl_context *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj); +_mesa_reference_vao_(struct gl_context *ctx, + struct gl_vertex_array_object **ptr, + struct gl_vertex_array_object *vao); static inline void -_mesa_reference_array_object(struct gl_context *ctx, - struct gl_array_object **ptr, - struct gl_array_object *arrayObj) +_mesa_reference_vao(struct gl_context *ctx, + struct gl_vertex_array_object **ptr, + struct gl_vertex_array_object *vao) { - if (*ptr != arrayObj) - _mesa_reference_array_object_(ctx, ptr, arrayObj); + if (*ptr != vao) + _mesa_reference_vao_(ctx, ptr, vao); } extern void -_mesa_initialize_array_object( struct gl_context *ctx, - struct gl_array_object *obj, GLuint name ); +_mesa_initialize_vao(struct gl_context *ctx, + struct gl_vertex_array_object *obj, GLuint name); extern void -_mesa_update_array_object_max_element(struct gl_context *ctx, - struct gl_array_object *arrayObj); +_mesa_update_vao_max_element(struct gl_context *ctx, + struct gl_vertex_array_object *vao); extern void -_mesa_update_array_object_client_arrays(struct gl_context *ctx, - struct gl_array_object *arrayObj); +_mesa_update_vao_client_arrays(struct gl_context *ctx, + struct gl_vertex_array_object *vao); /** Returns the bitmask of all enabled arrays in fixed function mode. @@ -89,9 +89,9 @@ _mesa_update_array_object_client_arrays(struct gl_context *ctx, * are available. */ static inline GLbitfield64 -_mesa_array_object_get_enabled_ff(const struct gl_array_object *arrayObj) +_mesa_array_object_get_enabled_ff(const struct gl_vertex_array_object *vao) { - return arrayObj->_Enabled & VERT_BIT_FF_ALL; + return vao->_Enabled & VERT_BIT_FF_ALL; } /** Returns the bitmask of all enabled arrays in arb/glsl shader mode. @@ -101,9 +101,9 @@ _mesa_array_object_get_enabled_ff(const struct gl_array_object *arrayObj) * precedence over the legacy position array. */ static inline GLbitfield64 -_mesa_array_object_get_enabled_arb(const struct gl_array_object *arrayObj) +_mesa_array_object_get_enabled_arb(const struct gl_vertex_array_object *vao) { - GLbitfield64 enabled = arrayObj->_Enabled; + GLbitfield64 enabled = vao->_Enabled; return enabled & ~(VERT_BIT_POS & (enabled >> VERT_ATTRIB_GENERIC0)); } diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c index 7b7cf0ef3..004528044 100644 --- a/mesalib/src/mesa/main/attrib.c +++ b/mesalib/src/mesa/main/attrib.c @@ -1433,13 +1433,13 @@ copy_pixelstore(struct gl_context *ctx, #define GL_CLIENT_UNPACK_BIT (1<<21) /** - * Copy gl_array_object from src to dest. + * Copy gl_vertex_array_object from src to dest. * 'dest' must be in an initialized state. */ static void copy_array_object(struct gl_context *ctx, - struct gl_array_object *dest, - struct gl_array_object *src) + struct gl_vertex_array_object *dest, + struct gl_vertex_array_object *src) { GLuint i; @@ -1483,10 +1483,10 @@ copy_array_attrib(struct gl_context *ctx, /* skip RebindArrays */ if (!vbo_deleted) - copy_array_object(ctx, dest->ArrayObj, src->ArrayObj); + copy_array_object(ctx, dest->VAO, src->VAO); /* skip ArrayBufferObj */ - /* skip ElementArrayBufferObj */ + /* skip IndexBufferObj */ } /** @@ -1499,15 +1499,15 @@ save_array_attrib(struct gl_context *ctx, { /* Set the Name, needed for restore, but do never overwrite. * Needs to match value in the object hash. */ - dest->ArrayObj->Name = src->ArrayObj->Name; + dest->VAO->Name = src->VAO->Name; /* And copy all of the rest. */ copy_array_attrib(ctx, dest, src, false); /* Just reference them here */ _mesa_reference_buffer_object(ctx, &dest->ArrayBufferObj, src->ArrayBufferObj); - _mesa_reference_buffer_object(ctx, &dest->ArrayObj->ElementArrayBufferObj, - src->ArrayObj->ElementArrayBufferObj); + _mesa_reference_buffer_object(ctx, &dest->VAO->IndexBufferObj, + src->VAO->IndexBufferObj); } /** @@ -1530,13 +1530,13 @@ restore_array_attrib(struct gl_context *ctx, * The semantics of objects created using APPLE_vertex_array_objects behave * differently. These objects expect to be recreated by pop. Alas. */ - const bool arb_vao = (src->ArrayObj->Name != 0 - && src->ArrayObj->ARBsemantics); + const bool arb_vao = (src->VAO->Name != 0 + && src->VAO->ARBsemantics); - if (arb_vao && !_mesa_IsVertexArray(src->ArrayObj->Name)) + if (arb_vao && !_mesa_IsVertexArray(src->VAO->Name)) return; - _mesa_BindVertexArrayAPPLE(src->ArrayObj->Name); + _mesa_BindVertexArrayAPPLE(src->VAO->Name); /* Restore or recreate the buffer objects by the names ... */ if (!arb_vao @@ -1552,10 +1552,10 @@ restore_array_attrib(struct gl_context *ctx, } if (!arb_vao - || src->ArrayObj->ElementArrayBufferObj->Name == 0 - || _mesa_IsBuffer(src->ArrayObj->ElementArrayBufferObj->Name)) + || src->VAO->IndexBufferObj->Name == 0 + || _mesa_IsBuffer(src->VAO->IndexBufferObj->Name)) _mesa_BindBuffer(GL_ELEMENT_ARRAY_BUFFER_ARB, - src->ArrayObj->ElementArrayBufferObj->Name); + src->VAO->IndexBufferObj->Name); } /** @@ -1566,15 +1566,15 @@ static bool init_array_attrib_data(struct gl_context *ctx, struct gl_array_attrib *attrib) { - /* Get a non driver gl_array_object. */ - attrib->ArrayObj = CALLOC_STRUCT( gl_array_object ); + /* Get a non driver gl_vertex_array_object. */ + attrib->VAO = CALLOC_STRUCT( gl_vertex_array_object ); - if (attrib->ArrayObj == NULL) { + if (attrib->VAO == NULL) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glPushClientAttrib"); return false; } - _mesa_initialize_array_object(ctx, attrib->ArrayObj, 0); + _mesa_initialize_vao(ctx, attrib->VAO, 0); return true; } @@ -1589,8 +1589,8 @@ free_array_attrib_data(struct gl_context *ctx, { /* We use a non driver array object, so don't just unref since we would * end up using the drivers DeleteArrayObject function for deletion. */ - _mesa_delete_array_object(ctx, attrib->ArrayObj); - attrib->ArrayObj = 0; + _mesa_delete_vao(ctx, attrib->VAO); + attrib->VAO = 0; _mesa_reference_buffer_object(ctx, &attrib->ArrayBufferObj, NULL); } diff --git a/mesalib/src/mesa/main/blend.c b/mesalib/src/mesa/main/blend.c index 9e11ca7b8..eb4f1d6be 100644 --- a/mesalib/src/mesa/main/blend.c +++ b/mesalib/src/mesa/main/blend.c @@ -854,7 +854,7 @@ _mesa_update_clamp_vertex_color(struct gl_context *ctx) } /** - * Returns an appropriate gl_format for color rendering based on the + * Returns an appropriate mesa_format for color rendering based on the * GL_FRAMEBUFFER_SRGB state. * * Some drivers implement GL_FRAMEBUFFER_SRGB using a flag on the blend state @@ -862,8 +862,8 @@ _mesa_update_clamp_vertex_color(struct gl_context *ctx) * 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) +mesa_format +_mesa_get_render_format(const struct gl_context *ctx, mesa_format format) { if (ctx->Color.sRGBEnabled) return format; diff --git a/mesalib/src/mesa/main/blend.h b/mesalib/src/mesa/main/blend.h index 7445840cb..fe31a7440 100644 --- a/mesalib/src/mesa/main/blend.h +++ b/mesalib/src/mesa/main/blend.h @@ -115,8 +115,8 @@ _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 mesa_format +_mesa_get_render_format(const struct gl_context *ctx, mesa_format format); extern void _mesa_init_color( struct gl_context * ctx ); diff --git a/mesalib/src/mesa/main/blit.c b/mesalib/src/mesa/main/blit.c new file mode 100644 index 000000000..0b70a3da4 --- /dev/null +++ b/mesalib/src/mesa/main/blit.c @@ -0,0 +1,513 @@ +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2013 VMware, Inc. 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 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * glBlitFramebuffer functions. + */ + +#include + +#include "context.h" +#include "enums.h" +#include "blit.h" +#include "fbobject.h" +#include "glformats.h" +#include "mtypes.h" +#include "state.h" + + +/** Set this to 1 to debug/log glBlitFramebuffer() calls */ +#define DEBUG_BLIT 0 + + + +static const struct gl_renderbuffer_attachment * +find_attachment(const struct gl_framebuffer *fb, + const struct gl_renderbuffer *rb) +{ + GLuint i; + for (i = 0; i < Elements(fb->Attachment); i++) { + if (fb->Attachment[i].Renderbuffer == rb) + return &fb->Attachment[i]; + } + return NULL; +} + + +/** + * Helper function for checking if the datatypes of color buffers are + * compatible for glBlitFramebuffer. From the 3.1 spec, page 198: + * + * "GL_INVALID_OPERATION is generated if mask contains GL_COLOR_BUFFER_BIT + * and any of the following conditions hold: + * - The read buffer contains fixed-point or floating-point values and any + * draw buffer contains neither fixed-point nor floating-point values. + * - The read buffer contains unsigned integer values and any draw buffer + * does not contain unsigned integer values. + * - The read buffer contains signed integer values and any draw buffer + * does not contain signed integer values." + */ +static GLboolean +compatible_color_datatypes(mesa_format srcFormat, mesa_format dstFormat) +{ + GLenum srcType = _mesa_get_format_datatype(srcFormat); + GLenum dstType = _mesa_get_format_datatype(dstFormat); + + if (srcType != GL_INT && srcType != GL_UNSIGNED_INT) { + assert(srcType == GL_UNSIGNED_NORMALIZED || + srcType == GL_SIGNED_NORMALIZED || + srcType == GL_FLOAT); + /* Boil any of those types down to GL_FLOAT */ + srcType = GL_FLOAT; + } + + if (dstType != GL_INT && dstType != GL_UNSIGNED_INT) { + assert(dstType == GL_UNSIGNED_NORMALIZED || + dstType == GL_SIGNED_NORMALIZED || + dstType == GL_FLOAT); + /* Boil any of those types down to GL_FLOAT */ + dstType = GL_FLOAT; + } + + return srcType == dstType; +} + + +static GLboolean +compatible_resolve_formats(const struct gl_renderbuffer *readRb, + const struct gl_renderbuffer *drawRb) +{ + GLenum readFormat, drawFormat; + + /* The simple case where we know the backing Mesa formats are the same. + */ + if (_mesa_get_srgb_format_linear(readRb->Format) == + _mesa_get_srgb_format_linear(drawRb->Format)) { + return GL_TRUE; + } + + /* The Mesa formats are different, so we must check whether the internal + * formats are compatible. + * + * Under some circumstances, the user may request e.g. two GL_RGBA8 + * textures and get two entirely different Mesa formats like RGBA8888 and + * ARGB8888. Drivers behaving like that should be able to cope with + * non-matching formats by themselves, because it's not the user's fault. + * + * Blits between linear and sRGB formats are also allowed. + */ + readFormat = _mesa_get_nongeneric_internalformat(readRb->InternalFormat); + drawFormat = _mesa_get_nongeneric_internalformat(drawRb->InternalFormat); + readFormat = _mesa_get_linear_internalformat(readFormat); + drawFormat = _mesa_get_linear_internalformat(drawFormat); + + if (readFormat == drawFormat) { + return GL_TRUE; + } + + 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. + * + * Note, if the src buffer is multisampled and the dest is not, this is + * when the samples must be resolved to a single color. + */ +void GLAPIENTRY +_mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter) +{ + const GLbitfield legalMaskBits = (GL_COLOR_BUFFER_BIT | + GL_DEPTH_BUFFER_BIT | + GL_STENCIL_BUFFER_BIT); + const struct gl_framebuffer *readFb, *drawFb; + GET_CURRENT_CONTEXT(ctx); + + FLUSH_VERTICES(ctx, 0); + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, + "glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, 0x%x, %s)\n", + srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + mask, _mesa_lookup_enum_by_nr(filter)); + + if (ctx->NewState) { + _mesa_update_state(ctx); + } + + readFb = ctx->ReadBuffer; + drawFb = ctx->DrawBuffer; + + if (!readFb || !drawFb) { + /* This will normally never happen but someday we may want to + * support MakeCurrent() with no drawables. + */ + return; + } + + /* check for complete framebuffers */ + if (drawFb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT || + readFb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glBlitFramebufferEXT(incomplete draw/read buffers)"); + return; + } + + 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; + } + + if (mask & ~legalMaskBits) { + _mesa_error( ctx, GL_INVALID_VALUE, "glBlitFramebufferEXT(mask)"); + return; + } + + /* depth/stencil must be blitted with nearest filtering */ + if ((mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) + && filter != GL_NEAREST) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(depth/stencil requires GL_NEAREST filter)"); + return; + } + + /* get color read/draw renderbuffers */ + if (mask & GL_COLOR_BUFFER_BIT) { + const GLuint numColorDrawBuffers = ctx->DrawBuffer->_NumColorDrawBuffers; + const struct gl_renderbuffer *colorReadRb = readFb->_ColorReadBuffer; + const struct gl_renderbuffer *colorDrawRb = NULL; + GLuint i; + + /* From the EXT_framebuffer_object spec: + * + * "If a buffer is specified in and does not exist in both + * the read and draw framebuffers, the corresponding bit is silently + * ignored." + */ + if (!colorReadRb || numColorDrawBuffers == 0) { + mask &= ~GL_COLOR_BUFFER_BIT; + } + else { + for (i = 0; i < numColorDrawBuffers; i++) { + colorDrawRb = ctx->DrawBuffer->_ColorDrawBuffers[i]; + if (!colorDrawRb) + continue; + + /* Page 193 (page 205 of the PDF) in section 4.3.2 of the OpenGL + * ES 3.0.1 spec says: + * + * "If the source and destination buffers are identical, an + * INVALID_OPERATION error is generated. Different mipmap + * levels of a texture, different layers of a three- + * dimensional texture or two-dimensional array texture, and + * different faces of a cube map texture do not constitute + * identical buffers." + */ + if (_mesa_is_gles3(ctx) && (colorDrawRb == colorReadRb)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(source and destination color " + "buffer cannot be the same)"); + return; + } + + if (!compatible_color_datatypes(colorReadRb->Format, + colorDrawRb->Format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(color buffer datatypes mismatch)"); + return; + } + /* extra checks for multisample copies... */ + if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) { + /* color formats must match */ + if (!compatible_resolve_formats(colorReadRb, colorDrawRb)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(bad src/dst multisample pixel formats)"); + return; + } + } + } + if (filter != GL_NEAREST) { + /* From EXT_framebuffer_multisample_blit_scaled specification: + * "Calling BlitFramebuffer will result in an INVALID_OPERATION error + * 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) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(integer color type)"); + return; + } + } + } + } + + if (mask & GL_STENCIL_BUFFER_BIT) { + struct gl_renderbuffer *readRb = + readFb->Attachment[BUFFER_STENCIL].Renderbuffer; + struct gl_renderbuffer *drawRb = + drawFb->Attachment[BUFFER_STENCIL].Renderbuffer; + + /* From the EXT_framebuffer_object spec: + * + * "If a buffer is specified in and does not exist in both + * the read and draw framebuffers, the corresponding bit is silently + * ignored." + */ + if ((readRb == NULL) || (drawRb == NULL)) { + mask &= ~GL_STENCIL_BUFFER_BIT; + } + else { + int read_z_bits, draw_z_bits; + + if (_mesa_is_gles3(ctx) && (drawRb == readRb)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(source and destination stencil " + "buffer cannot be the same)"); + return; + } + + if (_mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS) != + _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS)) { + /* There is no need to check the stencil datatype here, because + * there is only one: GL_UNSIGNED_INT. + */ + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(stencil attachment format mismatch)"); + return; + } + + read_z_bits = _mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS); + draw_z_bits = _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS); + + /* If both buffers also have depth data, the depth formats must match + * as well. If one doesn't have depth, it's not blitted, so we should + * ignore the depth format check. + */ + if (read_z_bits > 0 && draw_z_bits > 0 && + (read_z_bits != draw_z_bits || + _mesa_get_format_datatype(readRb->Format) != + _mesa_get_format_datatype(drawRb->Format))) { + + _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebuffer" + "(stencil attachment depth format mismatch)"); + return; + } + } + } + + if (mask & GL_DEPTH_BUFFER_BIT) { + struct gl_renderbuffer *readRb = + readFb->Attachment[BUFFER_DEPTH].Renderbuffer; + struct gl_renderbuffer *drawRb = + drawFb->Attachment[BUFFER_DEPTH].Renderbuffer; + + /* From the EXT_framebuffer_object spec: + * + * "If a buffer is specified in and does not exist in both + * the read and draw framebuffers, the corresponding bit is silently + * ignored." + */ + if ((readRb == NULL) || (drawRb == NULL)) { + mask &= ~GL_DEPTH_BUFFER_BIT; + } + else { + int read_s_bit, draw_s_bit; + + if (_mesa_is_gles3(ctx) && (drawRb == readRb)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(source and destination depth " + "buffer cannot be the same)"); + return; + } + + if ((_mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS) != + _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS)) || + (_mesa_get_format_datatype(readRb->Format) != + _mesa_get_format_datatype(drawRb->Format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(depth attachment format mismatch)"); + return; + } + + read_s_bit = _mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS); + draw_s_bit = _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS); + + /* If both buffers also have stencil data, the stencil formats must + * match as well. If one doesn't have stencil, it's not blitted, so + * we should ignore the stencil format check. + */ + if (read_s_bit > 0 && draw_s_bit > 0 && read_s_bit != draw_s_bit) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebuffer" + "(depth attachment stencil bits mismatch)"); + return; + } + } + } + + + if (_mesa_is_gles3(ctx)) { + /* Page 194 (page 206 of the PDF) in section 4.3.2 of the OpenGL ES + * 3.0.1 spec says: + * + * "If SAMPLE_BUFFERS for the draw framebuffer is greater than zero, + * an INVALID_OPERATION error is generated." + */ + if (drawFb->Visual.samples > 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(destination samples must be 0)"); + return; + } + + /* Page 194 (page 206 of the PDF) in section 4.3.2 of the OpenGL ES + * 3.0.1 spec says: + * + * "If SAMPLE_BUFFERS for the read framebuffer is greater than zero, + * no copy is performed and an INVALID_OPERATION error is generated + * if the formats of the read and draw framebuffers are not + * identical or if the source and destination rectangles are not + * defined with the same (X0, Y0) and (X1, Y1) bounds." + * + * The format check was made above because desktop OpenGL has the same + * requirement. + */ + if (readFb->Visual.samples > 0 + && (srcX0 != dstX0 || srcY0 != dstY0 + || srcX1 != dstX1 || srcY1 != dstY1)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebuffer(bad src/dst multisample region)"); + return; + } + } else { + if (readFb->Visual.samples > 0 && + drawFb->Visual.samples > 0 && + readFb->Visual.samples != drawFb->Visual.samples) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(mismatched samples)"); + return; + } + + /* extra checks for multisample copies... */ + 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)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBlitFramebufferEXT(bad src/dst multisample region sizes)"); + return; + } + } + } + + /* Debug code */ + if (DEBUG_BLIT) { + const struct gl_renderbuffer *colorReadRb = readFb->_ColorReadBuffer; + const struct gl_renderbuffer *colorDrawRb = NULL; + GLuint i = 0; + + printf("glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d," + " 0x%x, 0x%x)\n", + srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + mask, filter); + if (colorReadRb) { + const struct gl_renderbuffer_attachment *att; + + att = find_attachment(readFb, colorReadRb); + printf(" Src FBO %u RB %u (%dx%d) ", + readFb->Name, colorReadRb->Name, + colorReadRb->Width, colorReadRb->Height); + if (att && att->Texture) { + printf("Tex %u tgt 0x%x level %u face %u", + att->Texture->Name, + att->Texture->Target, + att->TextureLevel, + att->CubeMapFace); + } + printf("\n"); + + /* Print all active color render buffers */ + for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { + colorDrawRb = ctx->DrawBuffer->_ColorDrawBuffers[i]; + if (!colorDrawRb) + continue; + + att = find_attachment(drawFb, colorDrawRb); + printf(" Dst FBO %u RB %u (%dx%d) ", + drawFb->Name, colorDrawRb->Name, + colorDrawRb->Width, colorDrawRb->Height); + if (att && att->Texture) { + printf("Tex %u tgt 0x%x level %u face %u", + att->Texture->Name, + att->Texture->Target, + att->TextureLevel, + att->CubeMapFace); + } + printf("\n"); + } + } + } + + if (!mask || + (srcX1 - srcX0) == 0 || (srcY1 - srcY0) == 0 || + (dstX1 - dstX0) == 0 || (dstY1 - dstY0) == 0) { + return; + } + + ASSERT(ctx->Driver.BlitFramebuffer); + ctx->Driver.BlitFramebuffer(ctx, + srcX0, srcY0, srcX1, srcY1, + dstX0, dstY0, dstX1, dstY1, + mask, filter); +} diff --git a/mesalib/src/mesa/main/blit.h b/mesalib/src/mesa/main/blit.h new file mode 100644 index 000000000..533d6e5d1 --- /dev/null +++ b/mesalib/src/mesa/main/blit.h @@ -0,0 +1,39 @@ +/* + * Mesa 3-D graphics library + * + * 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 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION 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 BLIT_H +#define BLIT_H + +#include "compiler.h" +#include "glheader.h" + + +extern void GLAPIENTRY +_mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + + +#endif /* BLIT_H */ diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c index 93367590a..ca55ef969 100644 --- a/mesalib/src/mesa/main/bufferobj.c +++ b/mesalib/src/mesa/main/bufferobj.c @@ -80,7 +80,7 @@ get_buffer_target(struct gl_context *ctx, GLenum target) case GL_ARRAY_BUFFER_ARB: return &ctx->Array.ArrayBufferObj; case GL_ELEMENT_ARRAY_BUFFER_ARB: - return &ctx->Array.ArrayObj->ElementArrayBufferObj; + return &ctx->Array.VAO->IndexBufferObj; case GL_PIXEL_PACK_BUFFER_EXT: return &ctx->Pack.BufferObj; case GL_PIXEL_UNPACK_BUFFER_EXT: @@ -295,18 +295,18 @@ buffer_object_subdata_range_good(struct gl_context * ctx, GLenum target, * \param format Format of the supplied data. * \param type Type of the supplied data. * \param caller Name of calling function for recording errors. - * \return If internalformat, format and type are legal the gl_format + * \return If internalformat, format and type are legal the mesa_format * corresponding to internalformat, otherwise MESA_FORMAT_NONE. * * \sa glClearBufferData and glClearBufferSubData */ -static gl_format +static mesa_format validate_clear_buffer_format(struct gl_context *ctx, GLenum internalformat, GLenum format, GLenum type, const char *caller) { - gl_format mesaFormat; + mesa_format mesaFormat; GLenum errorFormatType; mesaFormat = _mesa_validate_texbuffer_format(ctx, internalformat); @@ -360,7 +360,7 @@ validate_clear_buffer_format(struct gl_context *ctx, */ static bool convert_clear_buffer_data(struct gl_context *ctx, - gl_format internalformat, + mesa_format internalformat, GLubyte *clearValue, GLenum format, GLenum type, const GLvoid *data, const char *caller) { @@ -407,7 +407,7 @@ _mesa_delete_buffer_object(struct gl_context *ctx, { (void) ctx; - free(bufObj->Data); + _mesa_align_free(bufObj->Data); /* assign strange values here to help w/ debugging */ bufObj->RefCount = -1000; @@ -451,8 +451,8 @@ _mesa_reference_buffer_object_(struct gl_context *ctx, #if 0 /* unfortunately, these tests are invalid during context tear-down */ ASSERT(ctx->Array.ArrayBufferObj != bufObj); - ASSERT(ctx->Array.ArrayObj->ElementArrayBufferObj != bufObj); - ASSERT(ctx->Array.ArrayObj->Vertex.BufferObj != bufObj); + ASSERT(ctx->Array.VAO->IndexBufferObj != bufObj); + ASSERT(ctx->Array.VAO->Vertex.BufferObj != bufObj); #endif ASSERT(ctx->Driver.DeleteBuffer); @@ -560,9 +560,12 @@ _mesa_buffer_data( struct gl_context *ctx, GLenum target, GLsizeiptrARB size, { void * new_data; - (void) ctx; (void) target; + (void) target; + + if (bufObj->Data) + _mesa_align_free( bufObj->Data ); - new_data = _mesa_realloc( bufObj->Data, bufObj->Size, size ); + new_data = _mesa_align_malloc( size, ctx->Const.MinMapBufferAlignment ); if (new_data) { bufObj->Data = (GLubyte *) new_data; bufObj->Size = size; @@ -1079,7 +1082,7 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint *ids) for (i = 0; i < n; i++) { struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, ids[i]); if (bufObj) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; GLuint j; ASSERT(bufObj->Name == ids[i] || bufObj == &DummyBufferObject); @@ -1092,14 +1095,14 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint *ids) } /* unbind any vertex pointers bound to this buffer */ - for (j = 0; j < Elements(arrayObj->VertexBinding); j++) { - unbind(ctx, &arrayObj->VertexBinding[j].BufferObj, bufObj); + for (j = 0; j < Elements(vao->VertexBinding); j++) { + unbind(ctx, &vao->VertexBinding[j].BufferObj, bufObj); } if (ctx->Array.ArrayBufferObj == bufObj) { _mesa_BindBuffer( GL_ARRAY_BUFFER_ARB, 0 ); } - if (arrayObj->ElementArrayBufferObj == bufObj) { + if (vao->IndexBufferObj == bufObj) { _mesa_BindBuffer( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); } @@ -1365,7 +1368,7 @@ _mesa_ClearBufferData(GLenum target, GLenum internalformat, GLenum format, { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object* bufObj; - gl_format mesaFormat; + mesa_format mesaFormat; GLubyte clearValue[MAX_PIXEL_BYTES]; GLsizeiptr clearValueSize; @@ -1420,7 +1423,7 @@ _mesa_ClearBufferSubData(GLenum target, GLenum internalformat, { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object* bufObj; - gl_format mesaFormat; + mesa_format mesaFormat; GLubyte clearValue[MAX_PIXEL_BYTES]; GLsizeiptr clearValueSize; diff --git a/mesalib/src/mesa/main/buffers.c b/mesalib/src/mesa/main/buffers.c index 2bdbf41be..6cbce9d5d 100644 --- a/mesalib/src/mesa/main/buffers.c +++ b/mesalib/src/mesa/main/buffers.c @@ -360,16 +360,18 @@ _mesa_DrawBuffers(GLsizei n, const GLenum *buffers) return; } - /* From the OpenGL 3.0 specification, page 259: + /* From the OpenGL 4.0 specification, page 256: * "For both the default framebuffer and framebuffer objects, the * constants FRONT, BACK, LEFT, RIGHT, and FRONT_AND_BACK are not * valid in the bufs array passed to DrawBuffers, and will result in - * the error INVALID_OPERATION. This restriction is because these + * the error INVALID_ENUM. This restriction is because these * constants may themselves refer to multiple buffers, as shown in * table 4.4." + * Previous versions of the OpenGL specification say INVALID_OPERATION, + * but the Khronos conformance tests expect INVALID_ENUM. */ if (_mesa_bitcount(destMask[output]) > 1) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawBuffersARB(buffer)"); + _mesa_error(ctx, GL_INVALID_ENUM, "glDrawBuffersARB(buffer)"); return; } diff --git a/mesalib/src/mesa/main/compute.c b/mesalib/src/mesa/main/compute.c new file mode 100644 index 000000000..5756666b6 --- /dev/null +++ b/mesalib/src/mesa/main/compute.c @@ -0,0 +1,54 @@ +/* + * Copyright © 2014 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 "glheader.h" +#include "compute.h" +#include "context.h" + +void GLAPIENTRY +_mesa_DispatchCompute(GLuint num_groups_x, + GLuint num_groups_y, + GLuint num_groups_z) +{ + GET_CURRENT_CONTEXT(ctx); + + if (ctx->Extensions.ARB_compute_shader) { + assert(!"TODO"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "unsupported function (glDispatchCompute) called"); + } +} + +extern void GLAPIENTRY +_mesa_DispatchComputeIndirect(GLintptr indirect) +{ + GET_CURRENT_CONTEXT(ctx); + + if (ctx->Extensions.ARB_compute_shader) { + assert(!"TODO"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "unsupported function (glDispatchComputeIndirect) called"); + } +} diff --git a/mesalib/src/mesa/main/compute.h b/mesalib/src/mesa/main/compute.h new file mode 100644 index 000000000..0cc034fd6 --- /dev/null +++ b/mesalib/src/mesa/main/compute.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2014 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. + */ + +#ifndef COMPUTE_H +#define COMPUTE_H + + +#include "glheader.h" + +extern void GLAPIENTRY +_mesa_DispatchCompute(GLuint num_groups_x, + GLuint num_groups_y, + GLuint num_groups_z); + +extern void GLAPIENTRY +_mesa_DispatchComputeIndirect(GLintptr indirect); + +#endif diff --git a/mesalib/src/mesa/main/config.h b/mesalib/src/mesa/main/config.h index 0c1782ad7..30da5d422 100644 --- a/mesalib/src/mesa/main/config.h +++ b/mesalib/src/mesa/main/config.h @@ -272,6 +272,15 @@ #define MAX_DEBUG_GROUP_STACK_DEPTH 64 /*@}*/ +/** For GL_ARB_gpu_shader5 */ +/*@{*/ +#define MAX_GEOMETRY_SHADER_INVOCATIONS 32 +#define MIN_FRAGMENT_INTERPOLATION_OFFSET -0.5 +#define MAX_FRAGMENT_INTERPOLATION_OFFSET 0.5 +#define FRAGMENT_INTERPOLATION_OFFSET_BITS 4 +#define MAX_VERTEX_STREAMS 4 +/*@}*/ + /* * Color channel component order * diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c index b7cd56866..458d8e59b 100644 --- a/mesalib/src/mesa/main/context.c +++ b/mesalib/src/mesa/main/context.c @@ -498,6 +498,14 @@ init_program_limits(struct gl_context *ctx, gl_shader_stage stage, prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */ prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */ break; + case MESA_SHADER_COMPUTE: + prog->MaxParameters = 0; /* not meaningful for compute shaders */ + prog->MaxAttribs = 0; /* not meaningful for compute shaders */ + prog->MaxAddressRegs = 0; /* not meaningful for compute shaders */ + prog->MaxUniformComponents = 4 * MAX_UNIFORMS; + prog->MaxInputComponents = 0; /* not meaningful for compute shaders */ + prog->MaxOutputComponents = 0; /* not meaningful for compute shaders */ + break; default: assert(0 && "Bad shader stage in init_program_limits()"); } @@ -587,7 +595,7 @@ _mesa_init_constants(struct gl_context *ctx) ctx->Const.MaxSpotExponent = 128.0; ctx->Const.MaxViewportWidth = MAX_VIEWPORT_WIDTH; ctx->Const.MaxViewportHeight = MAX_VIEWPORT_HEIGHT; - ctx->Const.MinMapBufferAlignment = 1; + ctx->Const.MinMapBufferAlignment = 64; /* Driver must override these values if ARB_viewport_array is supported. */ ctx->Const.MaxViewports = 1; @@ -692,6 +700,19 @@ _mesa_init_constants(struct gl_context *ctx) /* GL_ARB_vertex_attrib_binding */ ctx->Const.MaxVertexAttribRelativeOffset = 2047; ctx->Const.MaxVertexAttribBindings = MAX_VERTEX_GENERIC_ATTRIBS; + + /* GL_ARB_compute_shader */ + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; + ctx->Const.MaxComputeWorkGroupSize[0] = 1024; + ctx->Const.MaxComputeWorkGroupSize[1] = 1024; + ctx->Const.MaxComputeWorkGroupSize[2] = 64; + ctx->Const.MaxComputeWorkGroupInvocations = 1024; + + /** GL_ARB_gpu_shader5 */ + ctx->Const.MinFragmentInterpolationOffset = MIN_FRAGMENT_INTERPOLATION_OFFSET; + ctx->Const.MaxFragmentInterpolationOffset = MAX_FRAGMENT_INTERPOLATION_OFFSET; } @@ -1188,8 +1209,8 @@ _mesa_free_context_data( struct gl_context *ctx ) _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current, NULL); _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram, NULL); - _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, NULL); - _mesa_reference_array_object(ctx, &ctx->Array.DefaultArrayObj, NULL); + _mesa_reference_vao(ctx, &ctx->Array.VAO, NULL); + _mesa_reference_vao(ctx, &ctx->Array.DefaultVAO, NULL); _mesa_free_attrib_data(ctx); _mesa_free_buffer_objects(ctx); diff --git a/mesalib/src/mesa/main/dd.h b/mesalib/src/mesa/main/dd.h index 6c084afa3..ac317e399 100644 --- a/mesalib/src/mesa/main/dd.h +++ b/mesalib/src/mesa/main/dd.h @@ -182,9 +182,9 @@ struct dd_function_table { * GL_TEXTURE_CUBE_MAP_[POSITIVE/NEGATIVE]_[XYZ]. * Called by glTexImage(), etc. */ - gl_format (*ChooseTextureFormat)( struct gl_context *ctx, - GLenum target, GLint internalFormat, - GLenum srcFormat, GLenum srcType ); + mesa_format (*ChooseTextureFormat)(struct gl_context *ctx, + GLenum target, GLint internalFormat, + GLenum srcFormat, GLenum srcType ); /** * Determine sample counts support for a particular target and format @@ -256,6 +256,10 @@ struct dd_function_table { /** * Called by glGenerateMipmap() or when GL_GENERATE_MIPMAP_SGIS is enabled. + * Note that if the texture is a cube map, the parameter will + * indicate which cube face to generate (GL_POSITIVE/NEGATIVE_X/Y/Z). + * texObj->BaseLevel is the level from which to generate the remaining + * mipmap levels. */ void (*GenerateMipmap)(struct gl_context *ctx, GLenum target, struct gl_texture_object *texObj); @@ -268,7 +272,7 @@ struct dd_function_table { * \return GL_TRUE if the image is OK, GL_FALSE if too large */ GLboolean (*TestProxyTexImage)(struct gl_context *ctx, GLenum target, - GLint level, gl_format format, + GLint level, mesa_format format, GLint width, GLint height, GLint depth, GLint border); /*@}*/ @@ -403,9 +407,11 @@ struct dd_function_table { */ /*@{*/ /** Bind a vertex/fragment program */ - void (*BindProgram)(struct gl_context *ctx, GLenum target, struct gl_program *prog); + void (*BindProgram)(struct gl_context *ctx, GLenum target, + struct gl_program *prog); /** Allocate a new program */ - struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, GLuint id); + struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target, + GLuint id); /** Delete a program */ void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog); /** @@ -439,7 +445,8 @@ struct dd_function_table { * This gives drivers an opportunity to clone the IR and make their * own transformations on it for the purposes of code generation. */ - GLboolean (*LinkShader)(struct gl_context *ctx, struct gl_shader_program *shader); + GLboolean (*LinkShader)(struct gl_context *ctx, + struct gl_shader_program *shader); /*@}*/ /** @@ -457,7 +464,8 @@ struct dd_function_table { /** Set the blend color */ void (*BlendColor)(struct gl_context *ctx, const GLfloat color[4]); /** Set the blend equation */ - void (*BlendEquationSeparate)(struct gl_context *ctx, GLenum modeRGB, GLenum modeA); + void (*BlendEquationSeparate)(struct gl_context *ctx, + GLenum modeRGB, GLenum modeA); void (*BlendEquationSeparatei)(struct gl_context *ctx, GLuint buffer, GLenum modeRGB, GLenum modeA); /** Specify pixel arithmetic */ @@ -468,7 +476,7 @@ struct dd_function_table { GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorA, GLenum dfactorA); /** Specify a plane against which all geometry is clipped */ - void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *equation ); + void (*ClipPlane)(struct gl_context *ctx, GLenum plane, const GLfloat *eq); /** Enable and disable writing of frame buffer color components */ void (*ColorMask)(struct gl_context *ctx, GLboolean rmask, GLboolean gmask, GLboolean bmask, GLboolean amask ); @@ -489,7 +497,7 @@ struct dd_function_table { /** Specify the current buffer for writing */ void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer ); /** Specify the buffers for writing for fragment programs*/ - void (*DrawBuffers)( struct gl_context *ctx, GLsizei n, const GLenum *buffers ); + void (*DrawBuffers)(struct gl_context *ctx, GLsizei n, const GLenum *buffers); /** Enable or disable server-side gl capabilities */ void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state); /** Specify fog parameters */ @@ -503,7 +511,8 @@ struct dd_function_table { void (*Lightfv)(struct gl_context *ctx, GLenum light, GLenum pname, const GLfloat *params ); /** Set the lighting model parameters */ - void (*LightModelfv)(struct gl_context *ctx, GLenum pname, const GLfloat *params); + void (*LightModelfv)(struct gl_context *ctx, GLenum pname, + const GLfloat *params); /** Specify the line stipple pattern */ void (*LineStipple)(struct gl_context *ctx, GLint factor, GLushort pattern ); /** Specify the width of rasterized lines */ @@ -543,7 +552,7 @@ struct dd_function_table { void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname, const GLfloat *param); /** Set texture parameters */ - void (*TexParameter)(struct gl_context *ctx, GLenum target, + void (*TexParameter)(struct gl_context *ctx, struct gl_texture_object *texObj, GLenum pname, const GLfloat *params); /** Set the viewport */ @@ -558,14 +567,14 @@ struct dd_function_table { void (*BindBuffer)( struct gl_context *ctx, GLenum target, struct gl_buffer_object *obj ); - struct gl_buffer_object * (*NewBufferObject)( struct gl_context *ctx, GLuint buffer, - GLenum target ); + struct gl_buffer_object * (*NewBufferObject)(struct gl_context *ctx, + GLuint buffer, GLenum target); void (*DeleteBuffer)( struct gl_context *ctx, struct gl_buffer_object *obj ); - GLboolean (*BufferData)( struct gl_context *ctx, GLenum target, GLsizeiptrARB size, - const GLvoid *data, GLenum usage, - struct gl_buffer_object *obj ); + GLboolean (*BufferData)(struct gl_context *ctx, GLenum target, + GLsizeiptrARB size, const GLvoid *data, GLenum usage, + struct gl_buffer_object *obj); void (*BufferSubData)( struct gl_context *ctx, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data, @@ -607,22 +616,34 @@ struct dd_function_table { */ /*@{*/ /* variations on ObjectPurgeable */ - GLenum (*BufferObjectPurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectPurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectPurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); + GLenum (*BufferObjectPurgeable)(struct gl_context *ctx, + struct gl_buffer_object *obj, GLenum option); + GLenum (*RenderObjectPurgeable)(struct gl_context *ctx, + struct gl_renderbuffer *obj, GLenum option); + GLenum (*TextureObjectPurgeable)(struct gl_context *ctx, + struct gl_texture_object *obj, + GLenum option); /* variations on ObjectUnpurgeable */ - GLenum (*BufferObjectUnpurgeable)( struct gl_context *ctx, struct gl_buffer_object *obj, GLenum option ); - GLenum (*RenderObjectUnpurgeable)( struct gl_context *ctx, struct gl_renderbuffer *obj, GLenum option ); - GLenum (*TextureObjectUnpurgeable)( struct gl_context *ctx, struct gl_texture_object *obj, GLenum option ); + GLenum (*BufferObjectUnpurgeable)(struct gl_context *ctx, + struct gl_buffer_object *obj, + GLenum option); + GLenum (*RenderObjectUnpurgeable)(struct gl_context *ctx, + struct gl_renderbuffer *obj, + GLenum option); + GLenum (*TextureObjectUnpurgeable)(struct gl_context *ctx, + struct gl_texture_object *obj, + GLenum option); /*@}*/ /** * \name Functions for GL_EXT_framebuffer_{object,blit,discard}. */ /*@{*/ - struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, GLuint name); - struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, GLuint name); + struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, + GLuint name); + struct gl_renderbuffer * (*NewRenderbuffer)(struct gl_context *ctx, + GLuint name); void (*BindFramebuffer)(struct gl_context *ctx, GLenum target, struct gl_framebuffer *drawFb, struct gl_framebuffer *readFb); @@ -643,7 +664,8 @@ struct dd_function_table { GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); void (*DiscardFramebuffer)(struct gl_context *ctx, - GLenum target, GLsizei numAttachments, const GLenum *attachments); + GLenum target, GLsizei numAttachments, + const GLenum *attachments); /** * \name Query objects @@ -687,18 +709,20 @@ struct dd_function_table { * \name Vertex Array objects */ /*@{*/ - struct gl_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); - void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); - void (*BindArrayObject)(struct gl_context *ctx, struct gl_array_object *obj); + struct gl_vertex_array_object * (*NewArrayObject)(struct gl_context *ctx, GLuint id); + void (*DeleteArrayObject)(struct gl_context *ctx, struct gl_vertex_array_object *); + void (*BindArrayObject)(struct gl_context *ctx, struct gl_vertex_array_object *); /*@}*/ /** * \name GLSL-related functions (ARB extensions and OpenGL 2.x) */ /*@{*/ - struct gl_shader *(*NewShader)(struct gl_context *ctx, GLuint name, GLenum type); + struct gl_shader *(*NewShader)(struct gl_context *ctx, + GLuint name, GLenum type); void (*DeleteShader)(struct gl_context *ctx, struct gl_shader *shader); - struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, GLuint name); + struct gl_shader_program *(*NewShaderProgram)(struct gl_context *ctx, + GLuint name); void (*DeleteShaderProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); void (*UseProgram)(struct gl_context *ctx, struct gl_shader_program *shProg); @@ -805,7 +829,8 @@ struct dd_function_table { */ /*@{*/ struct gl_sync_object * (*NewSyncObject)(struct gl_context *, GLenum); - void (*FenceSync)(struct gl_context *, struct gl_sync_object *, GLenum, GLbitfield); + void (*FenceSync)(struct gl_context *, struct gl_sync_object *, + GLenum, GLbitfield); void (*DeleteSyncObject)(struct gl_context *, struct gl_sync_object *); void (*CheckSync)(struct gl_context *, struct gl_sync_object *); void (*ClientWaitSync)(struct gl_context *, struct gl_sync_object *, @@ -815,9 +840,11 @@ struct dd_function_table { /*@}*/ /** GL_NV_conditional_render */ - void (*BeginConditionalRender)(struct gl_context *ctx, struct gl_query_object *q, + void (*BeginConditionalRender)(struct gl_context *ctx, + struct gl_query_object *q, GLenum mode); - void (*EndConditionalRender)(struct gl_context *ctx, struct gl_query_object *q); + void (*EndConditionalRender)(struct gl_context *ctx, + struct gl_query_object *q); /** * \name GL_OES_draw_texture interface @@ -859,8 +886,8 @@ struct dd_function_table { * Begin/EndTransformFeedback block. */ GLsizei (*GetTransformFeedbackVertexCount)(struct gl_context *ctx, - struct gl_transform_feedback_object *obj, - GLuint stream); + struct gl_transform_feedback_object *obj, + GLuint stream); /** * \name GL_NV_texture_barrier interface diff --git a/mesalib/src/mesa/main/debug.c b/mesalib/src/mesa/main/debug.c index 99b214789..a5b40b4b5 100644 --- a/mesalib/src/mesa/main/debug.c +++ b/mesalib/src/mesa/main/debug.c @@ -615,21 +615,21 @@ _mesa_print_texture(struct gl_context *ctx, struct gl_texture_image *img) else { /* XXX add more formats or make into a new format utility function */ switch (img->TexFormat) { - case MESA_FORMAT_A8: - case MESA_FORMAT_L8: - case MESA_FORMAT_I8: + case MESA_FORMAT_A_UNORM8: + case MESA_FORMAT_L_UNORM8: + case MESA_FORMAT_I_UNORM8: c = 1; break; - case MESA_FORMAT_AL88: - case MESA_FORMAT_AL88_REV: + case MESA_FORMAT_L8A8_UNORM: + case MESA_FORMAT_A8L8_UNORM: c = 2; break; - case MESA_FORMAT_RGB888: - case MESA_FORMAT_BGR888: + case MESA_FORMAT_BGR_UNORM8: + case MESA_FORMAT_RGB_UNORM8: c = 3; break; - case MESA_FORMAT_RGBA8888: - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_A8B8G8R8_UNORM: + case MESA_FORMAT_B8G8R8A8_UNORM: c = 4; break; default: diff --git a/mesalib/src/mesa/main/enable.c b/mesalib/src/mesa/main/enable.c index 640db8490..40508a456 100644 --- a/mesalib/src/mesa/main/enable.c +++ b/mesalib/src/mesa/main/enable.c @@ -63,46 +63,46 @@ update_derived_primitive_restart_state(struct gl_context *ctx) static void client_state(struct gl_context *ctx, GLenum cap, GLboolean state) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; GLbitfield64 flag; GLboolean *var; switch (cap) { case GL_VERTEX_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_POS].Enabled; flag = VERT_BIT_POS; break; case GL_NORMAL_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; flag = VERT_BIT_NORMAL; break; case GL_COLOR_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; flag = VERT_BIT_COLOR0; break; case GL_INDEX_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; flag = VERT_BIT_COLOR_INDEX; break; case GL_TEXTURE_COORD_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled; flag = VERT_BIT_TEX(ctx->Array.ActiveTexture); break; case GL_EDGE_FLAG_ARRAY: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; flag = VERT_BIT_EDGEFLAG; break; case GL_FOG_COORDINATE_ARRAY_EXT: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_FOG].Enabled; flag = VERT_BIT_FOG; break; case GL_SECONDARY_COLOR_ARRAY_EXT: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; flag = VERT_BIT_COLOR1; break; case GL_POINT_SIZE_ARRAY_OES: - var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; + var = &vao->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; flag = VERT_BIT_POINT_SIZE; break; @@ -131,11 +131,11 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state) update_derived_primitive_restart_state(ctx); if (state) - arrayObj->_Enabled |= flag; + vao->_Enabled |= flag; else - arrayObj->_Enabled &= ~flag; + vao->_Enabled &= ~flag; - arrayObj->NewArrays |= flag; + vao->NewArrays |= flag; if (ctx->Driver.Enable) { ctx->Driver.Enable( ctx, cap, state ); @@ -1423,41 +1423,41 @@ _mesa_IsEnabled( GLenum cap ) case GL_VERTEX_ARRAY: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Enabled; case GL_NORMAL_ARRAY: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled; case GL_COLOR_ARRAY: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled; case GL_INDEX_ARRAY: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; - return ctx->Array.ArrayObj-> + return ctx->Array.VAO-> VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled; case GL_TEXTURE_COORD_ARRAY: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_enum_error; - return ctx->Array.ArrayObj-> + return ctx->Array.VAO-> VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].Enabled; case GL_EDGE_FLAG_ARRAY: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled; case GL_FOG_COORDINATE_ARRAY_EXT: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_FOG].Enabled; case GL_SECONDARY_COLOR_ARRAY_EXT: if (ctx->API != API_OPENGL_COMPAT) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled; case GL_POINT_SIZE_ARRAY_OES: if (ctx->API != API_OPENGLES) goto invalid_enum_error; - return ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; + return ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled; /* GL_ARB_texture_cube_map */ case GL_TEXTURE_CUBE_MAP_ARB: diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index 0676f1e3d..5f741fbd2 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/src/mesa/main/extensions.c @@ -85,6 +85,7 @@ static const struct extension extension_table[] = { { "GL_ARB_blend_func_extended", o(ARB_blend_func_extended), GL, 2009 }, { "GL_ARB_clear_buffer_object", o(dummy_true), GL, 2012 }, { "GL_ARB_color_buffer_float", o(ARB_color_buffer_float), GL, 2004 }, + { "GL_ARB_compute_shader", o(ARB_compute_shader), GL, 2012 }, { "GL_ARB_copy_buffer", o(dummy_true), GL, 2008 }, { "GL_ARB_conservative_depth", o(ARB_conservative_depth), GL, 2011 }, { "GL_ARB_debug_output", o(dummy_true), GL, 2009 }, @@ -110,7 +111,7 @@ static const struct extension extension_table[] = { { "GL_ARB_instanced_arrays", o(ARB_instanced_arrays), GL, 2008 }, { "GL_ARB_internalformat_query", o(ARB_internalformat_query), GL, 2011 }, { "GL_ARB_invalidate_subdata", o(dummy_true), GL, 2012 }, - { "GL_ARB_map_buffer_alignment", o(ARB_map_buffer_alignment), GL, 2011 }, + { "GL_ARB_map_buffer_alignment", o(dummy_true), GL, 2011 }, { "GL_ARB_map_buffer_range", o(ARB_map_buffer_range), GL, 2008 }, { "GL_ARB_multi_draw_indirect", o(ARB_draw_indirect), GLC, 2012 }, { "GL_ARB_multisample", o(dummy_true), GLL, 1994 }, @@ -195,7 +196,7 @@ static const struct extension extension_table[] = { { "GL_EXT_draw_instanced", o(ARB_draw_instanced), GL, 2006 }, { "GL_EXT_draw_range_elements", o(dummy_true), GLL, 1997 }, { "GL_EXT_fog_coord", o(dummy_true), GLL, 1999 }, - { "GL_EXT_framebuffer_blit", o(EXT_framebuffer_blit), GL, 2005 }, + { "GL_EXT_framebuffer_blit", o(dummy_true), 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(dummy_true), GLL, 2000 }, @@ -436,7 +437,6 @@ _mesa_enable_sw_extensions(struct gl_context *ctx) ctx->Extensions.EXT_blend_minmax = GL_TRUE; ctx->Extensions.EXT_depth_bounds_test = GL_TRUE; ctx->Extensions.EXT_draw_buffers2 = GL_TRUE; - ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; ctx->Extensions.EXT_point_parameters = GL_TRUE; ctx->Extensions.EXT_provoking_vertex = GL_TRUE; diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 943f40bd9..e459e0c63 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -50,10 +50,6 @@ #include "texobj.h" -/** Set this to 1 to debug/log glBlitFramebuffer() calls */ -#define DEBUG_BLIT 0 - - /** * Notes: * @@ -163,8 +159,7 @@ invalidate_framebuffer(struct gl_framebuffer *fb) static struct gl_framebuffer * get_framebuffer_target(struct gl_context *ctx, GLenum target) { - bool have_fb_blit = _mesa_is_gles3(ctx) || - (ctx->Extensions.EXT_framebuffer_blit && _mesa_is_desktop_gl(ctx)); + bool have_fb_blit = _mesa_is_gles3(ctx) || _mesa_is_desktop_gl(ctx); switch (target) { case GL_DRAW_FRAMEBUFFER: return have_fb_blit ? ctx->DrawBuffer : NULL; @@ -186,9 +181,9 @@ get_framebuffer_target(struct gl_context *ctx, GLenum target) * If \p attachment is GL_DEPTH_STENCIL_ATTACHMENT, return a pointer to * the depth buffer attachment point. */ -struct gl_renderbuffer_attachment * -_mesa_get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb, - GLenum attachment) +static struct gl_renderbuffer_attachment * +get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb, + GLenum attachment) { GLuint i; @@ -318,9 +313,9 @@ _mesa_get_fb0_attachment(struct gl_context *ctx, struct gl_framebuffer *fb, * Remove any texture or renderbuffer attached to the given attachment * point. Update reference counts, etc. */ -void -_mesa_remove_attachment(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att) +static void +remove_attachment(struct gl_context *ctx, + struct gl_renderbuffer_attachment *att) { struct gl_renderbuffer *rb = att->Renderbuffer; @@ -423,13 +418,13 @@ _mesa_update_texture_renderbuffer(struct gl_context *ctx, * Bind a texture object to an attachment point. * The previous binding, if any, will be removed first. */ -void -_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, - GLboolean layered) +static void +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, + GLboolean layered) { struct gl_renderbuffer *rb = att->Renderbuffer; @@ -442,7 +437,7 @@ _mesa_set_texture_attachment(struct gl_context *ctx, } else { /* new attachment */ - _mesa_remove_attachment(ctx, att); + remove_attachment(ctx, att); att->Type = GL_TEXTURE; assert(!att->Texture); _mesa_reference_texobj(&att->Texture, texObj); @@ -464,13 +459,13 @@ _mesa_set_texture_attachment(struct gl_context *ctx, * Bind a renderbuffer to an attachment point. * The previous binding, if any, will be removed first. */ -void -_mesa_set_renderbuffer_attachment(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att, - struct gl_renderbuffer *rb) +static void +set_renderbuffer_attachment(struct gl_context *ctx, + struct gl_renderbuffer_attachment *att, + struct gl_renderbuffer *rb) { /* XXX check if re-doing same attachment, exit early */ - _mesa_remove_attachment(ctx, att); + remove_attachment(ctx, att); att->Type = GL_RENDERBUFFER_EXT; att->Texture = NULL; /* just to be safe */ att->Complete = GL_FALSE; @@ -491,20 +486,20 @@ _mesa_framebuffer_renderbuffer(struct gl_context *ctx, _glthread_LOCK_MUTEX(fb->Mutex); - att = _mesa_get_attachment(ctx, fb, attachment); + att = get_attachment(ctx, fb, attachment); ASSERT(att); if (rb) { - _mesa_set_renderbuffer_attachment(ctx, att, rb); + set_renderbuffer_attachment(ctx, att, rb); if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { /* do stencil attachment here (depth already done above) */ - att = _mesa_get_attachment(ctx, fb, GL_STENCIL_ATTACHMENT_EXT); + att = get_attachment(ctx, fb, GL_STENCIL_ATTACHMENT_EXT); assert(att); - _mesa_set_renderbuffer_attachment(ctx, att, rb); + set_renderbuffer_attachment(ctx, att, rb); } rb->AttachedAnytime = GL_TRUE; } else { - _mesa_remove_attachment(ctx, att); + remove_attachment(ctx, att); } invalidate_framebuffer(fb); @@ -539,7 +534,7 @@ _mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) default: switch (rb->Format) { /* XXX This list is likely incomplete. */ - case MESA_FORMAT_RGB9_E5_FLOAT: + case MESA_FORMAT_R9G9B9E5_FLOAT: fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED; return; default:; @@ -637,7 +632,7 @@ _mesa_is_legal_color_format(const struct gl_context *ctx, GLenum baseFormat) * Is the given base format a legal format for a color renderbuffer? */ static GLboolean -is_format_color_renderable(const struct gl_context *ctx, gl_format format, GLenum internalFormat) +is_format_color_renderable(const struct gl_context *ctx, mesa_format format, GLenum internalFormat) { const GLenum baseFormat = _mesa_get_format_base_format(format); @@ -669,7 +664,7 @@ is_format_color_renderable(const struct gl_context *ctx, gl_format format, GLenu break; } - if (format == MESA_FORMAT_ARGB2101010 && internalFormat != GL_RGB10_A2) { + if (format == MESA_FORMAT_B10G10R10A2_UNORM && internalFormat != GL_RGB10_A2) { return GL_FALSE; } @@ -902,7 +897,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, for (i = -2; i < (GLint) ctx->Const.MaxColorAttachments; i++) { struct gl_renderbuffer_attachment *att; GLenum f; - gl_format attFormat; + mesa_format attFormat; GLenum att_tex_target = GL_NONE; /* @@ -1090,7 +1085,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, for (j = 0; j < ctx->Const.MaxDrawBuffers; j++) { if (fb->ColorDrawBuffer[j] != GL_NONE) { const struct gl_renderbuffer_attachment *att - = _mesa_get_attachment(ctx, fb, fb->ColorDrawBuffer[j]); + = get_attachment(ctx, fb, fb->ColorDrawBuffer[j]); assert(att); if (att->Type == GL_NONE) { fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT; @@ -1103,7 +1098,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, /* Check that the ReadBuffer is present */ if (fb->ColorReadBuffer != GL_NONE) { const struct gl_renderbuffer_attachment *att - = _mesa_get_attachment(ctx, fb, fb->ColorReadBuffer); + = get_attachment(ctx, fb, fb->ColorReadBuffer); assert(att); if (att->Type == GL_NONE) { fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT; @@ -1251,7 +1246,7 @@ _mesa_detach_renderbuffer(struct gl_context *ctx, for (i = 0; i < BUFFER_COUNT; i++) { if (fb->Attachment[i].Texture == att || fb->Attachment[i].Renderbuffer == att) { - _mesa_remove_attachment(ctx, &fb->Attachment[i]); + remove_attachment(ctx, &fb->Attachment[i]); progress = true; } } @@ -1859,7 +1854,7 @@ _mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image) * we need to return zero. */ static GLint -get_component_bits(GLenum pname, GLenum baseFormat, gl_format format) +get_component_bits(GLenum pname, GLenum baseFormat, mesa_format format) { if (_mesa_base_format_has_channel(baseFormat, pname)) return _mesa_get_format_bits(format, pname); @@ -2037,26 +2032,12 @@ bind_framebuffer(GLenum target, GLuint framebuffer, bool allow_user_names) GLboolean bindReadBuf, bindDrawBuf; GET_CURRENT_CONTEXT(ctx); -#ifdef DEBUG - if (ctx->Extensions.ARB_framebuffer_object) { - ASSERT(ctx->Extensions.EXT_framebuffer_blit); - } -#endif - switch (target) { case GL_DRAW_FRAMEBUFFER_EXT: - if (!ctx->Extensions.EXT_framebuffer_blit) { - _mesa_error(ctx, GL_INVALID_ENUM, "glBindFramebufferEXT(target)"); - return; - } bindDrawBuf = GL_TRUE; bindReadBuf = GL_FALSE; break; case GL_READ_FRAMEBUFFER_EXT: - if (!ctx->Extensions.EXT_framebuffer_blit) { - _mesa_error(ctx, GL_INVALID_ENUM, "glBindFramebufferEXT(target)"); - return; - } bindDrawBuf = GL_FALSE; bindReadBuf = GL_TRUE; break; @@ -2190,26 +2171,15 @@ _mesa_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers) ASSERT(fb == &DummyFramebuffer || fb->Name == framebuffers[i]); /* check if deleting currently bound framebuffer object */ - if (ctx->Extensions.EXT_framebuffer_blit) { - /* separate draw/read binding points */ - if (fb == ctx->DrawBuffer) { - /* bind default */ - ASSERT(fb->RefCount >= 2); - _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, 0); - } - if (fb == ctx->ReadBuffer) { - /* bind default */ - ASSERT(fb->RefCount >= 2); - _mesa_BindFramebuffer(GL_READ_FRAMEBUFFER_EXT, 0); - } + if (fb == ctx->DrawBuffer) { + /* bind default */ + ASSERT(fb->RefCount >= 2); + _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } - else { - /* only one binding point for read/draw buffers */ - if (fb == ctx->DrawBuffer || fb == ctx->ReadBuffer) { - /* bind default */ - ASSERT(fb->RefCount >= 2); - _mesa_BindFramebuffer(GL_FRAMEBUFFER_EXT, 0); - } + if (fb == ctx->ReadBuffer) { + /* bind default */ + ASSERT(fb->RefCount >= 2); + _mesa_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); } /* remove from hash table immediately, to free the ID */ @@ -2454,7 +2424,7 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target, } } - att = _mesa_get_attachment(ctx, fb, attachment); + att = get_attachment(ctx, fb, attachment); if (att == NULL) { _mesa_error(ctx, GL_INVALID_ENUM, "glFramebufferTexture%sEXT(attachment)", caller); @@ -2488,7 +2458,7 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target, reuse_framebuffer_texture_attachment(fb, BUFFER_STENCIL, BUFFER_DEPTH); } else { - _mesa_set_texture_attachment(ctx, fb, att, texObj, textarget, + set_texture_attachment(ctx, fb, att, texObj, textarget, level, zoffset, layered); if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { /* Above we created a new renderbuffer and attached it to the @@ -2512,10 +2482,10 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target, texObj->_RenderToTexture = GL_TRUE; } else { - _mesa_remove_attachment(ctx, att); + remove_attachment(ctx, att); if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { assert(att == &fb->Attachment[BUFFER_DEPTH]); - _mesa_remove_attachment(ctx, &fb->Attachment[BUFFER_STENCIL]); + remove_attachment(ctx, &fb->Attachment[BUFFER_STENCIL]); } } @@ -2683,7 +2653,7 @@ _mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment, return; } - att = _mesa_get_attachment(ctx, fb, attachment); + att = get_attachment(ctx, fb, attachment); if (att == NULL) { _mesa_error(ctx, GL_INVALID_ENUM, "glFramebufferRenderbufferEXT(invalid attachment %s)", @@ -2785,7 +2755,7 @@ _mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, } else { /* user-created framebuffer FBO */ - att = _mesa_get_attachment(ctx, buffer, attachment); + att = get_attachment(ctx, buffer, attachment); } if (att == NULL) { @@ -2797,8 +2767,8 @@ _mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { /* the depth and stencil attachments must point to the same buffer */ const struct gl_renderbuffer_attachment *depthAtt, *stencilAtt; - depthAtt = _mesa_get_attachment(ctx, buffer, GL_DEPTH_ATTACHMENT); - stencilAtt = _mesa_get_attachment(ctx, buffer, GL_STENCIL_ATTACHMENT); + depthAtt = get_attachment(ctx, buffer, GL_DEPTH_ATTACHMENT); + stencilAtt = get_attachment(ctx, buffer, GL_STENCIL_ATTACHMENT); if (depthAtt->Renderbuffer != stencilAtt->Renderbuffer) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetFramebufferAttachmentParameterivEXT(DEPTH/STENCIL" @@ -2908,7 +2878,7 @@ _mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, "glGetFramebufferAttachmentParameterivEXT(pname)"); } else { - gl_format format = att->Renderbuffer->Format; + mesa_format format = att->Renderbuffer->Format; /* Page 235 (page 247 of the PDF) in section 6.1.13 of the OpenGL ES * 3.0.1 spec says: @@ -2925,11 +2895,11 @@ _mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, return; } - if (format == MESA_FORMAT_S8) { + if (format == MESA_FORMAT_S_UINT8) { /* special cases */ *params = GL_INDEX; } - else if (format == MESA_FORMAT_Z32_FLOAT_X24S8) { + else if (format == MESA_FORMAT_Z32_FLOAT_S8X24_UINT) { /* depends on the attachment parameter */ if (attachment == GL_STENCIL_ATTACHMENT) { *params = GL_INDEX; @@ -3003,567 +2973,6 @@ invalid_pname_enum: } -void GLAPIENTRY -_mesa_GenerateMipmap(GLenum target) -{ - struct gl_texture_image *srcImage; - struct gl_texture_object *texObj; - GLboolean error; - - GET_CURRENT_CONTEXT(ctx); - - FLUSH_VERTICES(ctx, 0); - - switch (target) { - case GL_TEXTURE_1D: - error = _mesa_is_gles(ctx); - break; - case GL_TEXTURE_2D: - error = GL_FALSE; - break; - case GL_TEXTURE_3D: - error = ctx->API == API_OPENGLES; - break; - case GL_TEXTURE_CUBE_MAP: - error = !ctx->Extensions.ARB_texture_cube_map; - break; - case GL_TEXTURE_1D_ARRAY: - error = _mesa_is_gles(ctx) || !ctx->Extensions.EXT_texture_array; - break; - case GL_TEXTURE_2D_ARRAY: - error = (_mesa_is_gles(ctx) && ctx->Version < 30) - || !ctx->Extensions.EXT_texture_array; - break; - default: - error = GL_TRUE; - } - - if (error) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGenerateMipmapEXT(target=%s)", - _mesa_lookup_enum_by_nr(target)); - return; - } - - texObj = _mesa_get_current_tex_object(ctx, target); - - if (texObj->BaseLevel >= texObj->MaxLevel) { - /* nothing to do */ - return; - } - - if (texObj->Target == GL_TEXTURE_CUBE_MAP && - !_mesa_cube_complete(texObj)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGenerateMipmap(incomplete cube map)"); - return; - } - - _mesa_lock_texture(ctx, texObj); - - srcImage = _mesa_select_tex_image(ctx, texObj, target, texObj->BaseLevel); - if (!srcImage) { - _mesa_unlock_texture(ctx, texObj); - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGenerateMipmap(zero size base image)"); - return; - } - - if (_mesa_is_enum_format_integer(srcImage->InternalFormat) || - _mesa_is_depthstencil_format(srcImage->InternalFormat) || - _mesa_is_stencil_format(srcImage->InternalFormat)) { - _mesa_unlock_texture(ctx, texObj); - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGenerateMipmap(invalid internal format)"); - return; - } - - if (target == GL_TEXTURE_CUBE_MAP) { - GLuint face; - for (face = 0; face < 6; face++) - ctx->Driver.GenerateMipmap(ctx, - GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + face, - texObj); - } - else { - ctx->Driver.GenerateMipmap(ctx, target, texObj); - } - _mesa_unlock_texture(ctx, texObj); -} - - -static const struct gl_renderbuffer_attachment * -find_attachment(const struct gl_framebuffer *fb, - const struct gl_renderbuffer *rb) -{ - GLuint i; - for (i = 0; i < Elements(fb->Attachment); i++) { - if (fb->Attachment[i].Renderbuffer == rb) - return &fb->Attachment[i]; - } - return NULL; -} - - -/** - * Helper function for checking if the datatypes of color buffers are - * compatible for glBlitFramebuffer. From the 3.1 spec, page 198: - * - * "GL_INVALID_OPERATION is generated if mask contains GL_COLOR_BUFFER_BIT - * and any of the following conditions hold: - * - The read buffer contains fixed-point or floating-point values and any - * draw buffer contains neither fixed-point nor floating-point values. - * - The read buffer contains unsigned integer values and any draw buffer - * does not contain unsigned integer values. - * - The read buffer contains signed integer values and any draw buffer - * does not contain signed integer values." - */ -static GLboolean -compatible_color_datatypes(gl_format srcFormat, gl_format dstFormat) -{ - GLenum srcType = _mesa_get_format_datatype(srcFormat); - GLenum dstType = _mesa_get_format_datatype(dstFormat); - - if (srcType != GL_INT && srcType != GL_UNSIGNED_INT) { - assert(srcType == GL_UNSIGNED_NORMALIZED || - srcType == GL_SIGNED_NORMALIZED || - srcType == GL_FLOAT); - /* Boil any of those types down to GL_FLOAT */ - srcType = GL_FLOAT; - } - - if (dstType != GL_INT && dstType != GL_UNSIGNED_INT) { - assert(dstType == GL_UNSIGNED_NORMALIZED || - dstType == GL_SIGNED_NORMALIZED || - dstType == GL_FLOAT); - /* Boil any of those types down to GL_FLOAT */ - dstType = GL_FLOAT; - } - - return srcType == dstType; -} - - -static GLboolean -compatible_resolve_formats(const struct gl_renderbuffer *readRb, - const struct gl_renderbuffer *drawRb) -{ - GLenum readFormat, drawFormat; - - /* The simple case where we know the backing Mesa formats are the same. - */ - if (_mesa_get_srgb_format_linear(readRb->Format) == - _mesa_get_srgb_format_linear(drawRb->Format)) { - return GL_TRUE; - } - - /* The Mesa formats are different, so we must check whether the internal - * formats are compatible. - * - * Under some circumstances, the user may request e.g. two GL_RGBA8 - * textures and get two entirely different Mesa formats like RGBA8888 and - * ARGB8888. Drivers behaving like that should be able to cope with - * non-matching formats by themselves, because it's not the user's fault. - * - * Blits between linear and sRGB formats are also allowed. - */ - readFormat = _mesa_get_nongeneric_internalformat(readRb->InternalFormat); - drawFormat = _mesa_get_nongeneric_internalformat(drawRb->InternalFormat); - readFormat = _mesa_get_linear_internalformat(readFormat); - drawFormat = _mesa_get_linear_internalformat(drawFormat); - - if (readFormat == drawFormat) { - return GL_TRUE; - } - - 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. - * - * Note, if the src buffer is multisampled and the dest is not, this is - * when the samples must be resolved to a single color. - */ -void GLAPIENTRY -_mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter) -{ - const GLbitfield legalMaskBits = (GL_COLOR_BUFFER_BIT | - GL_DEPTH_BUFFER_BIT | - GL_STENCIL_BUFFER_BIT); - const struct gl_framebuffer *readFb, *drawFb; - GET_CURRENT_CONTEXT(ctx); - - FLUSH_VERTICES(ctx, 0); - - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, - "glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, 0x%x, %s)\n", - srcX0, srcY0, srcX1, srcY1, - dstX0, dstY0, dstX1, dstY1, - mask, _mesa_lookup_enum_by_nr(filter)); - - if (ctx->NewState) { - _mesa_update_state(ctx); - } - - readFb = ctx->ReadBuffer; - drawFb = ctx->DrawBuffer; - - if (!readFb || !drawFb) { - /* This will normally never happen but someday we may want to - * support MakeCurrent() with no drawables. - */ - return; - } - - /* check for complete framebuffers */ - if (drawFb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT || - readFb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { - _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, - "glBlitFramebufferEXT(incomplete draw/read buffers)"); - return; - } - - 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; - } - - if (mask & ~legalMaskBits) { - _mesa_error( ctx, GL_INVALID_VALUE, "glBlitFramebufferEXT(mask)"); - return; - } - - /* depth/stencil must be blitted with nearest filtering */ - if ((mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) - && filter != GL_NEAREST) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(depth/stencil requires GL_NEAREST filter)"); - return; - } - - /* get color read/draw renderbuffers */ - if (mask & GL_COLOR_BUFFER_BIT) { - const GLuint numColorDrawBuffers = ctx->DrawBuffer->_NumColorDrawBuffers; - const struct gl_renderbuffer *colorReadRb = readFb->_ColorReadBuffer; - const struct gl_renderbuffer *colorDrawRb = NULL; - GLuint i; - - /* From the EXT_framebuffer_object spec: - * - * "If a buffer is specified in and does not exist in both - * the read and draw framebuffers, the corresponding bit is silently - * ignored." - */ - if (!colorReadRb || numColorDrawBuffers == 0) { - mask &= ~GL_COLOR_BUFFER_BIT; - } - else { - for (i = 0; i < numColorDrawBuffers; i++) { - colorDrawRb = ctx->DrawBuffer->_ColorDrawBuffers[i]; - if (!colorDrawRb) - continue; - - /* Page 193 (page 205 of the PDF) in section 4.3.2 of the OpenGL - * ES 3.0.1 spec says: - * - * "If the source and destination buffers are identical, an - * INVALID_OPERATION error is generated. Different mipmap - * levels of a texture, different layers of a three- - * dimensional texture or two-dimensional array texture, and - * different faces of a cube map texture do not constitute - * identical buffers." - */ - if (_mesa_is_gles3(ctx) && (colorDrawRb == colorReadRb)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(source and destination color " - "buffer cannot be the same)"); - return; - } - - if (!compatible_color_datatypes(colorReadRb->Format, - colorDrawRb->Format)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(color buffer datatypes mismatch)"); - return; - } - /* extra checks for multisample copies... */ - if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) { - /* color formats must match */ - if (!compatible_resolve_formats(colorReadRb, colorDrawRb)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(bad src/dst multisample pixel formats)"); - return; - } - } - } - if (filter != GL_NEAREST) { - /* From EXT_framebuffer_multisample_blit_scaled specification: - * "Calling BlitFramebuffer will result in an INVALID_OPERATION error - * 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) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(integer color type)"); - return; - } - } - } - } - - if (mask & GL_STENCIL_BUFFER_BIT) { - struct gl_renderbuffer *readRb = - readFb->Attachment[BUFFER_STENCIL].Renderbuffer; - struct gl_renderbuffer *drawRb = - drawFb->Attachment[BUFFER_STENCIL].Renderbuffer; - - /* From the EXT_framebuffer_object spec: - * - * "If a buffer is specified in and does not exist in both - * the read and draw framebuffers, the corresponding bit is silently - * ignored." - */ - if ((readRb == NULL) || (drawRb == NULL)) { - mask &= ~GL_STENCIL_BUFFER_BIT; - } - else { - int read_z_bits, draw_z_bits; - - if (_mesa_is_gles3(ctx) && (drawRb == readRb)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(source and destination stencil " - "buffer cannot be the same)"); - return; - } - - if (_mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS) != - _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS)) { - /* There is no need to check the stencil datatype here, because - * there is only one: GL_UNSIGNED_INT. - */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(stencil attachment format mismatch)"); - return; - } - - read_z_bits = _mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS); - draw_z_bits = _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS); - - /* If both buffers also have depth data, the depth formats must match - * as well. If one doesn't have depth, it's not blitted, so we should - * ignore the depth format check. - */ - if (read_z_bits > 0 && draw_z_bits > 0 && - (read_z_bits != draw_z_bits || - _mesa_get_format_datatype(readRb->Format) != - _mesa_get_format_datatype(drawRb->Format))) { - - _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebuffer" - "(stencil attachment depth format mismatch)"); - return; - } - } - } - - if (mask & GL_DEPTH_BUFFER_BIT) { - struct gl_renderbuffer *readRb = - readFb->Attachment[BUFFER_DEPTH].Renderbuffer; - struct gl_renderbuffer *drawRb = - drawFb->Attachment[BUFFER_DEPTH].Renderbuffer; - - /* From the EXT_framebuffer_object spec: - * - * "If a buffer is specified in and does not exist in both - * the read and draw framebuffers, the corresponding bit is silently - * ignored." - */ - if ((readRb == NULL) || (drawRb == NULL)) { - mask &= ~GL_DEPTH_BUFFER_BIT; - } - else { - int read_s_bit, draw_s_bit; - - if (_mesa_is_gles3(ctx) && (drawRb == readRb)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(source and destination depth " - "buffer cannot be the same)"); - return; - } - - if ((_mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS) != - _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS)) || - (_mesa_get_format_datatype(readRb->Format) != - _mesa_get_format_datatype(drawRb->Format))) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(depth attachment format mismatch)"); - return; - } - - read_s_bit = _mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS); - draw_s_bit = _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS); - - /* If both buffers also have stencil data, the stencil formats must - * match as well. If one doesn't have stencil, it's not blitted, so - * we should ignore the stencil format check. - */ - if (read_s_bit > 0 && draw_s_bit > 0 && read_s_bit != draw_s_bit) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebuffer" - "(depth attachment stencil bits mismatch)"); - return; - } - } - } - - - if (_mesa_is_gles3(ctx)) { - /* Page 194 (page 206 of the PDF) in section 4.3.2 of the OpenGL ES - * 3.0.1 spec says: - * - * "If SAMPLE_BUFFERS for the draw framebuffer is greater than zero, - * an INVALID_OPERATION error is generated." - */ - if (drawFb->Visual.samples > 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(destination samples must be 0)"); - return; - } - - /* Page 194 (page 206 of the PDF) in section 4.3.2 of the OpenGL ES - * 3.0.1 spec says: - * - * "If SAMPLE_BUFFERS for the read framebuffer is greater than zero, - * no copy is performed and an INVALID_OPERATION error is generated - * if the formats of the read and draw framebuffers are not - * identical or if the source and destination rectangles are not - * defined with the same (X0, Y0) and (X1, Y1) bounds." - * - * The format check was made above because desktop OpenGL has the same - * requirement. - */ - if (readFb->Visual.samples > 0 - && (srcX0 != dstX0 || srcY0 != dstY0 - || srcX1 != dstX1 || srcY1 != dstY1)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebuffer(bad src/dst multisample region)"); - return; - } - } else { - if (readFb->Visual.samples > 0 && - drawFb->Visual.samples > 0 && - readFb->Visual.samples != drawFb->Visual.samples) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(mismatched samples)"); - return; - } - - /* extra checks for multisample copies... */ - 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)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBlitFramebufferEXT(bad src/dst multisample region sizes)"); - return; - } - } - } - - if (!ctx->Extensions.EXT_framebuffer_blit) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT"); - return; - } - - /* Debug code */ - if (DEBUG_BLIT) { - const struct gl_renderbuffer *colorReadRb = readFb->_ColorReadBuffer; - const struct gl_renderbuffer *colorDrawRb = NULL; - GLuint i = 0; - - printf("glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d," - " 0x%x, 0x%x)\n", - srcX0, srcY0, srcX1, srcY1, - dstX0, dstY0, dstX1, dstY1, - mask, filter); - if (colorReadRb) { - const struct gl_renderbuffer_attachment *att; - - att = find_attachment(readFb, colorReadRb); - printf(" Src FBO %u RB %u (%dx%d) ", - readFb->Name, colorReadRb->Name, - colorReadRb->Width, colorReadRb->Height); - if (att && att->Texture) { - printf("Tex %u tgt 0x%x level %u face %u", - att->Texture->Name, - att->Texture->Target, - att->TextureLevel, - att->CubeMapFace); - } - printf("\n"); - - /* Print all active color render buffers */ - for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { - colorDrawRb = ctx->DrawBuffer->_ColorDrawBuffers[i]; - if (!colorDrawRb) - continue; - - att = find_attachment(drawFb, colorDrawRb); - printf(" Dst FBO %u RB %u (%dx%d) ", - drawFb->Name, colorDrawRb->Name, - colorDrawRb->Width, colorDrawRb->Height); - if (att && att->Texture) { - printf("Tex %u tgt 0x%x level %u face %u", - att->Texture->Name, - att->Texture->Target, - att->TextureLevel, - att->CubeMapFace); - } - printf("\n"); - } - } - } - - if (!mask || - (srcX1 - srcX0) == 0 || (srcY1 - srcY0) == 0 || - (dstX1 - dstX0) == 0 || (dstY1 - dstY0) == 0) { - return; - } - - ASSERT(ctx->Driver.BlitFramebuffer); - ctx->Driver.BlitFramebuffer(ctx, - srcX0, srcY0, srcX1, srcY1, - dstX0, dstY0, dstX1, dstY1, - mask, filter); -} - - static void invalidate_framebuffer_storage(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, diff --git a/mesalib/src/mesa/main/fbobject.h b/mesalib/src/mesa/main/fbobject.h index ab138cfff..77fdef415 100644 --- a/mesalib/src/mesa/main/fbobject.h +++ b/mesalib/src/mesa/main/fbobject.h @@ -67,26 +67,6 @@ _mesa_lookup_renderbuffer(struct gl_context *ctx, GLuint id); extern struct gl_framebuffer * _mesa_lookup_framebuffer(struct gl_context *ctx, GLuint id); -extern struct gl_renderbuffer_attachment * -_mesa_get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb, - GLenum attachment); - -extern void -_mesa_remove_attachment(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att); - -extern void -_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, - 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, @@ -202,15 +182,6 @@ extern void GLAPIENTRY _mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params); -extern void GLAPIENTRY -_mesa_GenerateMipmap(GLenum target); - - -extern void GLAPIENTRY -_mesa_BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); - extern void GLAPIENTRY _mesa_InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, diff --git a/mesalib/src/mesa/main/ffvertex_prog.c b/mesalib/src/mesa/main/ffvertex_prog.c index 4d71c55ee..c5583c965 100644 --- a/mesalib/src/mesa/main/ffvertex_prog.c +++ b/mesalib/src/mesa/main/ffvertex_prog.c @@ -228,7 +228,7 @@ static void make_state_key( struct gl_context *ctx, struct state_key *key ) if (ctx->Point._Attenuated) key->point_attenuated = 1; - if (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) + if (ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) key->point_array = 1; if (ctx->Texture._TexGenEnabled || diff --git a/mesalib/src/mesa/main/format_pack.c b/mesalib/src/mesa/main/format_pack.c index 41f5f99c1..dee253c40 100644 --- a/mesalib/src/mesa/main/format_pack.c +++ b/mesalib/src/mesa/main/format_pack.c @@ -43,7 +43,7 @@ #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h" -/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */ +/** Helper struct for MESA_FORMAT_Z32_FLOAT_S8X24_UINT */ struct z32f_x24s8 { float z; @@ -92,7 +92,7 @@ linear_ubyte_to_srgb_ubyte(GLubyte cl) /* - * MESA_FORMAT_RGBA8888 + * MESA_FORMAT_A8B8G8R8_UNORM */ static void @@ -136,7 +136,7 @@ pack_row_float_RGBA8888(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_RGBA8888_REV + * MESA_FORMAT_R8G8B8A8_UNORM */ static void @@ -179,7 +179,7 @@ pack_row_float_RGBA8888_REV(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_ARGB8888 + * MESA_FORMAT_B8G8R8A8_UNORM */ static void @@ -222,7 +222,7 @@ pack_row_float_ARGB8888(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_ARGB8888_REV + * MESA_FORMAT_A8R8G8B8_UNORM */ static void @@ -265,7 +265,7 @@ pack_row_float_ARGB8888_REV(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_XRGB8888 + * MESA_FORMAT_B8G8R8X8_UNORM */ static void @@ -307,7 +307,7 @@ pack_row_float_XRGB8888(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_XRGB8888_REV + * MESA_FORMAT_X8R8G8B8_UNORM */ static void @@ -349,7 +349,7 @@ pack_row_float_XRGB8888_REV(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_RGB888 + * MESA_FORMAT_BGR_UNORM8 */ static void @@ -398,7 +398,7 @@ pack_row_float_RGB888(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_BGR888 + * MESA_FORMAT_RGB_UNORM8 */ static void @@ -447,7 +447,7 @@ pack_row_float_BGR888(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_RGB565 + * MESA_FORMAT_B5G6R5_UNORM */ static void @@ -491,7 +491,9 @@ pack_row_float_RGB565(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_RGB565_REV + * MESA_FORMAT_R5G6B5_UNORM + * Warning: these functions do not match the current Mesa definition + * of MESA_FORMAT_R5G6B5_UNORM. */ static void @@ -536,7 +538,7 @@ pack_row_float_RGB565_REV(GLuint n, const GLfloat src[][4], void *dst) /* - * MESA_FORMAT_ARGB4444 + * MESA_FORMAT_B4G4R4A4_UNORM */ static void @@ -558,7 +560,7 @@ pack_float_ARGB4444(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_ARGB4444_REV + * MESA_FORMAT_A4R4G4B4_UNORM */ static void @@ -580,7 +582,7 @@ pack_float_ARGB4444_REV(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_RGBA5551 + * MESA_FORMAT_A1B5G5R5_UNORM */ static void @@ -602,7 +604,7 @@ pack_float_RGBA5551(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_ARGB1555 + * MESA_FORMAT_B5G5R5A1_UNORM */ static void @@ -621,7 +623,10 @@ pack_float_ARGB1555(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_ARGB1555_REV */ +/* MESA_FORMAT_A1R5G5B5_UNORM + * Warning: these functions do not match the current Mesa definition + * of MESA_FORMAT_A1R5G5B5_UNORM. + */ static void pack_ubyte_ARGB1555_REV(const GLubyte src[4], void *dst) @@ -640,7 +645,7 @@ pack_float_ARGB1555_REV(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_AL44 */ +/* MESA_FORMAT_L4A4_UNORM */ static void pack_ubyte_AL44(const GLubyte src[4], void *dst) @@ -659,7 +664,7 @@ pack_float_AL44(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_AL88 */ +/* MESA_FORMAT_L8A8_UNORM */ static void pack_ubyte_AL88(const GLubyte src[4], void *dst) @@ -678,7 +683,7 @@ pack_float_AL88(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_AL88_REV */ +/* MESA_FORMAT_A8L8_UNORM */ static void pack_ubyte_AL88_REV(const GLubyte src[4], void *dst) @@ -697,7 +702,7 @@ pack_float_AL88_REV(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_AL1616 */ +/* MESA_FORMAT_L16A16_UNORM */ static void pack_ubyte_AL1616(const GLubyte src[4], void *dst) @@ -719,7 +724,7 @@ pack_float_AL1616(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_AL1616_REV */ +/* MESA_FORMAT_A16L16_UNORM */ static void pack_ubyte_AL1616_REV(const GLubyte src[4], void *dst) @@ -741,7 +746,7 @@ pack_float_AL1616_REV(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_RGB332 */ +/* MESA_FORMAT_B2G3R3_UNORM */ static void pack_ubyte_RGB332(const GLubyte src[4], void *dst) @@ -761,7 +766,7 @@ pack_float_RGB332(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_A8 */ +/* MESA_FORMAT_A_UNORM8 */ static void pack_ubyte_A8(const GLubyte src[4], void *dst) @@ -778,7 +783,7 @@ pack_float_A8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_A16 */ +/* MESA_FORMAT_A_UNORM16 */ static void pack_ubyte_A16(const GLubyte src[4], void *dst) @@ -795,7 +800,7 @@ pack_float_A16(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_L8 */ +/* MESA_FORMAT_L_UNORM8 */ static void pack_ubyte_L8(const GLubyte src[4], void *dst) @@ -812,7 +817,7 @@ pack_float_L8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_L16 */ +/* MESA_FORMAT_L_UNORM16 */ static void pack_ubyte_L16(const GLubyte src[4], void *dst) @@ -859,7 +864,7 @@ pack_float_YCBCR_REV(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_R8 */ +/* MESA_FORMAT_R_UNORM8 */ static void pack_ubyte_R8(const GLubyte src[4], void *dst) @@ -878,7 +883,7 @@ pack_float_R8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_GR88 */ +/* MESA_FORMAT_R8G8_UNORM */ static void pack_ubyte_GR88(const GLubyte src[4], void *dst) @@ -898,7 +903,7 @@ pack_float_GR88(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_RG88 */ +/* MESA_FORMAT_G8R8_UNORM */ static void pack_ubyte_RG88(const GLubyte src[4], void *dst) @@ -918,7 +923,7 @@ pack_float_RG88(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_R16 */ +/* MESA_FORMAT_R_UNORM16 */ static void pack_ubyte_R16(const GLubyte src[4], void *dst) @@ -935,7 +940,7 @@ pack_float_R16(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_GR1616 */ +/* MESA_FORMAT_R16G16_UNORM */ static void pack_ubyte_GR1616(const GLubyte src[4], void *dst) @@ -957,7 +962,7 @@ pack_float_GR1616(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_RG1616 */ +/* MESA_FORMAT_G16R16_UNORM */ static void pack_ubyte_RG1616(const GLubyte src[4], void *dst) @@ -980,7 +985,7 @@ pack_float_RG1616(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_ARGB2101010 */ +/* MESA_FORMAT_B10G10R10A2_UNORM */ static void pack_ubyte_ARGB2101010(const GLubyte src[4], void *dst) @@ -1006,7 +1011,7 @@ pack_float_ARGB2101010(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_ABGR2101010_UINT */ +/* MESA_FORMAT_R10G10B10A2_UINT */ static void pack_ubyte_ABGR2101010_UINT(const GLubyte src[4], void *dst) @@ -1032,7 +1037,7 @@ pack_float_ABGR2101010_UINT(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_SRGB8 */ +/* MESA_FORMAT_BGR_SRGB8 */ static void pack_ubyte_SRGB8(const GLubyte src[4], void *dst) @@ -1053,7 +1058,7 @@ pack_float_SRGB8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_SRGBA8 */ +/* MESA_FORMAT_A8B8G8R8_SRGB */ static void pack_ubyte_SRGBA8(const GLubyte src[4], void *dst) @@ -1078,7 +1083,7 @@ pack_float_SRGBA8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_SARGB8 */ +/* MESA_FORMAT_B8G8R8A8_SRGB */ static void pack_ubyte_SARGB8(const GLubyte src[4], void *dst) @@ -1103,7 +1108,7 @@ pack_float_SARGB8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_SL8 */ +/* MESA_FORMAT_L_SRGB8 */ static void pack_ubyte_SL8(const GLubyte src[4], void *dst) @@ -1121,7 +1126,7 @@ pack_float_SL8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_SLA8 */ +/* MESA_FORMAT_L8A8_SRGB */ static void pack_ubyte_SLA8(const GLubyte src[4], void *dst) @@ -1229,7 +1234,7 @@ pack_float_RGB_FLOAT16(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_ALPHA_FLOAT32 */ +/* MESA_FORMAT_A_FLOAT32 */ static void pack_ubyte_ALPHA_FLOAT32(const GLubyte src[4], void *dst) @@ -1246,7 +1251,7 @@ pack_float_ALPHA_FLOAT32(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_ALPHA_FLOAT16 */ +/* MESA_FORMAT_A_FLOAT16 */ static void pack_ubyte_ALPHA_FLOAT16(const GLubyte src[4], void *dst) @@ -1263,7 +1268,7 @@ pack_float_ALPHA_FLOAT16(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_LUMINANCE_FLOAT32 (and INTENSITY_FLOAT32, R_FLOAT32) */ +/* MESA_FORMAT_L_FLOAT32 (and INTENSITY_FLOAT32, R_FLOAT32) */ static void pack_ubyte_LUMINANCE_FLOAT32(const GLubyte src[4], void *dst) @@ -1280,7 +1285,7 @@ pack_float_LUMINANCE_FLOAT32(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_LUMINANCE_FLOAT16 (and INTENSITY_FLOAT16, R_FLOAT32) */ +/* MESA_FORMAT_L_FLOAT16 (and INTENSITY_FLOAT16, R_FLOAT32) */ static void pack_ubyte_LUMINANCE_FLOAT16(const GLubyte src[4], void *dst) @@ -1297,7 +1302,7 @@ pack_float_LUMINANCE_FLOAT16(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32 */ +/* MESA_FORMAT_LA_FLOAT32 */ static void pack_ubyte_LUMINANCE_ALPHA_FLOAT32(const GLubyte src[4], void *dst) @@ -1316,7 +1321,7 @@ pack_float_LUMINANCE_ALPHA_FLOAT32(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16 */ +/* MESA_FORMAT_LA_FLOAT16 */ static void pack_ubyte_LUMINANCE_ALPHA_FLOAT16(const GLubyte src[4], void *dst) @@ -1394,7 +1399,7 @@ pack_float_DUDV8(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_RGBA_16 */ +/* MESA_FORMAT_RGBA_UNORM16 */ static void pack_ubyte_RGBA_16(const GLubyte src[4], void *dst) @@ -1419,7 +1424,7 @@ pack_float_RGBA_16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_R8 + * MESA_FORMAT_R_SNORM8 */ static void @@ -1431,7 +1436,7 @@ pack_float_SIGNED_R8(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RG88_REV + * MESA_FORMAT_R8G8_SNORM */ static void @@ -1445,7 +1450,7 @@ pack_float_SIGNED_RG88_REV(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RGBX8888 + * MESA_FORMAT_X8B8G8R8_SNORM */ static void @@ -1461,7 +1466,7 @@ pack_float_SIGNED_RGBX8888(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RGBA8888 + * MESA_FORMAT_A8B8G8R8_SNORM */ static void @@ -1477,7 +1482,7 @@ pack_float_SIGNED_RGBA8888(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RGBA8888_REV + * MESA_FORMAT_R8G8B8A8_SNORM */ static void @@ -1493,7 +1498,7 @@ pack_float_SIGNED_RGBA8888_REV(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_R16 + * MESA_FORMAT_R_SNORM16 */ static void @@ -1505,7 +1510,7 @@ pack_float_SIGNED_R16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_GR1616 + * MESA_FORMAT_R16G16_SNORM */ static void @@ -1519,7 +1524,7 @@ pack_float_SIGNED_GR1616(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RGB_16 + * MESA_FORMAT_RGB_SNORM16 */ static void @@ -1533,7 +1538,7 @@ pack_float_SIGNED_RGB_16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_RGBA_16 + * MESA_FORMAT_RGBA_SNORM16 */ static void @@ -1548,7 +1553,7 @@ pack_float_SIGNED_RGBA_16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_A8 + * MESA_FORMAT_A_SNORM8 */ static void @@ -1560,7 +1565,7 @@ pack_float_SIGNED_A8(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_L8 + * MESA_FORMAT_L_SNORM8 */ static void @@ -1572,7 +1577,7 @@ pack_float_SIGNED_L8(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_AL88 + * MESA_FORMAT_L8A8_SNORM */ static void @@ -1586,7 +1591,7 @@ pack_float_SIGNED_AL88(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_A16 + * MESA_FORMAT_A_SNORM16 */ static void @@ -1598,7 +1603,7 @@ pack_float_SIGNED_A16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_L16 + * MESA_FORMAT_L_SNORM16 */ static void @@ -1610,7 +1615,7 @@ pack_float_SIGNED_L16(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_SIGNED_AL1616 + * MESA_FORMAT_LA_SNORM16 */ static void @@ -1624,7 +1629,7 @@ pack_float_SIGNED_AL1616(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_RGB9_E5_FLOAT; + * MESA_FORMAT_R9G9B9E5_FLOAT; */ static void @@ -1648,7 +1653,7 @@ pack_ubyte_RGB9_E5_FLOAT(const GLubyte src[4], void *dst) /* - * MESA_FORMAT_R11_G11_B10_FLOAT; + * MESA_FORMAT_R11G11B10_FLOAT; */ static void @@ -1671,7 +1676,7 @@ pack_float_R11_G11_B10_FLOAT(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_XRGB4444_UNORM + * MESA_FORMAT_B4G4R4X4_UNORM */ static void @@ -1691,7 +1696,7 @@ pack_float_XRGB4444_UNORM(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_XRGB1555_UNORM + * MESA_FORMAT_B5G5R5X1_UNORM */ static void @@ -1711,7 +1716,7 @@ pack_float_XRGB1555_UNORM(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_XBGR8888_SNORM + * MESA_FORMAT_R8G8B8X8_SNORM */ static void @@ -1726,7 +1731,7 @@ pack_float_XBGR8888_SNORM(const GLfloat src[4], void *dst) /* - * MESA_FORMAT_XBGR8888_SRGB + * MESA_FORMAT_R8G8B8X8_SRGB */ static void @@ -1740,7 +1745,7 @@ pack_float_XBGR8888_SRGB(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_XRGB2101010_UNORM */ +/* MESA_FORMAT_B10G10R10X2_UNORM */ static void pack_ubyte_XRGB2101010_UNORM(const GLubyte src[4], void *dst) @@ -1764,7 +1769,7 @@ pack_float_XRGB2101010_UNORM(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_XBGR16161616_UNORM */ +/* MESA_FORMAT_RGBX_UNORM16 */ static void pack_ubyte_XBGR16161616_UNORM(const GLubyte src[4], void *dst) @@ -1787,7 +1792,7 @@ pack_float_XBGR16161616_UNORM(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_XBGR16161616_SNORM */ +/* MESA_FORMAT_RGBX_SNORM16 */ static void pack_float_XBGR16161616_SNORM(const GLfloat src[4], void *dst) @@ -1800,7 +1805,7 @@ pack_float_XBGR16161616_SNORM(const GLfloat src[4], void *dst) } -/* MESA_FORMAT_XBGR16161616_FLOAT */ +/* MESA_FORMAT_RGBX_FLOAT16 */ static void pack_float_XBGR16161616_FLOAT(const GLfloat src[4], void *dst) @@ -1812,7 +1817,7 @@ pack_float_XBGR16161616_FLOAT(const GLfloat src[4], void *dst) d[3] = _mesa_float_to_half(1.0); } -/* MESA_FORMAT_XBGR32323232_FLOAT */ +/* MESA_FORMAT_RGBX_FLOAT32 */ static void pack_float_XBGR32323232_FLOAT(const GLfloat src[4], void *dst) @@ -1824,7 +1829,7 @@ pack_float_XBGR32323232_FLOAT(const GLfloat src[4], void *dst) d[3] = 1.0; } -/* MESA_FORMAT_ABGR2101010 */ +/* MESA_FORMAT_R10G10B10A2_UNORM */ static void pack_ubyte_ABGR2101010(const GLubyte src[4], void *dst) @@ -1850,7 +1855,7 @@ pack_float_ABGR2101010(const GLfloat src[4], void *dst) } /* - * MESA_FORMAT_SIGNED_RG88 + * MESA_FORMAT_G8R8_SNORM */ static void @@ -1863,7 +1868,7 @@ pack_float_SIGNED_RG88(const GLfloat src[4], void *dst) } /* - * MESA_FORMAT_SIGNED_RG1616 + * MESA_FORMAT_G16R16_SNORM */ static void @@ -1879,7 +1884,7 @@ pack_float_SIGNED_RG1616(const GLfloat src[4], void *dst) * Return a function that can pack a GLubyte rgba[4] color. */ gl_pack_ubyte_rgba_func -_mesa_get_pack_ubyte_rgba_function(gl_format format) +_mesa_get_pack_ubyte_rgba_function(mesa_format format) { static gl_pack_ubyte_rgba_func table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -1889,62 +1894,61 @@ _mesa_get_pack_ubyte_rgba_function(gl_format format) table[MESA_FORMAT_NONE] = NULL; - table[MESA_FORMAT_RGBA8888] = pack_ubyte_RGBA8888; - table[MESA_FORMAT_RGBA8888_REV] = pack_ubyte_RGBA8888_REV; - table[MESA_FORMAT_ARGB8888] = pack_ubyte_ARGB8888; - table[MESA_FORMAT_ARGB8888_REV] = pack_ubyte_ARGB8888_REV; - table[MESA_FORMAT_RGBX8888] = pack_ubyte_RGBA8888; /* reused */ - table[MESA_FORMAT_RGBX8888_REV] = pack_ubyte_RGBA8888_REV; /* reused */ - table[MESA_FORMAT_XRGB8888] = pack_ubyte_XRGB8888; - table[MESA_FORMAT_XRGB8888_REV] = pack_ubyte_XRGB8888_REV; - table[MESA_FORMAT_RGB888] = pack_ubyte_RGB888; - table[MESA_FORMAT_BGR888] = pack_ubyte_BGR888; - table[MESA_FORMAT_RGB565] = pack_ubyte_RGB565; - table[MESA_FORMAT_RGB565_REV] = pack_ubyte_RGB565_REV; - table[MESA_FORMAT_ARGB4444] = pack_ubyte_ARGB4444; - table[MESA_FORMAT_ARGB4444_REV] = pack_ubyte_ARGB4444_REV; - table[MESA_FORMAT_RGBA5551] = pack_ubyte_RGBA5551; - table[MESA_FORMAT_ARGB1555] = pack_ubyte_ARGB1555; - table[MESA_FORMAT_ARGB1555_REV] = pack_ubyte_ARGB1555_REV; - table[MESA_FORMAT_AL44] = pack_ubyte_AL44; - table[MESA_FORMAT_AL88] = pack_ubyte_AL88; - table[MESA_FORMAT_AL88_REV] = pack_ubyte_AL88_REV; - table[MESA_FORMAT_AL1616] = pack_ubyte_AL1616; - table[MESA_FORMAT_AL1616_REV] = pack_ubyte_AL1616_REV; - table[MESA_FORMAT_RGB332] = pack_ubyte_RGB332; - table[MESA_FORMAT_A8] = pack_ubyte_A8; - table[MESA_FORMAT_A16] = pack_ubyte_A16; - table[MESA_FORMAT_L8] = pack_ubyte_L8; - table[MESA_FORMAT_L16] = pack_ubyte_L16; - table[MESA_FORMAT_I8] = pack_ubyte_L8; /* reuse pack_ubyte_L8 */ - table[MESA_FORMAT_I16] = pack_ubyte_L16; /* reuse pack_ubyte_L16 */ + table[MESA_FORMAT_A8B8G8R8_UNORM] = pack_ubyte_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = pack_ubyte_RGBA8888_REV; + table[MESA_FORMAT_B8G8R8A8_UNORM] = pack_ubyte_ARGB8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = pack_ubyte_ARGB8888_REV; + table[MESA_FORMAT_X8B8G8R8_UNORM] = pack_ubyte_RGBA8888; /* reused */ + table[MESA_FORMAT_R8G8B8X8_UNORM] = pack_ubyte_RGBA8888_REV; /* reused */ + table[MESA_FORMAT_B8G8R8X8_UNORM] = pack_ubyte_XRGB8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = pack_ubyte_XRGB8888_REV; + table[MESA_FORMAT_BGR_UNORM8] = pack_ubyte_RGB888; + table[MESA_FORMAT_RGB_UNORM8] = pack_ubyte_BGR888; + table[MESA_FORMAT_B5G6R5_UNORM] = pack_ubyte_RGB565; + table[MESA_FORMAT_R5G6B5_UNORM] = pack_ubyte_RGB565_REV; + table[MESA_FORMAT_B4G4R4A4_UNORM] = pack_ubyte_ARGB4444; + table[MESA_FORMAT_A4R4G4B4_UNORM] = pack_ubyte_ARGB4444_REV; + table[MESA_FORMAT_A1B5G5R5_UNORM] = pack_ubyte_RGBA5551; + table[MESA_FORMAT_B5G5R5A1_UNORM] = pack_ubyte_ARGB1555; + table[MESA_FORMAT_A1R5G5B5_UNORM] = pack_ubyte_ARGB1555_REV; + table[MESA_FORMAT_L4A4_UNORM] = pack_ubyte_AL44; + table[MESA_FORMAT_L8A8_UNORM] = pack_ubyte_AL88; + table[MESA_FORMAT_A8L8_UNORM] = pack_ubyte_AL88_REV; + table[MESA_FORMAT_L16A16_UNORM] = pack_ubyte_AL1616; + table[MESA_FORMAT_A16L16_UNORM] = pack_ubyte_AL1616_REV; + table[MESA_FORMAT_B2G3R3_UNORM] = pack_ubyte_RGB332; + table[MESA_FORMAT_A_UNORM8] = pack_ubyte_A8; + table[MESA_FORMAT_A_UNORM16] = pack_ubyte_A16; + table[MESA_FORMAT_L_UNORM8] = pack_ubyte_L8; + table[MESA_FORMAT_L_UNORM16] = pack_ubyte_L16; + table[MESA_FORMAT_I_UNORM8] = pack_ubyte_L8; /* reuse pack_ubyte_L8 */ + table[MESA_FORMAT_I_UNORM16] = pack_ubyte_L16; /* reuse pack_ubyte_L16 */ table[MESA_FORMAT_YCBCR] = pack_ubyte_YCBCR; table[MESA_FORMAT_YCBCR_REV] = pack_ubyte_YCBCR_REV; - table[MESA_FORMAT_R8] = pack_ubyte_R8; - table[MESA_FORMAT_GR88] = pack_ubyte_GR88; - table[MESA_FORMAT_RG88] = pack_ubyte_RG88; - table[MESA_FORMAT_R16] = pack_ubyte_R16; - table[MESA_FORMAT_GR1616] = pack_ubyte_GR1616; - table[MESA_FORMAT_RG1616] = pack_ubyte_RG1616; - table[MESA_FORMAT_ARGB2101010] = pack_ubyte_ARGB2101010; - table[MESA_FORMAT_ABGR2101010_UINT] = pack_ubyte_ABGR2101010_UINT; + table[MESA_FORMAT_R_UNORM8] = pack_ubyte_R8; + table[MESA_FORMAT_R8G8_UNORM] = pack_ubyte_GR88; + table[MESA_FORMAT_G8R8_UNORM] = pack_ubyte_RG88; + table[MESA_FORMAT_R_UNORM16] = pack_ubyte_R16; + table[MESA_FORMAT_R16G16_UNORM] = pack_ubyte_GR1616; + table[MESA_FORMAT_G16R16_UNORM] = pack_ubyte_RG1616; + table[MESA_FORMAT_B10G10R10A2_UNORM] = pack_ubyte_ARGB2101010; + table[MESA_FORMAT_R10G10B10A2_UINT] = pack_ubyte_ABGR2101010_UINT; /* should never convert RGBA to these formats */ - table[MESA_FORMAT_Z24_S8] = NULL; - table[MESA_FORMAT_S8_Z24] = NULL; - table[MESA_FORMAT_Z16] = NULL; - table[MESA_FORMAT_X8_Z24] = NULL; - table[MESA_FORMAT_Z24_X8] = NULL; - table[MESA_FORMAT_Z32] = NULL; - table[MESA_FORMAT_S8] = NULL; + table[MESA_FORMAT_S8_UINT_Z24_UNORM] = NULL; + table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL; + table[MESA_FORMAT_Z_UNORM16] = NULL; + table[MESA_FORMAT_Z24_UNORM_S8_UINT] = NULL; + table[MESA_FORMAT_X8Z24_UNORM] = NULL; + table[MESA_FORMAT_Z_UNORM32] = NULL; + table[MESA_FORMAT_S_UINT8] = NULL; /* sRGB */ - table[MESA_FORMAT_SRGB8] = pack_ubyte_SRGB8; - table[MESA_FORMAT_SRGBA8] = pack_ubyte_SRGBA8; - table[MESA_FORMAT_SARGB8] = pack_ubyte_SARGB8; - table[MESA_FORMAT_SL8] = pack_ubyte_SL8; - table[MESA_FORMAT_SLA8] = pack_ubyte_SLA8; - + table[MESA_FORMAT_BGR_SRGB8] = pack_ubyte_SRGB8; + table[MESA_FORMAT_A8B8G8R8_SRGB] = pack_ubyte_SRGBA8; + table[MESA_FORMAT_B8G8R8A8_SRGB] = pack_ubyte_SARGB8; + table[MESA_FORMAT_L_SRGB8] = pack_ubyte_SL8; + table[MESA_FORMAT_L8A8_SRGB] = pack_ubyte_SLA8; /* n/a */ table[MESA_FORMAT_SRGB_DXT1] = NULL; /* pack_ubyte_SRGB_DXT1; */ table[MESA_FORMAT_SRGBA_DXT1] = NULL; /* pack_ubyte_SRGBA_DXT1; */ @@ -1962,73 +1966,73 @@ _mesa_get_pack_ubyte_rgba_function(gl_format format) table[MESA_FORMAT_RGBA_FLOAT16] = pack_ubyte_RGBA_FLOAT16; table[MESA_FORMAT_RGB_FLOAT32] = pack_ubyte_RGB_FLOAT32; table[MESA_FORMAT_RGB_FLOAT16] = pack_ubyte_RGB_FLOAT16; - table[MESA_FORMAT_ALPHA_FLOAT32] = pack_ubyte_ALPHA_FLOAT32; - table[MESA_FORMAT_ALPHA_FLOAT16] = pack_ubyte_ALPHA_FLOAT16; - table[MESA_FORMAT_LUMINANCE_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; - table[MESA_FORMAT_LUMINANCE_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = pack_ubyte_LUMINANCE_ALPHA_FLOAT32; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = pack_ubyte_LUMINANCE_ALPHA_FLOAT16; - table[MESA_FORMAT_INTENSITY_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; - table[MESA_FORMAT_INTENSITY_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; + table[MESA_FORMAT_A_FLOAT32] = pack_ubyte_ALPHA_FLOAT32; + table[MESA_FORMAT_A_FLOAT16] = pack_ubyte_ALPHA_FLOAT16; + table[MESA_FORMAT_L_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; + table[MESA_FORMAT_L_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; + table[MESA_FORMAT_LA_FLOAT32] = pack_ubyte_LUMINANCE_ALPHA_FLOAT32; + table[MESA_FORMAT_LA_FLOAT16] = pack_ubyte_LUMINANCE_ALPHA_FLOAT16; + table[MESA_FORMAT_I_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; + table[MESA_FORMAT_I_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; table[MESA_FORMAT_R_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; table[MESA_FORMAT_R_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; table[MESA_FORMAT_RG_FLOAT32] = pack_ubyte_RG_FLOAT32; table[MESA_FORMAT_RG_FLOAT16] = pack_ubyte_RG_FLOAT16; /* n/a */ - table[MESA_FORMAT_RGBA_INT8] = NULL; /* pack_ubyte_RGBA_INT8 */ - table[MESA_FORMAT_RGBA_INT16] = NULL; /* pack_ubyte_RGBA_INT16 */ - table[MESA_FORMAT_RGBA_INT32] = NULL; /* pack_ubyte_RGBA_INT32 */ + table[MESA_FORMAT_RGBA_SINT8] = NULL; /* pack_ubyte_RGBA_INT8 */ + table[MESA_FORMAT_RGBA_SINT16] = NULL; /* pack_ubyte_RGBA_INT16 */ + table[MESA_FORMAT_RGBA_SINT32] = NULL; /* pack_ubyte_RGBA_INT32 */ table[MESA_FORMAT_RGBA_UINT8] = NULL; /* pack_ubyte_RGBA_UINT8 */ table[MESA_FORMAT_RGBA_UINT16] = NULL; /* pack_ubyte_RGBA_UINT16 */ table[MESA_FORMAT_RGBA_UINT32] = NULL; /* pack_ubyte_RGBA_UINT32 */ table[MESA_FORMAT_DUDV8] = pack_ubyte_DUDV8; - table[MESA_FORMAT_RGBA_16] = pack_ubyte_RGBA_16; + table[MESA_FORMAT_RGBA_UNORM16] = pack_ubyte_RGBA_16; /* n/a */ - table[MESA_FORMAT_SIGNED_R8] = NULL; - table[MESA_FORMAT_SIGNED_RG88_REV] = NULL; - table[MESA_FORMAT_SIGNED_RGBX8888] = NULL; - table[MESA_FORMAT_SIGNED_RGBA8888] = NULL; - table[MESA_FORMAT_SIGNED_RGBA8888_REV] = NULL; - table[MESA_FORMAT_SIGNED_R16] = NULL; - table[MESA_FORMAT_SIGNED_GR1616] = NULL; - table[MESA_FORMAT_SIGNED_RGB_16] = NULL; - table[MESA_FORMAT_SIGNED_RGBA_16] = NULL; - table[MESA_FORMAT_SIGNED_A8] = NULL; - table[MESA_FORMAT_SIGNED_L8] = NULL; - table[MESA_FORMAT_SIGNED_AL88] = NULL; - table[MESA_FORMAT_SIGNED_I8] = NULL; - table[MESA_FORMAT_SIGNED_A16] = NULL; - table[MESA_FORMAT_SIGNED_L16] = NULL; - table[MESA_FORMAT_SIGNED_AL1616] = NULL; - table[MESA_FORMAT_SIGNED_I16] = NULL; - - - table[MESA_FORMAT_RGBA_16] = pack_ubyte_RGBA_16; - - table[MESA_FORMAT_RGB9_E5_FLOAT] = pack_ubyte_RGB9_E5_FLOAT; - table[MESA_FORMAT_R11_G11_B10_FLOAT] = pack_ubyte_R11_G11_B10_FLOAT; - - table[MESA_FORMAT_XRGB4444_UNORM] = pack_ubyte_XRGB4444_UNORM; - table[MESA_FORMAT_XRGB1555_UNORM] = pack_ubyte_XRGB1555_UNORM; - table[MESA_FORMAT_XBGR8888_SNORM] = NULL; - table[MESA_FORMAT_XBGR8888_SRGB] = NULL; - table[MESA_FORMAT_XBGR8888_UINT] = NULL; - table[MESA_FORMAT_XBGR8888_SINT] = NULL; - table[MESA_FORMAT_XRGB2101010_UNORM] = pack_ubyte_XRGB2101010_UNORM; - table[MESA_FORMAT_XBGR16161616_UNORM] = pack_ubyte_XBGR16161616_UNORM; - table[MESA_FORMAT_XBGR16161616_SNORM] = NULL; - table[MESA_FORMAT_XBGR16161616_FLOAT] = NULL; - table[MESA_FORMAT_XBGR16161616_UINT] = NULL; - table[MESA_FORMAT_XBGR16161616_SINT] = NULL; - table[MESA_FORMAT_XBGR32323232_FLOAT] = NULL; - table[MESA_FORMAT_XBGR32323232_UINT] = NULL; - table[MESA_FORMAT_XBGR32323232_SINT] = NULL; - - table[MESA_FORMAT_ABGR2101010] = pack_ubyte_ABGR2101010; + table[MESA_FORMAT_R_SNORM8] = NULL; + table[MESA_FORMAT_R8G8_SNORM] = NULL; + table[MESA_FORMAT_X8B8G8R8_SNORM] = NULL; + table[MESA_FORMAT_A8B8G8R8_SNORM] = NULL; + table[MESA_FORMAT_R8G8B8A8_SNORM] = NULL; + table[MESA_FORMAT_R_SNORM16] = NULL; + table[MESA_FORMAT_R16G16_SNORM] = NULL; + table[MESA_FORMAT_RGB_SNORM16] = NULL; + table[MESA_FORMAT_RGBA_SNORM16] = NULL; + table[MESA_FORMAT_A_SNORM8] = NULL; + table[MESA_FORMAT_L_SNORM8] = NULL; + table[MESA_FORMAT_L8A8_SNORM] = NULL; + table[MESA_FORMAT_I_SNORM8] = NULL; + table[MESA_FORMAT_A_SNORM16] = NULL; + table[MESA_FORMAT_L_SNORM16] = NULL; + table[MESA_FORMAT_LA_SNORM16] = NULL; + table[MESA_FORMAT_I_SNORM16] = NULL; + + + table[MESA_FORMAT_RGBA_UNORM16] = pack_ubyte_RGBA_16; + + table[MESA_FORMAT_R9G9B9E5_FLOAT] = pack_ubyte_RGB9_E5_FLOAT; + table[MESA_FORMAT_R11G11B10_FLOAT] = pack_ubyte_R11_G11_B10_FLOAT; + + table[MESA_FORMAT_B4G4R4X4_UNORM] = pack_ubyte_XRGB4444_UNORM; + table[MESA_FORMAT_B5G5R5X1_UNORM] = pack_ubyte_XRGB1555_UNORM; + table[MESA_FORMAT_R8G8B8X8_SNORM] = NULL; + table[MESA_FORMAT_R8G8B8X8_SRGB] = NULL; + table[MESA_FORMAT_RGBX_UINT8] = NULL; + table[MESA_FORMAT_RGBX_SINT8] = NULL; + table[MESA_FORMAT_B10G10R10X2_UNORM] = pack_ubyte_XRGB2101010_UNORM; + table[MESA_FORMAT_RGBX_UNORM16] = pack_ubyte_XBGR16161616_UNORM; + table[MESA_FORMAT_RGBX_SNORM16] = NULL; + table[MESA_FORMAT_RGBX_FLOAT16] = NULL; + table[MESA_FORMAT_RGBX_UINT16] = NULL; + table[MESA_FORMAT_RGBX_SINT16] = NULL; + table[MESA_FORMAT_RGBX_FLOAT32] = NULL; + table[MESA_FORMAT_RGBX_UINT32] = NULL; + table[MESA_FORMAT_RGBX_SINT32] = NULL; + + table[MESA_FORMAT_R10G10B10A2_UNORM] = pack_ubyte_ABGR2101010; initialized = GL_TRUE; } @@ -2042,7 +2046,7 @@ _mesa_get_pack_ubyte_rgba_function(gl_format format) * Return a function that can pack a GLfloat rgba[4] color. */ gl_pack_float_rgba_func -_mesa_get_pack_float_rgba_function(gl_format format) +_mesa_get_pack_float_rgba_function(mesa_format format) { static gl_pack_float_rgba_func table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -2052,61 +2056,61 @@ _mesa_get_pack_float_rgba_function(gl_format format) table[MESA_FORMAT_NONE] = NULL; - table[MESA_FORMAT_RGBA8888] = pack_float_RGBA8888; - table[MESA_FORMAT_RGBA8888_REV] = pack_float_RGBA8888_REV; - table[MESA_FORMAT_ARGB8888] = pack_float_ARGB8888; - table[MESA_FORMAT_ARGB8888_REV] = pack_float_ARGB8888_REV; - table[MESA_FORMAT_RGBX8888] = pack_float_RGBA8888; /* reused */ - table[MESA_FORMAT_RGBX8888_REV] = pack_float_RGBA8888_REV; /* reused */ - table[MESA_FORMAT_XRGB8888] = pack_float_XRGB8888; - table[MESA_FORMAT_XRGB8888_REV] = pack_float_XRGB8888_REV; - table[MESA_FORMAT_RGB888] = pack_float_RGB888; - table[MESA_FORMAT_BGR888] = pack_float_BGR888; - table[MESA_FORMAT_RGB565] = pack_float_RGB565; - table[MESA_FORMAT_RGB565_REV] = pack_float_RGB565_REV; - table[MESA_FORMAT_ARGB4444] = pack_float_ARGB4444; - table[MESA_FORMAT_ARGB4444_REV] = pack_float_ARGB4444_REV; - table[MESA_FORMAT_RGBA5551] = pack_float_RGBA5551; - table[MESA_FORMAT_ARGB1555] = pack_float_ARGB1555; - table[MESA_FORMAT_ARGB1555_REV] = pack_float_ARGB1555_REV; - - table[MESA_FORMAT_AL44] = pack_float_AL44; - table[MESA_FORMAT_AL88] = pack_float_AL88; - table[MESA_FORMAT_AL88_REV] = pack_float_AL88_REV; - table[MESA_FORMAT_AL1616] = pack_float_AL1616; - table[MESA_FORMAT_AL1616_REV] = pack_float_AL1616_REV; - table[MESA_FORMAT_RGB332] = pack_float_RGB332; - table[MESA_FORMAT_A8] = pack_float_A8; - table[MESA_FORMAT_A16] = pack_float_A16; - table[MESA_FORMAT_L8] = pack_float_L8; - table[MESA_FORMAT_L16] = pack_float_L16; - table[MESA_FORMAT_I8] = pack_float_L8; /* reuse pack_float_L8 */ - table[MESA_FORMAT_I16] = pack_float_L16; /* reuse pack_float_L16 */ + table[MESA_FORMAT_A8B8G8R8_UNORM] = pack_float_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = pack_float_RGBA8888_REV; + table[MESA_FORMAT_B8G8R8A8_UNORM] = pack_float_ARGB8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = pack_float_ARGB8888_REV; + table[MESA_FORMAT_X8B8G8R8_UNORM] = pack_float_RGBA8888; /* reused */ + table[MESA_FORMAT_R8G8B8X8_UNORM] = pack_float_RGBA8888_REV; /* reused */ + table[MESA_FORMAT_B8G8R8X8_UNORM] = pack_float_XRGB8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = pack_float_XRGB8888_REV; + table[MESA_FORMAT_BGR_UNORM8] = pack_float_RGB888; + table[MESA_FORMAT_RGB_UNORM8] = pack_float_BGR888; + table[MESA_FORMAT_B5G6R5_UNORM] = pack_float_RGB565; + table[MESA_FORMAT_R5G6B5_UNORM] = pack_float_RGB565_REV; + table[MESA_FORMAT_B4G4R4A4_UNORM] = pack_float_ARGB4444; + table[MESA_FORMAT_A4R4G4B4_UNORM] = pack_float_ARGB4444_REV; + table[MESA_FORMAT_A1B5G5R5_UNORM] = pack_float_RGBA5551; + table[MESA_FORMAT_B5G5R5A1_UNORM] = pack_float_ARGB1555; + table[MESA_FORMAT_A1R5G5B5_UNORM] = pack_float_ARGB1555_REV; + + table[MESA_FORMAT_L4A4_UNORM] = pack_float_AL44; + table[MESA_FORMAT_L8A8_UNORM] = pack_float_AL88; + table[MESA_FORMAT_A8L8_UNORM] = pack_float_AL88_REV; + table[MESA_FORMAT_L16A16_UNORM] = pack_float_AL1616; + table[MESA_FORMAT_A16L16_UNORM] = pack_float_AL1616_REV; + table[MESA_FORMAT_B2G3R3_UNORM] = pack_float_RGB332; + table[MESA_FORMAT_A_UNORM8] = pack_float_A8; + table[MESA_FORMAT_A_UNORM16] = pack_float_A16; + table[MESA_FORMAT_L_UNORM8] = pack_float_L8; + table[MESA_FORMAT_L_UNORM16] = pack_float_L16; + table[MESA_FORMAT_I_UNORM8] = pack_float_L8; /* reuse pack_float_L8 */ + table[MESA_FORMAT_I_UNORM16] = pack_float_L16; /* reuse pack_float_L16 */ table[MESA_FORMAT_YCBCR] = pack_float_YCBCR; table[MESA_FORMAT_YCBCR_REV] = pack_float_YCBCR_REV; - table[MESA_FORMAT_R8] = pack_float_R8; - table[MESA_FORMAT_GR88] = pack_float_GR88; - table[MESA_FORMAT_RG88] = pack_float_RG88; - table[MESA_FORMAT_R16] = pack_float_R16; - table[MESA_FORMAT_GR1616] = pack_float_GR1616; - table[MESA_FORMAT_RG1616] = pack_float_RG1616; - table[MESA_FORMAT_ARGB2101010] = pack_float_ARGB2101010; - table[MESA_FORMAT_ABGR2101010_UINT] = pack_float_ABGR2101010_UINT; + table[MESA_FORMAT_R_UNORM8] = pack_float_R8; + table[MESA_FORMAT_R8G8_UNORM] = pack_float_GR88; + table[MESA_FORMAT_G8R8_UNORM] = pack_float_RG88; + table[MESA_FORMAT_R_UNORM16] = pack_float_R16; + table[MESA_FORMAT_R16G16_UNORM] = pack_float_GR1616; + table[MESA_FORMAT_G16R16_UNORM] = pack_float_RG1616; + table[MESA_FORMAT_B10G10R10A2_UNORM] = pack_float_ARGB2101010; + table[MESA_FORMAT_R10G10B10A2_UINT] = pack_float_ABGR2101010_UINT; /* should never convert RGBA to these formats */ - table[MESA_FORMAT_Z24_S8] = NULL; - table[MESA_FORMAT_S8_Z24] = NULL; - table[MESA_FORMAT_Z16] = NULL; - table[MESA_FORMAT_X8_Z24] = NULL; - table[MESA_FORMAT_Z24_X8] = NULL; - table[MESA_FORMAT_Z32] = NULL; - table[MESA_FORMAT_S8] = NULL; - - table[MESA_FORMAT_SRGB8] = pack_float_SRGB8; - table[MESA_FORMAT_SRGBA8] = pack_float_SRGBA8; - table[MESA_FORMAT_SARGB8] = pack_float_SARGB8; - table[MESA_FORMAT_SL8] = pack_float_SL8; - table[MESA_FORMAT_SLA8] = pack_float_SLA8; + table[MESA_FORMAT_S8_UINT_Z24_UNORM] = NULL; + table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL; + table[MESA_FORMAT_Z_UNORM16] = NULL; + table[MESA_FORMAT_Z24_UNORM_S8_UINT] = NULL; + table[MESA_FORMAT_X8Z24_UNORM] = NULL; + table[MESA_FORMAT_Z_UNORM32] = NULL; + table[MESA_FORMAT_S_UINT8] = NULL; + + table[MESA_FORMAT_BGR_SRGB8] = pack_float_SRGB8; + table[MESA_FORMAT_A8B8G8R8_SRGB] = pack_float_SRGBA8; + table[MESA_FORMAT_B8G8R8A8_SRGB] = pack_float_SARGB8; + table[MESA_FORMAT_L_SRGB8] = pack_float_SL8; + table[MESA_FORMAT_L8A8_SRGB] = pack_float_SLA8; /* n/a */ table[MESA_FORMAT_SRGB_DXT1] = NULL; @@ -2125,73 +2129,73 @@ _mesa_get_pack_float_rgba_function(gl_format format) table[MESA_FORMAT_RGBA_FLOAT16] = pack_float_RGBA_FLOAT16; table[MESA_FORMAT_RGB_FLOAT32] = pack_float_RGB_FLOAT32; table[MESA_FORMAT_RGB_FLOAT16] = pack_float_RGB_FLOAT16; - table[MESA_FORMAT_ALPHA_FLOAT32] = pack_float_ALPHA_FLOAT32; - table[MESA_FORMAT_ALPHA_FLOAT16] = pack_float_ALPHA_FLOAT16; - table[MESA_FORMAT_LUMINANCE_FLOAT32] = pack_float_LUMINANCE_FLOAT32; - table[MESA_FORMAT_LUMINANCE_FLOAT16] = pack_float_LUMINANCE_FLOAT16; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = pack_float_LUMINANCE_ALPHA_FLOAT32; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = pack_float_LUMINANCE_ALPHA_FLOAT16; - - table[MESA_FORMAT_INTENSITY_FLOAT32] = pack_float_LUMINANCE_FLOAT32; - table[MESA_FORMAT_INTENSITY_FLOAT16] = pack_float_LUMINANCE_FLOAT16; + table[MESA_FORMAT_A_FLOAT32] = pack_float_ALPHA_FLOAT32; + table[MESA_FORMAT_A_FLOAT16] = pack_float_ALPHA_FLOAT16; + table[MESA_FORMAT_L_FLOAT32] = pack_float_LUMINANCE_FLOAT32; + table[MESA_FORMAT_L_FLOAT16] = pack_float_LUMINANCE_FLOAT16; + table[MESA_FORMAT_LA_FLOAT32] = pack_float_LUMINANCE_ALPHA_FLOAT32; + table[MESA_FORMAT_LA_FLOAT16] = pack_float_LUMINANCE_ALPHA_FLOAT16; + + table[MESA_FORMAT_I_FLOAT32] = pack_float_LUMINANCE_FLOAT32; + table[MESA_FORMAT_I_FLOAT16] = pack_float_LUMINANCE_FLOAT16; table[MESA_FORMAT_R_FLOAT32] = pack_float_LUMINANCE_FLOAT32; table[MESA_FORMAT_R_FLOAT16] = pack_float_LUMINANCE_FLOAT16; table[MESA_FORMAT_RG_FLOAT32] = pack_float_RG_FLOAT32; table[MESA_FORMAT_RG_FLOAT16] = pack_float_RG_FLOAT16; /* n/a */ - table[MESA_FORMAT_RGBA_INT8] = NULL; - table[MESA_FORMAT_RGBA_INT16] = NULL; - table[MESA_FORMAT_RGBA_INT32] = NULL; + table[MESA_FORMAT_RGBA_SINT8] = NULL; + table[MESA_FORMAT_RGBA_SINT16] = NULL; + table[MESA_FORMAT_RGBA_SINT32] = NULL; table[MESA_FORMAT_RGBA_UINT8] = NULL; table[MESA_FORMAT_RGBA_UINT16] = NULL; table[MESA_FORMAT_RGBA_UINT32] = NULL; table[MESA_FORMAT_DUDV8] = pack_float_DUDV8; - table[MESA_FORMAT_RGBA_16] = pack_float_RGBA_16; - - table[MESA_FORMAT_SIGNED_R8] = pack_float_SIGNED_R8; - table[MESA_FORMAT_SIGNED_RG88_REV] = pack_float_SIGNED_RG88_REV; - table[MESA_FORMAT_SIGNED_RGBX8888] = pack_float_SIGNED_RGBX8888; - table[MESA_FORMAT_SIGNED_RGBA8888] = pack_float_SIGNED_RGBA8888; - table[MESA_FORMAT_SIGNED_RGBA8888_REV] = pack_float_SIGNED_RGBA8888_REV; - table[MESA_FORMAT_SIGNED_R16] = pack_float_SIGNED_R16; - table[MESA_FORMAT_SIGNED_GR1616] = pack_float_SIGNED_GR1616; - table[MESA_FORMAT_SIGNED_RGB_16] = pack_float_SIGNED_RGB_16; - table[MESA_FORMAT_SIGNED_RGBA_16] = pack_float_SIGNED_RGBA_16; - table[MESA_FORMAT_SIGNED_A8] = pack_float_SIGNED_A8; - table[MESA_FORMAT_SIGNED_L8] = pack_float_SIGNED_L8; - table[MESA_FORMAT_SIGNED_AL88] = pack_float_SIGNED_AL88; - table[MESA_FORMAT_SIGNED_I8] = pack_float_SIGNED_L8; /* reused */ - table[MESA_FORMAT_SIGNED_A16] = pack_float_SIGNED_A16; - table[MESA_FORMAT_SIGNED_L16] = pack_float_SIGNED_L16; - table[MESA_FORMAT_SIGNED_AL1616] = pack_float_SIGNED_AL1616; - table[MESA_FORMAT_SIGNED_I16] = pack_float_SIGNED_L16; /* reused */ - - table[MESA_FORMAT_RGB9_E5_FLOAT] = pack_float_RGB9_E5_FLOAT; - table[MESA_FORMAT_R11_G11_B10_FLOAT] = pack_float_R11_G11_B10_FLOAT; - - table[MESA_FORMAT_XRGB4444_UNORM] = pack_float_XRGB4444_UNORM; - table[MESA_FORMAT_XRGB1555_UNORM] = pack_float_XRGB1555_UNORM; - table[MESA_FORMAT_XBGR8888_SNORM] = pack_float_XBGR8888_SNORM; - table[MESA_FORMAT_XBGR8888_SRGB] = pack_float_XBGR8888_SRGB; - table[MESA_FORMAT_XBGR8888_UINT] = NULL; - table[MESA_FORMAT_XBGR8888_SINT] = NULL; - table[MESA_FORMAT_XRGB2101010_UNORM] = pack_float_XRGB2101010_UNORM; - table[MESA_FORMAT_XBGR16161616_UNORM] = pack_float_XBGR16161616_UNORM; - table[MESA_FORMAT_XBGR16161616_SNORM] = pack_float_XBGR16161616_SNORM; - table[MESA_FORMAT_XBGR16161616_FLOAT] = pack_float_XBGR16161616_FLOAT; - table[MESA_FORMAT_XBGR16161616_UINT] = NULL; - table[MESA_FORMAT_XBGR16161616_SINT] = NULL; - table[MESA_FORMAT_XBGR32323232_FLOAT] = pack_float_XBGR32323232_FLOAT; - table[MESA_FORMAT_XBGR32323232_UINT] = NULL; - table[MESA_FORMAT_XBGR32323232_SINT] = NULL; - - table[MESA_FORMAT_ABGR2101010] = pack_float_ABGR2101010; - - table[MESA_FORMAT_SIGNED_RG88] = pack_float_SIGNED_RG88; - table[MESA_FORMAT_SIGNED_RG1616] = pack_float_SIGNED_RG1616; + table[MESA_FORMAT_RGBA_UNORM16] = pack_float_RGBA_16; + + table[MESA_FORMAT_R_SNORM8] = pack_float_SIGNED_R8; + table[MESA_FORMAT_R8G8_SNORM] = pack_float_SIGNED_RG88_REV; + table[MESA_FORMAT_X8B8G8R8_SNORM] = pack_float_SIGNED_RGBX8888; + table[MESA_FORMAT_A8B8G8R8_SNORM] = pack_float_SIGNED_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_SNORM] = pack_float_SIGNED_RGBA8888_REV; + table[MESA_FORMAT_R_SNORM16] = pack_float_SIGNED_R16; + table[MESA_FORMAT_R16G16_SNORM] = pack_float_SIGNED_GR1616; + table[MESA_FORMAT_RGB_SNORM16] = pack_float_SIGNED_RGB_16; + table[MESA_FORMAT_RGBA_SNORM16] = pack_float_SIGNED_RGBA_16; + table[MESA_FORMAT_A_SNORM8] = pack_float_SIGNED_A8; + table[MESA_FORMAT_L_SNORM8] = pack_float_SIGNED_L8; + table[MESA_FORMAT_L8A8_SNORM] = pack_float_SIGNED_AL88; + table[MESA_FORMAT_I_SNORM8] = pack_float_SIGNED_L8; /* reused */ + table[MESA_FORMAT_A_SNORM16] = pack_float_SIGNED_A16; + table[MESA_FORMAT_L_SNORM16] = pack_float_SIGNED_L16; + table[MESA_FORMAT_LA_SNORM16] = pack_float_SIGNED_AL1616; + table[MESA_FORMAT_I_SNORM16] = pack_float_SIGNED_L16; /* reused */ + + table[MESA_FORMAT_R9G9B9E5_FLOAT] = pack_float_RGB9_E5_FLOAT; + table[MESA_FORMAT_R11G11B10_FLOAT] = pack_float_R11_G11_B10_FLOAT; + + table[MESA_FORMAT_B4G4R4X4_UNORM] = pack_float_XRGB4444_UNORM; + table[MESA_FORMAT_B5G5R5X1_UNORM] = pack_float_XRGB1555_UNORM; + table[MESA_FORMAT_R8G8B8X8_SNORM] = pack_float_XBGR8888_SNORM; + table[MESA_FORMAT_R8G8B8X8_SRGB] = pack_float_XBGR8888_SRGB; + table[MESA_FORMAT_RGBX_UINT8] = NULL; + table[MESA_FORMAT_RGBX_SINT8] = NULL; + table[MESA_FORMAT_B10G10R10X2_UNORM] = pack_float_XRGB2101010_UNORM; + table[MESA_FORMAT_RGBX_UNORM16] = pack_float_XBGR16161616_UNORM; + table[MESA_FORMAT_RGBX_SNORM16] = pack_float_XBGR16161616_SNORM; + table[MESA_FORMAT_RGBX_FLOAT16] = pack_float_XBGR16161616_FLOAT; + table[MESA_FORMAT_RGBX_UINT16] = NULL; + table[MESA_FORMAT_RGBX_SINT16] = NULL; + table[MESA_FORMAT_RGBX_FLOAT32] = pack_float_XBGR32323232_FLOAT; + table[MESA_FORMAT_RGBX_UINT32] = NULL; + table[MESA_FORMAT_RGBX_SINT32] = NULL; + + table[MESA_FORMAT_R10G10B10A2_UNORM] = pack_float_ABGR2101010; + + table[MESA_FORMAT_G8R8_SNORM] = pack_float_SIGNED_RG88; + table[MESA_FORMAT_G16R16_SNORM] = pack_float_SIGNED_RG1616; initialized = GL_TRUE; } @@ -2202,7 +2206,7 @@ _mesa_get_pack_float_rgba_function(gl_format format) static pack_float_rgba_row_func -get_pack_float_rgba_row_function(gl_format format) +get_pack_float_rgba_row_function(mesa_format format) { static pack_float_rgba_row_func table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -2213,18 +2217,18 @@ get_pack_float_rgba_row_function(gl_format format) */ memset(table, 0, sizeof(table)); - table[MESA_FORMAT_RGBA8888] = pack_row_float_RGBA8888; - table[MESA_FORMAT_RGBA8888_REV] = pack_row_float_RGBA8888_REV; - table[MESA_FORMAT_ARGB8888] = pack_row_float_ARGB8888; - table[MESA_FORMAT_ARGB8888_REV] = pack_row_float_ARGB8888_REV; - table[MESA_FORMAT_RGBX8888] = pack_row_float_RGBA8888; /* reused */ - table[MESA_FORMAT_RGBX8888_REV] = pack_row_float_RGBA8888_REV; /* reused */ - table[MESA_FORMAT_XRGB8888] = pack_row_float_XRGB8888; - table[MESA_FORMAT_XRGB8888_REV] = pack_row_float_XRGB8888_REV; - table[MESA_FORMAT_RGB888] = pack_row_float_RGB888; - table[MESA_FORMAT_BGR888] = pack_row_float_BGR888; - table[MESA_FORMAT_RGB565] = pack_row_float_RGB565; - table[MESA_FORMAT_RGB565_REV] = pack_row_float_RGB565_REV; + table[MESA_FORMAT_A8B8G8R8_UNORM] = pack_row_float_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = pack_row_float_RGBA8888_REV; + table[MESA_FORMAT_B8G8R8A8_UNORM] = pack_row_float_ARGB8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = pack_row_float_ARGB8888_REV; + table[MESA_FORMAT_X8B8G8R8_UNORM] = pack_row_float_RGBA8888; /* reused */ + table[MESA_FORMAT_R8G8B8X8_UNORM] = pack_row_float_RGBA8888_REV; /* reused */ + table[MESA_FORMAT_B8G8R8X8_UNORM] = pack_row_float_XRGB8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = pack_row_float_XRGB8888_REV; + table[MESA_FORMAT_BGR_UNORM8] = pack_row_float_RGB888; + table[MESA_FORMAT_RGB_UNORM8] = pack_row_float_BGR888; + table[MESA_FORMAT_B5G6R5_UNORM] = pack_row_float_RGB565; + table[MESA_FORMAT_R5G6B5_UNORM] = pack_row_float_RGB565_REV; initialized = GL_TRUE; } @@ -2235,7 +2239,7 @@ get_pack_float_rgba_row_function(gl_format format) static pack_ubyte_rgba_row_func -get_pack_ubyte_rgba_row_function(gl_format format) +get_pack_ubyte_rgba_row_function(mesa_format format) { static pack_ubyte_rgba_row_func table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -2246,18 +2250,18 @@ get_pack_ubyte_rgba_row_function(gl_format format) */ memset(table, 0, sizeof(table)); - table[MESA_FORMAT_RGBA8888] = pack_row_ubyte_RGBA8888; - table[MESA_FORMAT_RGBA8888_REV] = pack_row_ubyte_RGBA8888_REV; - table[MESA_FORMAT_ARGB8888] = pack_row_ubyte_ARGB8888; - table[MESA_FORMAT_ARGB8888_REV] = pack_row_ubyte_ARGB8888_REV; - table[MESA_FORMAT_RGBX8888] = pack_row_ubyte_RGBA8888; /* reused */ - table[MESA_FORMAT_RGBX8888_REV] = pack_row_ubyte_RGBA8888_REV; /* reused */ - table[MESA_FORMAT_XRGB8888] = pack_row_ubyte_XRGB8888; - table[MESA_FORMAT_XRGB8888_REV] = pack_row_ubyte_XRGB8888_REV; - table[MESA_FORMAT_RGB888] = pack_row_ubyte_RGB888; - table[MESA_FORMAT_BGR888] = pack_row_ubyte_BGR888; - table[MESA_FORMAT_RGB565] = pack_row_ubyte_RGB565; - table[MESA_FORMAT_RGB565_REV] = pack_row_ubyte_RGB565_REV; + table[MESA_FORMAT_A8B8G8R8_UNORM] = pack_row_ubyte_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = pack_row_ubyte_RGBA8888_REV; + table[MESA_FORMAT_B8G8R8A8_UNORM] = pack_row_ubyte_ARGB8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = pack_row_ubyte_ARGB8888_REV; + table[MESA_FORMAT_X8B8G8R8_UNORM] = pack_row_ubyte_RGBA8888; /* reused */ + table[MESA_FORMAT_R8G8B8X8_UNORM] = pack_row_ubyte_RGBA8888_REV; /* reused */ + table[MESA_FORMAT_B8G8R8X8_UNORM] = pack_row_ubyte_XRGB8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = pack_row_ubyte_XRGB8888_REV; + table[MESA_FORMAT_BGR_UNORM8] = pack_row_ubyte_RGB888; + table[MESA_FORMAT_RGB_UNORM8] = pack_row_ubyte_BGR888; + table[MESA_FORMAT_B5G6R5_UNORM] = pack_row_ubyte_RGB565; + table[MESA_FORMAT_R5G6B5_UNORM] = pack_row_ubyte_RGB565_REV; initialized = GL_TRUE; } @@ -2271,7 +2275,7 @@ get_pack_ubyte_rgba_row_function(gl_format format) * Pack a row of GLfloat rgba[4] values to the destination. */ void -_mesa_pack_float_rgba_row(gl_format format, GLuint n, +_mesa_pack_float_rgba_row(mesa_format format, GLuint n, const GLfloat src[][4], void *dst) { pack_float_rgba_row_func packrow = get_pack_float_rgba_row_function(format); @@ -2302,7 +2306,7 @@ _mesa_pack_float_rgba_row(gl_format format, GLuint n, * Pack a row of GLubyte rgba[4] values to the destination. */ void -_mesa_pack_ubyte_rgba_row(gl_format format, GLuint n, +_mesa_pack_ubyte_rgba_row(mesa_format format, GLuint n, const GLubyte src[][4], void *dst) { pack_ubyte_rgba_row_func packrow = get_pack_ubyte_rgba_row_function(format); @@ -2335,7 +2339,7 @@ _mesa_pack_ubyte_rgba_row(gl_format format, GLuint n, * \param dstRowStride destination image row stride in bytes */ void -_mesa_pack_ubyte_rgba_rect(gl_format format, GLuint width, GLuint height, +_mesa_pack_ubyte_rgba_rect(mesa_format format, GLuint width, GLuint height, const GLubyte *src, GLint srcRowStride, void *dst, GLint dstRowStride) { @@ -2423,21 +2427,21 @@ pack_float_z_Z32_FLOAT(const GLfloat *src, void *dst) } gl_pack_float_z_func -_mesa_get_pack_float_z_func(gl_format format) +_mesa_get_pack_float_z_func(mesa_format format) { switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: return pack_float_z_Z24_S8; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: return pack_float_z_S8_Z24; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: return pack_float_z_Z16; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: return pack_float_z_Z32; - case MESA_FORMAT_Z32_FLOAT: - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z_FLOAT32: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: return pack_float_z_Z32_FLOAT; default: _mesa_problem(NULL, @@ -2508,22 +2512,22 @@ pack_uint_z_Z32_FLOAT_X24S8(const GLuint *src, void *dst) } gl_pack_uint_z_func -_mesa_get_pack_uint_z_func(gl_format format) +_mesa_get_pack_uint_z_func(mesa_format format) { switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: return pack_uint_z_Z24_S8; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: return pack_uint_z_S8_Z24; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: return pack_uint_z_Z16; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: return pack_uint_z_Z32; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: return pack_uint_z_Z32_FLOAT; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: return pack_uint_z_Z32_FLOAT_X24S8; default: _mesa_problem(NULL, "unexpected format in _mesa_get_pack_uint_z_func()"); @@ -2572,16 +2576,16 @@ pack_ubyte_stencil_Z32_FLOAT_X24S8(const GLubyte *src, void *dst) gl_pack_ubyte_stencil_func -_mesa_get_pack_ubyte_stencil_func(gl_format format) +_mesa_get_pack_ubyte_stencil_func(mesa_format format) { switch (format) { - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: return pack_ubyte_stencil_Z24_S8; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: return pack_ubyte_stencil_S8_Z24; - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: return pack_ubyte_stencil_S8; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: return pack_ubyte_stencil_Z32_FLOAT_X24S8; default: _mesa_problem(NULL, @@ -2593,12 +2597,12 @@ _mesa_get_pack_ubyte_stencil_func(gl_format format) void -_mesa_pack_float_z_row(gl_format format, GLuint n, +_mesa_pack_float_z_row(mesa_format format, GLuint n, const GLfloat *src, void *dst) { switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: { /* don't disturb the stencil values */ GLuint *d = ((GLuint *) dst); @@ -2612,8 +2616,8 @@ _mesa_pack_float_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: { /* don't disturb the stencil values */ GLuint *d = ((GLuint *) dst); @@ -2627,7 +2631,7 @@ _mesa_pack_float_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: { GLushort *d = ((GLushort *) dst); const GLfloat scale = (GLfloat) 0xffff; @@ -2637,7 +2641,7 @@ _mesa_pack_float_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: { GLuint *d = ((GLuint *) dst); const GLdouble scale = (GLdouble) 0xffffffff; @@ -2647,10 +2651,10 @@ _mesa_pack_float_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: memcpy(dst, src, n * sizeof(GLfloat)); break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: { struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; GLuint i; @@ -2669,12 +2673,12 @@ _mesa_pack_float_z_row(gl_format format, GLuint n, * The incoming Z values are always in the range [0, 0xffffffff]. */ void -_mesa_pack_uint_z_row(gl_format format, GLuint n, +_mesa_pack_uint_z_row(mesa_format format, GLuint n, const GLuint *src, void *dst) { switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: { /* don't disturb the stencil values */ GLuint *d = ((GLuint *) dst); @@ -2686,8 +2690,8 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: { /* don't disturb the stencil values */ GLuint *d = ((GLuint *) dst); @@ -2699,7 +2703,7 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: { GLushort *d = ((GLushort *) dst); GLuint i; @@ -2708,10 +2712,10 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: memcpy(dst, src, n * sizeof(GLfloat)); break; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: { GLuint *d = ((GLuint *) dst); const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; @@ -2723,7 +2727,7 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: { struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; @@ -2742,11 +2746,11 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n, void -_mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, +_mesa_pack_ubyte_stencil_row(mesa_format format, GLuint n, const GLubyte *src, void *dst) { switch (format) { - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: { /* don't disturb the Z values */ GLuint *d = ((GLuint *) dst); @@ -2758,7 +2762,7 @@ _mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: { /* don't disturb the Z values */ GLuint *d = ((GLuint *) dst); @@ -2770,10 +2774,10 @@ _mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: memcpy(dst, src, n * sizeof(GLubyte)); break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: { struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; GLuint i; @@ -2792,14 +2796,14 @@ _mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, * Incoming Z/stencil values are always in uint_24_8 format. */ void -_mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, +_mesa_pack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, const GLuint *src, void *dst) { switch (format) { - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: memcpy(dst, src, n * sizeof(GLuint)); break; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: { GLuint *d = ((GLuint *) dst); GLuint i; @@ -2810,7 +2814,7 @@ _mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, } } break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: { const GLdouble scale = 1.0 / (GLdouble) 0xffffff; struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; @@ -2836,7 +2840,7 @@ _mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, * the packed value at dst will be 0 or ~0 depending on the colorMask. */ void -_mesa_pack_colormask(gl_format format, const GLubyte colorMask[4], void *dst) +_mesa_pack_colormask(mesa_format format, const GLubyte colorMask[4], void *dst) { GLfloat maskColor[4]; diff --git a/mesalib/src/mesa/main/format_pack.h b/mesalib/src/mesa/main/format_pack.h index ebd103d03..2577def41 100644 --- a/mesalib/src/mesa/main/format_pack.h +++ b/mesalib/src/mesa/main/format_pack.h @@ -49,58 +49,58 @@ typedef void (*gl_pack_ubyte_stencil_func)(const GLubyte *src, void *dst); extern gl_pack_ubyte_rgba_func -_mesa_get_pack_ubyte_rgba_function(gl_format format); +_mesa_get_pack_ubyte_rgba_function(mesa_format format); extern gl_pack_float_rgba_func -_mesa_get_pack_float_rgba_function(gl_format format); +_mesa_get_pack_float_rgba_function(mesa_format format); extern gl_pack_float_z_func -_mesa_get_pack_float_z_func(gl_format format); +_mesa_get_pack_float_z_func(mesa_format format); extern gl_pack_uint_z_func -_mesa_get_pack_uint_z_func(gl_format format); +_mesa_get_pack_uint_z_func(mesa_format format); extern gl_pack_ubyte_stencil_func -_mesa_get_pack_ubyte_stencil_func(gl_format format); +_mesa_get_pack_ubyte_stencil_func(mesa_format format); extern void -_mesa_pack_float_rgba_row(gl_format format, GLuint n, +_mesa_pack_float_rgba_row(mesa_format format, GLuint n, const GLfloat src[][4], void *dst); extern void -_mesa_pack_ubyte_rgba_row(gl_format format, GLuint n, +_mesa_pack_ubyte_rgba_row(mesa_format format, GLuint n, const GLubyte src[][4], void *dst); extern void -_mesa_pack_ubyte_rgba_rect(gl_format format, GLuint width, GLuint height, +_mesa_pack_ubyte_rgba_rect(mesa_format format, GLuint width, GLuint height, const GLubyte *src, GLint srcRowStride, void *dst, GLint dstRowStride); extern void -_mesa_pack_float_z_row(gl_format format, GLuint n, +_mesa_pack_float_z_row(mesa_format format, GLuint n, const GLfloat *src, void *dst); extern void -_mesa_pack_uint_z_row(gl_format format, GLuint n, +_mesa_pack_uint_z_row(mesa_format format, GLuint n, const GLuint *src, void *dst); extern void -_mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, +_mesa_pack_ubyte_stencil_row(mesa_format format, GLuint n, const GLubyte *src, void *dst); extern void -_mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, +_mesa_pack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, const GLuint *src, void *dst); extern void -_mesa_pack_colormask(gl_format format, const GLubyte colorMask[4], void *dst); +_mesa_pack_colormask(mesa_format format, const GLubyte colorMask[4], void *dst); #endif diff --git a/mesalib/src/mesa/main/format_unpack.c b/mesalib/src/mesa/main/format_unpack.c index 28a50f31e..02ad00a9d 100644 --- a/mesalib/src/mesa/main/format_unpack.c +++ b/mesalib/src/mesa/main/format_unpack.c @@ -30,7 +30,7 @@ #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h" -/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */ +/** Helper struct for MESA_FORMAT_Z32_FLOAT_S8X24_UINT */ struct z32f_x24s8 { float z; @@ -234,6 +234,9 @@ unpack_RGB565(const void *src, GLfloat dst[][4], GLuint n) static void unpack_RGB565_REV(const void *src, GLfloat dst[][4], GLuint n) { + /* Warning: this function does not match the current Mesa definition + * of MESA_FORMAT_R5G6B5_UNORM. + */ const GLushort *s = ((const GLushort *) src); GLuint i; for (i = 0; i < n; i++) { @@ -300,6 +303,9 @@ unpack_ARGB1555(const void *src, GLfloat dst[][4], GLuint n) static void unpack_ARGB1555_REV(const void *src, GLfloat dst[][4], GLuint n) { + /* Warning: this function does not match the current Mesa definition + * of MESA_FORMAT_A1R5G5B5_UNORM. + */ const GLushort *s = ((const GLushort *) src); GLuint i; for (i = 0; i < n; i++) { @@ -2311,7 +2317,7 @@ unpack_SIGNED_RG1616(const void *src, GLfloat dst[][4], GLuint n) * Return the unpacker function for the given format. */ static unpack_rgba_func -get_unpack_rgba_function(gl_format format) +get_unpack_rgba_function(mesa_format format) { static unpack_rgba_func table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -2319,58 +2325,58 @@ get_unpack_rgba_function(gl_format format) if (!initialized) { table[MESA_FORMAT_NONE] = NULL; - table[MESA_FORMAT_RGBA8888] = unpack_RGBA8888; - table[MESA_FORMAT_RGBA8888_REV] = unpack_RGBA8888_REV; - table[MESA_FORMAT_ARGB8888] = unpack_ARGB8888; - table[MESA_FORMAT_ARGB8888_REV] = unpack_ARGB8888_REV; - table[MESA_FORMAT_RGBX8888] = unpack_RGBX8888; - table[MESA_FORMAT_RGBX8888_REV] = unpack_RGBX8888_REV; - table[MESA_FORMAT_XRGB8888] = unpack_XRGB8888; - table[MESA_FORMAT_XRGB8888_REV] = unpack_XRGB8888_REV; - table[MESA_FORMAT_RGB888] = unpack_RGB888; - table[MESA_FORMAT_BGR888] = unpack_BGR888; - table[MESA_FORMAT_RGB565] = unpack_RGB565; - table[MESA_FORMAT_RGB565_REV] = unpack_RGB565_REV; - table[MESA_FORMAT_ARGB4444] = unpack_ARGB4444; - table[MESA_FORMAT_ARGB4444_REV] = unpack_ARGB4444_REV; - table[MESA_FORMAT_RGBA5551] = unpack_RGBA5551; - table[MESA_FORMAT_ARGB1555] = unpack_ARGB1555; - table[MESA_FORMAT_ARGB1555_REV] = unpack_ARGB1555_REV; - table[MESA_FORMAT_AL44] = unpack_AL44; - table[MESA_FORMAT_AL88] = unpack_AL88; - table[MESA_FORMAT_AL88_REV] = unpack_AL88_REV; - table[MESA_FORMAT_AL1616] = unpack_AL1616; - table[MESA_FORMAT_AL1616_REV] = unpack_AL1616_REV; - table[MESA_FORMAT_RGB332] = unpack_RGB332; - table[MESA_FORMAT_A8] = unpack_A8; - table[MESA_FORMAT_A16] = unpack_A16; - table[MESA_FORMAT_L8] = unpack_L8; - table[MESA_FORMAT_L16] = unpack_L16; - table[MESA_FORMAT_I8] = unpack_I8; - table[MESA_FORMAT_I16] = unpack_I16; + table[MESA_FORMAT_A8B8G8R8_UNORM] = unpack_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = unpack_RGBA8888_REV; + table[MESA_FORMAT_B8G8R8A8_UNORM] = unpack_ARGB8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = unpack_ARGB8888_REV; + table[MESA_FORMAT_X8B8G8R8_UNORM] = unpack_RGBX8888; + table[MESA_FORMAT_R8G8B8X8_UNORM] = unpack_RGBX8888_REV; + table[MESA_FORMAT_B8G8R8X8_UNORM] = unpack_XRGB8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = unpack_XRGB8888_REV; + table[MESA_FORMAT_BGR_UNORM8] = unpack_RGB888; + table[MESA_FORMAT_RGB_UNORM8] = unpack_BGR888; + table[MESA_FORMAT_B5G6R5_UNORM] = unpack_RGB565; + table[MESA_FORMAT_R5G6B5_UNORM] = unpack_RGB565_REV; + table[MESA_FORMAT_B4G4R4A4_UNORM] = unpack_ARGB4444; + table[MESA_FORMAT_A4R4G4B4_UNORM] = unpack_ARGB4444_REV; + table[MESA_FORMAT_A1B5G5R5_UNORM] = unpack_RGBA5551; + table[MESA_FORMAT_B5G5R5A1_UNORM] = unpack_ARGB1555; + table[MESA_FORMAT_A1R5G5B5_UNORM] = unpack_ARGB1555_REV; + table[MESA_FORMAT_L4A4_UNORM] = unpack_AL44; + table[MESA_FORMAT_L8A8_UNORM] = unpack_AL88; + table[MESA_FORMAT_A8L8_UNORM] = unpack_AL88_REV; + table[MESA_FORMAT_L16A16_UNORM] = unpack_AL1616; + table[MESA_FORMAT_A16L16_UNORM] = unpack_AL1616_REV; + table[MESA_FORMAT_B2G3R3_UNORM] = unpack_RGB332; + table[MESA_FORMAT_A_UNORM8] = unpack_A8; + table[MESA_FORMAT_A_UNORM16] = unpack_A16; + table[MESA_FORMAT_L_UNORM8] = unpack_L8; + table[MESA_FORMAT_L_UNORM16] = unpack_L16; + table[MESA_FORMAT_I_UNORM8] = unpack_I8; + table[MESA_FORMAT_I_UNORM16] = unpack_I16; table[MESA_FORMAT_YCBCR] = unpack_YCBCR; table[MESA_FORMAT_YCBCR_REV] = unpack_YCBCR_REV; - table[MESA_FORMAT_R8] = unpack_R8; - table[MESA_FORMAT_GR88] = unpack_GR88; - table[MESA_FORMAT_RG88] = unpack_RG88; - table[MESA_FORMAT_R16] = unpack_R16; - 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; - table[MESA_FORMAT_Z16] = unpack_Z16; - table[MESA_FORMAT_X8_Z24] = unpack_X8_Z24; - table[MESA_FORMAT_Z24_X8] = unpack_Z24_X8; - table[MESA_FORMAT_Z32] = unpack_Z32; - table[MESA_FORMAT_S8] = unpack_S8; - table[MESA_FORMAT_SRGB8] = unpack_SRGB8; - table[MESA_FORMAT_SRGBA8] = unpack_SRGBA8; - table[MESA_FORMAT_SARGB8] = unpack_SARGB8; - table[MESA_FORMAT_SL8] = unpack_SL8; - table[MESA_FORMAT_SLA8] = unpack_SLA8; + table[MESA_FORMAT_R_UNORM8] = unpack_R8; + table[MESA_FORMAT_R8G8_UNORM] = unpack_GR88; + table[MESA_FORMAT_G8R8_UNORM] = unpack_RG88; + table[MESA_FORMAT_R_UNORM16] = unpack_R16; + table[MESA_FORMAT_R16G16_UNORM] = unpack_GR1616; + table[MESA_FORMAT_G16R16_UNORM] = unpack_RG1616; + table[MESA_FORMAT_B10G10R10A2_UNORM] = unpack_ARGB2101010; + table[MESA_FORMAT_B10G10R10A2_UINT] = unpack_ARGB2101010_UINT; + table[MESA_FORMAT_R10G10B10A2_UINT] = unpack_ABGR2101010_UINT; + table[MESA_FORMAT_S8_UINT_Z24_UNORM] = unpack_Z24_S8; + table[MESA_FORMAT_Z24_UNORM_X8_UINT] = unpack_S8_Z24; + table[MESA_FORMAT_Z_UNORM16] = unpack_Z16; + table[MESA_FORMAT_Z24_UNORM_S8_UINT] = unpack_X8_Z24; + table[MESA_FORMAT_X8Z24_UNORM] = unpack_Z24_X8; + table[MESA_FORMAT_Z_UNORM32] = unpack_Z32; + table[MESA_FORMAT_S_UINT8] = unpack_S8; + table[MESA_FORMAT_BGR_SRGB8] = unpack_SRGB8; + table[MESA_FORMAT_A8B8G8R8_SRGB] = unpack_SRGBA8; + table[MESA_FORMAT_B8G8R8A8_SRGB] = unpack_SARGB8; + table[MESA_FORMAT_L_SRGB8] = unpack_SL8; + table[MESA_FORMAT_L8A8_SRGB] = unpack_SLA8; table[MESA_FORMAT_SRGB_DXT1] = unpack_SRGB_DXT1; table[MESA_FORMAT_SRGBA_DXT1] = unpack_SRGBA_DXT1; table[MESA_FORMAT_SRGBA_DXT3] = unpack_SRGBA_DXT3; @@ -2387,59 +2393,59 @@ get_unpack_rgba_function(gl_format format) table[MESA_FORMAT_RGBA_FLOAT16] = unpack_RGBA_FLOAT16; table[MESA_FORMAT_RGB_FLOAT32] = unpack_RGB_FLOAT32; table[MESA_FORMAT_RGB_FLOAT16] = unpack_RGB_FLOAT16; - table[MESA_FORMAT_ALPHA_FLOAT32] = unpack_ALPHA_FLOAT32; - table[MESA_FORMAT_ALPHA_FLOAT16] = unpack_ALPHA_FLOAT16; - table[MESA_FORMAT_LUMINANCE_FLOAT32] = unpack_LUMINANCE_FLOAT32; - table[MESA_FORMAT_LUMINANCE_FLOAT16] = unpack_LUMINANCE_FLOAT16; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = unpack_LUMINANCE_ALPHA_FLOAT32; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = unpack_LUMINANCE_ALPHA_FLOAT16; - table[MESA_FORMAT_INTENSITY_FLOAT32] = unpack_INTENSITY_FLOAT32; - table[MESA_FORMAT_INTENSITY_FLOAT16] = unpack_INTENSITY_FLOAT16; + table[MESA_FORMAT_A_FLOAT32] = unpack_ALPHA_FLOAT32; + table[MESA_FORMAT_A_FLOAT16] = unpack_ALPHA_FLOAT16; + table[MESA_FORMAT_L_FLOAT32] = unpack_LUMINANCE_FLOAT32; + table[MESA_FORMAT_L_FLOAT16] = unpack_LUMINANCE_FLOAT16; + table[MESA_FORMAT_LA_FLOAT32] = unpack_LUMINANCE_ALPHA_FLOAT32; + table[MESA_FORMAT_LA_FLOAT16] = unpack_LUMINANCE_ALPHA_FLOAT16; + table[MESA_FORMAT_I_FLOAT32] = unpack_INTENSITY_FLOAT32; + table[MESA_FORMAT_I_FLOAT16] = unpack_INTENSITY_FLOAT16; table[MESA_FORMAT_R_FLOAT32] = unpack_R_FLOAT32; table[MESA_FORMAT_R_FLOAT16] = unpack_R_FLOAT16; 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_A_UINT8] = unpack_ALPHA_UINT8; + table[MESA_FORMAT_A_UINT16] = unpack_ALPHA_UINT16; + table[MESA_FORMAT_A_UINT32] = unpack_ALPHA_UINT32; + table[MESA_FORMAT_A_SINT8] = unpack_ALPHA_INT8; + table[MESA_FORMAT_A_SINT16] = unpack_ALPHA_INT16; + table[MESA_FORMAT_A_SINT32] = unpack_ALPHA_INT32; + + table[MESA_FORMAT_I_UINT8] = unpack_INTENSITY_UINT8; + table[MESA_FORMAT_I_UINT16] = unpack_INTENSITY_UINT16; + table[MESA_FORMAT_I_UINT32] = unpack_INTENSITY_UINT32; + table[MESA_FORMAT_I_SINT8] = unpack_INTENSITY_INT8; + table[MESA_FORMAT_I_SINT16] = unpack_INTENSITY_INT16; + table[MESA_FORMAT_I_SINT32] = unpack_INTENSITY_INT32; + + table[MESA_FORMAT_L_UINT8] = unpack_LUMINANCE_UINT8; + table[MESA_FORMAT_L_UINT16] = unpack_LUMINANCE_UINT16; + table[MESA_FORMAT_L_UINT32] = unpack_LUMINANCE_UINT32; + table[MESA_FORMAT_L_SINT8] = unpack_LUMINANCE_INT8; + table[MESA_FORMAT_L_SINT16] = unpack_LUMINANCE_INT16; + table[MESA_FORMAT_L_SINT32] = unpack_LUMINANCE_INT32; + + table[MESA_FORMAT_LA_UINT8] = unpack_LUMINANCE_ALPHA_UINT8; + table[MESA_FORMAT_LA_UINT16] = unpack_LUMINANCE_ALPHA_UINT16; + table[MESA_FORMAT_LA_UINT32] = unpack_LUMINANCE_ALPHA_UINT32; + table[MESA_FORMAT_LA_SINT8] = unpack_LUMINANCE_ALPHA_INT8; + table[MESA_FORMAT_LA_SINT16] = unpack_LUMINANCE_ALPHA_INT16; + table[MESA_FORMAT_LA_SINT32] = unpack_LUMINANCE_ALPHA_INT32; + + table[MESA_FORMAT_R_SINT8] = unpack_R_INT8; + table[MESA_FORMAT_RG_SINT8] = unpack_RG_INT8; + table[MESA_FORMAT_RGB_SINT8] = unpack_RGB_INT8; + table[MESA_FORMAT_RGBA_SINT8] = unpack_RGBA_INT8; + table[MESA_FORMAT_R_SINT16] = unpack_R_INT16; + table[MESA_FORMAT_RG_SINT16] = unpack_RG_INT16; + table[MESA_FORMAT_RGB_SINT16] = unpack_RGB_INT16; + table[MESA_FORMAT_RGBA_SINT16] = unpack_RGBA_INT16; + table[MESA_FORMAT_R_SINT32] = unpack_R_INT32; + table[MESA_FORMAT_RG_SINT32] = unpack_RG_INT32; + table[MESA_FORMAT_RGB_SINT32] = unpack_RGB_INT32; + table[MESA_FORMAT_RGBA_SINT32] = 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; @@ -2454,26 +2460,26 @@ get_unpack_rgba_function(gl_format format) table[MESA_FORMAT_RGBA_UINT32] = unpack_RGBA_UINT32; table[MESA_FORMAT_DUDV8] = unpack_DUDV8; - table[MESA_FORMAT_SIGNED_R8] = unpack_SIGNED_R8; - table[MESA_FORMAT_SIGNED_RG88_REV] = unpack_SIGNED_RG88_REV; - table[MESA_FORMAT_SIGNED_RGBX8888] = unpack_SIGNED_RGBX8888; - table[MESA_FORMAT_SIGNED_RGBA8888] = unpack_SIGNED_RGBA8888; - table[MESA_FORMAT_SIGNED_RGBA8888_REV] = unpack_SIGNED_RGBA8888_REV; - table[MESA_FORMAT_SIGNED_R16] = unpack_SIGNED_R16; - table[MESA_FORMAT_SIGNED_GR1616] = unpack_SIGNED_GR1616; - table[MESA_FORMAT_SIGNED_RGB_16] = unpack_SIGNED_RGB_16; - table[MESA_FORMAT_SIGNED_RGBA_16] = unpack_SIGNED_RGBA_16; - table[MESA_FORMAT_RGBA_16] = unpack_RGBA_16; - - table[MESA_FORMAT_RED_RGTC1] = unpack_RED_RGTC1; - table[MESA_FORMAT_SIGNED_RED_RGTC1] = unpack_SIGNED_RED_RGTC1; - table[MESA_FORMAT_RG_RGTC2] = unpack_RG_RGTC2; - table[MESA_FORMAT_SIGNED_RG_RGTC2] = unpack_SIGNED_RG_RGTC2; - - table[MESA_FORMAT_L_LATC1] = unpack_L_LATC1; - table[MESA_FORMAT_SIGNED_L_LATC1] = unpack_SIGNED_L_LATC1; - table[MESA_FORMAT_LA_LATC2] = unpack_LA_LATC2; - table[MESA_FORMAT_SIGNED_LA_LATC2] = unpack_SIGNED_LA_LATC2; + table[MESA_FORMAT_R_SNORM8] = unpack_SIGNED_R8; + table[MESA_FORMAT_R8G8_SNORM] = unpack_SIGNED_RG88_REV; + table[MESA_FORMAT_X8B8G8R8_SNORM] = unpack_SIGNED_RGBX8888; + table[MESA_FORMAT_A8B8G8R8_SNORM] = unpack_SIGNED_RGBA8888; + table[MESA_FORMAT_R8G8B8A8_SNORM] = unpack_SIGNED_RGBA8888_REV; + table[MESA_FORMAT_R_SNORM16] = unpack_SIGNED_R16; + table[MESA_FORMAT_R16G16_SNORM] = unpack_SIGNED_GR1616; + table[MESA_FORMAT_RGB_SNORM16] = unpack_SIGNED_RGB_16; + table[MESA_FORMAT_RGBA_SNORM16] = unpack_SIGNED_RGBA_16; + table[MESA_FORMAT_RGBA_UNORM16] = unpack_RGBA_16; + + table[MESA_FORMAT_R_RGTC1_UNORM] = unpack_RED_RGTC1; + table[MESA_FORMAT_R_RGTC1_SNORM] = unpack_SIGNED_RED_RGTC1; + table[MESA_FORMAT_RG_RGTC2_UNORM] = unpack_RG_RGTC2; + table[MESA_FORMAT_RG_RGTC2_SNORM] = unpack_SIGNED_RG_RGTC2; + + table[MESA_FORMAT_L_LATC1_UNORM] = unpack_L_LATC1; + table[MESA_FORMAT_L_LATC1_SNORM] = unpack_SIGNED_L_LATC1; + table[MESA_FORMAT_LA_LATC2_UNORM] = unpack_LA_LATC2; + table[MESA_FORMAT_LA_LATC2_SNORM] = unpack_SIGNED_LA_LATC2; table[MESA_FORMAT_ETC1_RGB8] = unpack_ETC1_RGB8; table[MESA_FORMAT_ETC2_RGB8] = unpack_ETC2_RGB8; @@ -2488,41 +2494,41 @@ get_unpack_rgba_function(gl_format format) unpack_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; - table[MESA_FORMAT_SIGNED_AL88] = unpack_SIGNED_AL88; - table[MESA_FORMAT_SIGNED_I8] = unpack_SIGNED_I8; - table[MESA_FORMAT_SIGNED_A16] = unpack_SIGNED_A16; - table[MESA_FORMAT_SIGNED_L16] = unpack_SIGNED_L16; - table[MESA_FORMAT_SIGNED_AL1616] = unpack_SIGNED_AL1616; - table[MESA_FORMAT_SIGNED_I16] = unpack_SIGNED_I16; - - table[MESA_FORMAT_RGB9_E5_FLOAT] = unpack_RGB9_E5_FLOAT; - table[MESA_FORMAT_R11_G11_B10_FLOAT] = unpack_R11_G11_B10_FLOAT; - - table[MESA_FORMAT_Z32_FLOAT] = unpack_Z32_FLOAT; - table[MESA_FORMAT_Z32_FLOAT_X24S8] = unpack_Z32_FLOAT_X24S8; - - table[MESA_FORMAT_XRGB4444_UNORM] = unpack_XRGB4444_UNORM; - table[MESA_FORMAT_XRGB1555_UNORM] = unpack_XRGB1555_UNORM; - table[MESA_FORMAT_XBGR8888_SNORM] = unpack_XBGR8888_SNORM; - table[MESA_FORMAT_XBGR8888_SRGB] = unpack_XBGR8888_SRGB; - table[MESA_FORMAT_XBGR8888_UINT] = unpack_XBGR8888_UINT; - table[MESA_FORMAT_XBGR8888_SINT] = unpack_XBGR8888_SINT; - table[MESA_FORMAT_XRGB2101010_UNORM] = unpack_XRGB2101010_UNORM; - table[MESA_FORMAT_XBGR16161616_UNORM] = unpack_XBGR16161616_UNORM; - table[MESA_FORMAT_XBGR16161616_SNORM] = unpack_XBGR16161616_SNORM; - table[MESA_FORMAT_XBGR16161616_FLOAT] = unpack_XBGR16161616_FLOAT; - table[MESA_FORMAT_XBGR16161616_UINT] = unpack_XBGR16161616_UINT; - table[MESA_FORMAT_XBGR16161616_SINT] = unpack_XBGR16161616_SINT; - table[MESA_FORMAT_XBGR32323232_FLOAT] = unpack_XBGR32323232_FLOAT; - table[MESA_FORMAT_XBGR32323232_UINT] = unpack_XBGR32323232_UINT; - table[MESA_FORMAT_XBGR32323232_SINT] = unpack_XBGR32323232_SINT; - - table[MESA_FORMAT_ABGR2101010] = unpack_ABGR2101010; - - table[MESA_FORMAT_SIGNED_RG88] = unpack_SIGNED_RG88; - table[MESA_FORMAT_SIGNED_RG1616] = unpack_SIGNED_RG1616; + table[MESA_FORMAT_A_SNORM8] = unpack_SIGNED_A8; + table[MESA_FORMAT_L_SNORM8] = unpack_SIGNED_L8; + table[MESA_FORMAT_L8A8_SNORM] = unpack_SIGNED_AL88; + table[MESA_FORMAT_I_SNORM8] = unpack_SIGNED_I8; + table[MESA_FORMAT_A_SNORM16] = unpack_SIGNED_A16; + table[MESA_FORMAT_L_SNORM16] = unpack_SIGNED_L16; + table[MESA_FORMAT_LA_SNORM16] = unpack_SIGNED_AL1616; + table[MESA_FORMAT_I_SNORM16] = unpack_SIGNED_I16; + + table[MESA_FORMAT_R9G9B9E5_FLOAT] = unpack_RGB9_E5_FLOAT; + table[MESA_FORMAT_R11G11B10_FLOAT] = unpack_R11_G11_B10_FLOAT; + + table[MESA_FORMAT_Z_FLOAT32] = unpack_Z32_FLOAT; + table[MESA_FORMAT_Z32_FLOAT_S8X24_UINT] = unpack_Z32_FLOAT_X24S8; + + table[MESA_FORMAT_B4G4R4X4_UNORM] = unpack_XRGB4444_UNORM; + table[MESA_FORMAT_B5G5R5X1_UNORM] = unpack_XRGB1555_UNORM; + table[MESA_FORMAT_R8G8B8X8_SNORM] = unpack_XBGR8888_SNORM; + table[MESA_FORMAT_R8G8B8X8_SRGB] = unpack_XBGR8888_SRGB; + table[MESA_FORMAT_RGBX_UINT8] = unpack_XBGR8888_UINT; + table[MESA_FORMAT_RGBX_SINT8] = unpack_XBGR8888_SINT; + table[MESA_FORMAT_B10G10R10X2_UNORM] = unpack_XRGB2101010_UNORM; + table[MESA_FORMAT_RGBX_UNORM16] = unpack_XBGR16161616_UNORM; + table[MESA_FORMAT_RGBX_SNORM16] = unpack_XBGR16161616_SNORM; + table[MESA_FORMAT_RGBX_FLOAT16] = unpack_XBGR16161616_FLOAT; + table[MESA_FORMAT_RGBX_UINT16] = unpack_XBGR16161616_UINT; + table[MESA_FORMAT_RGBX_SINT16] = unpack_XBGR16161616_SINT; + table[MESA_FORMAT_RGBX_FLOAT32] = unpack_XBGR32323232_FLOAT; + table[MESA_FORMAT_RGBX_UINT32] = unpack_XBGR32323232_UINT; + table[MESA_FORMAT_RGBX_SINT32] = unpack_XBGR32323232_SINT; + + table[MESA_FORMAT_R10G10B10A2_UNORM] = unpack_ABGR2101010; + + table[MESA_FORMAT_G8R8_SNORM] = unpack_SIGNED_RG88; + table[MESA_FORMAT_G16R16_SNORM] = unpack_SIGNED_RG1616; initialized = GL_TRUE; } @@ -2540,7 +2546,7 @@ get_unpack_rgba_function(gl_format format) * Unpack rgba colors, returning as GLfloat values. */ void -_mesa_unpack_rgba_row(gl_format format, GLuint n, +_mesa_unpack_rgba_row(mesa_format format, GLuint n, const void *src, GLfloat dst[][4]) { unpack_rgba_func unpack = get_unpack_rgba_function(format); @@ -2699,6 +2705,9 @@ unpack_ubyte_RGB565(const void *src, GLubyte dst[][4], GLuint n) static void unpack_ubyte_RGB565_REV(const void *src, GLubyte dst[][4], GLuint n) { + /* Warning: this function does not match the current Mesa definition + * of MESA_FORMAT_R5G6B5_UNORM. + */ const GLushort *s = ((const GLushort *) src); GLuint i; for (i = 0; i < n; i++) { @@ -2765,6 +2774,9 @@ unpack_ubyte_ARGB1555(const void *src, GLubyte dst[][4], GLuint n) static void unpack_ubyte_ARGB1555_REV(const void *src, GLubyte dst[][4], GLuint n) { + /* Warning: this function does not match the current Mesa definition + * of MESA_FORMAT_A1R5G5B5_UNORM. + */ const GLushort *s = ((const GLushort *) src); GLuint i; for (i = 0; i < n; i++) { @@ -2913,89 +2925,89 @@ unpack_ubyte_RG88(const void *src, GLubyte dst[][4], GLuint n) * only be used for unpacking formats that use 8 bits or less per channel. */ void -_mesa_unpack_ubyte_rgba_row(gl_format format, GLuint n, +_mesa_unpack_ubyte_rgba_row(mesa_format format, GLuint n, const void *src, GLubyte dst[][4]) { switch (format) { - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: unpack_ubyte_RGBA8888(src, dst, n); break; - case MESA_FORMAT_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_UNORM: unpack_ubyte_RGBA8888_REV(src, dst, n); break; - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: unpack_ubyte_ARGB8888(src, dst, n); break; - case MESA_FORMAT_ARGB8888_REV: + case MESA_FORMAT_A8R8G8B8_UNORM: unpack_ubyte_ARGB8888_REV(src, dst, n); break; - case MESA_FORMAT_RGBX8888: + case MESA_FORMAT_X8B8G8R8_UNORM: unpack_ubyte_RGBX8888(src, dst, n); break; - case MESA_FORMAT_RGBX8888_REV: + case MESA_FORMAT_R8G8B8X8_UNORM: unpack_ubyte_RGBX8888_REV(src, dst, n); break; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: unpack_ubyte_XRGB8888(src, dst, n); break; - case MESA_FORMAT_XRGB8888_REV: + case MESA_FORMAT_X8R8G8B8_UNORM: unpack_ubyte_XRGB8888_REV(src, dst, n); break; - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: unpack_ubyte_RGB888(src, dst, n); break; - case MESA_FORMAT_BGR888: + case MESA_FORMAT_RGB_UNORM8: unpack_ubyte_BGR888(src, dst, n); break; - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: unpack_ubyte_RGB565(src, dst, n); break; - case MESA_FORMAT_RGB565_REV: + case MESA_FORMAT_R5G6B5_UNORM: unpack_ubyte_RGB565_REV(src, dst, n); break; - case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_B4G4R4A4_UNORM: unpack_ubyte_ARGB4444(src, dst, n); break; - case MESA_FORMAT_ARGB4444_REV: + case MESA_FORMAT_A4R4G4B4_UNORM: unpack_ubyte_ARGB4444_REV(src, dst, n); break; - case MESA_FORMAT_RGBA5551: + case MESA_FORMAT_A1B5G5R5_UNORM: unpack_ubyte_RGBA5551(src, dst, n); break; - case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_B5G5R5A1_UNORM: unpack_ubyte_ARGB1555(src, dst, n); break; - case MESA_FORMAT_ARGB1555_REV: + case MESA_FORMAT_A1R5G5B5_UNORM: unpack_ubyte_ARGB1555_REV(src, dst, n); break; - case MESA_FORMAT_AL44: + case MESA_FORMAT_L4A4_UNORM: unpack_ubyte_AL44(src, dst, n); break; - case MESA_FORMAT_AL88: + case MESA_FORMAT_L8A8_UNORM: unpack_ubyte_AL88(src, dst, n); break; - case MESA_FORMAT_AL88_REV: + case MESA_FORMAT_A8L8_UNORM: unpack_ubyte_AL88_REV(src, dst, n); break; - case MESA_FORMAT_RGB332: + case MESA_FORMAT_B2G3R3_UNORM: unpack_ubyte_RGB332(src, dst, n); break; - case MESA_FORMAT_A8: + case MESA_FORMAT_A_UNORM8: unpack_ubyte_A8(src, dst, n); break; - case MESA_FORMAT_L8: + case MESA_FORMAT_L_UNORM8: unpack_ubyte_L8(src, dst, n); break; - case MESA_FORMAT_I8: + case MESA_FORMAT_I_UNORM8: unpack_ubyte_I8(src, dst, n); break; - case MESA_FORMAT_R8: + case MESA_FORMAT_R_UNORM8: unpack_ubyte_R8(src, dst, n); break; - case MESA_FORMAT_GR88: + case MESA_FORMAT_R8G8_UNORM: unpack_ubyte_GR88(src, dst, n); break; - case MESA_FORMAT_RG88: + case MESA_FORMAT_G8R8_UNORM: unpack_ubyte_RG88(src, dst, n); break; default: @@ -3640,7 +3652,7 @@ unpack_int_rgba_ABGR2101010(const GLuint *src, GLuint dst[][4], GLuint n) } void -_mesa_unpack_uint_rgba_row(gl_format format, GLuint n, +_mesa_unpack_uint_rgba_row(mesa_format format, GLuint n, const void *src, GLuint dst[][4]) { switch (format) { @@ -3648,198 +3660,198 @@ _mesa_unpack_uint_rgba_row(gl_format format, GLuint n, * make separate paths for 32-bit-to-32-bit integer unpack. */ case MESA_FORMAT_RGBA_UINT32: - case MESA_FORMAT_RGBA_INT32: + case MESA_FORMAT_RGBA_SINT32: unpack_int_rgba_RGBA_UINT32(src, dst, n); break; case MESA_FORMAT_RGBA_UINT16: unpack_int_rgba_RGBA_UINT16(src, dst, n); break; - case MESA_FORMAT_RGBA_INT16: + case MESA_FORMAT_RGBA_SINT16: unpack_int_rgba_RGBA_INT16(src, dst, n); break; case MESA_FORMAT_RGBA_UINT8: unpack_int_rgba_RGBA_UINT8(src, dst, n); break; - case MESA_FORMAT_RGBA_INT8: + case MESA_FORMAT_RGBA_SINT8: unpack_int_rgba_RGBA_INT8(src, dst, n); break; - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: unpack_int_rgba_ARGB8888(src, dst, n); break; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: unpack_int_rgba_XRGB8888(src, dst, n); break; case MESA_FORMAT_RGB_UINT32: - case MESA_FORMAT_RGB_INT32: + case MESA_FORMAT_RGB_SINT32: unpack_int_rgba_RGB_UINT32(src, dst, n); break; case MESA_FORMAT_RGB_UINT16: unpack_int_rgba_RGB_UINT16(src, dst, n); break; - case MESA_FORMAT_RGB_INT16: + case MESA_FORMAT_RGB_SINT16: unpack_int_rgba_RGB_INT16(src, dst, n); break; case MESA_FORMAT_RGB_UINT8: unpack_int_rgba_RGB_UINT8(src, dst, n); break; - case MESA_FORMAT_RGB_INT8: + case MESA_FORMAT_RGB_SINT8: unpack_int_rgba_RGB_INT8(src, dst, n); break; case MESA_FORMAT_RG_UINT32: - case MESA_FORMAT_RG_INT32: + case MESA_FORMAT_RG_SINT32: unpack_int_rgba_RG_UINT32(src, dst, n); break; case MESA_FORMAT_RG_UINT16: unpack_int_rgba_RG_UINT16(src, dst, n); break; - case MESA_FORMAT_RG_INT16: + case MESA_FORMAT_RG_SINT16: unpack_int_rgba_RG_INT16(src, dst, n); break; case MESA_FORMAT_RG_UINT8: unpack_int_rgba_RG_UINT8(src, dst, n); break; - case MESA_FORMAT_RG_INT8: + case MESA_FORMAT_RG_SINT8: unpack_int_rgba_RG_INT8(src, dst, n); break; case MESA_FORMAT_R_UINT32: - case MESA_FORMAT_R_INT32: + case MESA_FORMAT_R_SINT32: unpack_int_rgba_R_UINT32(src, dst, n); break; case MESA_FORMAT_R_UINT16: unpack_int_rgba_R_UINT16(src, dst, n); break; - case MESA_FORMAT_R_INT16: + case MESA_FORMAT_R_SINT16: unpack_int_rgba_R_INT16(src, dst, n); break; case MESA_FORMAT_R_UINT8: unpack_int_rgba_R_UINT8(src, dst, n); break; - case MESA_FORMAT_R_INT8: + case MESA_FORMAT_R_SINT8: unpack_int_rgba_R_INT8(src, dst, n); break; - case MESA_FORMAT_ALPHA_UINT32: - case MESA_FORMAT_ALPHA_INT32: + case MESA_FORMAT_A_UINT32: + case MESA_FORMAT_A_SINT32: unpack_int_rgba_ALPHA_UINT32(src, dst, n); break; - case MESA_FORMAT_ALPHA_UINT16: + case MESA_FORMAT_A_UINT16: unpack_int_rgba_ALPHA_UINT16(src, dst, n); break; - case MESA_FORMAT_ALPHA_INT16: + case MESA_FORMAT_A_SINT16: unpack_int_rgba_ALPHA_INT16(src, dst, n); break; - case MESA_FORMAT_ALPHA_UINT8: + case MESA_FORMAT_A_UINT8: unpack_int_rgba_ALPHA_UINT8(src, dst, n); break; - case MESA_FORMAT_ALPHA_INT8: + case MESA_FORMAT_A_SINT8: unpack_int_rgba_ALPHA_INT8(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_UINT32: - case MESA_FORMAT_LUMINANCE_INT32: + case MESA_FORMAT_L_UINT32: + case MESA_FORMAT_L_SINT32: unpack_int_rgba_LUMINANCE_UINT32(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_UINT16: + case MESA_FORMAT_L_UINT16: unpack_int_rgba_LUMINANCE_UINT16(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_INT16: + case MESA_FORMAT_L_SINT16: unpack_int_rgba_LUMINANCE_INT16(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_UINT8: + case MESA_FORMAT_L_UINT8: unpack_int_rgba_LUMINANCE_UINT8(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_INT8: + case MESA_FORMAT_L_SINT8: unpack_int_rgba_LUMINANCE_INT8(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: - case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + case MESA_FORMAT_LA_UINT32: + case MESA_FORMAT_LA_SINT32: unpack_int_rgba_LUMINANCE_ALPHA_UINT32(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT16: + case MESA_FORMAT_LA_UINT16: unpack_int_rgba_LUMINANCE_ALPHA_UINT16(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_ALPHA_INT16: + case MESA_FORMAT_LA_SINT16: unpack_int_rgba_LUMINANCE_ALPHA_INT16(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT8: + case MESA_FORMAT_LA_UINT8: unpack_int_rgba_LUMINANCE_ALPHA_UINT8(src, dst, n); break; - case MESA_FORMAT_LUMINANCE_ALPHA_INT8: + case MESA_FORMAT_LA_SINT8: unpack_int_rgba_LUMINANCE_ALPHA_INT8(src, dst, n); break; - case MESA_FORMAT_INTENSITY_UINT32: - case MESA_FORMAT_INTENSITY_INT32: + case MESA_FORMAT_I_UINT32: + case MESA_FORMAT_I_SINT32: unpack_int_rgba_INTENSITY_UINT32(src, dst, n); break; - case MESA_FORMAT_INTENSITY_UINT16: + case MESA_FORMAT_I_UINT16: unpack_int_rgba_INTENSITY_UINT16(src, dst, n); break; - case MESA_FORMAT_INTENSITY_INT16: + case MESA_FORMAT_I_SINT16: unpack_int_rgba_INTENSITY_INT16(src, dst, n); break; - case MESA_FORMAT_INTENSITY_UINT8: + case MESA_FORMAT_I_UINT8: unpack_int_rgba_INTENSITY_UINT8(src, dst, n); break; - case MESA_FORMAT_INTENSITY_INT8: + case MESA_FORMAT_I_SINT8: unpack_int_rgba_INTENSITY_INT8(src, dst, n); break; - case MESA_FORMAT_ARGB2101010_UINT: + case MESA_FORMAT_B10G10R10A2_UINT: unpack_int_rgba_ARGB2101010_UINT(src, dst, n); break; - case MESA_FORMAT_ABGR2101010_UINT: + case MESA_FORMAT_R10G10B10A2_UINT: unpack_int_rgba_ABGR2101010_UINT(src, dst, n); break; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: unpack_int_rgba_ARGB2101010(src, dst, n); break; - case MESA_FORMAT_XBGR8888_UINT: + case MESA_FORMAT_RGBX_UINT8: unpack_int_rgba_XBGR8888_UINT(src, dst, n); break; - case MESA_FORMAT_XBGR8888_SINT: + case MESA_FORMAT_RGBX_SINT8: unpack_int_rgba_XBGR8888_SINT(src, dst, n); break; - case MESA_FORMAT_XBGR16161616_UINT: + case MESA_FORMAT_RGBX_UINT16: unpack_int_rgba_XBGR16161616_UINT(src, dst, n); break; - case MESA_FORMAT_XBGR16161616_SINT: + case MESA_FORMAT_RGBX_SINT16: unpack_int_rgba_XBGR16161616_SINT(src, dst, n); break; - case MESA_FORMAT_XBGR32323232_UINT: - case MESA_FORMAT_XBGR32323232_SINT: + case MESA_FORMAT_RGBX_UINT32: + case MESA_FORMAT_RGBX_SINT32: unpack_int_rgba_XBGR32323232_UINT(src, dst, n); break; - case MESA_FORMAT_ABGR2101010: + case MESA_FORMAT_R10G10B10A2_UNORM: unpack_int_rgba_ABGR2101010(src, dst, n); break; @@ -3863,7 +3875,7 @@ _mesa_unpack_uint_rgba_row(gl_format format, GLuint n, * \param height height of rect region to convert */ void -_mesa_unpack_rgba_block(gl_format format, +_mesa_unpack_rgba_block(mesa_format format, const void *src, GLint srcRowStride, GLfloat dst[][4], GLint dstRowStride, GLuint x, GLuint y, GLuint width, GLuint height) @@ -3964,30 +3976,30 @@ unpack_float_z_Z32X24S8(GLuint n, const void *src, GLfloat *dst) * The returned values will always be in the range [0.0, 1.0]. */ void -_mesa_unpack_float_z_row(gl_format format, GLuint n, +_mesa_unpack_float_z_row(mesa_format format, GLuint n, const void *src, GLfloat *dst) { unpack_float_z_func unpack; switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: unpack = unpack_float_z_Z24_X8; break; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: unpack = unpack_float_z_X8_Z24; break; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: unpack = unpack_float_z_Z16; break; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: unpack = unpack_float_z_Z32; break; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: unpack = unpack_float_z_Z32F; break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: unpack = unpack_float_z_Z32X24S8; break; default: @@ -4068,31 +4080,31 @@ unpack_uint_z_Z32_FLOAT_X24S8(const void *src, GLuint *dst, GLuint n) * The returned values will always be in the range [0, 0xffffffff]. */ void -_mesa_unpack_uint_z_row(gl_format format, GLuint n, +_mesa_unpack_uint_z_row(mesa_format format, GLuint n, const void *src, GLuint *dst) { unpack_uint_z_func unpack; const GLubyte *srcPtr = (GLubyte *) src; switch (format) { - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: unpack = unpack_uint_z_Z24_X8; break; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: unpack = unpack_uint_z_X8_Z24; break; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: unpack = unpack_uint_z_Z16; break; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: unpack = unpack_uint_z_Z32; break; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: unpack = unpack_uint_z_Z32_FLOAT; break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: unpack = unpack_uint_z_Z32_FLOAT_X24S8; break; default: @@ -4142,20 +4154,20 @@ unpack_ubyte_s_Z32_FLOAT_X24S8(const void *src, GLubyte *dst, GLuint n) } void -_mesa_unpack_ubyte_stencil_row(gl_format format, GLuint n, +_mesa_unpack_ubyte_stencil_row(mesa_format format, GLuint n, const void *src, GLubyte *dst) { switch (format) { - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: unpack_ubyte_s_S8(src, dst, n); break; - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: unpack_ubyte_s_Z24_S8(src, dst, n); break; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: unpack_ubyte_s_S8_Z24(src, dst, n); break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: unpack_ubyte_s_Z32_FLOAT_X24S8(src, dst, n); break; default: @@ -4183,14 +4195,14 @@ unpack_uint_24_8_depth_stencil_Z24_S8(const GLuint *src, GLuint *dst, GLuint n) } void -_mesa_unpack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, +_mesa_unpack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, const void *src, GLuint *dst) { switch (format) { - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: unpack_uint_24_8_depth_stencil_Z24_S8(src, dst, n); break; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: unpack_uint_24_8_depth_stencil_S8_Z24(src, dst, n); break; default: diff --git a/mesalib/src/mesa/main/format_unpack.h b/mesalib/src/mesa/main/format_unpack.h index 1da03caa8..1fcfc04b3 100644 --- a/mesalib/src/mesa/main/format_unpack.h +++ b/mesalib/src/mesa/main/format_unpack.h @@ -29,38 +29,38 @@ extern GLfloat _mesa_nonlinear_to_linear(GLubyte cs8); extern void -_mesa_unpack_rgba_row(gl_format format, GLuint n, +_mesa_unpack_rgba_row(mesa_format format, GLuint n, const void *src, GLfloat dst[][4]); extern void -_mesa_unpack_ubyte_rgba_row(gl_format format, GLuint n, +_mesa_unpack_ubyte_rgba_row(mesa_format format, GLuint n, const void *src, GLubyte dst[][4]); void -_mesa_unpack_uint_rgba_row(gl_format format, GLuint n, +_mesa_unpack_uint_rgba_row(mesa_format format, GLuint n, const void *src, GLuint dst[][4]); extern void -_mesa_unpack_rgba_block(gl_format format, +_mesa_unpack_rgba_block(mesa_format format, const void *src, GLint srcRowStride, GLfloat dst[][4], GLint dstRowStride, GLuint x, GLuint y, GLuint width, GLuint height); extern void -_mesa_unpack_float_z_row(gl_format format, GLuint n, +_mesa_unpack_float_z_row(mesa_format format, GLuint n, const void *src, GLfloat *dst); void -_mesa_unpack_uint_z_row(gl_format format, GLuint n, +_mesa_unpack_uint_z_row(mesa_format format, GLuint n, const void *src, GLuint *dst); void -_mesa_unpack_ubyte_stencil_row(gl_format format, GLuint n, +_mesa_unpack_ubyte_stencil_row(mesa_format format, GLuint n, const void *src, GLubyte *dst); void -_mesa_unpack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, +_mesa_unpack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, const void *src, GLuint *dst); diff --git a/mesalib/src/mesa/main/formats.c b/mesalib/src/mesa/main/formats.c index 7bde1f1a8..10731d5a4 100644 --- a/mesalib/src/mesa/main/formats.c +++ b/mesalib/src/mesa/main/formats.c @@ -35,7 +35,7 @@ */ struct gl_format_info { - gl_format Name; + mesa_format Name; /** text name for debugging */ const char *StrName; @@ -88,8 +88,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGBA8888, /* Name */ - "MESA_FORMAT_RGBA8888", /* StrName */ + MESA_FORMAT_A8B8G8R8_UNORM, /* Name */ + "MESA_FORMAT_A8B8G8R8_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ @@ -97,8 +97,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGBA8888_REV, /* Name */ - "MESA_FORMAT_RGBA8888_REV", /* StrName */ + MESA_FORMAT_R8G8B8A8_UNORM, /* Name */ + "MESA_FORMAT_R8G8B8A8_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ @@ -106,8 +106,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB8888, /* Name */ - "MESA_FORMAT_ARGB8888", /* StrName */ + MESA_FORMAT_B8G8R8A8_UNORM, /* Name */ + "MESA_FORMAT_B8G8R8A8_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ @@ -115,8 +115,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB8888_REV, /* Name */ - "MESA_FORMAT_ARGB8888_REV", /* StrName */ + MESA_FORMAT_A8R8G8B8_UNORM, /* Name */ + "MESA_FORMAT_A8R8G8B8_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ @@ -124,8 +124,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGBX8888, /* Name */ - "MESA_FORMAT_RGBX8888", /* StrName */ + MESA_FORMAT_X8B8G8R8_UNORM, /* Name */ + "MESA_FORMAT_X8B8G8R8_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -133,8 +133,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGBX8888_REV, /* Name */ - "MESA_FORMAT_RGBX8888_REV", /* StrName */ + MESA_FORMAT_R8G8B8X8_UNORM, /* Name */ + "MESA_FORMAT_R8G8B8X8_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -142,8 +142,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_XRGB8888, /* Name */ - "MESA_FORMAT_XRGB8888", /* StrName */ + MESA_FORMAT_B8G8R8X8_UNORM, /* Name */ + "MESA_FORMAT_B8G8R8X8_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -151,8 +151,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_XRGB8888_REV, /* Name */ - "MESA_FORMAT_XRGB8888_REV", /* StrName */ + MESA_FORMAT_X8R8G8B8_UNORM, /* Name */ + "MESA_FORMAT_X8R8G8B8_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -160,8 +160,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGB888, /* Name */ - "MESA_FORMAT_RGB888", /* StrName */ + MESA_FORMAT_BGR_UNORM8, /* Name */ + "MESA_FORMAT_BGR_UNORM8", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -169,8 +169,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 3 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_BGR888, /* Name */ - "MESA_FORMAT_BGR888", /* StrName */ + MESA_FORMAT_RGB_UNORM8, /* Name */ + "MESA_FORMAT_RGB_UNORM8", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ @@ -178,8 +178,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 3 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGB565, /* Name */ - "MESA_FORMAT_RGB565", /* StrName */ + MESA_FORMAT_B5G6R5_UNORM, /* Name */ + "MESA_FORMAT_B5G6R5_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */ @@ -187,8 +187,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGB565_REV, /* Name */ - "MESA_FORMAT_RGB565_REV", /* StrName */ + MESA_FORMAT_R5G6B5_UNORM, /* Name */ + "MESA_FORMAT_R5G6B5_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */ @@ -196,8 +196,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB4444, /* Name */ - "MESA_FORMAT_ARGB4444", /* StrName */ + MESA_FORMAT_B4G4R4A4_UNORM, /* Name */ + "MESA_FORMAT_B4G4R4A4_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ @@ -205,8 +205,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB4444_REV, /* Name */ - "MESA_FORMAT_ARGB4444_REV", /* StrName */ + MESA_FORMAT_A4R4G4B4_UNORM, /* Name */ + "MESA_FORMAT_A4R4G4B4_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ @@ -214,8 +214,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGBA5551, /* Name */ - "MESA_FORMAT_RGBA5551", /* StrName */ + MESA_FORMAT_A1B5G5R5_UNORM, /* Name */ + "MESA_FORMAT_A1B5G5R5_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ @@ -223,8 +223,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB1555, /* Name */ - "MESA_FORMAT_ARGB1555", /* StrName */ + MESA_FORMAT_B5G5R5A1_UNORM, /* Name */ + "MESA_FORMAT_B5G5R5A1_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ @@ -232,8 +232,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB1555_REV, /* Name */ - "MESA_FORMAT_ARGB1555_REV", /* StrName */ + MESA_FORMAT_A1R5G5B5_UNORM, /* Name */ + "MESA_FORMAT_A1R5G5B5_UNORM", /* StrName */ GL_RGBA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ @@ -241,8 +241,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_AL44, /* Name */ - "MESA_FORMAT_AL44", /* StrName */ + MESA_FORMAT_L4A4_UNORM, /* Name */ + "MESA_FORMAT_L4A4_UNORM", /* StrName */ GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 4, /* Red/Green/Blue/AlphaBits */ @@ -250,8 +250,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_AL88, /* Name */ - "MESA_FORMAT_AL88", /* StrName */ + MESA_FORMAT_L8A8_UNORM, /* Name */ + "MESA_FORMAT_L8A8_UNORM", /* StrName */ GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ @@ -259,8 +259,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_AL88_REV, /* Name */ - "MESA_FORMAT_AL88_REV", /* StrName */ + MESA_FORMAT_A8L8_UNORM, /* Name */ + "MESA_FORMAT_A8L8_UNORM", /* StrName */ GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ @@ -268,8 +268,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_AL1616, /* Name */ - "MESA_FORMAT_AL1616", /* StrName */ + MESA_FORMAT_L16A16_UNORM, /* Name */ + "MESA_FORMAT_L16A16_UNORM", /* StrName */ GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */ @@ -277,8 +277,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_AL1616_REV, /* Name */ - "MESA_FORMAT_AL1616_REV", /* StrName */ + MESA_FORMAT_A16L16_UNORM, /* Name */ + "MESA_FORMAT_A16L16_UNORM", /* StrName */ GL_LUMINANCE_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */ @@ -286,8 +286,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_RGB332, /* Name */ - "MESA_FORMAT_RGB332", /* StrName */ + MESA_FORMAT_B2G3R3_UNORM, /* Name */ + "MESA_FORMAT_B2G3R3_UNORM", /* StrName */ GL_RGB, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 3, 3, 2, 0, /* Red/Green/Blue/AlphaBits */ @@ -295,8 +295,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_A8, /* Name */ - "MESA_FORMAT_A8", /* StrName */ + MESA_FORMAT_A_UNORM8, /* Name */ + "MESA_FORMAT_A_UNORM8", /* StrName */ GL_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ @@ -304,8 +304,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_A16, /* Name */ - "MESA_FORMAT_A16", /* StrName */ + MESA_FORMAT_A_UNORM16, /* Name */ + "MESA_FORMAT_A_UNORM16", /* StrName */ GL_ALPHA, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */ @@ -313,8 +313,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_L8, /* Name */ - "MESA_FORMAT_L8", /* StrName */ + MESA_FORMAT_L_UNORM8, /* Name */ + "MESA_FORMAT_L_UNORM8", /* StrName */ GL_LUMINANCE, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -322,8 +322,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_L16, /* Name */ - "MESA_FORMAT_L16", /* StrName */ + MESA_FORMAT_L_UNORM16, /* Name */ + "MESA_FORMAT_L_UNORM16", /* StrName */ GL_LUMINANCE, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -331,8 +331,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_I8, /* Name */ - "MESA_FORMAT_I8", /* StrName */ + MESA_FORMAT_I_UNORM8, /* Name */ + "MESA_FORMAT_I_UNORM8", /* StrName */ GL_INTENSITY, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -340,8 +340,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_I16, /* Name */ - "MESA_FORMAT_I16", /* StrName */ + MESA_FORMAT_I_UNORM16, /* Name */ + "MESA_FORMAT_I_UNORM16", /* StrName */ GL_INTENSITY, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -367,8 +367,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_R8, - "MESA_FORMAT_R8", + MESA_FORMAT_R_UNORM8, + "MESA_FORMAT_R_UNORM8", GL_RED, GL_UNSIGNED_NORMALIZED, 8, 0, 0, 0, @@ -376,8 +376,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_GR88, - "MESA_FORMAT_GR88", + MESA_FORMAT_R8G8_UNORM, + "MESA_FORMAT_R8G8_UNORM", GL_RG, GL_UNSIGNED_NORMALIZED, 8, 8, 0, 0, @@ -385,8 +385,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_RG88, - "MESA_FORMAT_RG88", + MESA_FORMAT_G8R8_UNORM, + "MESA_FORMAT_G8R8_UNORM", GL_RG, GL_UNSIGNED_NORMALIZED, 8, 8, 0, 0, @@ -394,8 +394,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_R16, - "MESA_FORMAT_R16", + MESA_FORMAT_R_UNORM16, + "MESA_FORMAT_R_UNORM16", GL_RED, GL_UNSIGNED_NORMALIZED, 16, 0, 0, 0, @@ -403,8 +403,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_GR1616, - "MESA_FORMAT_GR1616", + MESA_FORMAT_R16G16_UNORM, + "MESA_FORMAT_R16G16_UNORM", GL_RG, GL_UNSIGNED_NORMALIZED, 16, 16, 0, 0, @@ -412,8 +412,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_RG1616, - "MESA_FORMAT_RG1616", + MESA_FORMAT_G16R16_UNORM, + "MESA_FORMAT_G16R16_UNORM", GL_RG, GL_UNSIGNED_NORMALIZED, 16, 16, 0, 0, @@ -421,8 +421,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_ARGB2101010, - "MESA_FORMAT_ARGB2101010", + MESA_FORMAT_B10G10R10A2_UNORM, + "MESA_FORMAT_B10G10R10A2_UNORM", GL_RGBA, GL_UNSIGNED_NORMALIZED, 10, 10, 10, 2, @@ -430,8 +430,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_Z24_S8, /* Name */ - "MESA_FORMAT_Z24_S8", /* StrName */ + MESA_FORMAT_S8_UINT_Z24_UNORM, /* Name */ + "MESA_FORMAT_S8_UINT_Z24_UNORM", /* StrName */ GL_DEPTH_STENCIL, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -439,8 +439,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_S8_Z24, /* Name */ - "MESA_FORMAT_S8_Z24", /* StrName */ + MESA_FORMAT_Z24_UNORM_X8_UINT, /* Name */ + "MESA_FORMAT_Z24_UNORM_X8_UINT", /* StrName */ GL_DEPTH_STENCIL, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -448,8 +448,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_Z16, /* Name */ - "MESA_FORMAT_Z16", /* StrName */ + MESA_FORMAT_Z_UNORM16, /* Name */ + "MESA_FORMAT_Z_UNORM16", /* StrName */ GL_DEPTH_COMPONENT, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -457,8 +457,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_X8_Z24, /* Name */ - "MESA_FORMAT_X8_Z24", /* StrName */ + MESA_FORMAT_Z24_UNORM_S8_UINT, /* Name */ + "MESA_FORMAT_Z24_UNORM_S8_UINT", /* StrName */ GL_DEPTH_COMPONENT, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -466,8 +466,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_Z24_X8, /* Name */ - "MESA_FORMAT_Z24_X8", /* StrName */ + MESA_FORMAT_X8Z24_UNORM, /* Name */ + "MESA_FORMAT_X8Z24_UNORM", /* StrName */ GL_DEPTH_COMPONENT, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -475,8 +475,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_Z32, /* Name */ - "MESA_FORMAT_Z32", /* StrName */ + MESA_FORMAT_Z_UNORM32, /* Name */ + "MESA_FORMAT_Z_UNORM32", /* StrName */ GL_DEPTH_COMPONENT, /* BaseFormat */ GL_UNSIGNED_NORMALIZED, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -484,8 +484,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_S8, /* Name */ - "MESA_FORMAT_S8", /* StrName */ + MESA_FORMAT_S_UINT8, /* Name */ + "MESA_FORMAT_S_UINT8", /* StrName */ GL_STENCIL_INDEX, /* BaseFormat */ GL_UNSIGNED_INT, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -493,8 +493,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_SRGB8, - "MESA_FORMAT_SRGB8", + MESA_FORMAT_BGR_SRGB8, + "MESA_FORMAT_BGR_SRGB8", GL_RGB, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, @@ -502,8 +502,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 3 }, { - MESA_FORMAT_SRGBA8, - "MESA_FORMAT_SRGBA8", + MESA_FORMAT_A8B8G8R8_SRGB, + "MESA_FORMAT_A8B8G8R8_SRGB", GL_RGBA, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, @@ -511,8 +511,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SARGB8, - "MESA_FORMAT_SARGB8", + MESA_FORMAT_B8G8R8A8_SRGB, + "MESA_FORMAT_B8G8R8A8_SRGB", GL_RGBA, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 8, @@ -520,8 +520,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SL8, - "MESA_FORMAT_SL8", + MESA_FORMAT_L_SRGB8, + "MESA_FORMAT_L_SRGB8", GL_LUMINANCE, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, @@ -529,8 +529,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_SLA8, - "MESA_FORMAT_SLA8", + MESA_FORMAT_L8A8_SRGB, + "MESA_FORMAT_L8A8_SRGB", GL_LUMINANCE_ALPHA, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 8, @@ -666,8 +666,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 6 }, { - MESA_FORMAT_ALPHA_FLOAT32, - "MESA_FORMAT_ALPHA_FLOAT32", + MESA_FORMAT_A_FLOAT32, + "MESA_FORMAT_A_FLOAT32", GL_ALPHA, GL_FLOAT, 0, 0, 0, 32, @@ -675,8 +675,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_ALPHA_FLOAT16, - "MESA_FORMAT_ALPHA_FLOAT16", + MESA_FORMAT_A_FLOAT16, + "MESA_FORMAT_A_FLOAT16", GL_ALPHA, GL_FLOAT, 0, 0, 0, 16, @@ -684,8 +684,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_FLOAT32, - "MESA_FORMAT_LUMINANCE_FLOAT32", + MESA_FORMAT_L_FLOAT32, + "MESA_FORMAT_L_FLOAT32", GL_LUMINANCE, GL_FLOAT, 0, 0, 0, 0, @@ -693,8 +693,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_FLOAT16, - "MESA_FORMAT_LUMINANCE_FLOAT16", + MESA_FORMAT_L_FLOAT16, + "MESA_FORMAT_L_FLOAT16", GL_LUMINANCE, GL_FLOAT, 0, 0, 0, 0, @@ -702,8 +702,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, - "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32", + MESA_FORMAT_LA_FLOAT32, + "MESA_FORMAT_LA_FLOAT32", GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0, 0, 32, @@ -711,8 +711,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, - "MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16", + MESA_FORMAT_LA_FLOAT16, + "MESA_FORMAT_LA_FLOAT16", GL_LUMINANCE_ALPHA, GL_FLOAT, 0, 0, 0, 16, @@ -720,8 +720,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_INTENSITY_FLOAT32, - "MESA_FORMAT_INTENSITY_FLOAT32", + MESA_FORMAT_I_FLOAT32, + "MESA_FORMAT_I_FLOAT32", GL_INTENSITY, GL_FLOAT, 0, 0, 0, 0, @@ -729,8 +729,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_INTENSITY_FLOAT16, - "MESA_FORMAT_INTENSITY_FLOAT16", + MESA_FORMAT_I_FLOAT16, + "MESA_FORMAT_I_FLOAT16", GL_INTENSITY, GL_FLOAT, 0, 0, 0, 0, @@ -777,8 +777,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = /* unnormalized signed int formats */ /* unnormalized unsigned int formats */ { - MESA_FORMAT_ALPHA_UINT8, - "MESA_FORMAT_ALPHA_UINT8", + MESA_FORMAT_A_UINT8, + "MESA_FORMAT_A_UINT8", GL_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 8, @@ -786,8 +786,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_ALPHA_UINT16, - "MESA_FORMAT_ALPHA_UINT16", + MESA_FORMAT_A_UINT16, + "MESA_FORMAT_A_UINT16", GL_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 16, @@ -795,8 +795,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_ALPHA_UINT32, - "MESA_FORMAT_ALPHA_UINT32", + MESA_FORMAT_A_UINT32, + "MESA_FORMAT_A_UINT32", GL_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 32, @@ -804,8 +804,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_ALPHA_INT8, - "MESA_FORMAT_ALPHA_INT8", + MESA_FORMAT_A_SINT8, + "MESA_FORMAT_A_SINT8", GL_ALPHA, GL_INT, 0, 0, 0, 8, @@ -813,8 +813,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_ALPHA_INT16, - "MESA_FORMAT_ALPHA_INT16", + MESA_FORMAT_A_SINT16, + "MESA_FORMAT_A_SINT16", GL_ALPHA, GL_INT, 0, 0, 0, 16, @@ -822,8 +822,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_ALPHA_INT32, - "MESA_FORMAT_ALPHA_INT32", + MESA_FORMAT_A_SINT32, + "MESA_FORMAT_A_SINT32", GL_ALPHA, GL_INT, 0, 0, 0, 32, @@ -831,8 +831,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_INTENSITY_UINT8, - "MESA_FORMAT_INTENSITY_UINT8", + MESA_FORMAT_I_UINT8, + "MESA_FORMAT_I_UINT8", GL_INTENSITY, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -840,8 +840,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_INTENSITY_UINT16, - "MESA_FORMAT_INTENSITY_UINT16", + MESA_FORMAT_I_UINT16, + "MESA_FORMAT_I_UINT16", GL_INTENSITY, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -849,8 +849,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_INTENSITY_UINT32, - "MESA_FORMAT_INTENSITY_UINT32", + MESA_FORMAT_I_UINT32, + "MESA_FORMAT_I_UINT32", GL_INTENSITY, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -858,8 +858,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_INTENSITY_INT8, - "MESA_FORMAT_INTENSITY_INT8", + MESA_FORMAT_I_SINT8, + "MESA_FORMAT_I_SINT8", GL_INTENSITY, GL_INT, 0, 0, 0, 0, @@ -867,8 +867,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_INTENSITY_INT16, - "MESA_FORMAT_INTENSITY_INT16", + MESA_FORMAT_I_SINT16, + "MESA_FORMAT_I_SINT16", GL_INTENSITY, GL_INT, 0, 0, 0, 0, @@ -876,8 +876,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_INTENSITY_INT32, - "MESA_FORMAT_INTENSITY_INT32", + MESA_FORMAT_I_SINT32, + "MESA_FORMAT_I_SINT32", GL_INTENSITY, GL_INT, 0, 0, 0, 0, @@ -885,8 +885,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_UINT8, - "MESA_FORMAT_LUMINANCE_UINT8", + MESA_FORMAT_L_UINT8, + "MESA_FORMAT_L_UINT8", GL_LUMINANCE, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -894,8 +894,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_LUMINANCE_UINT16, - "MESA_FORMAT_LUMINANCE_UINT16", + MESA_FORMAT_L_UINT16, + "MESA_FORMAT_L_UINT16", GL_LUMINANCE, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -903,8 +903,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_UINT32, - "MESA_FORMAT_LUMINANCE_UINT32", + MESA_FORMAT_L_UINT32, + "MESA_FORMAT_L_UINT32", GL_LUMINANCE, GL_UNSIGNED_INT, 0, 0, 0, 0, @@ -912,8 +912,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_INT8, - "MESA_FORMAT_LUMINANCE_INT8", + MESA_FORMAT_L_SINT8, + "MESA_FORMAT_L_SINT8", GL_LUMINANCE, GL_INT, 0, 0, 0, 0, @@ -921,8 +921,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_LUMINANCE_INT16, - "MESA_FORMAT_LUMINANCE_INT16", + MESA_FORMAT_L_SINT16, + "MESA_FORMAT_L_SINT16", GL_LUMINANCE, GL_INT, 0, 0, 0, 0, @@ -930,8 +930,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_INT32, - "MESA_FORMAT_LUMINANCE_INT32", + MESA_FORMAT_L_SINT32, + "MESA_FORMAT_L_SINT32", GL_LUMINANCE, GL_INT, 0, 0, 0, 0, @@ -939,8 +939,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_ALPHA_UINT8, - "MESA_FORMAT_LUMINANCE_ALPHA_UINT8", + MESA_FORMAT_LA_UINT8, + "MESA_FORMAT_LA_UINT8", GL_LUMINANCE_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 8, @@ -948,8 +948,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_ALPHA_UINT16, - "MESA_FORMAT_LUMINANCE_ALPHA_UINT16", + MESA_FORMAT_LA_UINT16, + "MESA_FORMAT_LA_UINT16", GL_LUMINANCE_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 16, @@ -957,8 +957,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_ALPHA_UINT32, - "MESA_FORMAT_LUMINANCE_ALPHA_UINT32", + MESA_FORMAT_LA_UINT32, + "MESA_FORMAT_LA_UINT32", GL_LUMINANCE_ALPHA, GL_UNSIGNED_INT, 0, 0, 0, 32, @@ -966,8 +966,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT8, - "MESA_FORMAT_LUMINANCE_ALPHA_INT8", + MESA_FORMAT_LA_SINT8, + "MESA_FORMAT_LA_SINT8", GL_LUMINANCE_ALPHA, GL_INT, 0, 0, 0, 8, @@ -975,8 +975,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT16, - "MESA_FORMAT_LUMINANCE_ALPHA_INT16", + MESA_FORMAT_LA_SINT16, + "MESA_FORMAT_LA_SINT16", GL_LUMINANCE_ALPHA, GL_INT, 0, 0, 0, 16, @@ -984,8 +984,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT32, - "MESA_FORMAT_LUMINANCE_ALPHA_INT32", + MESA_FORMAT_LA_SINT32, + "MESA_FORMAT_LA_SINT32", GL_LUMINANCE_ALPHA, GL_INT, 0, 0, 0, 32, @@ -994,8 +994,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = }, { - MESA_FORMAT_R_INT8, - "MESA_FORMAT_R_INT8", + MESA_FORMAT_R_SINT8, + "MESA_FORMAT_R_SINT8", GL_RED, GL_INT, 8, 0, 0, 0, @@ -1003,8 +1003,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_RG_INT8, - "MESA_FORMAT_RG_INT8", + MESA_FORMAT_RG_SINT8, + "MESA_FORMAT_RG_SINT8", GL_RG, GL_INT, 8, 8, 0, 0, @@ -1012,8 +1012,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_RGB_INT8, - "MESA_FORMAT_RGB_INT8", + MESA_FORMAT_RGB_SINT8, + "MESA_FORMAT_RGB_SINT8", GL_RGB, GL_INT, 8, 8, 8, 0, @@ -1021,8 +1021,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 3 }, { - MESA_FORMAT_RGBA_INT8, - "MESA_FORMAT_RGBA_INT8", + MESA_FORMAT_RGBA_SINT8, + "MESA_FORMAT_RGBA_SINT8", GL_RGBA, GL_INT, 8, 8, 8, 8, @@ -1030,8 +1030,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_R_INT16, - "MESA_FORMAT_R_INT16", + MESA_FORMAT_R_SINT16, + "MESA_FORMAT_R_SINT16", GL_RED, GL_INT, 16, 0, 0, 0, @@ -1039,8 +1039,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_RG_INT16, - "MESA_FORMAT_RG_INT16", + MESA_FORMAT_RG_SINT16, + "MESA_FORMAT_RG_SINT16", GL_RG, GL_INT, 16, 16, 0, 0, @@ -1048,8 +1048,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_RGB_INT16, - "MESA_FORMAT_RGB_INT16", + MESA_FORMAT_RGB_SINT16, + "MESA_FORMAT_RGB_SINT16", GL_RGB, GL_INT, 16, 16, 16, 0, @@ -1057,8 +1057,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 6 }, { - MESA_FORMAT_RGBA_INT16, - "MESA_FORMAT_RGBA_INT16", + MESA_FORMAT_RGBA_SINT16, + "MESA_FORMAT_RGBA_SINT16", GL_RGBA, GL_INT, 16, 16, 16, 16, @@ -1066,8 +1066,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_R_INT32, - "MESA_FORMAT_R_INT32", + MESA_FORMAT_R_SINT32, + "MESA_FORMAT_R_SINT32", GL_RED, GL_INT, 32, 0, 0, 0, @@ -1075,8 +1075,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_RG_INT32, - "MESA_FORMAT_RG_INT32", + MESA_FORMAT_RG_SINT32, + "MESA_FORMAT_RG_SINT32", GL_RG, GL_INT, 32, 32, 0, 0, @@ -1084,8 +1084,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_RGB_INT32, - "MESA_FORMAT_RGB_INT32", + MESA_FORMAT_RGB_SINT32, + "MESA_FORMAT_RGB_SINT32", GL_RGB, GL_INT, 32, 32, 32, 0, @@ -1093,8 +1093,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 12 }, { - MESA_FORMAT_RGBA_INT32, - "MESA_FORMAT_RGBA_INT32", + MESA_FORMAT_RGBA_SINT32, + "MESA_FORMAT_RGBA_SINT32", GL_RGBA, GL_INT, 32, 32, 32, 32, @@ -1223,8 +1223,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = /* Signed 8 bits / channel */ { - MESA_FORMAT_SIGNED_R8, /* Name */ - "MESA_FORMAT_SIGNED_R8", /* StrName */ + MESA_FORMAT_R_SNORM8, /* Name */ + "MESA_FORMAT_R_SNORM8", /* StrName */ GL_RED, /* BaseFormat */ GL_SIGNED_NORMALIZED, /* DataType */ 8, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -1232,8 +1232,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_SIGNED_RG88_REV, - "MESA_FORMAT_SIGNED_RG88_REV", + MESA_FORMAT_R8G8_SNORM, + "MESA_FORMAT_R8G8_SNORM", GL_RG, GL_SIGNED_NORMALIZED, 8, 8, 0, 0, @@ -1241,8 +1241,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_RGBX8888, - "MESA_FORMAT_SIGNED_RGBX8888", + MESA_FORMAT_X8B8G8R8_SNORM, + "MESA_FORMAT_X8B8G8R8_SNORM", GL_RGB, GL_SIGNED_NORMALIZED, 8, 8, 8, 0, @@ -1250,8 +1250,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* 4 bpp, but no alpha */ }, { - MESA_FORMAT_SIGNED_RGBA8888, - "MESA_FORMAT_SIGNED_RGBA8888", + MESA_FORMAT_A8B8G8R8_SNORM, + "MESA_FORMAT_A8B8G8R8_SNORM", GL_RGBA, GL_SIGNED_NORMALIZED, 8, 8, 8, 8, @@ -1259,8 +1259,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SIGNED_RGBA8888_REV, - "MESA_FORMAT_SIGNED_RGBA8888_REV", + MESA_FORMAT_R8G8B8A8_SNORM, + "MESA_FORMAT_R8G8B8A8_SNORM", GL_RGBA, GL_SIGNED_NORMALIZED, 8, 8, 8, 8, @@ -1270,8 +1270,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = /* Signed 16 bits / channel */ { - MESA_FORMAT_SIGNED_R16, - "MESA_FORMAT_SIGNED_R16", + MESA_FORMAT_R_SNORM16, + "MESA_FORMAT_R_SNORM16", GL_RED, GL_SIGNED_NORMALIZED, 16, 0, 0, 0, @@ -1279,8 +1279,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_GR1616, - "MESA_FORMAT_SIGNED_GR1616", + MESA_FORMAT_R16G16_SNORM, + "MESA_FORMAT_R16G16_SNORM", GL_RG, GL_SIGNED_NORMALIZED, 16, 16, 0, 0, @@ -1288,8 +1288,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SIGNED_RGB_16, - "MESA_FORMAT_SIGNED_RGB_16", + MESA_FORMAT_RGB_SNORM16, + "MESA_FORMAT_RGB_SNORM16", GL_RGB, GL_SIGNED_NORMALIZED, 16, 16, 16, 0, @@ -1297,8 +1297,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 6 }, { - MESA_FORMAT_SIGNED_RGBA_16, - "MESA_FORMAT_SIGNED_RGBA_16", + MESA_FORMAT_RGBA_SNORM16, + "MESA_FORMAT_RGBA_SNORM16", GL_RGBA, GL_SIGNED_NORMALIZED, 16, 16, 16, 16, @@ -1306,8 +1306,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_RGBA_16, - "MESA_FORMAT_RGBA_16", + MESA_FORMAT_RGBA_UNORM16, + "MESA_FORMAT_RGBA_UNORM16", GL_RGBA, GL_UNSIGNED_NORMALIZED, 16, 16, 16, 16, @@ -1315,8 +1315,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_RED_RGTC1, - "MESA_FORMAT_RED_RGTC1", + MESA_FORMAT_R_RGTC1_UNORM, + "MESA_FORMAT_R_RGTC1_UNORM", GL_RED, GL_UNSIGNED_NORMALIZED, 8, 0, 0, 0, @@ -1324,8 +1324,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 8 /* 8 bytes per 4x4 block */ }, { - MESA_FORMAT_SIGNED_RED_RGTC1, - "MESA_FORMAT_SIGNED_RED_RGTC1", + MESA_FORMAT_R_RGTC1_SNORM, + "MESA_FORMAT_R_RGTC1_SNORM", GL_RED, GL_SIGNED_NORMALIZED, 8, 0, 0, 0, @@ -1333,8 +1333,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 8 /* 8 bytes per 4x4 block */ }, { - MESA_FORMAT_RG_RGTC2, - "MESA_FORMAT_RG_RGTC2", + MESA_FORMAT_RG_RGTC2_UNORM, + "MESA_FORMAT_RG_RGTC2_UNORM", GL_RG, GL_UNSIGNED_NORMALIZED, 8, 8, 0, 0, @@ -1342,8 +1342,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 16 /* 16 bytes per 4x4 block */ }, { - MESA_FORMAT_SIGNED_RG_RGTC2, - "MESA_FORMAT_SIGNED_RG_RGTC2", + MESA_FORMAT_RG_RGTC2_SNORM, + "MESA_FORMAT_RG_RGTC2_SNORM", GL_RG, GL_SIGNED_NORMALIZED, 8, 8, 0, 0, @@ -1351,8 +1351,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 16 /* 16 bytes per 4x4 block */ }, { - MESA_FORMAT_L_LATC1, - "MESA_FORMAT_L_LATC1", + MESA_FORMAT_L_LATC1_UNORM, + "MESA_FORMAT_L_LATC1_UNORM", GL_LUMINANCE, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1360,8 +1360,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 8 /* 8 bytes per 4x4 block */ }, { - MESA_FORMAT_SIGNED_L_LATC1, - "MESA_FORMAT_SIGNED_L_LATC1", + MESA_FORMAT_L_LATC1_SNORM, + "MESA_FORMAT_L_LATC1_SNORM", GL_LUMINANCE, GL_SIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1369,8 +1369,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 8 /* 8 bytes per 4x4 block */ }, { - MESA_FORMAT_LA_LATC2, - "MESA_FORMAT_LA_LATC2", + MESA_FORMAT_LA_LATC2_UNORM, + "MESA_FORMAT_LA_LATC2_UNORM", GL_LUMINANCE_ALPHA, GL_UNSIGNED_NORMALIZED, 0, 0, 0, 4, @@ -1378,8 +1378,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 4, 4, 16 /* 16 bytes per 4x4 block */ }, { - MESA_FORMAT_SIGNED_LA_LATC2, - "MESA_FORMAT_SIGNED_LA_LATC2", + MESA_FORMAT_LA_LATC2_SNORM, + "MESA_FORMAT_LA_LATC2_SNORM", GL_LUMINANCE_ALPHA, GL_SIGNED_NORMALIZED, 0, 0, 0, 4, @@ -1499,8 +1499,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = /* Signed formats from EXT_texture_snorm that are not in GL3.1 */ { - MESA_FORMAT_SIGNED_A8, - "MESA_FORMAT_SIGNED_A8", + MESA_FORMAT_A_SNORM8, + "MESA_FORMAT_A_SNORM8", GL_ALPHA, GL_SIGNED_NORMALIZED, 0, 0, 0, 8, @@ -1508,8 +1508,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_SIGNED_L8, - "MESA_FORMAT_SIGNED_L8", + MESA_FORMAT_L_SNORM8, + "MESA_FORMAT_L_SNORM8", GL_LUMINANCE, GL_SIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1517,8 +1517,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_SIGNED_AL88, - "MESA_FORMAT_SIGNED_AL88", + MESA_FORMAT_L8A8_SNORM, + "MESA_FORMAT_L8A8_SNORM", GL_LUMINANCE_ALPHA, GL_SIGNED_NORMALIZED, 0, 0, 0, 8, @@ -1526,8 +1526,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_I8, - "MESA_FORMAT_SIGNED_I8", + MESA_FORMAT_I_SNORM8, + "MESA_FORMAT_I_SNORM8", GL_INTENSITY, GL_SIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1535,8 +1535,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 1 }, { - MESA_FORMAT_SIGNED_A16, - "MESA_FORMAT_SIGNED_A16", + MESA_FORMAT_A_SNORM16, + "MESA_FORMAT_A_SNORM16", GL_ALPHA, GL_SIGNED_NORMALIZED, 0, 0, 0, 16, @@ -1544,8 +1544,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_L16, - "MESA_FORMAT_SIGNED_L16", + MESA_FORMAT_L_SNORM16, + "MESA_FORMAT_L_SNORM16", GL_LUMINANCE, GL_SIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1553,8 +1553,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_AL1616, - "MESA_FORMAT_SIGNED_AL1616", + MESA_FORMAT_LA_SNORM16, + "MESA_FORMAT_LA_SNORM16", GL_LUMINANCE_ALPHA, GL_SIGNED_NORMALIZED, 0, 0, 0, 16, @@ -1562,8 +1562,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SIGNED_I16, - "MESA_FORMAT_SIGNED_I16", + MESA_FORMAT_I_SNORM16, + "MESA_FORMAT_I_SNORM16", GL_INTENSITY, GL_SIGNED_NORMALIZED, 0, 0, 0, 0, @@ -1571,7 +1571,7 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_RGB9_E5_FLOAT, + MESA_FORMAT_R9G9B9E5_FLOAT, "MESA_FORMAT_RGB9_E5", GL_RGB, GL_FLOAT, @@ -1580,8 +1580,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_R11_G11_B10_FLOAT, - "MESA_FORMAT_R11_G11_B10_FLOAT", + MESA_FORMAT_R11G11B10_FLOAT, + "MESA_FORMAT_R11G11B10_FLOAT", GL_RGB, GL_FLOAT, 11, 11, 10, 0, @@ -1590,8 +1590,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = }, /* ARB_depth_buffer_float */ { - MESA_FORMAT_Z32_FLOAT, /* Name */ - "MESA_FORMAT_Z32_FLOAT", /* StrName */ + MESA_FORMAT_Z_FLOAT32, /* Name */ + "MESA_FORMAT_Z_FLOAT32", /* StrName */ GL_DEPTH_COMPONENT, /* BaseFormat */ GL_FLOAT, /* DataType */ 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ @@ -1599,8 +1599,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_Z32_FLOAT_X24S8, /* Name */ - "MESA_FORMAT_Z32_FLOAT_X24S8", /* StrName */ + MESA_FORMAT_Z32_FLOAT_S8X24_UINT, /* Name */ + "MESA_FORMAT_Z32_FLOAT_S8X24_UINT", /* StrName */ GL_DEPTH_STENCIL, /* BaseFormat */ /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and is * never used for stencil because stencil is always GL_UNSIGNED_INT. @@ -1611,8 +1611,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 /* BlockWidth/Height,Bytes */ }, { - MESA_FORMAT_ARGB2101010_UINT, - "MESA_FORMAT_ARGB2101010_UINT", + MESA_FORMAT_B10G10R10A2_UINT, + "MESA_FORMAT_B10G10R10A2_UINT", GL_RGBA, GL_UNSIGNED_INT, 10, 10, 10, 2, @@ -1620,8 +1620,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_ABGR2101010_UINT, - "MESA_FORMAT_ABGR2101010_UINT", + MESA_FORMAT_R10G10B10A2_UINT, + "MESA_FORMAT_R10G10B10A2_UINT", GL_RGBA, GL_UNSIGNED_INT, 10, 10, 10, 2, @@ -1629,8 +1629,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XRGB4444_UNORM, - "MESA_FORMAT_XRGB4444_UNORM", + MESA_FORMAT_B4G4R4X4_UNORM, + "MESA_FORMAT_B4G4R4X4_UNORM", GL_RGB, GL_UNSIGNED_NORMALIZED, 4, 4, 4, 0, @@ -1638,8 +1638,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_XRGB1555_UNORM, - "MESA_FORMAT_XRGB1555_UNORM", + MESA_FORMAT_B5G5R5X1_UNORM, + "MESA_FORMAT_B5G5R5X1_UNORM", GL_RGB, GL_UNSIGNED_NORMALIZED, 5, 5, 5, 0, @@ -1647,8 +1647,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_XBGR8888_SNORM, - "MESA_FORMAT_XBGR8888_SNORM", + MESA_FORMAT_R8G8B8X8_SNORM, + "MESA_FORMAT_R8G8B8X8_SNORM", GL_RGB, GL_SIGNED_NORMALIZED, 8, 8, 8, 0, @@ -1656,8 +1656,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XBGR8888_SRGB, - "MESA_FORMAT_XBGR8888_SRGB", + MESA_FORMAT_R8G8B8X8_SRGB, + "MESA_FORMAT_R8G8B8X8_SRGB", GL_RGB, GL_UNSIGNED_NORMALIZED, 8, 8, 8, 0, @@ -1665,8 +1665,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XBGR8888_UINT, - "MESA_FORMAT_XBGR8888_UINT", + MESA_FORMAT_RGBX_UINT8, + "MESA_FORMAT_RGBX_UINT8", GL_RGB, GL_UNSIGNED_INT, 8, 8, 8, 0, @@ -1674,8 +1674,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XBGR8888_SINT, - "MESA_FORMAT_XBGR8888_SINT", + MESA_FORMAT_RGBX_SINT8, + "MESA_FORMAT_RGBX_SINT8", GL_RGB, GL_INT, 8, 8, 8, 0, @@ -1683,8 +1683,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XRGB2101010_UNORM, - "MESA_FORMAT_XRGB2101010_UNORM", + MESA_FORMAT_B10G10R10X2_UNORM, + "MESA_FORMAT_B10G10R10X2_UNORM", GL_RGB, GL_UNSIGNED_NORMALIZED, 10, 10, 10, 0, @@ -1692,8 +1692,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_XBGR16161616_UNORM, - "MESA_FORMAT_XBGR16161616_UNORM", + MESA_FORMAT_RGBX_UNORM16, + "MESA_FORMAT_RGBX_UNORM16", GL_RGB, GL_UNSIGNED_NORMALIZED, 16, 16, 16, 0, @@ -1701,8 +1701,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_XBGR16161616_SNORM, - "MESA_FORMAT_XBGR16161616_SNORM", + MESA_FORMAT_RGBX_SNORM16, + "MESA_FORMAT_RGBX_SNORM16", GL_RGB, GL_SIGNED_NORMALIZED, 16, 16, 16, 0, @@ -1710,8 +1710,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_XBGR16161616_FLOAT, - "MESA_FORMAT_XBGR16161616_FLOAT", + MESA_FORMAT_RGBX_FLOAT16, + "MESA_FORMAT_RGBX_FLOAT16", GL_RGB, GL_FLOAT, 16, 16, 16, 0, @@ -1719,8 +1719,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_XBGR16161616_UINT, - "MESA_FORMAT_XBGR16161616_UINT", + MESA_FORMAT_RGBX_UINT16, + "MESA_FORMAT_RGBX_UINT16", GL_RGB, GL_UNSIGNED_INT, 16, 16, 16, 0, @@ -1728,8 +1728,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_XBGR16161616_SINT, - "MESA_FORMAT_XBGR16161616_SINT", + MESA_FORMAT_RGBX_SINT16, + "MESA_FORMAT_RGBX_SINT16", GL_RGB, GL_INT, 16, 16, 16, 0, @@ -1737,8 +1737,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 8 }, { - MESA_FORMAT_XBGR32323232_FLOAT, - "MESA_FORMAT_XBGR32323232_FLOAT", + MESA_FORMAT_RGBX_FLOAT32, + "MESA_FORMAT_RGBX_FLOAT32", GL_RGB, GL_FLOAT, 32, 32, 32, 0, @@ -1746,8 +1746,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 16 }, { - MESA_FORMAT_XBGR32323232_UINT, - "MESA_FORMAT_XBGR32323232_UINT", + MESA_FORMAT_RGBX_UINT32, + "MESA_FORMAT_RGBX_UINT32", GL_RGB, GL_UNSIGNED_INT, 32, 32, 32, 0, @@ -1755,8 +1755,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 16 }, { - MESA_FORMAT_XBGR32323232_SINT, - "MESA_FORMAT_XBGR32323232_SINT", + MESA_FORMAT_RGBX_SINT32, + "MESA_FORMAT_RGBX_SINT32", GL_RGB, GL_INT, 32, 32, 32, 0, @@ -1764,8 +1764,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 16 }, { - MESA_FORMAT_ABGR2101010, - "MESA_FORMAT_ABGR2101010", + MESA_FORMAT_R10G10B10A2_UNORM, + "MESA_FORMAT_R10G10B10A2_UNORM", GL_RGBA, GL_UNSIGNED_NORMALIZED, 10, 10, 10, 2, @@ -1773,8 +1773,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 4 }, { - MESA_FORMAT_SIGNED_RG88, - "MESA_FORMAT_SIGNED_RG88", + MESA_FORMAT_G8R8_SNORM, + "MESA_FORMAT_G8R8_SNORM", GL_RG, GL_SIGNED_NORMALIZED, 8, 8, 0, 0, @@ -1782,8 +1782,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 1, 1, 2 }, { - MESA_FORMAT_SIGNED_RG1616, - "MESA_FORMAT_SIGNED_RG1616", + MESA_FORMAT_G16R16_SNORM, + "MESA_FORMAT_G16R16_SNORM", GL_RG, GL_SIGNED_NORMALIZED, 16, 16, 0, 0, @@ -1795,7 +1795,7 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = static const struct gl_format_info * -_mesa_get_format_info(gl_format format) +_mesa_get_format_info(mesa_format format) { const struct gl_format_info *info = &format_info[format]; assert(info->Name == format); @@ -1805,7 +1805,7 @@ _mesa_get_format_info(gl_format format) /** Return string name of format (for debugging) */ const char * -_mesa_get_format_name(gl_format format) +_mesa_get_format_name(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return info->StrName; @@ -1821,7 +1821,7 @@ _mesa_get_format_name(gl_format format) * Note: not GLuint, so as not to coerce math to unsigned. cf. fdo #37351 */ GLint -_mesa_get_format_bytes(gl_format format) +_mesa_get_format_bytes(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); ASSERT(info->BytesPerBlock); @@ -1837,7 +1837,7 @@ _mesa_get_format_bytes(gl_format format) * \param pname the component, such as GL_RED_BITS, GL_TEXTURE_BLUE_BITS, etc. */ GLint -_mesa_get_format_bits(gl_format format, GLenum pname) +_mesa_get_format_bits(mesa_format format, GLenum pname) { const struct gl_format_info *info = _mesa_get_format_info(format); @@ -1886,7 +1886,7 @@ _mesa_get_format_bits(gl_format format, GLenum pname) GLuint -_mesa_get_format_max_bits(gl_format format) +_mesa_get_format_max_bits(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); GLuint max = MAX2(info->RedBits, info->GreenBits); @@ -1911,7 +1911,7 @@ _mesa_get_format_max_bits(gl_format format) * GL_FLOAT = an ordinary float */ GLenum -_mesa_get_format_datatype(gl_format format) +_mesa_get_format_datatype(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return info->DataType; @@ -1924,7 +1924,7 @@ _mesa_get_format_datatype(gl_format format) * GL_YCBCR_MESA, GL_DEPTH_COMPONENT, GL_STENCIL_INDEX, GL_DEPTH_STENCIL. */ GLenum -_mesa_get_format_base_format(gl_format format) +_mesa_get_format_base_format(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return info->BaseFormat; @@ -1939,7 +1939,7 @@ _mesa_get_format_base_format(gl_format format) * \param bh returns block height in pixels */ void -_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh) +_mesa_get_format_block_size(mesa_format format, GLuint *bw, GLuint *bh) { const struct gl_format_info *info = _mesa_get_format_info(format); *bw = info->BlockWidth; @@ -1949,7 +1949,7 @@ _mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh) /** Is the given format a compressed format? */ GLboolean -_mesa_is_format_compressed(gl_format format) +_mesa_is_format_compressed(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return info->BlockWidth > 1 || info->BlockHeight > 1; @@ -1960,7 +1960,7 @@ _mesa_is_format_compressed(gl_format format) * Determine if the given format represents a packed depth/stencil buffer. */ GLboolean -_mesa_is_format_packed_depth_stencil(gl_format format) +_mesa_is_format_packed_depth_stencil(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); @@ -1972,7 +1972,7 @@ _mesa_is_format_packed_depth_stencil(gl_format format) * Is the given format a signed/unsigned integer color format? */ GLboolean -_mesa_is_format_integer_color(gl_format format) +_mesa_is_format_integer_color(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return (info->DataType == GL_INT || info->DataType == GL_UNSIGNED_INT) && @@ -1986,7 +1986,7 @@ _mesa_is_format_integer_color(gl_format format) * Is the given format an unsigned integer format? */ GLboolean -_mesa_is_format_unsigned(gl_format format) +_mesa_is_format_unsigned(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return _mesa_is_type_unsigned(info->DataType); @@ -1997,10 +1997,10 @@ _mesa_is_format_unsigned(gl_format format) * Does the given format store signed values? */ GLboolean -_mesa_is_format_signed(gl_format format) +_mesa_is_format_signed(mesa_format format) { - if (format == MESA_FORMAT_R11_G11_B10_FLOAT || - format == MESA_FORMAT_RGB9_E5_FLOAT) { + if (format == MESA_FORMAT_R11G11B10_FLOAT || + format == MESA_FORMAT_R9G9B9E5_FLOAT) { /* these packed float formats only store unsigned values */ return GL_FALSE; } @@ -2018,20 +2018,20 @@ _mesa_is_format_signed(gl_format format) * \return GL_LINEAR or GL_SRGB */ GLenum -_mesa_get_format_color_encoding(gl_format format) +_mesa_get_format_color_encoding(mesa_format format) { /* XXX this info should be encoded in gl_format_info */ switch (format) { - case MESA_FORMAT_SRGB8: - case MESA_FORMAT_SRGBA8: - case MESA_FORMAT_SARGB8: - case MESA_FORMAT_SL8: - case MESA_FORMAT_SLA8: + case MESA_FORMAT_BGR_SRGB8: + case MESA_FORMAT_A8B8G8R8_SRGB: + case MESA_FORMAT_B8G8R8A8_SRGB: + case MESA_FORMAT_L_SRGB8: + case MESA_FORMAT_L8A8_SRGB: case MESA_FORMAT_SRGB_DXT1: case MESA_FORMAT_SRGBA_DXT1: case MESA_FORMAT_SRGBA_DXT3: case MESA_FORMAT_SRGBA_DXT5: - case MESA_FORMAT_XBGR8888_SRGB: + case MESA_FORMAT_R8G8B8X8_SRGB: case MESA_FORMAT_ETC2_SRGB8: case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC: case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1: @@ -2046,24 +2046,24 @@ _mesa_get_format_color_encoding(gl_format format) * For an sRGB format, return the corresponding linear color space format. * For non-sRGB formats, return the format as-is. */ -gl_format -_mesa_get_srgb_format_linear(gl_format format) +mesa_format +_mesa_get_srgb_format_linear(mesa_format format) { switch (format) { - case MESA_FORMAT_SRGB8: - format = MESA_FORMAT_RGB888; + case MESA_FORMAT_BGR_SRGB8: + format = MESA_FORMAT_BGR_UNORM8; break; - case MESA_FORMAT_SRGBA8: - format = MESA_FORMAT_RGBA8888; + case MESA_FORMAT_A8B8G8R8_SRGB: + format = MESA_FORMAT_A8B8G8R8_UNORM; break; - case MESA_FORMAT_SARGB8: - format = MESA_FORMAT_ARGB8888; + case MESA_FORMAT_B8G8R8A8_SRGB: + format = MESA_FORMAT_B8G8R8A8_UNORM; break; - case MESA_FORMAT_SL8: - format = MESA_FORMAT_L8; + case MESA_FORMAT_L_SRGB8: + format = MESA_FORMAT_L_UNORM8; break; - case MESA_FORMAT_SLA8: - format = MESA_FORMAT_AL88; + case MESA_FORMAT_L8A8_SRGB: + format = MESA_FORMAT_L8A8_UNORM; break; case MESA_FORMAT_SRGB_DXT1: format = MESA_FORMAT_RGB_DXT1; @@ -2077,8 +2077,8 @@ _mesa_get_srgb_format_linear(gl_format format) case MESA_FORMAT_SRGBA_DXT5: format = MESA_FORMAT_RGBA_DXT5; break; - case MESA_FORMAT_XBGR8888_SRGB: - format = MESA_FORMAT_RGBX8888_REV; + case MESA_FORMAT_R8G8B8X8_SRGB: + format = MESA_FORMAT_R8G8B8X8_UNORM; break; case MESA_FORMAT_ETC2_SRGB8: format = MESA_FORMAT_ETC2_RGB8; @@ -2100,57 +2100,57 @@ _mesa_get_srgb_format_linear(gl_format format) * If the given format is a compressed format, return a corresponding * uncompressed format. */ -gl_format -_mesa_get_uncompressed_format(gl_format format) +mesa_format +_mesa_get_uncompressed_format(mesa_format format) { switch (format) { case MESA_FORMAT_RGB_FXT1: - return MESA_FORMAT_RGB888; + return MESA_FORMAT_BGR_UNORM8; case MESA_FORMAT_RGBA_FXT1: - return MESA_FORMAT_RGBA8888; + return MESA_FORMAT_A8B8G8R8_UNORM; case MESA_FORMAT_RGB_DXT1: case MESA_FORMAT_SRGB_DXT1: - return MESA_FORMAT_RGB888; + return MESA_FORMAT_BGR_UNORM8; case MESA_FORMAT_RGBA_DXT1: case MESA_FORMAT_SRGBA_DXT1: - return MESA_FORMAT_RGBA8888; + return MESA_FORMAT_A8B8G8R8_UNORM; case MESA_FORMAT_RGBA_DXT3: case MESA_FORMAT_SRGBA_DXT3: - return MESA_FORMAT_RGBA8888; + return MESA_FORMAT_A8B8G8R8_UNORM; case MESA_FORMAT_RGBA_DXT5: case MESA_FORMAT_SRGBA_DXT5: - return MESA_FORMAT_RGBA8888; - case MESA_FORMAT_RED_RGTC1: - return MESA_FORMAT_R8; - case MESA_FORMAT_SIGNED_RED_RGTC1: - return MESA_FORMAT_SIGNED_R8; - case MESA_FORMAT_RG_RGTC2: - return MESA_FORMAT_GR88; - case MESA_FORMAT_SIGNED_RG_RGTC2: - return MESA_FORMAT_SIGNED_RG88_REV; - case MESA_FORMAT_L_LATC1: - return MESA_FORMAT_L8; - case MESA_FORMAT_SIGNED_L_LATC1: - return MESA_FORMAT_SIGNED_L8; - case MESA_FORMAT_LA_LATC2: - return MESA_FORMAT_AL88; - case MESA_FORMAT_SIGNED_LA_LATC2: - return MESA_FORMAT_SIGNED_AL88; + return MESA_FORMAT_A8B8G8R8_UNORM; + case MESA_FORMAT_R_RGTC1_UNORM: + return MESA_FORMAT_R_UNORM8; + case MESA_FORMAT_R_RGTC1_SNORM: + return MESA_FORMAT_R_SNORM8; + case MESA_FORMAT_RG_RGTC2_UNORM: + return MESA_FORMAT_R8G8_UNORM; + case MESA_FORMAT_RG_RGTC2_SNORM: + return MESA_FORMAT_R8G8_SNORM; + case MESA_FORMAT_L_LATC1_UNORM: + return MESA_FORMAT_L_UNORM8; + case MESA_FORMAT_L_LATC1_SNORM: + return MESA_FORMAT_L_SNORM8; + case MESA_FORMAT_LA_LATC2_UNORM: + return MESA_FORMAT_L8A8_UNORM; + case MESA_FORMAT_LA_LATC2_SNORM: + return MESA_FORMAT_L8A8_SNORM; case MESA_FORMAT_ETC1_RGB8: case MESA_FORMAT_ETC2_RGB8: case MESA_FORMAT_ETC2_SRGB8: - return MESA_FORMAT_RGB888; + return MESA_FORMAT_BGR_UNORM8; case MESA_FORMAT_ETC2_RGBA8_EAC: case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC: case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1: case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1: - return MESA_FORMAT_RGBA8888; + return MESA_FORMAT_A8B8G8R8_UNORM; case MESA_FORMAT_ETC2_R11_EAC: case MESA_FORMAT_ETC2_SIGNED_R11_EAC: - return MESA_FORMAT_R16; + return MESA_FORMAT_R_UNORM16; case MESA_FORMAT_ETC2_RG11_EAC: case MESA_FORMAT_ETC2_SIGNED_RG11_EAC: - return MESA_FORMAT_GR1616; + return MESA_FORMAT_R16G16_UNORM; default: #ifdef DEBUG assert(!_mesa_is_format_compressed(format)); @@ -2161,7 +2161,7 @@ _mesa_get_uncompressed_format(gl_format format) GLuint -_mesa_format_num_components(gl_format format) +_mesa_format_num_components(mesa_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); return ((info->RedBits > 0) + @@ -2180,7 +2180,7 @@ _mesa_format_num_components(gl_format format) * in the given format. */ GLuint -_mesa_format_image_size(gl_format format, GLsizei width, +_mesa_format_image_size(mesa_format format, GLsizei width, GLsizei height, GLsizei depth) { const struct gl_format_info *info = _mesa_get_format_info(format); @@ -2206,7 +2206,7 @@ _mesa_format_image_size(gl_format format, GLsizei width, * accomodate very large textures. */ uint64_t -_mesa_format_image_size64(gl_format format, GLsizei width, +_mesa_format_image_size64(mesa_format format, GLsizei width, GLsizei height, GLsizei depth) { const struct gl_format_info *info = _mesa_get_format_info(format); @@ -2232,7 +2232,7 @@ _mesa_format_image_size64(gl_format format, GLsizei width, GLint -_mesa_format_row_stride(gl_format format, GLsizei width) +_mesa_format_row_stride(mesa_format format, GLsizei width) { const struct gl_format_info *info = _mesa_get_format_info(format); /* Strictly speaking, a conditional isn't needed here */ @@ -2259,7 +2259,7 @@ _mesa_format_row_stride(gl_format format, GLsizei width) static void check_format_to_type_and_comps(void) { - gl_format f; + mesa_format f; for (f = MESA_FORMAT_NONE + 1; f < MESA_FORMAT_COUNT; f++) { GLenum datatype = 0; @@ -2364,99 +2364,99 @@ _mesa_test_formats(void) /** - * Return datatype and number of components per texel for the given gl_format. + * Return datatype and number of components per texel for the given mesa_format. * Only used for mipmap generation code. */ void -_mesa_format_to_type_and_comps(gl_format format, +_mesa_format_to_type_and_comps(mesa_format format, GLenum *datatype, GLuint *comps) { switch (format) { - case MESA_FORMAT_RGBA8888: - case MESA_FORMAT_RGBA8888_REV: - case MESA_FORMAT_ARGB8888: - case MESA_FORMAT_ARGB8888_REV: - case MESA_FORMAT_RGBX8888: - case MESA_FORMAT_RGBX8888_REV: - case MESA_FORMAT_XRGB8888: - case MESA_FORMAT_XRGB8888_REV: + case MESA_FORMAT_A8B8G8R8_UNORM: + case MESA_FORMAT_R8G8B8A8_UNORM: + case MESA_FORMAT_B8G8R8A8_UNORM: + case MESA_FORMAT_A8R8G8B8_UNORM: + case MESA_FORMAT_X8B8G8R8_UNORM: + case MESA_FORMAT_R8G8B8X8_UNORM: + case MESA_FORMAT_B8G8R8X8_UNORM: + case MESA_FORMAT_X8R8G8B8_UNORM: *datatype = GL_UNSIGNED_BYTE; *comps = 4; return; - case MESA_FORMAT_RGB888: - case MESA_FORMAT_BGR888: + case MESA_FORMAT_BGR_UNORM8: + case MESA_FORMAT_RGB_UNORM8: *datatype = GL_UNSIGNED_BYTE; *comps = 3; return; - case MESA_FORMAT_RGB565: - case MESA_FORMAT_RGB565_REV: + case MESA_FORMAT_B5G6R5_UNORM: + case MESA_FORMAT_R5G6B5_UNORM: *datatype = GL_UNSIGNED_SHORT_5_6_5; *comps = 3; return; - case MESA_FORMAT_ARGB4444: - case MESA_FORMAT_ARGB4444_REV: - case MESA_FORMAT_XRGB4444_UNORM: + case MESA_FORMAT_B4G4R4A4_UNORM: + case MESA_FORMAT_A4R4G4B4_UNORM: + case MESA_FORMAT_B4G4R4X4_UNORM: *datatype = GL_UNSIGNED_SHORT_4_4_4_4; *comps = 4; return; - case MESA_FORMAT_ARGB1555: - case MESA_FORMAT_ARGB1555_REV: - case MESA_FORMAT_XRGB1555_UNORM: + case MESA_FORMAT_B5G5R5A1_UNORM: + case MESA_FORMAT_A1R5G5B5_UNORM: + case MESA_FORMAT_B5G5R5X1_UNORM: *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV; *comps = 4; return; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: *datatype = GL_UNSIGNED_INT_2_10_10_10_REV; *comps = 4; return; - case MESA_FORMAT_RGBA5551: + case MESA_FORMAT_A1B5G5R5_UNORM: *datatype = GL_UNSIGNED_SHORT_5_5_5_1; *comps = 4; return; - case MESA_FORMAT_AL44: + case MESA_FORMAT_L4A4_UNORM: *datatype = MESA_UNSIGNED_BYTE_4_4; *comps = 2; return; - case MESA_FORMAT_AL88: - case MESA_FORMAT_AL88_REV: - case MESA_FORMAT_GR88: - case MESA_FORMAT_RG88: + case MESA_FORMAT_L8A8_UNORM: + case MESA_FORMAT_A8L8_UNORM: + case MESA_FORMAT_R8G8_UNORM: + case MESA_FORMAT_G8R8_UNORM: *datatype = GL_UNSIGNED_BYTE; *comps = 2; return; - case MESA_FORMAT_AL1616: - case MESA_FORMAT_AL1616_REV: - case MESA_FORMAT_GR1616: - case MESA_FORMAT_RG1616: + case MESA_FORMAT_L16A16_UNORM: + case MESA_FORMAT_A16L16_UNORM: + case MESA_FORMAT_R16G16_UNORM: + case MESA_FORMAT_G16R16_UNORM: *datatype = GL_UNSIGNED_SHORT; *comps = 2; return; - case MESA_FORMAT_R16: - case MESA_FORMAT_A16: - case MESA_FORMAT_L16: - case MESA_FORMAT_I16: + case MESA_FORMAT_R_UNORM16: + case MESA_FORMAT_A_UNORM16: + case MESA_FORMAT_L_UNORM16: + case MESA_FORMAT_I_UNORM16: *datatype = GL_UNSIGNED_SHORT; *comps = 1; return; - case MESA_FORMAT_RGB332: + case MESA_FORMAT_B2G3R3_UNORM: *datatype = GL_UNSIGNED_BYTE_3_3_2; *comps = 3; return; - case MESA_FORMAT_A8: - case MESA_FORMAT_L8: - case MESA_FORMAT_I8: - case MESA_FORMAT_R8: - case MESA_FORMAT_S8: + case MESA_FORMAT_A_UNORM8: + case MESA_FORMAT_L_UNORM8: + case MESA_FORMAT_I_UNORM8: + case MESA_FORMAT_R_UNORM8: + case MESA_FORMAT_S_UINT8: *datatype = GL_UNSIGNED_BYTE; *comps = 1; return; @@ -2467,42 +2467,42 @@ _mesa_format_to_type_and_comps(gl_format format, *comps = 2; return; - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: *datatype = GL_UNSIGNED_INT_24_8_MESA; *comps = 2; return; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: *datatype = GL_UNSIGNED_INT_8_24_REV_MESA; *comps = 2; return; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: *datatype = GL_UNSIGNED_SHORT; *comps = 1; return; - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_S8_UINT: *datatype = GL_UNSIGNED_INT; *comps = 1; return; - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_X8Z24_UNORM: *datatype = GL_UNSIGNED_INT; *comps = 1; return; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: *datatype = GL_UNSIGNED_INT; *comps = 1; return; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: *datatype = GL_FLOAT; *comps = 1; return; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: *datatype = GL_FLOAT_32_UNSIGNED_INT_24_8_REV; *comps = 1; return; @@ -2512,65 +2512,65 @@ _mesa_format_to_type_and_comps(gl_format format, *comps = 2; return; - case MESA_FORMAT_SIGNED_R8: - case MESA_FORMAT_SIGNED_A8: - case MESA_FORMAT_SIGNED_L8: - case MESA_FORMAT_SIGNED_I8: + case MESA_FORMAT_R_SNORM8: + case MESA_FORMAT_A_SNORM8: + case MESA_FORMAT_L_SNORM8: + case MESA_FORMAT_I_SNORM8: *datatype = GL_BYTE; *comps = 1; return; - case MESA_FORMAT_SIGNED_RG88_REV: - case MESA_FORMAT_SIGNED_AL88: + case MESA_FORMAT_R8G8_SNORM: + case MESA_FORMAT_L8A8_SNORM: *datatype = GL_BYTE; *comps = 2; return; - case MESA_FORMAT_SIGNED_RGBA8888: - case MESA_FORMAT_SIGNED_RGBA8888_REV: - case MESA_FORMAT_SIGNED_RGBX8888: + case MESA_FORMAT_A8B8G8R8_SNORM: + case MESA_FORMAT_R8G8B8A8_SNORM: + case MESA_FORMAT_X8B8G8R8_SNORM: *datatype = GL_BYTE; *comps = 4; return; - case MESA_FORMAT_RGBA_16: + case MESA_FORMAT_RGBA_UNORM16: *datatype = GL_UNSIGNED_SHORT; *comps = 4; return; - case MESA_FORMAT_SIGNED_R16: - case MESA_FORMAT_SIGNED_A16: - case MESA_FORMAT_SIGNED_L16: - case MESA_FORMAT_SIGNED_I16: + case MESA_FORMAT_R_SNORM16: + case MESA_FORMAT_A_SNORM16: + case MESA_FORMAT_L_SNORM16: + case MESA_FORMAT_I_SNORM16: *datatype = GL_SHORT; *comps = 1; return; - case MESA_FORMAT_SIGNED_GR1616: - case MESA_FORMAT_SIGNED_AL1616: + case MESA_FORMAT_R16G16_SNORM: + case MESA_FORMAT_LA_SNORM16: *datatype = GL_SHORT; *comps = 2; return; - case MESA_FORMAT_SIGNED_RGB_16: + case MESA_FORMAT_RGB_SNORM16: *datatype = GL_SHORT; *comps = 3; return; - case MESA_FORMAT_SIGNED_RGBA_16: + case MESA_FORMAT_RGBA_SNORM16: *datatype = GL_SHORT; *comps = 4; return; - case MESA_FORMAT_SRGB8: + case MESA_FORMAT_BGR_SRGB8: *datatype = GL_UNSIGNED_BYTE; *comps = 3; return; - case MESA_FORMAT_SRGBA8: - case MESA_FORMAT_SARGB8: + case MESA_FORMAT_A8B8G8R8_SRGB: + case MESA_FORMAT_B8G8R8A8_SRGB: *datatype = GL_UNSIGNED_BYTE; *comps = 4; return; - case MESA_FORMAT_SL8: + case MESA_FORMAT_L_SRGB8: *datatype = GL_UNSIGNED_BYTE; *comps = 1; return; - case MESA_FORMAT_SLA8: + case MESA_FORMAT_L8A8_SRGB: *datatype = GL_UNSIGNED_BYTE; *comps = 2; return; @@ -2585,14 +2585,14 @@ _mesa_format_to_type_and_comps(gl_format format, case MESA_FORMAT_SRGBA_DXT1: case MESA_FORMAT_SRGBA_DXT3: case MESA_FORMAT_SRGBA_DXT5: - case MESA_FORMAT_RED_RGTC1: - case MESA_FORMAT_SIGNED_RED_RGTC1: - case MESA_FORMAT_RG_RGTC2: - case MESA_FORMAT_SIGNED_RG_RGTC2: - case MESA_FORMAT_L_LATC1: - case MESA_FORMAT_SIGNED_L_LATC1: - case MESA_FORMAT_LA_LATC2: - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_R_RGTC1_UNORM: + case MESA_FORMAT_R_RGTC1_SNORM: + case MESA_FORMAT_RG_RGTC2_UNORM: + case MESA_FORMAT_RG_RGTC2_SNORM: + case MESA_FORMAT_L_LATC1_UNORM: + case MESA_FORMAT_L_LATC1_SNORM: + case MESA_FORMAT_LA_LATC2_UNORM: + case MESA_FORMAT_LA_LATC2_SNORM: case MESA_FORMAT_ETC1_RGB8: case MESA_FORMAT_ETC2_RGB8: case MESA_FORMAT_ETC2_SRGB8: @@ -2625,140 +2625,140 @@ _mesa_format_to_type_and_comps(gl_format format, *datatype = GL_HALF_FLOAT_ARB; *comps = 3; return; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: + case MESA_FORMAT_LA_FLOAT32: case MESA_FORMAT_RG_FLOAT32: *datatype = GL_FLOAT; *comps = 2; return; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: + case MESA_FORMAT_LA_FLOAT16: case MESA_FORMAT_RG_FLOAT16: *datatype = GL_HALF_FLOAT_ARB; *comps = 2; return; - case MESA_FORMAT_ALPHA_FLOAT32: - case MESA_FORMAT_LUMINANCE_FLOAT32: - case MESA_FORMAT_INTENSITY_FLOAT32: + case MESA_FORMAT_A_FLOAT32: + case MESA_FORMAT_L_FLOAT32: + case MESA_FORMAT_I_FLOAT32: case MESA_FORMAT_R_FLOAT32: *datatype = GL_FLOAT; *comps = 1; return; - case MESA_FORMAT_ALPHA_FLOAT16: - case MESA_FORMAT_LUMINANCE_FLOAT16: - case MESA_FORMAT_INTENSITY_FLOAT16: + case MESA_FORMAT_A_FLOAT16: + case MESA_FORMAT_L_FLOAT16: + case MESA_FORMAT_I_FLOAT16: case MESA_FORMAT_R_FLOAT16: *datatype = GL_HALF_FLOAT_ARB; *comps = 1; return; - case MESA_FORMAT_ALPHA_UINT8: - case MESA_FORMAT_LUMINANCE_UINT8: - case MESA_FORMAT_INTENSITY_UINT8: + case MESA_FORMAT_A_UINT8: + case MESA_FORMAT_L_UINT8: + case MESA_FORMAT_I_UINT8: *datatype = GL_UNSIGNED_BYTE; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT8: + case MESA_FORMAT_LA_UINT8: *datatype = GL_UNSIGNED_BYTE; *comps = 2; return; - case MESA_FORMAT_ALPHA_UINT16: - case MESA_FORMAT_LUMINANCE_UINT16: - case MESA_FORMAT_INTENSITY_UINT16: + case MESA_FORMAT_A_UINT16: + case MESA_FORMAT_L_UINT16: + case MESA_FORMAT_I_UINT16: *datatype = GL_UNSIGNED_SHORT; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT16: + case MESA_FORMAT_LA_UINT16: *datatype = GL_UNSIGNED_SHORT; *comps = 2; return; - case MESA_FORMAT_ALPHA_UINT32: - case MESA_FORMAT_LUMINANCE_UINT32: - case MESA_FORMAT_INTENSITY_UINT32: + case MESA_FORMAT_A_UINT32: + case MESA_FORMAT_L_UINT32: + case MESA_FORMAT_I_UINT32: *datatype = GL_UNSIGNED_INT; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: + case MESA_FORMAT_LA_UINT32: *datatype = GL_UNSIGNED_INT; *comps = 2; return; - case MESA_FORMAT_ALPHA_INT8: - case MESA_FORMAT_LUMINANCE_INT8: - case MESA_FORMAT_INTENSITY_INT8: + case MESA_FORMAT_A_SINT8: + case MESA_FORMAT_L_SINT8: + case MESA_FORMAT_I_SINT8: *datatype = GL_BYTE; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_INT8: + case MESA_FORMAT_LA_SINT8: *datatype = GL_BYTE; *comps = 2; return; - case MESA_FORMAT_ALPHA_INT16: - case MESA_FORMAT_LUMINANCE_INT16: - case MESA_FORMAT_INTENSITY_INT16: + case MESA_FORMAT_A_SINT16: + case MESA_FORMAT_L_SINT16: + case MESA_FORMAT_I_SINT16: *datatype = GL_SHORT; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_INT16: + case MESA_FORMAT_LA_SINT16: *datatype = GL_SHORT; *comps = 2; return; - case MESA_FORMAT_ALPHA_INT32: - case MESA_FORMAT_LUMINANCE_INT32: - case MESA_FORMAT_INTENSITY_INT32: + case MESA_FORMAT_A_SINT32: + case MESA_FORMAT_L_SINT32: + case MESA_FORMAT_I_SINT32: *datatype = GL_INT; *comps = 1; return; - case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + case MESA_FORMAT_LA_SINT32: *datatype = GL_INT; *comps = 2; return; - case MESA_FORMAT_R_INT8: + case MESA_FORMAT_R_SINT8: *datatype = GL_BYTE; *comps = 1; return; - case MESA_FORMAT_RG_INT8: + case MESA_FORMAT_RG_SINT8: *datatype = GL_BYTE; *comps = 2; return; - case MESA_FORMAT_RGB_INT8: + case MESA_FORMAT_RGB_SINT8: *datatype = GL_BYTE; *comps = 3; return; - case MESA_FORMAT_RGBA_INT8: + case MESA_FORMAT_RGBA_SINT8: *datatype = GL_BYTE; *comps = 4; return; - case MESA_FORMAT_R_INT16: + case MESA_FORMAT_R_SINT16: *datatype = GL_SHORT; *comps = 1; return; - case MESA_FORMAT_RG_INT16: + case MESA_FORMAT_RG_SINT16: *datatype = GL_SHORT; *comps = 2; return; - case MESA_FORMAT_RGB_INT16: + case MESA_FORMAT_RGB_SINT16: *datatype = GL_SHORT; *comps = 3; return; - case MESA_FORMAT_RGBA_INT16: + case MESA_FORMAT_RGBA_SINT16: *datatype = GL_SHORT; *comps = 4; return; - case MESA_FORMAT_R_INT32: + case MESA_FORMAT_R_SINT32: *datatype = GL_INT; *comps = 1; return; - case MESA_FORMAT_RG_INT32: + case MESA_FORMAT_RG_SINT32: *datatype = GL_INT; *comps = 2; return; - case MESA_FORMAT_RGB_INT32: + case MESA_FORMAT_RGB_SINT32: *datatype = GL_INT; *comps = 3; return; - case MESA_FORMAT_RGBA_INT32: + case MESA_FORMAT_RGBA_SINT32: *datatype = GL_INT; *comps = 4; return; @@ -2815,82 +2815,82 @@ _mesa_format_to_type_and_comps(gl_format format, *comps = 4; return; - case MESA_FORMAT_RGB9_E5_FLOAT: + case MESA_FORMAT_R9G9B9E5_FLOAT: *datatype = GL_UNSIGNED_INT_5_9_9_9_REV; *comps = 3; return; - case MESA_FORMAT_R11_G11_B10_FLOAT: + case MESA_FORMAT_R11G11B10_FLOAT: *datatype = GL_UNSIGNED_INT_10F_11F_11F_REV; *comps = 3; return; - case MESA_FORMAT_ARGB2101010_UINT: - case MESA_FORMAT_ABGR2101010_UINT: + case MESA_FORMAT_B10G10R10A2_UINT: + case MESA_FORMAT_R10G10B10A2_UINT: *datatype = GL_UNSIGNED_INT_2_10_10_10_REV; *comps = 4; return; - case MESA_FORMAT_XBGR8888_SRGB: - case MESA_FORMAT_XBGR8888_UINT: + case MESA_FORMAT_R8G8B8X8_SRGB: + case MESA_FORMAT_RGBX_UINT8: *datatype = GL_UNSIGNED_BYTE; *comps = 4; return; - case MESA_FORMAT_XBGR8888_SNORM: - case MESA_FORMAT_XBGR8888_SINT: + case MESA_FORMAT_R8G8B8X8_SNORM: + case MESA_FORMAT_RGBX_SINT8: *datatype = GL_BYTE; *comps = 4; return; - case MESA_FORMAT_XRGB2101010_UNORM: + case MESA_FORMAT_B10G10R10X2_UNORM: *datatype = GL_UNSIGNED_INT_2_10_10_10_REV; *comps = 4; return; - case MESA_FORMAT_XBGR16161616_UNORM: - case MESA_FORMAT_XBGR16161616_UINT: + case MESA_FORMAT_RGBX_UNORM16: + case MESA_FORMAT_RGBX_UINT16: *datatype = GL_UNSIGNED_SHORT; *comps = 4; return; - case MESA_FORMAT_XBGR16161616_SNORM: - case MESA_FORMAT_XBGR16161616_SINT: + case MESA_FORMAT_RGBX_SNORM16: + case MESA_FORMAT_RGBX_SINT16: *datatype = GL_SHORT; *comps = 4; return; - case MESA_FORMAT_XBGR16161616_FLOAT: + case MESA_FORMAT_RGBX_FLOAT16: *datatype = GL_HALF_FLOAT; *comps = 4; return; - case MESA_FORMAT_XBGR32323232_FLOAT: + case MESA_FORMAT_RGBX_FLOAT32: *datatype = GL_FLOAT; *comps = 4; return; - case MESA_FORMAT_XBGR32323232_UINT: + case MESA_FORMAT_RGBX_UINT32: *datatype = GL_UNSIGNED_INT; *comps = 4; return; - case MESA_FORMAT_XBGR32323232_SINT: + case MESA_FORMAT_RGBX_SINT32: *datatype = GL_INT; *comps = 4; return; - case MESA_FORMAT_ABGR2101010: + case MESA_FORMAT_R10G10B10A2_UNORM: *datatype = GL_UNSIGNED_INT_2_10_10_10_REV; *comps = 4; return; - case MESA_FORMAT_SIGNED_RG88: + case MESA_FORMAT_G8R8_SNORM: *datatype = GL_BYTE; *comps = 2; return; - case MESA_FORMAT_SIGNED_RG1616: + case MESA_FORMAT_G16R16_SNORM: *datatype = GL_SHORT; *comps = 2; return; @@ -2912,16 +2912,16 @@ _mesa_format_to_type_and_comps(gl_format format, } /** - * Check if a gl_format exactly matches a GL format/type combination + * Check if a mesa_format exactly matches a GL format/type combination * such that we can use memcpy() from one to the other. - * \param gl_format a MESA_FORMAT_x value + * \param mesa_format a MESA_FORMAT_x value * \param format the user-specified image format * \param type the user-specified image datatype * \param swapBytes typically the current pixel pack/unpack byteswap state * \return GL_TRUE if the formats match, GL_FALSE otherwise. */ GLboolean -_mesa_format_matches_format_and_type(gl_format gl_format, +_mesa_format_matches_format_and_type(mesa_format mesa_format, GLenum format, GLenum type, GLboolean swapBytes) { @@ -2936,14 +2936,14 @@ _mesa_format_matches_format_and_type(gl_format gl_format, * enums in formats.h. */ - switch (gl_format) { + switch (mesa_format) { case MESA_FORMAT_NONE: case MESA_FORMAT_COUNT: return GL_FALSE; - case MESA_FORMAT_RGBA8888: - case MESA_FORMAT_SRGBA8: + case MESA_FORMAT_A8B8G8R8_UNORM: + case MESA_FORMAT_A8B8G8R8_SRGB: if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8 && !swapBytes) return GL_TRUE; @@ -2966,7 +2966,7 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_UNORM: if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8_REV && !swapBytes) return GL_TRUE; @@ -2990,8 +2990,8 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_ARGB8888: - case MESA_FORMAT_SARGB8: + case MESA_FORMAT_B8G8R8A8_UNORM: + case MESA_FORMAT_B8G8R8A8_SRGB: if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV && !swapBytes) return GL_TRUE; @@ -3004,7 +3004,7 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_ARGB8888_REV: + case MESA_FORMAT_A8R8G8B8_UNORM: if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8 && !swapBytes) return GL_TRUE; @@ -3017,77 +3017,77 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_RGBX8888: - case MESA_FORMAT_RGBX8888_REV: + case MESA_FORMAT_X8B8G8R8_UNORM: + case MESA_FORMAT_R8G8B8X8_UNORM: return GL_FALSE; - case MESA_FORMAT_XRGB8888: - case MESA_FORMAT_XRGB8888_REV: + case MESA_FORMAT_B8G8R8X8_UNORM: + case MESA_FORMAT_X8R8G8B8_UNORM: return GL_FALSE; - case MESA_FORMAT_RGB888: - case MESA_FORMAT_SRGB8: + case MESA_FORMAT_BGR_UNORM8: + case MESA_FORMAT_BGR_SRGB8: return format == GL_BGR && type == GL_UNSIGNED_BYTE && littleEndian; - case MESA_FORMAT_BGR888: + case MESA_FORMAT_RGB_UNORM8: return format == GL_RGB && type == GL_UNSIGNED_BYTE && littleEndian; - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: return format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5 && !swapBytes; - case MESA_FORMAT_RGB565_REV: + case MESA_FORMAT_R5G6B5_UNORM: /* Some of the 16-bit MESA_FORMATs that would seem to correspond to * GL_UNSIGNED_SHORT_* are byte-swapped instead of channel-reversed, * according to formats.h, so they can't be matched. */ return GL_FALSE; - case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_B4G4R4A4_UNORM: return format == GL_BGRA && type == GL_UNSIGNED_SHORT_4_4_4_4_REV && !swapBytes; - case MESA_FORMAT_ARGB4444_REV: + case MESA_FORMAT_A4R4G4B4_UNORM: return GL_FALSE; - case MESA_FORMAT_RGBA5551: + case MESA_FORMAT_A1B5G5R5_UNORM: return format == GL_RGBA && type == GL_UNSIGNED_SHORT_5_5_5_1 && !swapBytes; - case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_B5G5R5A1_UNORM: return format == GL_BGRA && type == GL_UNSIGNED_SHORT_1_5_5_5_REV && !swapBytes; - case MESA_FORMAT_ARGB1555_REV: + case MESA_FORMAT_A1R5G5B5_UNORM: return GL_FALSE; - case MESA_FORMAT_AL44: + case MESA_FORMAT_L4A4_UNORM: return GL_FALSE; - case MESA_FORMAT_AL88: - case MESA_FORMAT_SLA8: + case MESA_FORMAT_L8A8_UNORM: + case MESA_FORMAT_L8A8_SRGB: return format == GL_LUMINANCE_ALPHA && type == GL_UNSIGNED_BYTE && littleEndian; - case MESA_FORMAT_AL88_REV: + case MESA_FORMAT_A8L8_UNORM: return GL_FALSE; - case MESA_FORMAT_AL1616: + case MESA_FORMAT_L16A16_UNORM: return format == GL_LUMINANCE_ALPHA && type == GL_UNSIGNED_SHORT && littleEndian && !swapBytes; - case MESA_FORMAT_AL1616_REV: + case MESA_FORMAT_A16L16_UNORM: return GL_FALSE; - case MESA_FORMAT_RGB332: + case MESA_FORMAT_B2G3R3_UNORM: return format == GL_RGB && type == GL_UNSIGNED_BYTE_3_3_2; - case MESA_FORMAT_A8: + case MESA_FORMAT_A_UNORM8: return format == GL_ALPHA && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_A16: + case MESA_FORMAT_A_UNORM16: return format == GL_ALPHA && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_L8: - case MESA_FORMAT_SL8: + case MESA_FORMAT_L_UNORM8: + case MESA_FORMAT_L_SRGB8: return format == GL_LUMINANCE && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_L16: + case MESA_FORMAT_L_UNORM16: return format == GL_LUMINANCE && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_I8: + case MESA_FORMAT_I_UNORM8: return format == GL_INTENSITY && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_I16: + case MESA_FORMAT_I_UNORM16: return format == GL_INTENSITY && type == GL_UNSIGNED_SHORT && !swapBytes; case MESA_FORMAT_YCBCR: @@ -3099,45 +3099,45 @@ _mesa_format_matches_format_and_type(gl_format gl_format, ((type == GL_UNSIGNED_SHORT_8_8_MESA && littleEndian == swapBytes) || (type == GL_UNSIGNED_SHORT_8_8_REV_MESA && littleEndian != swapBytes)); - case MESA_FORMAT_R8: + case MESA_FORMAT_R_UNORM8: return format == GL_RED && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_GR88: + case MESA_FORMAT_R8G8_UNORM: return format == GL_RG && type == GL_UNSIGNED_BYTE && littleEndian; - case MESA_FORMAT_RG88: + case MESA_FORMAT_G8R8_UNORM: return GL_FALSE; - case MESA_FORMAT_R16: + case MESA_FORMAT_R_UNORM16: return format == GL_RED && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_GR1616: + case MESA_FORMAT_R16G16_UNORM: return format == GL_RG && type == GL_UNSIGNED_SHORT && littleEndian && !swapBytes; - case MESA_FORMAT_RG1616: + case MESA_FORMAT_G16R16_UNORM: return GL_FALSE; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: return format == GL_BGRA && type == GL_UNSIGNED_INT_2_10_10_10_REV && !swapBytes; - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: return format == GL_DEPTH_STENCIL && type == GL_UNSIGNED_INT_24_8 && !swapBytes; - case MESA_FORMAT_Z24_X8: - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_X8Z24_UNORM: + case MESA_FORMAT_Z24_UNORM_X8_UINT: return GL_FALSE; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: return format == GL_DEPTH_COMPONENT && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_S8_UINT: return GL_FALSE; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: return format == GL_DEPTH_COMPONENT && type == GL_UNSIGNED_INT && !swapBytes; - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: return format == GL_STENCIL_INDEX && type == GL_UNSIGNED_BYTE; case MESA_FORMAT_SRGB_DXT1: @@ -3164,24 +3164,24 @@ _mesa_format_matches_format_and_type(gl_format gl_format, case MESA_FORMAT_RGB_FLOAT16: return format == GL_RGB && type == GL_HALF_FLOAT && !swapBytes; - case MESA_FORMAT_ALPHA_FLOAT32: + case MESA_FORMAT_A_FLOAT32: return format == GL_ALPHA && type == GL_FLOAT && !swapBytes; - case MESA_FORMAT_ALPHA_FLOAT16: + case MESA_FORMAT_A_FLOAT16: return format == GL_ALPHA && type == GL_HALF_FLOAT && !swapBytes; - case MESA_FORMAT_LUMINANCE_FLOAT32: + case MESA_FORMAT_L_FLOAT32: return format == GL_LUMINANCE && type == GL_FLOAT && !swapBytes; - case MESA_FORMAT_LUMINANCE_FLOAT16: + case MESA_FORMAT_L_FLOAT16: return format == GL_LUMINANCE && type == GL_HALF_FLOAT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: + case MESA_FORMAT_LA_FLOAT32: return format == GL_LUMINANCE_ALPHA && type == GL_FLOAT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: + case MESA_FORMAT_LA_FLOAT16: return format == GL_LUMINANCE_ALPHA && type == GL_HALF_FLOAT && !swapBytes; - case MESA_FORMAT_INTENSITY_FLOAT32: + case MESA_FORMAT_I_FLOAT32: return format == GL_INTENSITY && type == GL_FLOAT && !swapBytes; - case MESA_FORMAT_INTENSITY_FLOAT16: + case MESA_FORMAT_I_FLOAT16: return format == GL_INTENSITY && type == GL_HALF_FLOAT && !swapBytes; case MESA_FORMAT_R_FLOAT32: @@ -3194,88 +3194,88 @@ _mesa_format_matches_format_and_type(gl_format gl_format, case MESA_FORMAT_RG_FLOAT16: return format == GL_RG && type == GL_HALF_FLOAT && !swapBytes; - case MESA_FORMAT_ALPHA_UINT8: + case MESA_FORMAT_A_UINT8: return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_ALPHA_UINT16: + case MESA_FORMAT_A_UINT16: return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_ALPHA_UINT32: + case MESA_FORMAT_A_UINT32: return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_INT && !swapBytes; - case MESA_FORMAT_ALPHA_INT8: + case MESA_FORMAT_A_SINT8: return format == GL_ALPHA_INTEGER && type == GL_BYTE; - case MESA_FORMAT_ALPHA_INT16: + case MESA_FORMAT_A_SINT16: return format == GL_ALPHA_INTEGER && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_ALPHA_INT32: + case MESA_FORMAT_A_SINT32: return format == GL_ALPHA_INTEGER && type == GL_INT && !swapBytes; - case MESA_FORMAT_INTENSITY_UINT8: - case MESA_FORMAT_INTENSITY_UINT16: - case MESA_FORMAT_INTENSITY_UINT32: - case MESA_FORMAT_INTENSITY_INT8: - case MESA_FORMAT_INTENSITY_INT16: - case MESA_FORMAT_INTENSITY_INT32: + case MESA_FORMAT_I_UINT8: + case MESA_FORMAT_I_UINT16: + case MESA_FORMAT_I_UINT32: + case MESA_FORMAT_I_SINT8: + case MESA_FORMAT_I_SINT16: + case MESA_FORMAT_I_SINT32: /* GL_INTENSITY_INTEGER_EXT doesn't exist. */ return GL_FALSE; - case MESA_FORMAT_LUMINANCE_UINT8: + case MESA_FORMAT_L_UINT8: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_BYTE; - case MESA_FORMAT_LUMINANCE_UINT16: + case MESA_FORMAT_L_UINT16: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_LUMINANCE_UINT32: + case MESA_FORMAT_L_UINT32: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_INT && !swapBytes; - case MESA_FORMAT_LUMINANCE_INT8: + case MESA_FORMAT_L_SINT8: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_BYTE; - case MESA_FORMAT_LUMINANCE_INT16: + case MESA_FORMAT_L_SINT16: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_LUMINANCE_INT32: + case MESA_FORMAT_L_SINT32: return format == GL_LUMINANCE_INTEGER_EXT && type == GL_INT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT8: + case MESA_FORMAT_LA_UINT8: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_UNSIGNED_BYTE && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT16: + case MESA_FORMAT_LA_UINT16: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: + case MESA_FORMAT_LA_UINT32: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_UNSIGNED_INT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_INT8: + case MESA_FORMAT_LA_SINT8: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_BYTE && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_INT16: + case MESA_FORMAT_LA_SINT16: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + case MESA_FORMAT_LA_SINT32: return format == GL_LUMINANCE_ALPHA_INTEGER_EXT && type == GL_INT && !swapBytes; - case MESA_FORMAT_R_INT8: + case MESA_FORMAT_R_SINT8: return format == GL_RED_INTEGER && type == GL_BYTE; - case MESA_FORMAT_RG_INT8: + case MESA_FORMAT_RG_SINT8: return format == GL_RG_INTEGER && type == GL_BYTE && !swapBytes; - case MESA_FORMAT_RGB_INT8: + case MESA_FORMAT_RGB_SINT8: return format == GL_RGB_INTEGER && type == GL_BYTE && !swapBytes; - case MESA_FORMAT_RGBA_INT8: + case MESA_FORMAT_RGBA_SINT8: return format == GL_RGBA_INTEGER && type == GL_BYTE && !swapBytes; - case MESA_FORMAT_R_INT16: + case MESA_FORMAT_R_SINT16: return format == GL_RED_INTEGER && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_RG_INT16: + case MESA_FORMAT_RG_SINT16: return format == GL_RG_INTEGER && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_RGB_INT16: + case MESA_FORMAT_RGB_SINT16: return format == GL_RGB_INTEGER && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_RGBA_INT16: + case MESA_FORMAT_RGBA_SINT16: return format == GL_RGBA_INTEGER && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_R_INT32: + case MESA_FORMAT_R_SINT32: return format == GL_RED_INTEGER && type == GL_INT && !swapBytes; - case MESA_FORMAT_RG_INT32: + case MESA_FORMAT_RG_SINT32: return format == GL_RG_INTEGER && type == GL_INT && !swapBytes; - case MESA_FORMAT_RGB_INT32: + case MESA_FORMAT_RGB_SINT32: return format == GL_RGB_INTEGER && type == GL_INT && !swapBytes; - case MESA_FORMAT_RGBA_INT32: + case MESA_FORMAT_RGBA_SINT32: return format == GL_RGBA_INTEGER && type == GL_INT && !swapBytes; case MESA_FORMAT_R_UINT8: @@ -3311,15 +3311,15 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return (format == GL_DU8DV8_ATI || format == GL_DUDV_ATI) && type == GL_BYTE && littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_R8: + case MESA_FORMAT_R_SNORM8: return format == GL_RED && type == GL_BYTE; - case MESA_FORMAT_SIGNED_RG88_REV: + case MESA_FORMAT_R8G8_SNORM: return format == GL_RG && type == GL_BYTE && littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_RGBX8888: + case MESA_FORMAT_X8B8G8R8_SNORM: return GL_FALSE; - case MESA_FORMAT_SIGNED_RGBA8888: + case MESA_FORMAT_A8B8G8R8_SNORM: if (format == GL_RGBA && type == GL_BYTE && !littleEndian) return GL_TRUE; @@ -3328,7 +3328,7 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_SIGNED_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_SNORM: if (format == GL_RGBA && type == GL_BYTE && littleEndian) return GL_TRUE; @@ -3337,29 +3337,29 @@ _mesa_format_matches_format_and_type(gl_format gl_format, return GL_FALSE; - case MESA_FORMAT_SIGNED_R16: + case MESA_FORMAT_R_SNORM16: return format == GL_RED && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_SIGNED_GR1616: + case MESA_FORMAT_R16G16_SNORM: return format == GL_RG && type == GL_SHORT && littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_RGB_16: + case MESA_FORMAT_RGB_SNORM16: return format == GL_RGB && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_SIGNED_RGBA_16: + case MESA_FORMAT_RGBA_SNORM16: return format == GL_RGBA && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_RGBA_16: + case MESA_FORMAT_RGBA_UNORM16: return format == GL_RGBA && type == GL_UNSIGNED_SHORT && !swapBytes; - case MESA_FORMAT_RED_RGTC1: - case MESA_FORMAT_SIGNED_RED_RGTC1: - case MESA_FORMAT_RG_RGTC2: - case MESA_FORMAT_SIGNED_RG_RGTC2: + case MESA_FORMAT_R_RGTC1_UNORM: + case MESA_FORMAT_R_RGTC1_SNORM: + case MESA_FORMAT_RG_RGTC2_UNORM: + case MESA_FORMAT_RG_RGTC2_SNORM: return GL_FALSE; - case MESA_FORMAT_L_LATC1: - case MESA_FORMAT_SIGNED_L_LATC1: - case MESA_FORMAT_LA_LATC2: - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_L_LATC1_UNORM: + case MESA_FORMAT_L_LATC1_SNORM: + case MESA_FORMAT_LA_LATC2_UNORM: + case MESA_FORMAT_LA_LATC2_SNORM: return GL_FALSE; case MESA_FORMAT_ETC1_RGB8: @@ -3375,77 +3375,77 @@ _mesa_format_matches_format_and_type(gl_format gl_format, case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1: return GL_FALSE; - case MESA_FORMAT_SIGNED_A8: + case MESA_FORMAT_A_SNORM8: return format == GL_ALPHA && type == GL_BYTE; - case MESA_FORMAT_SIGNED_L8: + case MESA_FORMAT_L_SNORM8: return format == GL_LUMINANCE && type == GL_BYTE; - case MESA_FORMAT_SIGNED_AL88: + case MESA_FORMAT_L8A8_SNORM: return format == GL_LUMINANCE_ALPHA && type == GL_BYTE && littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_I8: + case MESA_FORMAT_I_SNORM8: return format == GL_INTENSITY && type == GL_BYTE; - case MESA_FORMAT_SIGNED_A16: + case MESA_FORMAT_A_SNORM16: return format == GL_ALPHA && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_SIGNED_L16: + case MESA_FORMAT_L_SNORM16: return format == GL_LUMINANCE && type == GL_SHORT && !swapBytes; - case MESA_FORMAT_SIGNED_AL1616: + case MESA_FORMAT_LA_SNORM16: return format == GL_LUMINANCE_ALPHA && type == GL_SHORT && littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_I16: + case MESA_FORMAT_I_SNORM16: return format == GL_INTENSITY && type == GL_SHORT && littleEndian && !swapBytes; - case MESA_FORMAT_ARGB2101010_UINT: + case MESA_FORMAT_B10G10R10A2_UINT: return (format == GL_BGRA_INTEGER_EXT && type == GL_UNSIGNED_INT_2_10_10_10_REV && !swapBytes); - case MESA_FORMAT_ABGR2101010_UINT: + case MESA_FORMAT_R10G10B10A2_UINT: return (format == GL_RGBA_INTEGER_EXT && type == GL_UNSIGNED_INT_2_10_10_10_REV && !swapBytes); - case MESA_FORMAT_RGB9_E5_FLOAT: + case MESA_FORMAT_R9G9B9E5_FLOAT: return format == GL_RGB && type == GL_UNSIGNED_INT_5_9_9_9_REV && !swapBytes; - case MESA_FORMAT_R11_G11_B10_FLOAT: + case MESA_FORMAT_R11G11B10_FLOAT: return format == GL_RGB && type == GL_UNSIGNED_INT_10F_11F_11F_REV && !swapBytes; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: return format == GL_DEPTH_COMPONENT && type == GL_FLOAT && !swapBytes; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: return format == GL_DEPTH_STENCIL && type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV && !swapBytes; - case MESA_FORMAT_XRGB4444_UNORM: - case MESA_FORMAT_XRGB1555_UNORM: - case MESA_FORMAT_XBGR8888_SNORM: - case MESA_FORMAT_XBGR8888_SRGB: - case MESA_FORMAT_XBGR8888_UINT: - case MESA_FORMAT_XBGR8888_SINT: - case MESA_FORMAT_XRGB2101010_UNORM: - case MESA_FORMAT_XBGR16161616_UNORM: - case MESA_FORMAT_XBGR16161616_SNORM: - case MESA_FORMAT_XBGR16161616_FLOAT: - case MESA_FORMAT_XBGR16161616_UINT: - case MESA_FORMAT_XBGR16161616_SINT: - case MESA_FORMAT_XBGR32323232_FLOAT: - case MESA_FORMAT_XBGR32323232_UINT: - case MESA_FORMAT_XBGR32323232_SINT: + case MESA_FORMAT_B4G4R4X4_UNORM: + case MESA_FORMAT_B5G5R5X1_UNORM: + case MESA_FORMAT_R8G8B8X8_SNORM: + case MESA_FORMAT_R8G8B8X8_SRGB: + case MESA_FORMAT_RGBX_UINT8: + case MESA_FORMAT_RGBX_SINT8: + case MESA_FORMAT_B10G10R10X2_UNORM: + case MESA_FORMAT_RGBX_UNORM16: + case MESA_FORMAT_RGBX_SNORM16: + case MESA_FORMAT_RGBX_FLOAT16: + case MESA_FORMAT_RGBX_UINT16: + case MESA_FORMAT_RGBX_SINT16: + case MESA_FORMAT_RGBX_FLOAT32: + case MESA_FORMAT_RGBX_UINT32: + case MESA_FORMAT_RGBX_SINT32: return GL_FALSE; - case MESA_FORMAT_ABGR2101010: + case MESA_FORMAT_R10G10B10A2_UNORM: return format == GL_RGBA && type == GL_UNSIGNED_INT_2_10_10_10_REV && !swapBytes; - case MESA_FORMAT_SIGNED_RG88: + case MESA_FORMAT_G8R8_SNORM: return format == GL_RG && type == GL_BYTE && !littleEndian && !swapBytes; - case MESA_FORMAT_SIGNED_RG1616: + case MESA_FORMAT_G16R16_SNORM: return format == GL_RG && type == GL_SHORT && !littleEndian && !swapBytes; } diff --git a/mesalib/src/mesa/main/formats.h b/mesalib/src/mesa/main/formats.h index a1f0d226a..63d9565e3 100644 --- a/mesalib/src/mesa/main/formats.h +++ b/mesalib/src/mesa/main/formats.h @@ -41,8 +41,10 @@ extern "C" { #endif -/* OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type - * for GL_LUMINANCE4_ALPHA4. */ +/** + * OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type + * for GL_LUMINANCE4_ALPHA4. + */ #define MESA_UNSIGNED_BYTE_4_4 (GL_UNSIGNED_BYTE<<1) @@ -61,68 +63,369 @@ typedef enum { MESA_FORMAT_NONE = 0, - /** + /** * \name Basic hardware formats + * + * The mesa format name specification is as follows: + * + * There shall be 3 naming format base types: those for component array + * formats (type A); those for compressed formats (type C); and those for + * packed component formats (type P). With type A formats, color component + * order does not change with endianess. Each format name shall begin with + * MESA_FORMAT_, followed by a component label (from the Component Label + * list below) for each component in the order that the component(s) occur + * in the format, except for non-linear color formats where the first + * letter shall be 'S'. For type P formats, each component label is + * followed by the number of bits that represent it in the fundamental + * data type used by the format. + * + * Following the listing of the component labels shall be an underscore; a + * compression type followed by an underscore for Type C formats only; a + * storage type from the list below; and a bit with for type A formats, + * which is the bit width for each array element. + * + * + * ---------- Format Base Type A: Array ---------- + * MESA_FORMAT_[component list]_[storage type][array element bit width] + * + * examples: + * MESA_FORMAT_A_SNORM8 - uchar[i] = A + * MESA_FORMAT_RGBA_16 - ushort[i * 4 + 0] = R, ushort[i * 4 + 1] = G, + * ushort[i * 4 + 2] = B, ushort[i * 4 + 3] = A + * MESA_FORMAT_Z_UNORM32 - float[i] = Z + * + * + * + * ---------- Format Base Type C: Compressed ---------- + * MESA_FORMAT_[component list*][_*][compression type][storage type*] + * * where required + * + * examples: + * MESA_FORMAT_RGB_ETC1 + * MESA_FORMAT_RGBA_ETC2 + * MESA_FORMAT_LATC1_UNORM + * MESA_FORMAT_RGBA_FXT1 + * + * + * + * ---------- Format Base Type P: Packed ---------- + * MESA_FORMAT_[[component list,bit width][storage type*][_]][_][storage type**] + * * when type differs between component + * ** when type applies to all components + * + * examples: msb <------ TEXEL BITS -----------> lsb + * MESA_FORMAT_A8B8G8R8_UNORM, AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR + * MESA_FORMAT_R5G6B5_UNORM RRRR RGGG GGGB BBBB + * MESA_FORMAT_B4G4R4X4_UNORM BBBB GGGG RRRR XXXX + * MESA_FORMAT_Z32_FLOAT_S8X24_UINT + * MESA_FORMAT_R10G10B10A2_UINT + * MESA_FORMAT_R9G9B9E5_FLOAT + * + * + * + * ---------- Component Labels: ---------- + * A - Alpha + * B - Blue + * DU - Delta U + * DV - Delta V + * E - Shared Exponent + * G - Green + * I - Intensity + * L - Luminance + * R - Red + * S - Stencil (when not followed by RGB or RGBA) + * U - Chrominance + * V - Chrominance + * Y - Luma + * X - Packing bits + * Z - Depth + * + * + * + * ---------- Type C Compression Types: ---------- + * DXT1 - Color component labels shall be given + * DXT3 - Color component labels shall be given + * DXT5 - Color component labels shall be given + * ETC1 - No other information required + * ETC2 - No other information required + * FXT1 - Color component labels shall be given + * FXT3 - Color component labels shall be given + * LATC1 - Fundamental data type shall be given + * LATC2 - Fundamental data type shall be given + * RGTC1 - Color component labels and data type shall be given + * RGTC2 - Color component labels and data type shall be given + * + * + * + * ---------- Storage Types: ---------- + * FLOAT + * SINT + * UINT + * SNORM + * UNORM + * SRGB - RGB components, or L are UNORMs in sRGB color space. + * Alpha, if present is linear. + * + * + * ---------- Type A Format List (based on format_unpack.c): + * BGR_UNORM8 + * RGB_UNORM8 + * A_UNORM8 + * A_UNORM16 + * L_UNORM8 + * L_UNORM16 + * I_UNORM8 + * I_UNOMR16 + * R_UNORM8 + * R_UNORM16 + * Z_UNORM16 + * Z_UNORM32 + * Z_FLOAT32 + * S_UINT8 + * BGR_SRGB8 + * L_SRGB8 + * RGBA_FLOAT32 + * RGBA_FLOAT16 + * RGB_FLOAT32 + * RGB_FLOAT16 + * A_FLOAT32 + * A_FLOAT16 + * L_FLOAT32 + * L_FLOAT16 + * LA_FLOAT32 + * LA_FLOAT16 + * I_FLOAT32 + * I_FLOAT16 + * R_FLOAT32 + * R_FLOAT16 + * RG_FLOAT32 + * RG_FLOAT16 + * A_UINT8 + * A_UINT16 + * A_UINT32 + * A_SINT8 + * A_SINT16 + * A_SINT32 + * I_UINT8 + * I_UINT16 + * I_UINT32 + * I_SINT8 + * I_SINT16 + * I_SINT32 + * L_UINT8 + * L_UINT16 + * L_UINT32 + * L_SINT8 + * L_SINT16 + * L_SINT32 + * LA_UINT8 + * LA_UINT16 + * LA_UINT32 + * LA_SINT8 + * LA_SINT16 + * LA_SINT32 + * R_SINT8 + * RG_SINT8 + * RGB_SINT8 + * RGBA_SINT8 + * R_SINT16 + * RG_SINT16 + * RGB_SINT16 + * RGBA_SINT16 + * R_SINT32 + * RG_SINT32 + * RGB_SINT32 + * RGBA_SINT32 + * R_SINT16 + * R_SINT32 + * R_UINT8 + * RG_UINT8 + * RGB_UINT8 + * RGBA_UINT8 + * R_UINT16 + * RG_UINT16 + * RGB_UINT16 + * RGBA_UINT16 + * R_UINT32 + * RG_UINT32 + * RGB_UINT32 + * RGBA_UINT32 + * R_UINT16 + * R_UINT32 + * R_SNORM8 + * R_SNORM16 + * RGB_SNORM16 + * RGBA_SNORM16 + * RGBA_UNORM16 + * A_SNORM8 + * L_SNORM8 + * I_SNORM8 + * A_SNORM16 + * L_SNORM16 + * LA_SNORM16 + * I_SNORM16 + * RGBX_UINT8 + * RGBX_SINT8 + * RGBX_UNORM16 + * RGBX_SNORM16 + * RGBX_FLOAT16 + * RGBX_UINT16 + * RGBX_SINT16 + * RGBX_FLOAT32 + * RGBX_UINT32 + * RGBX_SINT32 + * + * + * + * ---------- Type P Format List (based on format_unpack.c): + * A8B8G8R8_UNORM + * R8G8B8A8_UNORM + * B8G8R8A8_UNORM + * A8R8G8B8_UNORM + * X8B8G8R8_UNORM + * R8G8B8X8_UNORM + * B8G8R8X8_UNORM + * X8R8G8B8_UNORM + * B5G6R5_UNORM + * R5G6B5_UNORM + * B4G4R4A4_UNORM + * A4R4G4B4_UNORM + * A1B5G5R5_UNORM + * B5G5R5A1_UNORM + * A1R5G5B5_UNORM + * L4A4_UNORM + * L8A8_UNORM + * A8L8_UNORM + * L16A16_UNORM + * A16L16_UNORM + * B2G3R3_UNORM + * YCBCR + * YCBCR_REV + * R8G8_UNORM + * G8R8_UNORM + * R16G16_UNORM + * G16R16_UNORM + * B10G10R10A2_UNORM + * B10G10R10A2_UINT + * R10G10B10A2_UINT + * S8_UINT_Z24_UNORM + * Z24_UNORM_S8_UINT + * Z24_UNORM_X8_UINT + * X8_UINT_Z24_UNORM + * Z32_FLOAT_S8X24_UINT + * A8R8G8B8_SRGB + * B8G8R8A8_SRGB + * L8A8_SRGB + * R8G8_SNORM + * X8B8G8R8_SNORM + * A8B8G8R8_SNORM + * R8G8B8A8_SNORM + * R16G16_SNORM + * L8A8_SNORM + * R9G9B9E5_FLOAT + * R11G11B10_FLOAT + * B4G4R4X4_UNORM + * B5G5R5X1_UNORM + * R8G8_SNORM + * R8G8B8X8_SNORM + * R8G8B8X8_SRGB + * B10G10R10X2_UNORM + * R10G10B10A2_UNORM + * G8R8_SINT + * G16R16_SINT + * */ /*@{*/ - /* msb <------ TEXEL BITS -----------> lsb */ - /* ---- ---- ---- ---- ---- ---- ---- ---- */ - MESA_FORMAT_RGBA8888, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ - MESA_FORMAT_RGBA8888_REV, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_ARGB8888, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_ARGB8888_REV, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ - MESA_FORMAT_RGBX8888, /* RRRR RRRR GGGG GGGG BBBB BBBB XXXX XXXX */ - MESA_FORMAT_RGBX8888_REV, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_XRGB8888, /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_XRGB8888_REV, /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */ - MESA_FORMAT_RGB888, /* RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_BGR888, /* BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_RGB565, /* RRRR RGGG GGGB BBBB */ - MESA_FORMAT_RGB565_REV, /* GGGB BBBB RRRR RGGG */ - MESA_FORMAT_ARGB4444, /* AAAA RRRR GGGG BBBB */ - MESA_FORMAT_ARGB4444_REV, /* GGGG BBBB AAAA RRRR */ - MESA_FORMAT_RGBA5551, /* RRRR RGGG GGBB BBBA */ - MESA_FORMAT_ARGB1555, /* ARRR RRGG GGGB BBBB */ - MESA_FORMAT_ARGB1555_REV, /* GGGB BBBB ARRR RRGG */ - MESA_FORMAT_AL44, /* AAAA LLLL */ - MESA_FORMAT_AL88, /* AAAA AAAA LLLL LLLL */ - MESA_FORMAT_AL88_REV, /* LLLL LLLL AAAA AAAA */ - MESA_FORMAT_AL1616, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ - MESA_FORMAT_AL1616_REV, /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */ - MESA_FORMAT_RGB332, /* RRRG GGBB */ - MESA_FORMAT_A8, /* AAAA AAAA */ - MESA_FORMAT_A16, /* AAAA AAAA AAAA AAAA */ - MESA_FORMAT_L8, /* LLLL LLLL */ - MESA_FORMAT_L16, /* LLLL LLLL LLLL LLLL */ - MESA_FORMAT_I8, /* IIII IIII */ - MESA_FORMAT_I16, /* IIII IIII IIII IIII */ - MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ - MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ - MESA_FORMAT_R8, /* RRRR RRRR */ - MESA_FORMAT_GR88, /* GGGG GGGG RRRR RRRR */ - MESA_FORMAT_RG88, /* RRRR RRRR GGGG GGGG */ - MESA_FORMAT_R16, /* RRRR RRRR RRRR RRRR */ - MESA_FORMAT_GR1616, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ - MESA_FORMAT_RG1616, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ - MESA_FORMAT_ARGB2101010, /* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ - MESA_FORMAT_Z24_S8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ - MESA_FORMAT_S8_Z24, /* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_Z16, /* ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_X8_Z24, /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_Z24_X8, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */ - MESA_FORMAT_Z32, /* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ - MESA_FORMAT_S8, /* SSSS SSSS */ + + /* Type P formats */ /* msb <------ TEXEL BITS -----------> lsb */ + /* ---- ---- ---- ---- ---- ---- ---- ---- */ + MESA_FORMAT_A8B8G8R8_UNORM, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ + MESA_FORMAT_R8G8B8A8_UNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ + MESA_FORMAT_B8G8R8A8_UNORM, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ + MESA_FORMAT_A8R8G8B8_UNORM, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ + MESA_FORMAT_X8B8G8R8_UNORM, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ + MESA_FORMAT_R8G8B8X8_UNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ + MESA_FORMAT_B8G8R8X8_UNORM, /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */ + MESA_FORMAT_X8R8G8B8_UNORM, /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */ + + /* Type A formats */ + MESA_FORMAT_BGR_UNORM8, /* uchar[i * 3] = B, [i * 3 + 1] = G, [i *3 + 2] = R */ + MESA_FORMAT_RGB_UNORM8, /* uchar[i * 3] = R, [i * 3 + 1] = G, [i *3 + 2] = B */ + + /* Type P formats */ + MESA_FORMAT_B5G6R5_UNORM, /* BBBB BGGG GGGR RRRR */ + MESA_FORMAT_R5G6B5_UNORM, /* RRRR RGGG GGGB BBBB */ + MESA_FORMAT_B4G4R4A4_UNORM, /* BBBB GGGG RRRR AAAA */ + MESA_FORMAT_A4R4G4B4_UNORM, /* AAAA RRRR GGGG BBBB */ + MESA_FORMAT_A1B5G5R5_UNORM, /* ABBB BBGG GGGR RRRR */ + MESA_FORMAT_B5G5R5A1_UNORM, /* BBBB BGGG GGRR RRRA */ + MESA_FORMAT_A1R5G5B5_UNORM, /* ARRR RRGG GGGB BBBB */ + MESA_FORMAT_L4A4_UNORM, /* LLLL AAAA */ + MESA_FORMAT_L8A8_UNORM, /* LLLL LLLL AAAA AAAA */ + MESA_FORMAT_A8L8_UNORM, /* AAAA AAAA LLLL LLLL */ + MESA_FORMAT_L16A16_UNORM, /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */ + MESA_FORMAT_A16L16_UNORM, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ + MESA_FORMAT_B2G3R3_UNORM, /* BBGG GRRR */ + + /* Type A formats */ + MESA_FORMAT_A_UNORM8, /* uchar[i] = A */ + MESA_FORMAT_A_UNORM16, /* ushort[i] = A */ + MESA_FORMAT_L_UNORM8, /* uchar[i] = L */ + MESA_FORMAT_L_UNORM16, /* ushort[i] = L */ + MESA_FORMAT_I_UNORM8, /* uchar[i] = I */ + MESA_FORMAT_I_UNORM16, /* ushort[i] = I */ + + /* Type P formats */ + MESA_FORMAT_YCBCR, /* YYYY YYYY UorV UorV */ + MESA_FORMAT_YCBCR_REV, /* UorV UorV YYYY YYYY */ + + /* Type A format(s) */ + MESA_FORMAT_R_UNORM8, /* uchar[i] = R */ + + /* Type P formats */ + MESA_FORMAT_R8G8_UNORM, /* RRRR RRRR GGGG GGGG */ + MESA_FORMAT_G8R8_UNORM, /* GGGG GGGG RRRR RRRR */ + + /* Type A format(s) */ + MESA_FORMAT_R_UNORM16, /* ushort[i] = R */ + + /* Type P formats */ + MESA_FORMAT_R16G16_UNORM, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ + MESA_FORMAT_G16R16_UNORM, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ + MESA_FORMAT_B10G10R10A2_UNORM,/* BBBB BBBB BBGG GGGG GGGG RRRR RRRR RRAA */ + MESA_FORMAT_S8_UINT_Z24_UNORM,/* SSSS SSSS ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ + MESA_FORMAT_Z24_UNORM_X8_UINT,/* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ xxxx xxxx */ + + /* Type A format(s) */ + MESA_FORMAT_Z_UNORM16, /* ushort[i] = Z */ + + /* Type P formats */ + MESA_FORMAT_Z24_UNORM_S8_UINT,/* ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ SSSS SSSS */ + MESA_FORMAT_X8Z24_UNORM, /* xxxx xxxx ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ ZZZZ */ + + /* Type A formats */ + MESA_FORMAT_Z_UNORM32, /* uint[i] = Z */ + MESA_FORMAT_S_UINT8, /* uchar[i] = S */ /*@}*/ /** * \name 8-bit/channel sRGB formats */ /*@{*/ - MESA_FORMAT_SRGB8, /* RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_SRGBA8, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ - MESA_FORMAT_SARGB8, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */ - MESA_FORMAT_SL8, /* LLLL LLLL */ - MESA_FORMAT_SLA8, /* AAAA AAAA LLLL LLLL */ + /* Type A format(s) */ + MESA_FORMAT_BGR_SRGB8, /* uchar[i * 3] = B, [i * 3 + 1] = G, [i *3 + 2] = R */ + + /* Type P formats */ + MESA_FORMAT_A8B8G8R8_SRGB, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR*/ + MESA_FORMAT_B8G8R8A8_SRGB, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */ + + /* Type A format(s) */ + MESA_FORMAT_L_SRGB8, /* uchar[i] = L */ + + /* Type P formats */ + MESA_FORMAT_L8A8_SRGB, /* LLLL LLLL AAAA AAAA */ + + /* Type C formats */ MESA_FORMAT_SRGB_DXT1, MESA_FORMAT_SRGBA_DXT1, MESA_FORMAT_SRGBA_DXT3, @@ -133,6 +436,7 @@ typedef enum * \name Compressed texture formats. */ /*@{*/ + /* Type C formats */ MESA_FORMAT_RGB_FXT1, MESA_FORMAT_RGBA_FXT1, MESA_FORMAT_RGB_DXT1, @@ -145,18 +449,20 @@ typedef enum * \name Floating point texture formats. */ /*@{*/ - MESA_FORMAT_RGBA_FLOAT32, + + /* Type A formats */ + MESA_FORMAT_RGBA_FLOAT32, /* float[i * 4] = R, [i * 4 + 1] = G, [i * 4 + 2] = B, [i * 4 + 3] = A */ MESA_FORMAT_RGBA_FLOAT16, MESA_FORMAT_RGB_FLOAT32, MESA_FORMAT_RGB_FLOAT16, - MESA_FORMAT_ALPHA_FLOAT32, - MESA_FORMAT_ALPHA_FLOAT16, - MESA_FORMAT_LUMINANCE_FLOAT32, - MESA_FORMAT_LUMINANCE_FLOAT16, - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, - MESA_FORMAT_INTENSITY_FLOAT32, - MESA_FORMAT_INTENSITY_FLOAT16, + MESA_FORMAT_A_FLOAT32, + MESA_FORMAT_A_FLOAT16, + MESA_FORMAT_L_FLOAT32, + MESA_FORMAT_L_FLOAT16, + MESA_FORMAT_LA_FLOAT32, + MESA_FORMAT_LA_FLOAT16, + MESA_FORMAT_I_FLOAT32, + MESA_FORMAT_I_FLOAT16, MESA_FORMAT_R_FLOAT32, MESA_FORMAT_R_FLOAT16, MESA_FORMAT_RG_FLOAT32, @@ -168,94 +474,110 @@ typedef enum * XXX Note: these are just stand-ins for some better hardware * formats TBD such as BGRA or ARGB. */ - MESA_FORMAT_ALPHA_UINT8, - MESA_FORMAT_ALPHA_UINT16, - MESA_FORMAT_ALPHA_UINT32, - MESA_FORMAT_ALPHA_INT8, - MESA_FORMAT_ALPHA_INT16, - MESA_FORMAT_ALPHA_INT32, - - MESA_FORMAT_INTENSITY_UINT8, - MESA_FORMAT_INTENSITY_UINT16, - MESA_FORMAT_INTENSITY_UINT32, - MESA_FORMAT_INTENSITY_INT8, - MESA_FORMAT_INTENSITY_INT16, - MESA_FORMAT_INTENSITY_INT32, - - MESA_FORMAT_LUMINANCE_UINT8, - MESA_FORMAT_LUMINANCE_UINT16, - MESA_FORMAT_LUMINANCE_UINT32, - MESA_FORMAT_LUMINANCE_INT8, - MESA_FORMAT_LUMINANCE_INT16, - MESA_FORMAT_LUMINANCE_INT32, - - MESA_FORMAT_LUMINANCE_ALPHA_UINT8, - MESA_FORMAT_LUMINANCE_ALPHA_UINT16, - MESA_FORMAT_LUMINANCE_ALPHA_UINT32, - MESA_FORMAT_LUMINANCE_ALPHA_INT8, - MESA_FORMAT_LUMINANCE_ALPHA_INT16, - MESA_FORMAT_LUMINANCE_ALPHA_INT32, - - MESA_FORMAT_R_INT8, - MESA_FORMAT_RG_INT8, - MESA_FORMAT_RGB_INT8, - MESA_FORMAT_RGBA_INT8, - MESA_FORMAT_R_INT16, - MESA_FORMAT_RG_INT16, - MESA_FORMAT_RGB_INT16, - MESA_FORMAT_RGBA_INT16, - MESA_FORMAT_R_INT32, - MESA_FORMAT_RG_INT32, - MESA_FORMAT_RGB_INT32, - MESA_FORMAT_RGBA_INT32, + + /* Type A formats */ + MESA_FORMAT_A_UINT8, + MESA_FORMAT_A_UINT16, + MESA_FORMAT_A_UINT32, + MESA_FORMAT_A_SINT8, + MESA_FORMAT_A_SINT16, + MESA_FORMAT_A_SINT32, + + MESA_FORMAT_I_UINT8, + MESA_FORMAT_I_UINT16, + MESA_FORMAT_I_UINT32, + MESA_FORMAT_I_SINT8, + MESA_FORMAT_I_SINT16, + MESA_FORMAT_I_SINT32, + + MESA_FORMAT_L_UINT8, + MESA_FORMAT_L_UINT16, + MESA_FORMAT_L_UINT32, + MESA_FORMAT_L_SINT8, + MESA_FORMAT_L_SINT16, + MESA_FORMAT_L_SINT32, + MESA_FORMAT_LA_UINT8, + MESA_FORMAT_LA_UINT16, + MESA_FORMAT_LA_UINT32, + MESA_FORMAT_LA_SINT8, + MESA_FORMAT_LA_SINT16, + MESA_FORMAT_LA_SINT32, + + MESA_FORMAT_R_SINT8, + MESA_FORMAT_RG_SINT8, + MESA_FORMAT_RGB_SINT8, + MESA_FORMAT_RGBA_SINT8, + MESA_FORMAT_R_SINT16, + MESA_FORMAT_RG_SINT16, + MESA_FORMAT_RGB_SINT16, + MESA_FORMAT_RGBA_SINT16, + + MESA_FORMAT_R_SINT32, + MESA_FORMAT_RG_SINT32, + MESA_FORMAT_RGB_SINT32, + MESA_FORMAT_RGBA_SINT32, /** * \name Non-normalized unsigned integer formats. */ + /* Type A format(s) */ MESA_FORMAT_R_UINT8, MESA_FORMAT_RG_UINT8, MESA_FORMAT_RGB_UINT8, MESA_FORMAT_RGBA_UINT8, + MESA_FORMAT_R_UINT16, MESA_FORMAT_RG_UINT16, MESA_FORMAT_RGB_UINT16, MESA_FORMAT_RGBA_UINT16, + MESA_FORMAT_R_UINT32, MESA_FORMAT_RG_UINT32, MESA_FORMAT_RGB_UINT32, MESA_FORMAT_RGBA_UINT32, - /* msb <------ TEXEL BITS -----------> lsb */ - /* ---- ---- ---- ---- ---- ---- ---- ---- */ + /* msb <------ TEXEL BITS -----------> lsb */ + /* ---- ---- ---- ---- ---- ---- ---- ---- */ /** * \name Signed fixed point texture formats. */ /*@{*/ MESA_FORMAT_DUDV8, /* DUDU DUDU DVDV DVDV */ - MESA_FORMAT_SIGNED_R8, /* RRRR RRRR */ - MESA_FORMAT_SIGNED_RG88_REV, /* GGGG GGGG RRRR RRRR */ - MESA_FORMAT_SIGNED_RGBX8888, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ - MESA_FORMAT_SIGNED_RGBA8888, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ - MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ - MESA_FORMAT_SIGNED_R16, /* RRRR RRRR RRRR RRRR */ - MESA_FORMAT_SIGNED_GR1616, /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */ - MESA_FORMAT_SIGNED_RGB_16, /* ushort[0]=R, ushort[1]=G, ushort[2]=B */ - MESA_FORMAT_SIGNED_RGBA_16, /* ... */ - MESA_FORMAT_RGBA_16, /* ... */ + + /* Type A format(s) */ + MESA_FORMAT_R_SNORM8, /* char[i] = R */ + + /* Type P formats */ + MESA_FORMAT_R8G8_SNORM, /* RRRR RRRR GGGG GGGG */ + MESA_FORMAT_X8B8G8R8_SNORM, /* xxxx xxxx BBBB BBBB GGGG GGGG RRRR RRRR */ + MESA_FORMAT_A8B8G8R8_SNORM, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */ + MESA_FORMAT_R8G8B8A8_SNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */ + + /* Type A format(s) */ + MESA_FORMAT_R_SNORM16, /* short[i] = R */ + + /* Type P format(s) */ + MESA_FORMAT_R16G16_SNORM, /* RRRR RRRR RRRR RRRR GGGG GGGG GGGG GGGG */ + + /* Type A format(s) */ + MESA_FORMAT_RGB_SNORM16, /* short[i * 3] = R, [i * 3 + 1] = G, [i *3 + 2] = B */ + MESA_FORMAT_RGBA_SNORM16, /* ... */ + MESA_FORMAT_RGBA_UNORM16, /* ... */ /*@}*/ /*@{*/ - MESA_FORMAT_RED_RGTC1, - MESA_FORMAT_SIGNED_RED_RGTC1, - MESA_FORMAT_RG_RGTC2, - MESA_FORMAT_SIGNED_RG_RGTC2, + /* Type C formats */ + MESA_FORMAT_R_RGTC1_UNORM, + MESA_FORMAT_R_RGTC1_SNORM, + MESA_FORMAT_RG_RGTC2_UNORM, + MESA_FORMAT_RG_RGTC2_SNORM, /*@}*/ /*@{*/ - MESA_FORMAT_L_LATC1, - MESA_FORMAT_SIGNED_L_LATC1, - MESA_FORMAT_LA_LATC2, - MESA_FORMAT_SIGNED_LA_LATC2, + MESA_FORMAT_L_LATC1_UNORM, + MESA_FORMAT_L_LATC1_SNORM, + MESA_FORMAT_LA_LATC2_UNORM, + MESA_FORMAT_LA_LATC2_SNORM, /*@}*/ MESA_FORMAT_ETC1_RGB8, @@ -270,117 +592,133 @@ typedef enum MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1, MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1, - MESA_FORMAT_SIGNED_A8, /* AAAA AAAA */ - MESA_FORMAT_SIGNED_L8, /* LLLL LLLL */ - MESA_FORMAT_SIGNED_AL88, /* AAAA AAAA LLLL LLLL */ - MESA_FORMAT_SIGNED_I8, /* IIII IIII */ - MESA_FORMAT_SIGNED_A16, /* AAAA AAAA AAAA AAAA */ - MESA_FORMAT_SIGNED_L16, /* LLLL LLLL LLLL LLLL */ - MESA_FORMAT_SIGNED_AL1616, /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */ - MESA_FORMAT_SIGNED_I16, /* IIII IIII IIII IIII */ - - MESA_FORMAT_RGB9_E5_FLOAT, - MESA_FORMAT_R11_G11_B10_FLOAT, - - MESA_FORMAT_Z32_FLOAT, - MESA_FORMAT_Z32_FLOAT_X24S8, - - MESA_FORMAT_ARGB2101010_UINT, - MESA_FORMAT_ABGR2101010_UINT, - - 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_ABGR2101010, - - MESA_FORMAT_SIGNED_RG88, - MESA_FORMAT_SIGNED_RG1616, + /* Type A format(s) */ + MESA_FORMAT_A_SNORM8, /* char[i] = A */ + MESA_FORMAT_L_SNORM8, /* char[i] = L */ + + /* Type P format(s) */ + MESA_FORMAT_L8A8_SNORM, /* LLLL LLLL AAAA AAAA */ + + /* Type A format(s) */ + MESA_FORMAT_I_SNORM8, /* char[i] = I */ + MESA_FORMAT_A_SNORM16, /* short[i] = A */ + MESA_FORMAT_L_SNORM16, /* short[i] = L */ + MESA_FORMAT_LA_SNORM16, /* short[i * 2] = L, [i * 2 + 1] = A */ + MESA_FORMAT_I_SNORM16, /* short[i] = I */ + + /* Type P format(s) */ + MESA_FORMAT_R9G9B9E5_FLOAT, + MESA_FORMAT_R11G11B10_FLOAT, + + /* Type A format(s) */ + MESA_FORMAT_Z_FLOAT32, + + /* Type P formats */ + MESA_FORMAT_Z32_FLOAT_S8X24_UINT, + + MESA_FORMAT_B10G10R10A2_UINT, + MESA_FORMAT_R10G10B10A2_UINT, + + MESA_FORMAT_B4G4R4X4_UNORM, /* BBBB GGGG RRRR xxxx */ + MESA_FORMAT_B5G5R5X1_UNORM, /* BBBB BGGG GGRR RRRx */ + MESA_FORMAT_R8G8B8X8_SNORM, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ + MESA_FORMAT_R8G8B8X8_SRGB, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */ + + /* Type A formats */ + MESA_FORMAT_RGBX_UINT8, /* uchar[i * 4] = R, [i * 4 + 1] = G, [i * 4 + 2] = B, [i * 4 + 3] = x */ + MESA_FORMAT_RGBX_SINT8, /* char[i * 4] = R, [i * 4 + 1] = G, [i * 4 + 2] = B, [i * 4 + 3] = x */ + + /* Type P format(s) */ + MESA_FORMAT_B10G10R10X2_UNORM,/* xxRR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */ + + /* Type A formats */ + MESA_FORMAT_RGBX_UNORM16, /* ushort[i * 4] = R, [i * 4 + 1] = G, [i * 4 + 2] = B, [i * 4 + 3] = x */ + MESA_FORMAT_RGBX_SNORM16, /* ... */ + MESA_FORMAT_RGBX_FLOAT16, /* ... */ + MESA_FORMAT_RGBX_UINT16, /* ... */ + MESA_FORMAT_RGBX_SINT16, /* ... */ + + MESA_FORMAT_RGBX_FLOAT32, /* float[i * 4] = R, [i * 4 + 1] = G, [i * 4 + 2] = B, [i * 4 + 3] = x */ + MESA_FORMAT_RGBX_UINT32, /* ... */ + MESA_FORMAT_RGBX_SINT32, /* ... */ + + /* Type P formats */ + MESA_FORMAT_R10G10B10A2_UNORM, + MESA_FORMAT_G8R8_SNORM, + MESA_FORMAT_G16R16_SNORM, MESA_FORMAT_COUNT -} gl_format; +} mesa_format; extern const char * -_mesa_get_format_name(gl_format format); +_mesa_get_format_name(mesa_format format); extern GLint -_mesa_get_format_bytes(gl_format format); +_mesa_get_format_bytes(mesa_format format); extern GLint -_mesa_get_format_bits(gl_format format, GLenum pname); +_mesa_get_format_bits(mesa_format format, GLenum pname); extern GLuint -_mesa_get_format_max_bits(gl_format format); +_mesa_get_format_max_bits(mesa_format format); extern GLenum -_mesa_get_format_datatype(gl_format format); +_mesa_get_format_datatype(mesa_format format); extern GLenum -_mesa_get_format_base_format(gl_format format); +_mesa_get_format_base_format(mesa_format format); extern void -_mesa_get_format_block_size(gl_format format, GLuint *bw, GLuint *bh); +_mesa_get_format_block_size(mesa_format format, GLuint *bw, GLuint *bh); extern GLboolean -_mesa_is_format_compressed(gl_format format); +_mesa_is_format_compressed(mesa_format format); extern GLboolean -_mesa_is_format_packed_depth_stencil(gl_format format); +_mesa_is_format_packed_depth_stencil(mesa_format format); extern GLboolean -_mesa_is_format_integer_color(gl_format format); +_mesa_is_format_integer_color(mesa_format format); extern GLboolean -_mesa_is_format_unsigned(gl_format format); +_mesa_is_format_unsigned(mesa_format format); extern GLboolean -_mesa_is_format_signed(gl_format format); +_mesa_is_format_signed(mesa_format format); extern GLenum -_mesa_get_format_color_encoding(gl_format format); +_mesa_get_format_color_encoding(mesa_format format); extern GLuint -_mesa_format_image_size(gl_format format, GLsizei width, +_mesa_format_image_size(mesa_format format, GLsizei width, GLsizei height, GLsizei depth); extern uint64_t -_mesa_format_image_size64(gl_format format, GLsizei width, +_mesa_format_image_size64(mesa_format format, GLsizei width, GLsizei height, GLsizei depth); extern GLint -_mesa_format_row_stride(gl_format format, GLsizei width); +_mesa_format_row_stride(mesa_format format, GLsizei width); extern void -_mesa_format_to_type_and_comps(gl_format format, +_mesa_format_to_type_and_comps(mesa_format format, GLenum *datatype, GLuint *comps); extern void _mesa_test_formats(void); -extern gl_format -_mesa_get_srgb_format_linear(gl_format format); +extern mesa_format +_mesa_get_srgb_format_linear(mesa_format format); -extern gl_format -_mesa_get_uncompressed_format(gl_format format); +extern mesa_format +_mesa_get_uncompressed_format(mesa_format format); extern GLuint -_mesa_format_num_components(gl_format format); +_mesa_format_num_components(mesa_format format); GLboolean -_mesa_format_matches_format_and_type(gl_format gl_format, +_mesa_format_matches_format_and_type(mesa_format mesa_format, GLenum format, GLenum type, GLboolean swapBytes); diff --git a/mesalib/src/mesa/main/framebuffer.c b/mesalib/src/mesa/main/framebuffer.c index bd8f4933f..54eeda2b2 100644 --- a/mesalib/src/mesa/main/framebuffer.c +++ b/mesalib/src/mesa/main/framebuffer.c @@ -469,7 +469,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx, if (fb->Attachment[i].Renderbuffer) { const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer; const GLenum baseFormat = _mesa_get_format_base_format(rb->Format); - const gl_format fmt = rb->Format; + const mesa_format fmt = rb->Format; /* Grab samples and sampleBuffers from any attachment point (assuming * the framebuffer is complete, we'll get the same answer from all @@ -496,7 +496,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx, for (i = 0; i < BUFFER_COUNT; i++) { if (fb->Attachment[i].Renderbuffer) { const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer; - const gl_format fmt = rb->Format; + const mesa_format fmt = rb->Format; if (_mesa_get_format_datatype(fmt) == GL_FLOAT) { fb->Visual.floatMode = GL_TRUE; @@ -508,7 +508,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx, if (fb->Attachment[BUFFER_DEPTH].Renderbuffer) { const struct gl_renderbuffer *rb = fb->Attachment[BUFFER_DEPTH].Renderbuffer; - const gl_format fmt = rb->Format; + const mesa_format fmt = rb->Format; fb->Visual.haveDepthBuffer = GL_TRUE; fb->Visual.depthBits = _mesa_get_format_bits(fmt, GL_DEPTH_BITS); } @@ -516,7 +516,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx, if (fb->Attachment[BUFFER_STENCIL].Renderbuffer) { const struct gl_renderbuffer *rb = fb->Attachment[BUFFER_STENCIL].Renderbuffer; - const gl_format fmt = rb->Format; + const mesa_format fmt = rb->Format; fb->Visual.haveStencilBuffer = GL_TRUE; fb->Visual.stencilBits = _mesa_get_format_bits(fmt, GL_STENCIL_BITS); } @@ -524,7 +524,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx, if (fb->Attachment[BUFFER_ACCUM].Renderbuffer) { const struct gl_renderbuffer *rb = fb->Attachment[BUFFER_ACCUM].Renderbuffer; - const gl_format fmt = rb->Format; + const mesa_format fmt = rb->Format; fb->Visual.haveAccumBuffer = GL_TRUE; fb->Visual.accumRedBits = _mesa_get_format_bits(fmt, GL_RED_BITS); fb->Visual.accumGreenBits = _mesa_get_format_bits(fmt, GL_GREEN_BITS); @@ -840,9 +840,9 @@ _mesa_get_color_read_format(struct gl_context *ctx) const GLenum format = ctx->ReadBuffer->_ColorReadBuffer->Format; const GLenum data_type = _mesa_get_format_datatype(format); - if (format == MESA_FORMAT_ARGB8888) + if (format == MESA_FORMAT_B8G8R8A8_UNORM) return GL_BGRA; - else if (format == MESA_FORMAT_RGB565) + else if (format == MESA_FORMAT_B5G6R5_UNORM) return GL_BGR; switch (data_type) { @@ -875,7 +875,7 @@ _mesa_get_color_read_type(struct gl_context *ctx) const GLenum format = ctx->ReadBuffer->_ColorReadBuffer->Format; const GLenum data_type = _mesa_get_format_datatype(format); - if (format == MESA_FORMAT_RGB565) + if (format == MESA_FORMAT_B5G6R5_UNORM) return GL_UNSIGNED_SHORT_5_6_5_REV; switch (data_type) { diff --git a/mesalib/src/mesa/main/genmipmap.c b/mesalib/src/mesa/main/genmipmap.c new file mode 100644 index 000000000..dcd482da2 --- /dev/null +++ b/mesalib/src/mesa/main/genmipmap.c @@ -0,0 +1,131 @@ +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2013 VMware, Inc. 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 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * glGenerateMipmap function + */ + +#include "context.h" +#include "enums.h" +#include "genmipmap.h" +#include "glformats.h" +#include "macros.h" +#include "mtypes.h" +#include "teximage.h" +#include "texobj.h" + + +/** + * Generate all the mipmap levels below the base level. + * Note: this GL function would be more useful if one could specify a + * cube face, a set of array slices, etc. + */ +void GLAPIENTRY +_mesa_GenerateMipmap(GLenum target) +{ + struct gl_texture_image *srcImage; + struct gl_texture_object *texObj; + GLboolean error; + + GET_CURRENT_CONTEXT(ctx); + + FLUSH_VERTICES(ctx, 0); + + switch (target) { + case GL_TEXTURE_1D: + error = _mesa_is_gles(ctx); + break; + case GL_TEXTURE_2D: + error = GL_FALSE; + break; + case GL_TEXTURE_3D: + error = ctx->API == API_OPENGLES; + break; + case GL_TEXTURE_CUBE_MAP: + error = !ctx->Extensions.ARB_texture_cube_map; + break; + case GL_TEXTURE_1D_ARRAY: + error = _mesa_is_gles(ctx) || !ctx->Extensions.EXT_texture_array; + break; + case GL_TEXTURE_2D_ARRAY: + error = (_mesa_is_gles(ctx) && ctx->Version < 30) + || !ctx->Extensions.EXT_texture_array; + break; + default: + error = GL_TRUE; + } + + if (error) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGenerateMipmapEXT(target=%s)", + _mesa_lookup_enum_by_nr(target)); + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + if (texObj->BaseLevel >= texObj->MaxLevel) { + /* nothing to do */ + return; + } + + if (texObj->Target == GL_TEXTURE_CUBE_MAP && + !_mesa_cube_complete(texObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGenerateMipmap(incomplete cube map)"); + return; + } + + _mesa_lock_texture(ctx, texObj); + + srcImage = _mesa_select_tex_image(ctx, texObj, target, texObj->BaseLevel); + if (!srcImage) { + _mesa_unlock_texture(ctx, texObj); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGenerateMipmap(zero size base image)"); + return; + } + + if (_mesa_is_enum_format_integer(srcImage->InternalFormat) || + _mesa_is_depthstencil_format(srcImage->InternalFormat) || + _mesa_is_stencil_format(srcImage->InternalFormat)) { + _mesa_unlock_texture(ctx, texObj); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGenerateMipmap(invalid internal format)"); + return; + } + + if (target == GL_TEXTURE_CUBE_MAP) { + GLuint face; + for (face = 0; face < 6; face++) + ctx->Driver.GenerateMipmap(ctx, + GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + face, + texObj); + } + else { + ctx->Driver.GenerateMipmap(ctx, target, texObj); + } + _mesa_unlock_texture(ctx, texObj); +} diff --git a/mesalib/src/mesa/main/genmipmap.h b/mesalib/src/mesa/main/genmipmap.h new file mode 100644 index 000000000..d546a8d7b --- /dev/null +++ b/mesalib/src/mesa/main/genmipmap.h @@ -0,0 +1,36 @@ +/* + * Mesa 3-D graphics library + * + * 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 + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION 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 GENMIPMAP_H +#define GENMIPMAP_H + +#include "glheader.h" + + +extern void GLAPIENTRY +_mesa_GenerateMipmap(GLenum target); + + +#endif /* GENMIPMAP_H */ diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c index 16dce5b65..54f7d7745 100644 --- a/mesalib/src/mesa/main/get.c +++ b/mesalib/src/mesa/main/get.c @@ -182,7 +182,7 @@ union value { #define CONTEXT_FIELD(field, type) \ LOC_CONTEXT, type, offsetof(struct gl_context, field) #define ARRAY_FIELD(field, type) \ - LOC_ARRAY, type, offsetof(struct gl_array_object, field) + LOC_ARRAY, type, offsetof(struct gl_vertex_array_object, field) #undef CONST /* already defined through windows.h */ #define CONST(value) \ LOC_CONTEXT, TYPE_CONST, value @@ -362,7 +362,6 @@ EXTRA_EXT(EXT_stencil_two_side); EXTRA_EXT(EXT_depth_bounds_test); EXTRA_EXT(ARB_depth_clamp); EXTRA_EXT(ATI_fragment_shader); -EXTRA_EXT(EXT_framebuffer_blit); EXTRA_EXT(EXT_provoking_vertex); EXTRA_EXT(ARB_fragment_shader); EXTRA_EXT(ARB_fragment_program); @@ -383,7 +382,6 @@ EXTRA_EXT(OES_EGL_image_external); EXTRA_EXT(ARB_blend_func_extended); EXTRA_EXT(ARB_uniform_buffer_object); EXTRA_EXT(ARB_timer_query); -EXTRA_EXT(ARB_map_buffer_alignment); EXTRA_EXT(ARB_texture_cube_map_array); EXTRA_EXT(ARB_texture_buffer_range); EXTRA_EXT(ARB_texture_multisample); @@ -392,6 +390,9 @@ EXTRA_EXT(ARB_shader_atomic_counters); EXTRA_EXT(ARB_draw_indirect); EXTRA_EXT(ARB_shader_image_load_store); EXTRA_EXT(ARB_viewport_array); +EXTRA_EXT(ARB_compute_shader); +EXTRA_EXT(ARB_gpu_shader5); +EXTRA_EXT2(ARB_transform_feedback3, ARB_gpu_shader5); static const int extra_ARB_color_buffer_float_or_glcore[] = { @@ -644,7 +645,7 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu case GL_TEXTURE_COORD_ARRAY_SIZE: case GL_TEXTURE_COORD_ARRAY_TYPE: case GL_TEXTURE_COORD_ARRAY_STRIDE: - array = &ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)]; + array = &ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)]; v->value_int = *(GLuint *) ((char *) array + d->offset); break; @@ -830,7 +831,7 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: buffer_obj = (struct gl_buffer_object **) - ((char *) ctx->Array.ArrayObj + d->offset); + ((char *) ctx->Array.VAO + d->offset); v->value_int = (*buffer_obj)->Name; break; case GL_ARRAY_BUFFER_BINDING_ARB: @@ -838,10 +839,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu break; case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: v->value_int = - ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].BufferObj->Name; + ctx->Array.VAO->VertexBinding[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)].BufferObj->Name; break; case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: - v->value_int = ctx->Array.ArrayObj->ElementArrayBufferObj->Name; + v->value_int = ctx->Array.VAO->IndexBufferObj->Name; break; /* ARB_copy_buffer */ @@ -882,7 +883,7 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0; break; case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES: - v->value_int = ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_POINT_SIZE].BufferObj->Name; + v->value_int = ctx->Array.VAO->VertexBinding[VERT_ATTRIB_POINT_SIZE].BufferObj->Name; break; case GL_FOG_COLOR: @@ -1190,7 +1191,7 @@ find_value(const char *func, GLenum pname, void **p, union value *v) *p = ((char *) ctx + d->offset); return d; case LOC_ARRAY: - *p = ((char *) ctx->Array.ArrayObj + d->offset); + *p = ((char *) ctx->Array.VAO + d->offset); return d; case LOC_TEXUNIT: unit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; @@ -1853,7 +1854,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) goto invalid_enum; if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) goto invalid_value; - v->value_int = ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_GENERIC(index)].InstanceDivisor; + v->value_int = ctx->Array.VAO->VertexBinding[VERT_ATTRIB_GENERIC(index)].InstanceDivisor; return TYPE_INT; case GL_VERTEX_BINDING_OFFSET: @@ -1861,7 +1862,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) goto invalid_enum; if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) goto invalid_value; - v->value_int = ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_GENERIC(index)].Offset; + v->value_int = ctx->Array.VAO->VertexBinding[VERT_ATTRIB_GENERIC(index)].Offset; return TYPE_INT; case GL_VERTEX_BINDING_STRIDE: @@ -1869,7 +1870,7 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) goto invalid_enum; if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) goto invalid_value; - v->value_int = ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_GENERIC(index)].Stride; + v->value_int = ctx->Array.VAO->VertexBinding[VERT_ATTRIB_GENERIC(index)].Stride; /* ARB_shader_image_load_store */ case GL_IMAGE_BINDING_NAME: { @@ -1929,6 +1930,22 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) v->value_int = ctx->ImageUnits[index].Format; return TYPE_INT; + + case GL_MAX_COMPUTE_WORK_GROUP_COUNT: + if (!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_compute_shader) + goto invalid_enum; + if (index >= 3) + goto invalid_value; + v->value_int = ctx->Const.MaxComputeWorkGroupCount[index]; + return TYPE_INT; + + case GL_MAX_COMPUTE_WORK_GROUP_SIZE: + if (!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_compute_shader) + goto invalid_enum; + if (index >= 3) + goto invalid_value; + v->value_int = ctx->Const.MaxComputeWorkGroupSize[index]; + return TYPE_INT; } invalid_enum: diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py index b45e1430b..f47cbd881 100644 --- a/mesalib/src/mesa/main/get_hash_params.py +++ b/mesalib/src/mesa/main/get_hash_params.py @@ -221,9 +221,9 @@ descriptor=[ [ "SAMPLE_ALPHA_TO_ONE_ARB", "CONTEXT_BOOL(Multisample.SampleAlphaToOne), NO_EXTRA" ], # GL_ARB_vertex_buffer_object - [ "VERTEX_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_POS].BufferObj), NO_EXTRA" ], - [ "NORMAL_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_NORMAL].BufferObj), NO_EXTRA" ], - [ "COLOR_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_COLOR0].BufferObj), NO_EXTRA" ], + [ "VERTEX_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_POS].BufferObj), NO_EXTRA" ], + [ "NORMAL_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_NORMAL].BufferObj), NO_EXTRA" ], + [ "COLOR_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_COLOR0].BufferObj), NO_EXTRA" ], [ "TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, NO_OFFSET, NO_EXTRA" ], # GL_OES_point_sprite @@ -365,7 +365,7 @@ descriptor=[ # GL_EXT_framebuffer_blit # NOTE: GL_DRAW_FRAMEBUFFER_BINDING_EXT == GL_FRAMEBUFFER_BINDING_EXT - [ "READ_FRAMEBUFFER_BINDING_EXT", "LOC_CUSTOM, TYPE_INT, 0, extra_EXT_framebuffer_blit" ], + [ "READ_FRAMEBUFFER_BINDING_EXT", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ], # GL_EXT_gpu_shader4 / GLSL 1.30 [ "MIN_PROGRAM_TEXEL_OFFSET", "CONTEXT_INT(Const.MinProgramTexelOffset), extra_GLSL_130_es3" ], @@ -583,10 +583,10 @@ descriptor=[ [ "PRIMITIVE_RESTART_INDEX_NV", "CONTEXT_INT(Array.RestartIndex), extra_NV_primitive_restart" ], # GL_ARB_vertex_buffer_object - [ "INDEX_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_COLOR_INDEX].BufferObj), NO_EXTRA" ], - [ "EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_EDGEFLAG].BufferObj), NO_EXTRA" ], - [ "SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_COLOR1].BufferObj), NO_EXTRA" ], - [ "FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_object, VertexBinding[VERT_ATTRIB_FOG].BufferObj), NO_EXTRA" ], + [ "INDEX_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_COLOR_INDEX].BufferObj), NO_EXTRA" ], + [ "EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_EDGEFLAG].BufferObj), NO_EXTRA" ], + [ "SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_COLOR1].BufferObj), NO_EXTRA" ], + [ "FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_vertex_array_object, VertexBinding[VERT_ATTRIB_FOG].BufferObj), NO_EXTRA" ], # GL_ARB_vertex_program # == GL_VERTEX_PROGRAM_NV @@ -643,7 +643,7 @@ descriptor=[ # 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" ], + [ "MAX_VERTEX_STREAMS", "CONTEXT_INT(Const.MaxVertexStreams), extra_ARB_transform_feedback3_ARB_gpu_shader5" ], # GL_ARB_geometry_shader4 [ "MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits), extra_gl32_ARB_geometry_shader4" ], @@ -716,7 +716,7 @@ descriptor=[ [ "TIMESTAMP", "LOC_CUSTOM, TYPE_INT64, 0, extra_ARB_timer_query" ], # GL_ARB_map_buffer_alignment - [ "MIN_MAP_BUFFER_ALIGNMENT", "CONTEXT_INT(Const.MinMapBufferAlignment), extra_ARB_map_buffer_alignment" ], + [ "MIN_MAP_BUFFER_ALIGNMENT", "CONTEXT_INT(Const.MinMapBufferAlignment), NO_EXTRA" ], # GL_ARB_texture_cube_map_array [ "TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_CUBE_ARRAY_INDEX, extra_ARB_texture_cube_map_array" ], @@ -751,6 +751,15 @@ descriptor=[ [ "MAX_GEOMETRY_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxImageUniforms), extra_ARB_shader_image_load_store_and_geometry_shader"], [ "MAX_FRAGMENT_IMAGE_UNIFORMS", "CONTEXT_INT(Const.Program[MESA_SHADER_FRAGMENT].MaxImageUniforms), extra_ARB_shader_image_load_store"], [ "MAX_COMBINED_IMAGE_UNIFORMS", "CONTEXT_INT(Const.MaxCombinedImageUniforms), extra_ARB_shader_image_load_store"], + +# GL_ARB_compute_shader + [ "MAX_COMPUTE_WORK_GROUP_INVOCATIONS", "CONTEXT_INT(Const.MaxComputeWorkGroupInvocations), extra_ARB_compute_shader" ], + +# GL_ARB_gpu_shader5 + [ "MAX_GEOMETRY_SHADER_INVOCATIONS", "CONST(MAX_GEOMETRY_SHADER_INVOCATIONS), extra_ARB_gpu_shader5" ], + [ "MIN_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5" ], + [ "MAX_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5" ], + [ "FRAGMENT_INTERPOLATION_OFFSET_BITS", "CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5" ], ]}, # Enums restricted to OpenGL Core profile diff --git a/mesalib/src/mesa/main/getstring.c b/mesalib/src/mesa/main/getstring.c index b66e24788..674126702 100644 --- a/mesalib/src/mesa/main/getstring.c +++ b/mesalib/src/mesa/main/getstring.c @@ -200,42 +200,42 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params ) case GL_VERTEX_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POS].Ptr; break; case GL_NORMAL_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr; break; case GL_COLOR_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr; break; case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: if (ctx->API != API_OPENGL_COMPAT) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr; break; case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: if (ctx->API != API_OPENGL_COMPAT) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_FOG].Ptr; break; case GL_INDEX_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr; break; case GL_TEXTURE_COORD_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(clientUnit)].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_TEX(clientUnit)].Ptr; break; case GL_EDGE_FLAG_ARRAY_POINTER: if (ctx->API != API_OPENGL_COMPAT) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr; break; case GL_FEEDBACK_BUFFER_POINTER: if (ctx->API != API_OPENGL_COMPAT) @@ -250,7 +250,7 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params ) case GL_POINT_SIZE_ARRAY_POINTER_OES: if (ctx->API != API_OPENGLES) goto invalid_pname; - *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Ptr; + *params = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Ptr; break; case GL_DEBUG_CALLBACK_FUNCTION_ARB: if (!_mesa_is_desktop_gl(ctx)) diff --git a/mesalib/src/mesa/main/matrix.c b/mesalib/src/mesa/main/matrix.c index b2130221f..99a501321 100644 --- a/mesalib/src/mesa/main/matrix.c +++ b/mesalib/src/mesa/main/matrix.c @@ -606,16 +606,8 @@ calculate_model_project_matrix( struct gl_context *ctx ) */ void _mesa_update_modelview_project( struct gl_context *ctx, GLuint new_state ) { - if (new_state & _NEW_MODELVIEW) { + if (new_state & _NEW_MODELVIEW) _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - - /* Bring cull position up to date. - */ - TRANSFORM_POINT3( ctx->Transform.CullObjPos, - ctx->ModelviewMatrixStack.Top->inv, - ctx->Transform.CullEyePos ); - } - if (new_state & _NEW_PROJECTION) update_projection( ctx ); @@ -762,9 +754,6 @@ void _mesa_init_transform( struct gl_context *ctx ) ASSIGN_4V( ctx->Transform.EyeUserPlane[i], 0.0, 0.0, 0.0, 0.0 ); } ctx->Transform.ClipPlanesEnabled = 0; - - ASSIGN_4V( ctx->Transform.CullObjPos, 0.0, 0.0, 1.0, 0.0 ); - ASSIGN_4V( ctx->Transform.CullEyePos, 0.0, 0.0, 1.0, 0.0 ); } diff --git a/mesalib/src/mesa/main/mipmap.c b/mesalib/src/mesa/main/mipmap.c index 033015780..521b2d8eb 100644 --- a/mesalib/src/mesa/main/mipmap.c +++ b/mesalib/src/mesa/main/mipmap.c @@ -1816,7 +1816,7 @@ GLboolean _mesa_prepare_mipmap_level(struct gl_context *ctx, struct gl_texture_object *texObj, GLuint level, GLsizei width, GLsizei height, GLsizei depth, - GLsizei border, GLenum intFormat, gl_format format) + GLsizei border, GLenum intFormat, mesa_format format) { const GLuint numFaces = _mesa_num_tex_faces(texObj->Target); GLuint face; @@ -2018,7 +2018,7 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target, GLuint maxLevel) { GLuint level; - gl_format temp_format; + mesa_format temp_format; GLint components; GLuint temp_src_row_stride, temp_src_img_stride; /* in bytes */ GLubyte *temp_src = NULL, *temp_dst = NULL; diff --git a/mesalib/src/mesa/main/mipmap.h b/mesalib/src/mesa/main/mipmap.h index ee91df006..c0366d329 100644 --- a/mesalib/src/mesa/main/mipmap.h +++ b/mesalib/src/mesa/main/mipmap.h @@ -45,7 +45,7 @@ extern GLboolean _mesa_prepare_mipmap_level(struct gl_context *ctx, struct gl_texture_object *texObj, GLuint level, GLsizei width, GLsizei height, GLsizei depth, - GLsizei border, GLenum intFormat, gl_format format); + GLsizei border, GLenum intFormat, mesa_format format); extern void _mesa_generate_mipmap(struct gl_context *ctx, GLenum target, diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index 9ab2de026..ceabd9df7 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -406,9 +406,10 @@ typedef enum MESA_SHADER_VERTEX = 0, MESA_SHADER_GEOMETRY = 1, MESA_SHADER_FRAGMENT = 2, + MESA_SHADER_COMPUTE = 3, } gl_shader_stage; -#define MESA_SHADER_STAGES (MESA_SHADER_FRAGMENT + 1) +#define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1) /** @@ -1115,7 +1116,7 @@ struct gl_texture_image * GL_DEPTH_STENCIL_EXT only. Used for * choosing TexEnv arithmetic. */ - gl_format TexFormat; /**< The actual texture memory format */ + mesa_format TexFormat; /**< The actual texture memory format */ GLuint Border; /**< 0 or 1 */ GLuint Width; /**< = 2^WidthLog2 + 2*Border */ @@ -1229,7 +1230,7 @@ struct gl_texture_object struct gl_buffer_object *BufferObject; GLenum BufferObjectFormat; /** Equivalent Mesa format for BufferObjectFormat. */ - gl_format _BufferObjectFormat; + mesa_format _BufferObjectFormat; /** GL_ARB_texture_buffer_range */ GLintptr BufferOffset; GLsizeiptr BufferSize; /**< if this is -1, use BufferObject->Size instead */ @@ -1423,9 +1424,6 @@ struct gl_transform_attrib GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ - - GLfloat CullEyePos[4]; - GLfloat CullObjPos[4]; }; @@ -1551,12 +1549,13 @@ struct gl_vertex_buffer_binding /** - * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object - * extension, but a nice encapsulation in any case. + * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+, + * GL_ARB_vertex_array_object, or the original GL_APPLE_vertex_array_object + * extension. */ -struct gl_array_object +struct gl_vertex_array_object { - /** Name of the array object as received from glGenVertexArrayAPPLE. */ + /** Name of the VAO as received from glGenVertexArray. */ GLuint Name; GLchar *Label; /**< GL_KHR_debug */ @@ -1584,7 +1583,12 @@ struct gl_array_object */ GLboolean EverBound; - /** Derived vertex attribute arrays */ + /** + * Derived vertex attribute arrays + * + * This is a legacy data structure created from gl_vertex_attrib_array and + * gl_vertex_buffer_binding, for compatibility with existing driver code. + */ struct gl_client_array _VertexAttrib[VERT_ATTRIB_MAX]; /** Vertex attribute arrays */ @@ -1605,7 +1609,8 @@ struct gl_array_object */ GLuint _MaxElement; - struct gl_buffer_object *ElementArrayBufferObj; + /** The index buffer (also known as the element array buffer in OpenGL). */ + struct gl_buffer_object *IndexBufferObj; }; @@ -1615,10 +1620,10 @@ struct gl_array_object struct gl_array_attrib { /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ - struct gl_array_object *ArrayObj; + struct gl_vertex_array_object *VAO; /** The default vertex array object */ - struct gl_array_object *DefaultArrayObj; + struct gl_vertex_array_object *DefaultVAO; /** Array objects (GL_ARB/APPLE_vertex_array_object) */ struct _mesa_HashTable *Objects; @@ -2176,6 +2181,18 @@ struct gl_fragment_program }; +/** Compute program object */ +struct gl_compute_program +{ + struct gl_program Base; /**< base class */ + + /** + * Size specified using local_size_{x,y,z}. + */ + unsigned LocalSize[3]; +}; + + /** * State common to vertex and fragment programs. */ @@ -2439,6 +2456,17 @@ struct gl_shader * ImageAccess arrays above. */ GLuint NumImages; + + /** + * Compute shader state from ARB_compute_shader layout qualifiers. + */ + struct { + /** + * Size specified using local_size_{x,y,z}, or all 0's to indicate that + * it's not set in this shader. + */ + unsigned LocalSize[3]; + } Comp; }; @@ -2623,6 +2651,18 @@ struct gl_shader_program 0 if not present. */ } Vert; + /** + * Compute shader state - copied into gl_compute_program by + * _mesa_copy_linked_program_data(). + */ + struct { + /** + * If this shader contains a compute stage, size specified using + * local_size_{x,y,z}. Otherwise undefined. + */ + unsigned LocalSize[3]; + } Comp; + /* post-link info: */ unsigned NumUserUniformStorage; struct gl_uniform_storage *UniformStorage; @@ -2928,7 +2968,7 @@ struct gl_renderbuffer 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 */ + mesa_format Format; /**< The actual renderbuffer memory format */ /** * Pointer to the texture image if this renderbuffer wraps a texture, * otherwise NULL. @@ -3366,6 +3406,15 @@ struct gl_constants GLuint MaxCombinedImageUnitsAndFragmentOutputs; GLuint MaxImageSamples; GLuint MaxCombinedImageUniforms; + + /** GL_ARB_compute_shader */ + GLuint MaxComputeWorkGroupCount[3]; /* Array of x, y, z dimensions */ + GLuint MaxComputeWorkGroupSize[3]; /* Array of x, y, z dimensions */ + GLuint MaxComputeWorkGroupInvocations; + + /** GL_ARB_gpu_shader5 */ + GLfloat MinFragmentInterpolationOffset; + GLfloat MaxFragmentInterpolationOffset; }; @@ -3385,6 +3434,7 @@ struct gl_extensions GLboolean ARB_base_instance; GLboolean ARB_blend_func_extended; GLboolean ARB_color_buffer_float; + GLboolean ARB_compute_shader; GLboolean ARB_conservative_depth; GLboolean ARB_depth_buffer_float; GLboolean ARB_depth_clamp; @@ -3405,7 +3455,6 @@ struct gl_extensions GLboolean ARB_half_float_vertex; GLboolean ARB_instanced_arrays; GLboolean ARB_internalformat_query; - GLboolean ARB_map_buffer_alignment; GLboolean ARB_map_buffer_range; GLboolean ARB_occlusion_query; GLboolean ARB_occlusion_query2; @@ -3457,7 +3506,6 @@ struct gl_extensions GLboolean EXT_blend_minmax; GLboolean EXT_depth_bounds_test; GLboolean EXT_draw_buffers2; - GLboolean EXT_framebuffer_blit; GLboolean EXT_framebuffer_multisample; GLboolean EXT_framebuffer_multisample_blit_scaled; GLboolean EXT_framebuffer_sRGB; @@ -3490,7 +3538,6 @@ struct gl_extensions /* vendor extensions */ GLboolean AMD_performance_monitor; GLboolean AMD_seamless_cubemap_per_texture; - GLboolean AMD_shader_trinary_minmax; GLboolean AMD_vertex_shader_layer; GLboolean APPLE_object_purgeable; GLboolean ATI_envmap_bumpmap; @@ -3862,7 +3909,7 @@ struct gl_image_unit /** * Mesa format corresponding to \c Format. */ - gl_format _ActualFormat; + mesa_format _ActualFormat; /** * GL_TRUE if the state of this image unit is valid and access from diff --git a/mesalib/src/mesa/main/objectlabel.c b/mesalib/src/mesa/main/objectlabel.c index e75fe3be2..8efc33e0d 100644 --- a/mesalib/src/mesa/main/objectlabel.c +++ b/mesalib/src/mesa/main/objectlabel.c @@ -158,7 +158,7 @@ get_label_pointer(struct gl_context *ctx, GLenum identifier, GLuint name, break; case GL_VERTEX_ARRAY: { - struct gl_array_object *obj = _mesa_lookup_arrayobj(ctx, name); + struct gl_vertex_array_object *obj = _mesa_lookup_vao(ctx, name); if (obj) labelPtr = &obj->Label; } diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c index 51a0b1553..e16346896 100644 --- a/mesalib/src/mesa/main/readpix.c +++ b/mesalib/src/mesa/main/readpix.c @@ -45,7 +45,7 @@ * Return true if the conversion L=R+G+B is needed. */ static GLboolean -need_rgb_to_luminance_conversion(gl_format texFormat, GLenum format) +need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format) { GLenum baseTexFormat = _mesa_get_format_base_format(texFormat); @@ -60,7 +60,7 @@ need_rgb_to_luminance_conversion(gl_format texFormat, GLenum format) * Return transfer op flags for this ReadPixels operation. */ static GLbitfield -get_readpixels_transfer_ops(const struct gl_context *ctx, gl_format texFormat, +get_readpixels_transfer_ops(const struct gl_context *ctx, mesa_format texFormat, GLenum format, GLenum type, GLboolean uses_blit) { GLbitfield transferOps = ctx->_ImageTransferState; @@ -424,13 +424,13 @@ read_rgba_pixels_swizzle(struct gl_context *ctx, GLboolean swizzle_rb = GL_FALSE, copy_xrgb = GL_FALSE; /* XXX we could check for other swizzle/special cases here as needed */ - if (rb->Format == MESA_FORMAT_RGBA8888_REV && + if (rb->Format == MESA_FORMAT_R8G8B8A8_UNORM && format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV && !ctx->Pack.SwapBytes) { swizzle_rb = GL_TRUE; } - else if (rb->Format == MESA_FORMAT_XRGB8888 && + else if (rb->Format == MESA_FORMAT_B8G8R8X8_UNORM && format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV && !ctx->Pack.SwapBytes) { @@ -493,7 +493,7 @@ slow_read_rgba_pixels( struct gl_context *ctx, GLbitfield transferOps ) { struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer; - const gl_format rbFormat = _mesa_get_srgb_format_linear(rb->Format); + const mesa_format rbFormat = _mesa_get_srgb_format_linear(rb->Format); void *rgba; GLubyte *dst, *map; int dstStride, stride, j; @@ -594,8 +594,8 @@ fast_read_depth_stencil_pixels(struct gl_context *ctx, if (rb != stencilRb) return GL_FALSE; - if (rb->Format != MESA_FORMAT_Z24_S8 && - rb->Format != MESA_FORMAT_S8_Z24) + if (rb->Format != MESA_FORMAT_S8_UINT_Z24_UNORM && + rb->Format != MESA_FORMAT_Z24_UNORM_X8_UINT) return GL_FALSE; ctx->Driver.MapRenderbuffer(ctx, rb, x, y, width, height, GL_MAP_READ_BIT, diff --git a/mesalib/src/mesa/main/scissor.c b/mesalib/src/mesa/main/scissor.c index 14c8e8a6c..83f39e2a0 100644 --- a/mesalib/src/mesa/main/scissor.c +++ b/mesalib/src/mesa/main/scissor.c @@ -145,6 +145,7 @@ _mesa_ScissorArrayv(GLuint first, GLsizei count, const GLint *v) _mesa_error(ctx, GL_INVALID_VALUE, "glScissorArrayv: index (%d) width or height < 0 (%d, %d)", i, p[i].Width, p[i].Height); + return; } } @@ -187,6 +188,7 @@ ScissorIndexed(GLuint index, GLint left, GLint bottom, _mesa_error(ctx, GL_INVALID_VALUE, "%s: index (%d) width or height < 0 (%d, %d)", function, index, width, height); + return; } set_scissor_no_notify(ctx, index, left, bottom, width, height); diff --git a/mesalib/src/mesa/main/shaderapi.c b/mesalib/src/mesa/main/shaderapi.c index 61ac0e35a..65b6b16bb 100644 --- a/mesalib/src/mesa/main/shaderapi.c +++ b/mesalib/src/mesa/main/shaderapi.c @@ -188,6 +188,8 @@ _mesa_validate_shader_target(const struct gl_context *ctx, GLenum type) return ctx == NULL || ctx->Extensions.ARB_vertex_shader; case GL_GEOMETRY_SHADER_ARB: return ctx == NULL || _mesa_has_geometry_shaders(ctx); + case GL_COMPUTE_SHADER: + return ctx == NULL || ctx->Extensions.ARB_compute_shader; default: return false; } @@ -661,6 +663,24 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, GLint *param *params = shProg->NumAtomicBuffers; return; + case GL_COMPUTE_WORK_GROUP_SIZE: { + int i; + if (!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_compute_shader) + break; + if (!shProg->LinkStatus) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramiv(program not " + "linked)"); + return; + } + if (shProg->_LinkedShaders[MESA_SHADER_COMPUTE] == NULL) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramiv(no compute " + "shaders)"); + return; + } + for (i = 0; i < 3; i++) + params[i] = shProg->Comp.LocalSize[i]; + return; + } default: break; } @@ -966,6 +986,9 @@ use_shader_program(struct gl_context *ctx, GLenum type, case GL_GEOMETRY_SHADER_ARB: /* Empty for now. */ break; + case GL_COMPUTE_SHADER: + /* Empty for now. */ + break; case GL_FRAGMENT_SHADER: if (*target == ctx->Shader._CurrentFragmentProgram) { _mesa_reference_shader_program(ctx, @@ -989,6 +1012,7 @@ _mesa_use_program(struct gl_context *ctx, struct gl_shader_program *shProg) use_shader_program(ctx, GL_VERTEX_SHADER, shProg); use_shader_program(ctx, GL_GEOMETRY_SHADER_ARB, shProg); use_shader_program(ctx, GL_FRAGMENT_SHADER, shProg); + use_shader_program(ctx, GL_COMPUTE_SHADER, shProg); _mesa_active_program(ctx, shProg, "glUseProgram"); if (ctx->Driver.UseProgram) @@ -1840,6 +1864,13 @@ _mesa_copy_linked_program_data(gl_shader_stage type, dst_gp->UsesEndPrimitive = src->Geom.UsesEndPrimitive; } break; + case MESA_SHADER_COMPUTE: { + struct gl_compute_program *dst_cp = (struct gl_compute_program *) dst; + int i; + for (i = 0; i < 3; i++) + dst_cp->LocalSize[i] = src->Comp.LocalSize[i]; + } + break; default: break; } diff --git a/mesalib/src/mesa/main/shaderimage.c b/mesalib/src/mesa/main/shaderimage.c index 80c469366..d1e752d3d 100644 --- a/mesalib/src/mesa/main/shaderimage.c +++ b/mesalib/src/mesa/main/shaderimage.c @@ -42,22 +42,22 @@ * results. */ #ifdef MESA_BIG_ENDIAN -# define MESA_FORMAT_RGBA_8 MESA_FORMAT_RGBA8888 -# define MESA_FORMAT_RG_16 MESA_FORMAT_RG1616 -# define MESA_FORMAT_RG_8 MESA_FORMAT_RG88 -# define MESA_FORMAT_SIGNED_RGBA_8 MESA_FORMAT_SIGNED_RGBA8888 -# define MESA_FORMAT_SIGNED_RG_16 MESA_FORMAT_SIGNED_RG1616 -# define MESA_FORMAT_SIGNED_RG_8 MESA_FORMAT_SIGNED_RG88 +# define MESA_FORMAT_RGBA_8 MESA_FORMAT_A8B8G8R8_UNORM +# define MESA_FORMAT_RG_16 MESA_FORMAT_G16R16_UNORM +# define MESA_FORMAT_RG_8 MESA_FORMAT_G8R8_UNORM +# define MESA_FORMAT_SIGNED_RGBA_8 MESA_FORMAT_A8B8G8R8_SNORM +# define MESA_FORMAT_SIGNED_RG_16 MESA_FORMAT_G16R16_SNORM +# define MESA_FORMAT_SIGNED_RG_8 MESA_FORMAT_G8R8_SNORM #else -# define MESA_FORMAT_RGBA_8 MESA_FORMAT_RGBA8888_REV -# define MESA_FORMAT_RG_16 MESA_FORMAT_GR1616 -# define MESA_FORMAT_RG_8 MESA_FORMAT_GR88 -# define MESA_FORMAT_SIGNED_RGBA_8 MESA_FORMAT_SIGNED_RGBA8888_REV -# define MESA_FORMAT_SIGNED_RG_16 MESA_FORMAT_SIGNED_GR1616 -# define MESA_FORMAT_SIGNED_RG_8 MESA_FORMAT_SIGNED_RG88_REV +# define MESA_FORMAT_RGBA_8 MESA_FORMAT_R8G8B8A8_UNORM +# define MESA_FORMAT_RG_16 MESA_FORMAT_R16G16_UNORM +# define MESA_FORMAT_RG_8 MESA_FORMAT_R8G8_UNORM +# define MESA_FORMAT_SIGNED_RGBA_8 MESA_FORMAT_R8G8B8A8_SNORM +# define MESA_FORMAT_SIGNED_RG_16 MESA_FORMAT_R16G16_SNORM +# define MESA_FORMAT_SIGNED_RG_8 MESA_FORMAT_R8G8_SNORM #endif -static gl_format +static mesa_format get_image_format(GLenum format) { switch (format) { @@ -74,7 +74,7 @@ get_image_format(GLenum format) return MESA_FORMAT_RG_FLOAT16; case GL_R11F_G11F_B10F: - return MESA_FORMAT_R11_G11_B10_FLOAT; + return MESA_FORMAT_R11G11B10_FLOAT; case GL_R32F: return MESA_FORMAT_R_FLOAT32; @@ -89,7 +89,7 @@ get_image_format(GLenum format) return MESA_FORMAT_RGBA_UINT16; case GL_RGB10_A2UI: - return MESA_FORMAT_ABGR2101010_UINT; + return MESA_FORMAT_R10G10B10A2_UINT; case GL_RGBA8UI: return MESA_FORMAT_RGBA_UINT8; @@ -113,37 +113,37 @@ get_image_format(GLenum format) return MESA_FORMAT_R_UINT8; case GL_RGBA32I: - return MESA_FORMAT_RGBA_INT32; + return MESA_FORMAT_RGBA_SINT32; case GL_RGBA16I: - return MESA_FORMAT_RGBA_INT16; + return MESA_FORMAT_RGBA_SINT16; case GL_RGBA8I: - return MESA_FORMAT_RGBA_INT8; + return MESA_FORMAT_RGBA_SINT8; case GL_RG32I: - return MESA_FORMAT_RG_INT32; + return MESA_FORMAT_RG_SINT32; case GL_RG16I: - return MESA_FORMAT_RG_INT16; + return MESA_FORMAT_RG_SINT16; case GL_RG8I: - return MESA_FORMAT_RG_INT8; + return MESA_FORMAT_RG_SINT8; case GL_R32I: - return MESA_FORMAT_R_INT32; + return MESA_FORMAT_R_SINT32; case GL_R16I: - return MESA_FORMAT_R_INT16; + return MESA_FORMAT_R_SINT16; case GL_R8I: - return MESA_FORMAT_R_INT8; + return MESA_FORMAT_R_SINT8; case GL_RGBA16: - return MESA_FORMAT_RGBA_16; + return MESA_FORMAT_RGBA_UNORM16; case GL_RGB10_A2: - return MESA_FORMAT_ABGR2101010; + return MESA_FORMAT_R10G10B10A2_UNORM; case GL_RGBA8: return MESA_FORMAT_RGBA_8; @@ -155,13 +155,13 @@ get_image_format(GLenum format) return MESA_FORMAT_RG_8; case GL_R16: - return MESA_FORMAT_R16; + return MESA_FORMAT_R_UNORM16; case GL_R8: - return MESA_FORMAT_R8; + return MESA_FORMAT_R_UNORM8; case GL_RGBA16_SNORM: - return MESA_FORMAT_SIGNED_RGBA_16; + return MESA_FORMAT_RGBA_SNORM16; case GL_RGBA8_SNORM: return MESA_FORMAT_SIGNED_RGBA_8; @@ -173,10 +173,10 @@ get_image_format(GLenum format) return MESA_FORMAT_SIGNED_RG_8; case GL_R16_SNORM: - return MESA_FORMAT_SIGNED_R16; + return MESA_FORMAT_R_SNORM16; case GL_R8_SNORM: - return MESA_FORMAT_SIGNED_R8; + return MESA_FORMAT_R_SNORM8; default: return MESA_FORMAT_NONE; @@ -205,7 +205,7 @@ enum image_format_class }; static enum image_format_class -get_image_format_class(gl_format format) +get_image_format_class(mesa_format format) { switch (format) { case MESA_FORMAT_RGBA_FLOAT32: @@ -220,7 +220,7 @@ get_image_format_class(gl_format format) case MESA_FORMAT_RG_FLOAT16: return IMAGE_FORMAT_CLASS_2X16; - case MESA_FORMAT_R11_G11_B10_FLOAT: + case MESA_FORMAT_R11G11B10_FLOAT: return IMAGE_FORMAT_CLASS_10_11_11; case MESA_FORMAT_R_FLOAT32: @@ -235,7 +235,7 @@ get_image_format_class(gl_format format) case MESA_FORMAT_RGBA_UINT16: return IMAGE_FORMAT_CLASS_4X16; - case MESA_FORMAT_ABGR2101010_UINT: + case MESA_FORMAT_R10G10B10A2_UINT: return IMAGE_FORMAT_CLASS_2_10_10_10; case MESA_FORMAT_RGBA_UINT8: @@ -259,37 +259,37 @@ get_image_format_class(gl_format format) case MESA_FORMAT_R_UINT8: return IMAGE_FORMAT_CLASS_1X8; - case MESA_FORMAT_RGBA_INT32: + case MESA_FORMAT_RGBA_SINT32: return IMAGE_FORMAT_CLASS_4X32; - case MESA_FORMAT_RGBA_INT16: + case MESA_FORMAT_RGBA_SINT16: return IMAGE_FORMAT_CLASS_4X16; - case MESA_FORMAT_RGBA_INT8: + case MESA_FORMAT_RGBA_SINT8: return IMAGE_FORMAT_CLASS_4X8; - case MESA_FORMAT_RG_INT32: + case MESA_FORMAT_RG_SINT32: return IMAGE_FORMAT_CLASS_2X32; - case MESA_FORMAT_RG_INT16: + case MESA_FORMAT_RG_SINT16: return IMAGE_FORMAT_CLASS_2X16; - case MESA_FORMAT_RG_INT8: + case MESA_FORMAT_RG_SINT8: return IMAGE_FORMAT_CLASS_2X8; - case MESA_FORMAT_R_INT32: + case MESA_FORMAT_R_SINT32: return IMAGE_FORMAT_CLASS_1X32; - case MESA_FORMAT_R_INT16: + case MESA_FORMAT_R_SINT16: return IMAGE_FORMAT_CLASS_1X16; - case MESA_FORMAT_R_INT8: + case MESA_FORMAT_R_SINT8: return IMAGE_FORMAT_CLASS_1X8; - case MESA_FORMAT_RGBA_16: + case MESA_FORMAT_RGBA_UNORM16: return IMAGE_FORMAT_CLASS_4X16; - case MESA_FORMAT_ABGR2101010: + case MESA_FORMAT_R10G10B10A2_UNORM: return IMAGE_FORMAT_CLASS_2_10_10_10; case MESA_FORMAT_RGBA_8: @@ -301,13 +301,13 @@ get_image_format_class(gl_format format) case MESA_FORMAT_RG_8: return IMAGE_FORMAT_CLASS_2X8; - case MESA_FORMAT_R16: + case MESA_FORMAT_R_UNORM16: return IMAGE_FORMAT_CLASS_1X16; - case MESA_FORMAT_R8: + case MESA_FORMAT_R_UNORM8: return IMAGE_FORMAT_CLASS_1X8; - case MESA_FORMAT_SIGNED_RGBA_16: + case MESA_FORMAT_RGBA_SNORM16: return IMAGE_FORMAT_CLASS_4X16; case MESA_FORMAT_SIGNED_RGBA_8: @@ -319,10 +319,10 @@ get_image_format_class(gl_format format) case MESA_FORMAT_SIGNED_RG_8: return IMAGE_FORMAT_CLASS_2X8; - case MESA_FORMAT_SIGNED_R16: + case MESA_FORMAT_R_SNORM16: return IMAGE_FORMAT_CLASS_1X16; - case MESA_FORMAT_SIGNED_R8: + case MESA_FORMAT_R_SNORM8: return IMAGE_FORMAT_CLASS_1X8; default: diff --git a/mesalib/src/mesa/main/shaderobj.h b/mesalib/src/mesa/main/shaderobj.h index 517557088..fae8be827 100644 --- a/mesalib/src/mesa/main/shaderobj.h +++ b/mesalib/src/mesa/main/shaderobj.h @@ -111,6 +111,8 @@ _mesa_shader_enum_to_shader_stage(GLenum v) return MESA_SHADER_FRAGMENT; case GL_GEOMETRY_SHADER: return MESA_SHADER_GEOMETRY; + case GL_COMPUTE_SHADER: + return MESA_SHADER_COMPUTE; default: ASSERT(0 && "bad value in _mesa_shader_enum_to_shader_stage()"); return MESA_SHADER_VERTEX; diff --git a/mesalib/src/mesa/main/state.c b/mesalib/src/mesa/main/state.c index bdebbc141..0866a140f 100644 --- a/mesalib/src/mesa/main/state.c +++ b/mesalib/src/mesa/main/state.c @@ -417,11 +417,11 @@ _mesa_update_state_locked( struct gl_context *ctx ) } if (new_state & _NEW_ARRAY) - _mesa_update_array_object_client_arrays(ctx, ctx->Array.ArrayObj); + _mesa_update_vao_client_arrays(ctx, ctx->Array.VAO); if (ctx->Const.CheckArrayBounds && new_state & (_NEW_ARRAY | _NEW_PROGRAM | _NEW_BUFFER_OBJECT)) { - _mesa_update_array_object_max_element(ctx, ctx->Array.ArrayObj); + _mesa_update_vao_max_element(ctx, ctx->Array.VAO); } out: @@ -439,7 +439,7 @@ _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; + ctx->Array.VAO->NewArrays = 0x0; } diff --git a/mesalib/src/mesa/main/texcompress.c b/mesalib/src/mesa/main/texcompress.c index 47ad30605..9dbfe9ffe 100644 --- a/mesalib/src/mesa/main/texcompress.c +++ b/mesalib/src/mesa/main/texcompress.c @@ -361,7 +361,7 @@ _mesa_get_compressed_formats(struct gl_context *ctx, GLint *formats) /** * Convert a compressed MESA_FORMAT_x to a GLenum. */ -gl_format +mesa_format _mesa_glenum_to_compressed_format(GLenum format) { switch (format) { @@ -393,23 +393,23 @@ _mesa_glenum_to_compressed_format(GLenum format) return MESA_FORMAT_SRGBA_DXT5; case GL_COMPRESSED_RED_RGTC1: - return MESA_FORMAT_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_UNORM; case GL_COMPRESSED_SIGNED_RED_RGTC1: - return MESA_FORMAT_SIGNED_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_SNORM; case GL_COMPRESSED_RG_RGTC2: - return MESA_FORMAT_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_UNORM; case GL_COMPRESSED_SIGNED_RG_RGTC2: - return MESA_FORMAT_SIGNED_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_SNORM; case GL_COMPRESSED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_L_LATC1; + return MESA_FORMAT_L_LATC1_UNORM; case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_SIGNED_L_LATC1; + return MESA_FORMAT_L_LATC1_SNORM; case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: - return MESA_FORMAT_LA_LATC2; + return MESA_FORMAT_LA_LATC2_UNORM; case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: - return MESA_FORMAT_SIGNED_LA_LATC2; + return MESA_FORMAT_LA_LATC2_SNORM; case GL_ETC1_RGB8_OES: return MESA_FORMAT_ETC1_RGB8; @@ -451,7 +451,7 @@ _mesa_glenum_to_compressed_format(GLenum format) * internal format unchanged. */ GLenum -_mesa_compressed_format_to_glenum(struct gl_context *ctx, gl_format mesaFormat) +_mesa_compressed_format_to_glenum(struct gl_context *ctx, mesa_format mesaFormat) { switch (mesaFormat) { case MESA_FORMAT_RGB_FXT1: @@ -474,22 +474,22 @@ _mesa_compressed_format_to_glenum(struct gl_context *ctx, gl_format mesaFormat) return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; case MESA_FORMAT_SRGBA_DXT5: return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; - case MESA_FORMAT_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_UNORM: return GL_COMPRESSED_RED_RGTC1; - case MESA_FORMAT_SIGNED_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_SNORM: return GL_COMPRESSED_SIGNED_RED_RGTC1; - case MESA_FORMAT_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_UNORM: return GL_COMPRESSED_RG_RGTC2; - case MESA_FORMAT_SIGNED_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_SNORM: return GL_COMPRESSED_SIGNED_RG_RGTC2; - case MESA_FORMAT_L_LATC1: + case MESA_FORMAT_L_LATC1_UNORM: return GL_COMPRESSED_LUMINANCE_LATC1_EXT; - case MESA_FORMAT_SIGNED_L_LATC1: + case MESA_FORMAT_L_LATC1_SNORM: return GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT; - case MESA_FORMAT_LA_LATC2: + case MESA_FORMAT_LA_LATC2_UNORM: return GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT; - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_LA_LATC2_SNORM: return GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT; case MESA_FORMAT_ETC1_RGB8: @@ -535,7 +535,7 @@ _mesa_compressed_format_to_glenum(struct gl_context *ctx, gl_format mesaFormat) */ GLubyte * _mesa_compressed_image_address(GLint col, GLint row, GLint img, - gl_format mesaFormat, + mesa_format mesaFormat, GLsizei width, const GLubyte *image) { /* XXX only 2D images implemented, not 3D */ @@ -560,7 +560,7 @@ _mesa_compressed_image_address(GLint col, GLint row, GLint img, * invalid format. */ compressed_fetch_func -_mesa_get_compressed_fetch_func(gl_format format) +_mesa_get_compressed_fetch_func(mesa_format format) { switch (format) { case MESA_FORMAT_RGB_DXT1: @@ -575,14 +575,14 @@ _mesa_get_compressed_fetch_func(gl_format format) case MESA_FORMAT_RGB_FXT1: case MESA_FORMAT_RGBA_FXT1: return _mesa_get_fxt_fetch_func(format); - case MESA_FORMAT_RED_RGTC1: - case MESA_FORMAT_L_LATC1: - case MESA_FORMAT_SIGNED_RED_RGTC1: - case MESA_FORMAT_SIGNED_L_LATC1: - case MESA_FORMAT_RG_RGTC2: - case MESA_FORMAT_LA_LATC2: - case MESA_FORMAT_SIGNED_RG_RGTC2: - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_R_RGTC1_UNORM: + case MESA_FORMAT_L_LATC1_UNORM: + case MESA_FORMAT_R_RGTC1_SNORM: + case MESA_FORMAT_L_LATC1_SNORM: + case MESA_FORMAT_RG_RGTC2_UNORM: + case MESA_FORMAT_LA_LATC2_UNORM: + case MESA_FORMAT_RG_RGTC2_SNORM: + case MESA_FORMAT_LA_LATC2_SNORM: return _mesa_get_compressed_rgtc_func(format); case MESA_FORMAT_ETC1_RGB8: return _mesa_get_etc_fetch_func(format); @@ -598,7 +598,7 @@ _mesa_get_compressed_fetch_func(gl_format format) * compressed source image. */ void -_mesa_decompress_image(gl_format format, GLuint width, GLuint height, +_mesa_decompress_image(mesa_format format, GLuint width, GLuint height, const GLubyte *src, GLint srcRowStride, GLfloat *dest) { diff --git a/mesalib/src/mesa/main/texcompress.h b/mesalib/src/mesa/main/texcompress.h index c6a6e873e..b00924d02 100644 --- a/mesalib/src/mesa/main/texcompress.h +++ b/mesalib/src/mesa/main/texcompress.h @@ -36,15 +36,15 @@ _mesa_gl_compressed_format_base_format(GLenum format); extern GLuint _mesa_get_compressed_formats(struct gl_context *ctx, GLint *formats); -extern gl_format +extern mesa_format _mesa_glenum_to_compressed_format(GLenum format); extern GLenum -_mesa_compressed_format_to_glenum(struct gl_context *ctx, gl_format mesaFormat); +_mesa_compressed_format_to_glenum(struct gl_context *ctx, mesa_format mesaFormat); extern GLubyte * _mesa_compressed_image_address(GLint col, GLint row, GLint img, - gl_format mesaFormat, + mesa_format mesaFormat, GLsizei width, const GLubyte *image); @@ -55,11 +55,11 @@ typedef void (*compressed_fetch_func)(const GLubyte *map, GLfloat *texel); extern compressed_fetch_func -_mesa_get_compressed_fetch_func(gl_format format); +_mesa_get_compressed_fetch_func(mesa_format format); extern void -_mesa_decompress_image(gl_format format, GLuint width, GLuint height, +_mesa_decompress_image(mesa_format format, GLuint width, GLuint height, const GLubyte *src, GLint srcRowStride, GLfloat *dest); diff --git a/mesalib/src/mesa/main/texcompress_etc.c b/mesalib/src/mesa/main/texcompress_etc.c index a06d29f19..e3862be45 100644 --- a/mesalib/src/mesa/main/texcompress_etc.c +++ b/mesalib/src/mesa/main/texcompress_etc.c @@ -726,7 +726,7 @@ etc2_unpack_srgb8(uint8_t *dst_row, for (i = 0; i < bw; i++) { etc2_rgb8_fetch_texel(&block, i, j, dst, false /* punchthrough_alpha */); - /* Convert to MESA_FORMAT_SARGB8 */ + /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ tmp = dst[0]; dst[0] = dst[2]; dst[2] = tmp; @@ -806,7 +806,7 @@ etc2_unpack_srgb8_alpha8(uint8_t *dst_row, for (i = 0; i < bw; i++) { etc2_rgba8_fetch_texel(&block, i, j, dst); - /* Convert to MESA_FORMAT_SARGB8 */ + /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ tmp = dst[0]; dst[0] = dst[2]; dst[2] = tmp; @@ -1047,7 +1047,7 @@ etc2_unpack_srgb8_punchthrough_alpha1(uint8_t *dst_row, for (i = 0; i < bw; i++) { etc2_rgb8_fetch_texel(&block, i, j, dst, true /* punchthrough_alpha */); - /* Convert to MESA_FORMAT_SARGB8 */ + /* Convert to MESA_FORMAT_B8G8R8A8_SRGB */ tmp = dst[0]; dst[0] = dst[2]; dst[2] = tmp; @@ -1175,7 +1175,7 @@ _mesa_unpack_etc2_format(uint8_t *dst_row, unsigned src_stride, unsigned src_width, unsigned src_height, - gl_format format) + mesa_format format) { if (format == MESA_FORMAT_ETC2_RGB8) etc2_unpack_rgb8(dst_row, dst_stride, @@ -1452,7 +1452,7 @@ fetch_etc2_srgb8_punchthrough_alpha1(const GLubyte *map, compressed_fetch_func -_mesa_get_etc_fetch_func(gl_format format) +_mesa_get_etc_fetch_func(mesa_format format) { switch (format) { case MESA_FORMAT_ETC1_RGB8: diff --git a/mesalib/src/mesa/main/texcompress_etc.h b/mesalib/src/mesa/main/texcompress_etc.h index 9da0fb337..319b7bea7 100644 --- a/mesalib/src/mesa/main/texcompress_etc.h +++ b/mesalib/src/mesa/main/texcompress_etc.h @@ -77,9 +77,9 @@ _mesa_unpack_etc2_format(uint8_t *dst_row, unsigned src_stride, unsigned src_width, unsigned src_height, - gl_format format); + mesa_format format); compressed_fetch_func -_mesa_get_etc_fetch_func(gl_format format); +_mesa_get_etc_fetch_func(mesa_format format); #endif diff --git a/mesalib/src/mesa/main/texcompress_fxt1.c b/mesalib/src/mesa/main/texcompress_fxt1.c index 8d37d813f..61b01c6b4 100644 --- a/mesalib/src/mesa/main/texcompress_fxt1.c +++ b/mesalib/src/mesa/main/texcompress_fxt1.c @@ -1641,7 +1641,7 @@ fetch_rgba_fxt1(const GLubyte *map, compressed_fetch_func -_mesa_get_fxt_fetch_func(gl_format format) +_mesa_get_fxt_fetch_func(mesa_format format) { switch (format) { case MESA_FORMAT_RGB_FXT1: diff --git a/mesalib/src/mesa/main/texcompress_fxt1.h b/mesalib/src/mesa/main/texcompress_fxt1.h index 4f46d7765..21032eea5 100644 --- a/mesalib/src/mesa/main/texcompress_fxt1.h +++ b/mesalib/src/mesa/main/texcompress_fxt1.h @@ -37,6 +37,6 @@ _mesa_texstore_rgba_fxt1(TEXSTORE_PARAMS); compressed_fetch_func -_mesa_get_fxt_fetch_func(gl_format format); +_mesa_get_fxt_fetch_func(mesa_format format); #endif /* TEXCOMPRESS_FXT1_H */ diff --git a/mesalib/src/mesa/main/texcompress_rgtc.c b/mesalib/src/mesa/main/texcompress_rgtc.c index 7afd8ffa7..1012699f5 100644 --- a/mesalib/src/mesa/main/texcompress_rgtc.c +++ b/mesalib/src/mesa/main/texcompress_rgtc.c @@ -97,8 +97,8 @@ _mesa_texstore_red_rgtc1(TEXSTORE_PARAMS) GLubyte srcpixels[4][4]; GLubyte *blkaddr; GLint dstRowDiff; - ASSERT(dstFormat == MESA_FORMAT_RED_RGTC1 || - dstFormat == MESA_FORMAT_L_LATC1); + ASSERT(dstFormat == MESA_FORMAT_R_RGTC1_UNORM || + dstFormat == MESA_FORMAT_L_LATC1_UNORM); tempImage = _mesa_make_temp_ubyte_image(ctx, dims, baseInternalFormat, @@ -144,8 +144,8 @@ _mesa_texstore_signed_red_rgtc1(TEXSTORE_PARAMS) GLbyte srcpixels[4][4]; GLbyte *blkaddr; GLint dstRowDiff; - ASSERT(dstFormat == MESA_FORMAT_SIGNED_RED_RGTC1 || - dstFormat == MESA_FORMAT_SIGNED_L_LATC1); + ASSERT(dstFormat == MESA_FORMAT_R_RGTC1_SNORM || + dstFormat == MESA_FORMAT_L_LATC1_SNORM); tempImage = _mesa_make_temp_float_image(ctx, dims, baseInternalFormat, @@ -192,8 +192,8 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS) GLubyte *blkaddr; GLint dstRowDiff; - ASSERT(dstFormat == MESA_FORMAT_RG_RGTC2 || - dstFormat == MESA_FORMAT_LA_LATC2); + ASSERT(dstFormat == MESA_FORMAT_RG_RGTC2_UNORM || + dstFormat == MESA_FORMAT_LA_LATC2_UNORM); tempImage = _mesa_make_temp_ubyte_image(ctx, dims, baseInternalFormat, @@ -246,8 +246,8 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS) GLbyte *blkaddr; GLint dstRowDiff; - ASSERT(dstFormat == MESA_FORMAT_SIGNED_RG_RGTC2 || - dstFormat == MESA_FORMAT_SIGNED_LA_LATC2); + ASSERT(dstFormat == MESA_FORMAT_RG_RGTC2_SNORM || + dstFormat == MESA_FORMAT_LA_LATC2_SNORM); tempImage = _mesa_make_temp_float_image(ctx, dims, baseInternalFormat, @@ -439,24 +439,24 @@ fetch_signed_la_latc2(const GLubyte *map, compressed_fetch_func -_mesa_get_compressed_rgtc_func(gl_format format) +_mesa_get_compressed_rgtc_func(mesa_format format) { switch (format) { - case MESA_FORMAT_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_UNORM: return fetch_red_rgtc1; - case MESA_FORMAT_L_LATC1: + case MESA_FORMAT_L_LATC1_UNORM: return fetch_l_latc1; - case MESA_FORMAT_SIGNED_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_SNORM: return fetch_signed_red_rgtc1; - case MESA_FORMAT_SIGNED_L_LATC1: + case MESA_FORMAT_L_LATC1_SNORM: return fetch_signed_l_latc1; - case MESA_FORMAT_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_UNORM: return fetch_rg_rgtc2; - case MESA_FORMAT_LA_LATC2: + case MESA_FORMAT_LA_LATC2_UNORM: return fetch_la_latc2; - case MESA_FORMAT_SIGNED_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_SNORM: return fetch_signed_rg_rgtc2; - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_LA_LATC2_SNORM: return fetch_signed_la_latc2; default: return NULL; diff --git a/mesalib/src/mesa/main/texcompress_rgtc.h b/mesalib/src/mesa/main/texcompress_rgtc.h index 98638f022..e9e24950a 100644 --- a/mesalib/src/mesa/main/texcompress_rgtc.h +++ b/mesalib/src/mesa/main/texcompress_rgtc.h @@ -41,7 +41,7 @@ extern GLboolean _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS); extern compressed_fetch_func -_mesa_get_compressed_rgtc_func(gl_format format); +_mesa_get_compressed_rgtc_func(mesa_format format); #endif diff --git a/mesalib/src/mesa/main/texcompress_s3tc.c b/mesalib/src/mesa/main/texcompress_s3tc.c index a815193b7..894c46de1 100644 --- a/mesalib/src/mesa/main/texcompress_s3tc.c +++ b/mesalib/src/mesa/main/texcompress_s3tc.c @@ -483,7 +483,7 @@ fetch_srgba_dxt5(const GLubyte *map, compressed_fetch_func -_mesa_get_dxt_fetch_func(gl_format format) +_mesa_get_dxt_fetch_func(mesa_format format) { switch (format) { case MESA_FORMAT_RGB_DXT1: diff --git a/mesalib/src/mesa/main/texcompress_s3tc.h b/mesalib/src/mesa/main/texcompress_s3tc.h index d8d8fbfc1..2734210a5 100644 --- a/mesalib/src/mesa/main/texcompress_s3tc.h +++ b/mesalib/src/mesa/main/texcompress_s3tc.h @@ -49,7 +49,7 @@ extern void _mesa_init_texture_s3tc(struct gl_context *ctx); extern compressed_fetch_func -_mesa_get_dxt_fetch_func(gl_format format); +_mesa_get_dxt_fetch_func(mesa_format format); #endif /* TEXCOMPRESS_S3TC_H */ diff --git a/mesalib/src/mesa/main/texformat.c b/mesalib/src/mesa/main/texformat.c index d3aa47736..bda2d8e17 100644 --- a/mesalib/src/mesa/main/texformat.c +++ b/mesalib/src/mesa/main/texformat.c @@ -54,12 +54,12 @@ * \param format incoming image pixel format. * \param type incoming image data type. * - * \return the closest gl_format for the given format/type arguments + * \return the closest mesa_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_format _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type) { @@ -70,93 +70,93 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case 4: case GL_RGBA: if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) { - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); + RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM); } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) { - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM); } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) { - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010); + RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); } - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; case GL_RGBA8: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; case GL_RGB5_A1: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555); + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G5R5A1_UNORM); break; case GL_RGBA2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/ - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); + RETURN_IF_SUPPORTED(MESA_FORMAT_A4R4G4B4_UNORM); /* just to test another format*/ + RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM); break; case GL_RGBA4: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444); + RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM); break; /* deep RGBA formats */ case GL_RGB10_A2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010); - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); } /* fallthrough */ case GL_RGB8: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888); - RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888); - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_B2G3R3_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R5G6B5_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; case GL_RGB4: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */ - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); + RETURN_IF_SUPPORTED(MESA_FORMAT_R5G6B5_UNORM); /* just to test another format */ + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); break; case GL_RGB5: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; /* Alpha formats */ case GL_ALPHA: case GL_ALPHA4: case GL_ALPHA8: - RETURN_IF_SUPPORTED(MESA_FORMAT_A8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); break; case GL_ALPHA12: case GL_ALPHA16: - RETURN_IF_SUPPORTED(MESA_FORMAT_A16); - RETURN_IF_SUPPORTED(MESA_FORMAT_A8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); break; /* Luminance formats */ @@ -164,71 +164,71 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_LUMINANCE: case GL_LUMINANCE4: case GL_LUMINANCE8: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8); break; case GL_LUMINANCE12: case GL_LUMINANCE16: - RETURN_IF_SUPPORTED(MESA_FORMAT_L16); - RETURN_IF_SUPPORTED(MESA_FORMAT_L8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8); break; /* Luminance/Alpha formats */ case GL_LUMINANCE4_ALPHA4: - RETURN_IF_SUPPORTED(MESA_FORMAT_AL44); - RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); + RETURN_IF_SUPPORTED(MESA_FORMAT_L4A4_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); break; case 2: case GL_LUMINANCE_ALPHA: case GL_LUMINANCE6_ALPHA2: case GL_LUMINANCE8_ALPHA8: - RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_L16A16_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); break; case GL_INTENSITY: case GL_INTENSITY4: case GL_INTENSITY8: - RETURN_IF_SUPPORTED(MESA_FORMAT_I8); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8); break; case GL_INTENSITY12: case GL_INTENSITY16: - RETURN_IF_SUPPORTED(MESA_FORMAT_I16); - RETURN_IF_SUPPORTED(MESA_FORMAT_I8); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z_UNORM32); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_S8_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_X8_UINT); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z_UNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_S8_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_X8_UINT); break; case GL_COMPRESSED_ALPHA_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_A8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8); break; case GL_COMPRESSED_LUMINANCE_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_L8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8); break; case GL_COMPRESSED_LUMINANCE_ALPHA_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_AL88); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM); break; case GL_COMPRESSED_INTENSITY_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_I8); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_UNORM8); break; case GL_COMPRESSED_RGB_ARB: /* We don't use texture compression for 1D and 1D array textures. @@ -243,9 +243,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; case GL_COMPRESSED_RGBA_ARB: /* We don't use texture compression for 1D and 1D array textures. */ @@ -254,12 +254,12 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); } - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888); - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; case GL_RGB565: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565); + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); break; case GL_YCBCR_MESA: @@ -294,23 +294,23 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: return MESA_FORMAT_RGBA_DXT5; case GL_COMPRESSED_RED_RGTC1: - return MESA_FORMAT_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_UNORM; case GL_COMPRESSED_SIGNED_RED_RGTC1: - return MESA_FORMAT_SIGNED_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_SNORM; case GL_COMPRESSED_RG_RGTC2: - return MESA_FORMAT_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_UNORM; case GL_COMPRESSED_SIGNED_RG_RGTC2: - return MESA_FORMAT_SIGNED_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_SNORM; case GL_COMPRESSED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_L_LATC1; + return MESA_FORMAT_L_LATC1_UNORM; case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: - return MESA_FORMAT_SIGNED_L_LATC1; + return MESA_FORMAT_L_LATC1_SNORM; case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: - return MESA_FORMAT_LA_LATC2; + return MESA_FORMAT_LA_LATC2_UNORM; case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: - return MESA_FORMAT_SIGNED_LA_LATC2; + return MESA_FORMAT_LA_LATC2_SNORM; case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: - return MESA_FORMAT_LA_LATC2; + return MESA_FORMAT_LA_LATC2_UNORM; case GL_ETC1_RGB8_OES: return MESA_FORMAT_ETC1_RGB8; case GL_COMPRESSED_RGB8_ETC2: @@ -343,63 +343,63 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, return MESA_FORMAT_SRGBA_DXT5; case GL_ALPHA16F_ARB: - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_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_A_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_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_L_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_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_L_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_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_LA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_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_LA_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_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_I_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_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_I_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_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_RGBX_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_XBGR32323232_FLOAT); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); @@ -415,26 +415,26 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, 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; + ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R9G9B9E5_FLOAT]); + return MESA_FORMAT_R9G9B9E5_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; + ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11G11B10_FLOAT]); + return MESA_FORMAT_R11G11B10_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); + RETURN_IF_SUPPORTED(MESA_FORMAT_S8_UINT_Z24_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_UNORM_X8_UINT); break; case GL_DEPTH_COMPONENT32F: - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]); - return MESA_FORMAT_Z32_FLOAT; + ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z_FLOAT32]); + return MESA_FORMAT_Z_FLOAT32; case GL_DEPTH32F_STENCIL8: - ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]); - return MESA_FORMAT_Z32_FLOAT_X24S8; + ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_S8X24_UINT]); + return MESA_FORMAT_Z32_FLOAT_S8X24_UINT; case GL_DUDV_ATI: case GL_DU8DV8_ATI: @@ -443,250 +443,250 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_RED_SNORM: case GL_R8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SNORM8); break; case GL_RG_SNORM: case GL_RG8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_SNORM); break; case GL_RGB_SNORM: case GL_RGB8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SNORM); /* FALLTHROUGH */ case GL_RGBA_SNORM: case GL_RGBA8_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888); - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_SNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_SNORM8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); break; case GL_R16_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SNORM16); break; case GL_RG16_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616); + RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_SNORM); break; case GL_RGB16_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16); - RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SNORM16); /* 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); break; case GL_LUMINANCE16_SNORM: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SNORM16); /* 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SNORM16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); break; case GL_SRGB_EXT: case GL_SRGB8_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_SRGB_ALPHA_EXT: case GL_SRGB8_ALPHA8_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_SLUMINANCE_EXT: case GL_SLUMINANCE8_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_SLUMINANCE_ALPHA_EXT: case GL_SLUMINANCE8_ALPHA8_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_COMPRESSED_SLUMINANCE_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SL8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_COMPRESSED_SRGB_EXT: if (ctx->Mesa_DXTn) RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_COMPRESSED_SRGB_ALPHA_EXT: if (ctx->Mesa_DXTn) RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); break; case GL_ALPHA8UI_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_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_A_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_A_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); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); break; case GL_ALPHA16I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); break; case GL_ALPHA32I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_A_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_LUMINANCE8UI_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_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_L_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_L_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); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); break; case GL_LUMINANCE16I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); break; case GL_LUMINANCE32I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_L_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_LUMINANCE_ALPHA8UI_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_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_LA_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_LA_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); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); break; case GL_LUMINANCE_ALPHA16I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); break; case GL_LUMINANCE_ALPHA32I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_LA_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_INTENSITY8UI_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_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_I_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_I_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); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); break; case GL_INTENSITY16I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); break; case GL_INTENSITY32I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_I_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_RGB8UI_EXT: RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8); - RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR8888_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_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_XBGR16161616_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_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_XBGR32323232_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_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_XBGR8888_SINT); - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBX_SINT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_RGBA8UI_EXT: RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8); @@ -698,43 +698,43 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32); break; case GL_RGBA8I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT8); break; case GL_RGBA16I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT16); break; case GL_RGBA32I_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_SINT32); break; case GL_R8: case GL_RED: - RETURN_IF_SUPPORTED(MESA_FORMAT_R8); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM8); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_RGTC1_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM8); break; case GL_R16: - RETURN_IF_SUPPORTED(MESA_FORMAT_R16); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_UNORM16); break; case GL_RG: case GL_RG8: - RETURN_IF_SUPPORTED(MESA_FORMAT_GR88); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM); 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); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2_UNORM); + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8_UNORM); break; case GL_RG16: - RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616); + RETURN_IF_SUPPORTED(MESA_FORMAT_R16G16_UNORM); break; case GL_R16F: @@ -785,31 +785,31 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32); break; case GL_R8I: - RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT8); break; case GL_RG8I: - RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT8); break; case GL_R16I: - RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT16); break; case GL_RG16I: - RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT16); break; case GL_R32I: - RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_SINT32); break; case GL_RG32I: - RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_SINT32); break; case GL_RGB10_A2UI: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT); - RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UINT); + RETURN_IF_SUPPORTED(MESA_FORMAT_R10G10B10A2_UINT); break; case GL_BGRA: - RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888); + RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); break; } diff --git a/mesalib/src/mesa/main/texformat.h b/mesalib/src/mesa/main/texformat.h index 88ad4d1a7..32e209997 100644 --- a/mesalib/src/mesa/main/texformat.h +++ b/mesalib/src/mesa/main/texformat.h @@ -31,7 +31,7 @@ struct gl_context; -extern gl_format +extern mesa_format _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type); diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c index 200d29c2f..133fa5376 100644 --- a/mesalib/src/mesa/main/texgetimage.c +++ b/mesalib/src/mesa/main/texgetimage.c @@ -225,7 +225,7 @@ get_tex_rgba_compressed(struct gl_context *ctx, GLuint dimensions, GLbitfield transferOps) { /* don't want to apply sRGB -> RGB conversion here so override the format */ - const gl_format texFormat = + const mesa_format texFormat = _mesa_get_srgb_format_linear(texImage->TexFormat); const GLenum baseFormat = _mesa_get_format_base_format(texFormat); const GLenum destBaseFormat = _mesa_base_tex_format(ctx, format); @@ -360,7 +360,7 @@ get_tex_rgba_uncompressed(struct gl_context *ctx, GLuint dimensions, GLbitfield transferOps) { /* don't want to apply sRGB -> RGB conversion here so override the format */ - const gl_format texFormat = + const mesa_format texFormat = _mesa_get_srgb_format_linear(texImage->TexFormat); const GLuint width = texImage->Width; GLenum destBaseFormat = _mesa_base_pack_format(format); diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c index 8aac54e9d..4d635fe7f 100644 --- a/mesalib/src/mesa/main/teximage.c +++ b/mesalib/src/mesa/main/teximage.c @@ -689,8 +689,8 @@ _mesa_is_proxy_texture(GLenum target) /** * Return the proxy target which corresponds to the given texture target */ -GLenum -_mesa_get_proxy_target(GLenum target) +static GLenum +proxy_target(GLenum target) { switch (target) { case GL_TEXTURE_1D: @@ -730,27 +730,21 @@ _mesa_get_proxy_target(GLenum target) case GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: return GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY; default: - _mesa_problem(NULL, "unexpected target in _mesa_get_proxy_target()"); + _mesa_problem(NULL, "unexpected target in proxy_target()"); return 0; } } /** - * Get the texture object that corresponds to the target of the given - * texture unit. The target should have already been checked for validity. - * - * \param ctx GL context. - * \param texUnit texture unit. - * \param target texture target. - * - * \return pointer to the texture object on success, or NULL on failure. + * Return a pointer to the current texture object for the given target + * on the current texture unit. + * Note: all error checking should have been done by this point. */ struct gl_texture_object * -_mesa_select_tex_object(struct gl_context *ctx, - const struct gl_texture_unit *texUnit, - GLenum target) +_mesa_get_current_tex_object(struct gl_context *ctx, GLenum target) { + struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); const GLboolean arrayTex = ctx->Extensions.EXT_texture_array; switch (target) { @@ -818,22 +812,12 @@ _mesa_select_tex_object(struct gl_context *ctx, return ctx->Extensions.ARB_texture_multisample ? ctx->Texture.ProxyTex[TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX] : NULL; default: - _mesa_problem(NULL, "bad target in _mesa_select_tex_object()"); + _mesa_problem(NULL, "bad target in _mesa_get_current_tex_object()"); return NULL; } } -/** - * Return pointer to texture object for given target on current texture unit. - */ -struct gl_texture_object * -_mesa_get_current_tex_object(struct gl_context *ctx, GLenum target) -{ - struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); - return _mesa_select_tex_object(ctx, texUnit, target); -} - /** * Get a texture image pointer from a texture object, given a texture @@ -1325,7 +1309,7 @@ _mesa_init_teximage_fields(struct gl_context *ctx, struct gl_texture_image *img, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum internalFormat, - gl_format format) + mesa_format format) { GLenum target; ASSERT(img); @@ -1568,7 +1552,7 @@ _mesa_legal_texture_dimensions(struct gl_context *ctx, GLenum target, return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; - if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers) + if (depth < 0 || depth > ctx->Const.MaxArrayTextureLayers) return GL_FALSE; if (!ctx->Extensions.ARB_texture_non_power_of_two) { if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) @@ -1585,7 +1569,7 @@ _mesa_legal_texture_dimensions(struct gl_context *ctx, GLenum target, return GL_FALSE; if (height < 2 * border || height > 2 * border + maxSize) return GL_FALSE; - if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers || depth % 6) + if (depth < 0 || depth > ctx->Const.MaxArrayTextureLayers || depth % 6) return GL_FALSE; if (width != height) return GL_FALSE; @@ -1748,7 +1732,7 @@ error_check_subtexture_dimensions(struct gl_context *ctx, */ GLboolean _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, - gl_format format, + mesa_format format, GLint width, GLint height, GLint depth, GLint border) { /* We just check if the image size is less than MaxTextureMbytes. @@ -1957,10 +1941,79 @@ static GLuint compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth, GLenum glformat) { - gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat); + mesa_format mesaFormat = _mesa_glenum_to_compressed_format(glformat); return _mesa_format_image_size(mesaFormat, width, height, depth); } +/** + * Verify that a texture format is valid with a particular target + * + * In particular, textures with base format of \c GL_DEPTH_COMPONENT or + * \c GL_DEPTH_STENCIL are only valid with certain, context dependent texture + * targets. + * + * \param ctx GL context + * \param target Texture target + * \param internalFormat Internal format of the texture image + * \param dimensions Dimensionality at the caller. This is \b not used + * in the validation. It is only used when logging + * error messages. + * \param caller Base name of the calling function (e.g., + * "glTexImage" or "glTexStorage"). + * + * \returns true if the combination is legal, false otherwise. + */ +bool +_mesa_legal_texture_base_format_for_target(struct gl_context *ctx, + GLenum target, GLenum internalFormat, + unsigned dimensions, + const char *caller) +{ + if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT + || _mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_STENCIL) { + /* Section 3.8.3 (Texture Image Specification) of the OpenGL 3.3 Core + * Profile spec says: + * + * "Textures with a base internal format of DEPTH_COMPONENT or + * DEPTH_STENCIL are supported by texture image specification + * commands only if target is TEXTURE_1D, TEXTURE_2D, + * TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_RECTANGLE, + * TEXTURE_CUBE_MAP, PROXY_TEXTURE_1D, PROXY_TEXTURE_2D, + * PROXY_TEXTURE_1D_ARRAY, PROXY_TEXTURE_2D_ARRAY, + * PROXY_TEXTURE_RECTANGLE, or PROXY_TEXTURE_CUBE_MAP. Using these + * formats in conjunction with any other target will result in an + * INVALID_OPERATION error." + * + * Cubemaps are only supported with desktop OpenGL version >= 3.0, + * EXT_gpu_shader4, or, on OpenGL ES 2.0+, OES_depth_texture_cube_map. + */ + if (target != GL_TEXTURE_1D && + target != GL_PROXY_TEXTURE_1D && + target != GL_TEXTURE_2D && + target != GL_PROXY_TEXTURE_2D && + target != GL_TEXTURE_1D_ARRAY && + target != GL_PROXY_TEXTURE_1D_ARRAY && + target != GL_TEXTURE_2D_ARRAY && + target != GL_PROXY_TEXTURE_2D_ARRAY && + target != GL_TEXTURE_RECTANGLE_ARB && + target != GL_PROXY_TEXTURE_RECTANGLE_ARB && + !((_mesa_is_cube_face(target) || + target == GL_TEXTURE_CUBE_MAP || + target == GL_PROXY_TEXTURE_CUBE_MAP) && + (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4 + || (ctx->API == API_OPENGLES2 && ctx->Extensions.OES_depth_texture_cube_map))) && + !((target == GL_TEXTURE_CUBE_MAP_ARRAY || + target == GL_PROXY_TEXTURE_CUBE_MAP_ARRAY) && + ctx->Extensions.ARB_texture_cube_map_array)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s%dD(bad target for depth texture)", + caller, dimensions); + return false; + } + } + + return true; +} /** * Test the glTexImage[123]D() parameters for errors. @@ -2131,32 +2184,9 @@ texture_error_check( struct gl_context *ctx, } /* additional checks for depth textures */ - if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT - || _mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_STENCIL) { - /* Only 1D, 2D, rect, array and cube textures supported, not 3D - * Cubemaps are only supported for GL version > 3.0 or with EXT_gpu_shader4 */ - if (target != GL_TEXTURE_1D && - target != GL_PROXY_TEXTURE_1D && - target != GL_TEXTURE_2D && - target != GL_PROXY_TEXTURE_2D && - target != GL_TEXTURE_1D_ARRAY && - target != GL_PROXY_TEXTURE_1D_ARRAY && - target != GL_TEXTURE_2D_ARRAY && - target != GL_PROXY_TEXTURE_2D_ARRAY && - target != GL_TEXTURE_RECTANGLE_ARB && - target != GL_PROXY_TEXTURE_RECTANGLE_ARB && - !((_mesa_is_cube_face(target) || target == GL_PROXY_TEXTURE_CUBE_MAP) && - (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4 - || (ctx->API == API_OPENGLES2 && ctx->Extensions.OES_depth_texture_cube_map))) && - !((target == GL_TEXTURE_CUBE_MAP_ARRAY || - target == GL_PROXY_TEXTURE_CUBE_MAP_ARRAY) && - ctx->Extensions.ARB_texture_cube_map_array)) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glTexImage%dD(bad target for depth texture)", - dimensions); - return GL_TRUE; - } - } + if (!_mesa_legal_texture_base_format_for_target(ctx, target, internalFormat, + dimensions, "glTexImage")) + return GL_TRUE; /* additional checks for compressed textures */ if (_mesa_is_compressed_format(ctx, internalFormat)) { @@ -2918,13 +2948,13 @@ override_internal_format(GLenum internalFormat, GLint width, GLint height) * for efficient texture memory layout/allocation. In particular, this * comes up during automatic mipmap generation. */ -gl_format +mesa_format _mesa_choose_texture_format(struct gl_context *ctx, struct gl_texture_object *texObj, GLenum target, GLint level, GLenum internalFormat, GLenum format, GLenum type) { - gl_format f; + mesa_format f; /* see if we've already chosen a format for the previous level */ if (level > 0) { @@ -3046,7 +3076,7 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims, struct gl_pixelstore_attrib unpack_no_border; const struct gl_pixelstore_attrib *unpack = &ctx->Unpack; struct gl_texture_object *texObj; - gl_format texFormat; + mesa_format texFormat; GLboolean dimensionsOK, sizeOK; FLUSH_VERTICES(ctx, 0); @@ -3137,7 +3167,7 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims, height, depth, border); /* check that the texture won't take too much memory, etc */ - sizeOK = ctx->Driver.TestProxyTexImage(ctx, _mesa_get_proxy_target(target), + sizeOK = ctx->Driver.TestProxyTexImage(ctx, proxy_target(target), level, texFormat, width, height, depth, border); @@ -3412,7 +3442,9 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, check_gen_mipmap(ctx, target, texObj, level); - ctx->NewState |= _NEW_TEXTURE; + /* NOTE: Don't signal _NEW_TEXTURE since we've only changed + * the texel data, not the texture format, size, etc. + */ } } _mesa_unlock_texture(ctx, texObj); @@ -3470,7 +3502,7 @@ _mesa_TexSubImage3D( GLenum target, GLint level, * from. This depends on whether the texture contains color or depth values. */ static struct gl_renderbuffer * -get_copy_tex_image_source(struct gl_context *ctx, gl_format texFormat) +get_copy_tex_image_source(struct gl_context *ctx, mesa_format texFormat) { if (_mesa_get_format_bits(texFormat, GL_DEPTH_BITS) > 0) { /* reading from depth/stencil buffer */ @@ -3524,7 +3556,7 @@ copyteximage(struct gl_context *ctx, GLuint dims, struct gl_texture_object *texObj; struct gl_texture_image *texImage; const GLuint face = _mesa_tex_target_to_face(target); - gl_format texFormat; + mesa_format texFormat; FLUSH_VERTICES(ctx, 0); @@ -3556,7 +3588,7 @@ copyteximage(struct gl_context *ctx, GLuint dims, internalFormat, GL_NONE, GL_NONE); assert(texFormat != MESA_FORMAT_NONE); - if (!ctx->Driver.TestProxyTexImage(ctx, _mesa_get_proxy_target(target), + if (!ctx->Driver.TestProxyTexImage(ctx, proxy_target(target), level, texFormat, width, height, 1, border)) { _mesa_error(ctx, GL_OUT_OF_MEMORY, @@ -3699,7 +3731,9 @@ copytexsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, check_gen_mipmap(ctx, target, texObj, level); - ctx->NewState |= _NEW_TEXTURE; + /* NOTE: Don't signal _NEW_TEXTURE since we've only changed + * the texel data, not the texture format, size, etc. + */ } } _mesa_unlock_texture(ctx, texObj); @@ -3924,7 +3958,9 @@ compressed_tex_sub_image(GLuint dims, GLenum target, GLint level, check_gen_mipmap(ctx, target, texObj, level); - ctx->NewState |= _NEW_TEXTURE; + /* NOTE: Don't signal _NEW_TEXTURE since we've only changed + * the texel data, not the texture format, size, etc. + */ } } _mesa_unlock_texture(ctx, texObj); @@ -3962,91 +3998,91 @@ _mesa_CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, width, height, depth, format, imageSize, data); } -static gl_format +static mesa_format get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) { if (ctx->API != API_OPENGL_CORE) { switch (internalFormat) { case GL_ALPHA8: - return MESA_FORMAT_A8; + return MESA_FORMAT_A_UNORM8; case GL_ALPHA16: - return MESA_FORMAT_A16; + return MESA_FORMAT_A_UNORM16; case GL_ALPHA16F_ARB: - return MESA_FORMAT_ALPHA_FLOAT16; + return MESA_FORMAT_A_FLOAT16; case GL_ALPHA32F_ARB: - return MESA_FORMAT_ALPHA_FLOAT32; + return MESA_FORMAT_A_FLOAT32; case GL_ALPHA8I_EXT: - return MESA_FORMAT_ALPHA_INT8; + return MESA_FORMAT_A_SINT8; case GL_ALPHA16I_EXT: - return MESA_FORMAT_ALPHA_INT16; + return MESA_FORMAT_A_SINT16; case GL_ALPHA32I_EXT: - return MESA_FORMAT_ALPHA_INT32; + return MESA_FORMAT_A_SINT32; case GL_ALPHA8UI_EXT: - return MESA_FORMAT_ALPHA_UINT8; + return MESA_FORMAT_A_UINT8; case GL_ALPHA16UI_EXT: - return MESA_FORMAT_ALPHA_UINT16; + return MESA_FORMAT_A_UINT16; case GL_ALPHA32UI_EXT: - return MESA_FORMAT_ALPHA_UINT32; + return MESA_FORMAT_A_UINT32; case GL_LUMINANCE8: - return MESA_FORMAT_L8; + return MESA_FORMAT_L_UNORM8; case GL_LUMINANCE16: - return MESA_FORMAT_L16; + return MESA_FORMAT_L_UNORM16; case GL_LUMINANCE16F_ARB: - return MESA_FORMAT_LUMINANCE_FLOAT16; + return MESA_FORMAT_L_FLOAT16; case GL_LUMINANCE32F_ARB: - return MESA_FORMAT_LUMINANCE_FLOAT32; + return MESA_FORMAT_L_FLOAT32; case GL_LUMINANCE8I_EXT: - return MESA_FORMAT_LUMINANCE_INT8; + return MESA_FORMAT_L_SINT8; case GL_LUMINANCE16I_EXT: - return MESA_FORMAT_LUMINANCE_INT16; + return MESA_FORMAT_L_SINT16; case GL_LUMINANCE32I_EXT: - return MESA_FORMAT_LUMINANCE_INT32; + return MESA_FORMAT_L_SINT32; case GL_LUMINANCE8UI_EXT: - return MESA_FORMAT_LUMINANCE_UINT8; + return MESA_FORMAT_L_UINT8; case GL_LUMINANCE16UI_EXT: - return MESA_FORMAT_LUMINANCE_UINT16; + return MESA_FORMAT_L_UINT16; case GL_LUMINANCE32UI_EXT: - return MESA_FORMAT_LUMINANCE_UINT32; + return MESA_FORMAT_L_UINT32; case GL_LUMINANCE8_ALPHA8: - return MESA_FORMAT_AL88; + return MESA_FORMAT_L8A8_UNORM; case GL_LUMINANCE16_ALPHA16: - return MESA_FORMAT_AL1616; + return MESA_FORMAT_L16A16_UNORM; case GL_LUMINANCE_ALPHA16F_ARB: - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16; + return MESA_FORMAT_LA_FLOAT16; case GL_LUMINANCE_ALPHA32F_ARB: - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32; + return MESA_FORMAT_LA_FLOAT32; case GL_LUMINANCE_ALPHA8I_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT8; + return MESA_FORMAT_LA_SINT8; case GL_LUMINANCE_ALPHA16I_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT8; + return MESA_FORMAT_LA_SINT8; case GL_LUMINANCE_ALPHA32I_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT16; + return MESA_FORMAT_LA_SINT16; case GL_LUMINANCE_ALPHA8UI_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT8; + return MESA_FORMAT_LA_UINT8; case GL_LUMINANCE_ALPHA16UI_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT16; + return MESA_FORMAT_LA_UINT16; case GL_LUMINANCE_ALPHA32UI_EXT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT32; + return MESA_FORMAT_LA_UINT32; case GL_INTENSITY8: - return MESA_FORMAT_I8; + return MESA_FORMAT_I_UNORM8; case GL_INTENSITY16: - return MESA_FORMAT_I16; + return MESA_FORMAT_I_UNORM16; case GL_INTENSITY16F_ARB: - return MESA_FORMAT_INTENSITY_FLOAT16; + return MESA_FORMAT_I_FLOAT16; case GL_INTENSITY32F_ARB: - return MESA_FORMAT_INTENSITY_FLOAT32; + return MESA_FORMAT_I_FLOAT32; case GL_INTENSITY8I_EXT: - return MESA_FORMAT_INTENSITY_INT8; + return MESA_FORMAT_I_SINT8; case GL_INTENSITY16I_EXT: - return MESA_FORMAT_INTENSITY_INT16; + return MESA_FORMAT_I_SINT16; case GL_INTENSITY32I_EXT: - return MESA_FORMAT_INTENSITY_INT32; + return MESA_FORMAT_I_SINT32; case GL_INTENSITY8UI_EXT: - return MESA_FORMAT_INTENSITY_UINT8; + return MESA_FORMAT_I_UINT8; case GL_INTENSITY16UI_EXT: - return MESA_FORMAT_INTENSITY_UINT16; + return MESA_FORMAT_I_UINT16; case GL_INTENSITY32UI_EXT: - return MESA_FORMAT_INTENSITY_UINT32; + return MESA_FORMAT_I_UINT32; default: break; } @@ -4060,7 +4096,7 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) case GL_RGB32UI: return MESA_FORMAT_RGB_UINT32; case GL_RGB32I: - return MESA_FORMAT_RGB_INT32; + return MESA_FORMAT_RGB_SINT32; default: break; } @@ -4068,19 +4104,19 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) switch (internalFormat) { case GL_RGBA8: - return MESA_FORMAT_RGBA8888_REV; + return MESA_FORMAT_R8G8B8A8_UNORM; case GL_RGBA16: - return MESA_FORMAT_RGBA_16; + return MESA_FORMAT_RGBA_UNORM16; case GL_RGBA16F_ARB: return MESA_FORMAT_RGBA_FLOAT16; case GL_RGBA32F_ARB: return MESA_FORMAT_RGBA_FLOAT32; case GL_RGBA8I_EXT: - return MESA_FORMAT_RGBA_INT8; + return MESA_FORMAT_RGBA_SINT8; case GL_RGBA16I_EXT: - return MESA_FORMAT_RGBA_INT16; + return MESA_FORMAT_RGBA_SINT16; case GL_RGBA32I_EXT: - return MESA_FORMAT_RGBA_INT32; + return MESA_FORMAT_RGBA_SINT32; case GL_RGBA8UI_EXT: return MESA_FORMAT_RGBA_UINT8; case GL_RGBA16UI_EXT: @@ -4089,19 +4125,19 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) return MESA_FORMAT_RGBA_UINT32; case GL_RG8: - return MESA_FORMAT_GR88; + return MESA_FORMAT_R8G8_UNORM; case GL_RG16: - return MESA_FORMAT_GR1616; + return MESA_FORMAT_R16G16_UNORM; case GL_RG16F: return MESA_FORMAT_RG_FLOAT16; case GL_RG32F: return MESA_FORMAT_RG_FLOAT32; case GL_RG8I: - return MESA_FORMAT_RG_INT8; + return MESA_FORMAT_RG_SINT8; case GL_RG16I: - return MESA_FORMAT_RG_INT16; + return MESA_FORMAT_RG_SINT16; case GL_RG32I: - return MESA_FORMAT_RG_INT32; + return MESA_FORMAT_RG_SINT32; case GL_RG8UI: return MESA_FORMAT_RG_UINT8; case GL_RG16UI: @@ -4110,19 +4146,19 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) return MESA_FORMAT_RG_UINT32; case GL_R8: - return MESA_FORMAT_R8; + return MESA_FORMAT_R_UNORM8; case GL_R16: - return MESA_FORMAT_R16; + return MESA_FORMAT_R_UNORM16; case GL_R16F: return MESA_FORMAT_R_FLOAT16; case GL_R32F: return MESA_FORMAT_R_FLOAT32; case GL_R8I: - return MESA_FORMAT_R_INT8; + return MESA_FORMAT_R_SINT8; case GL_R16I: - return MESA_FORMAT_R_INT16; + return MESA_FORMAT_R_SINT16; case GL_R32I: - return MESA_FORMAT_R_INT32; + return MESA_FORMAT_R_SINT32; case GL_R8UI: return MESA_FORMAT_R_UINT8; case GL_R16UI: @@ -4136,11 +4172,11 @@ get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) } -gl_format +mesa_format _mesa_validate_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat) { - gl_format format = get_texbuffer_format(ctx, internalFormat); + mesa_format format = get_texbuffer_format(ctx, internalFormat); GLenum datatype; if (format == MESA_FORMAT_NONE) @@ -4174,7 +4210,7 @@ texbufferrange(struct gl_context *ctx, GLenum target, GLenum internalFormat, GLintptr offset, GLsizeiptr size) { struct gl_texture_object *texObj; - gl_format format; + mesa_format format; FLUSH_VERTICES(ctx, 0); @@ -4311,7 +4347,7 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples, struct gl_texture_object *texObj; struct gl_texture_image *texImage; GLboolean sizeOK, dimensionsOK; - gl_format texFormat; + mesa_format texFormat; GLenum sample_count_error; GET_CURRENT_CONTEXT(ctx); diff --git a/mesalib/src/mesa/main/teximage.h b/mesalib/src/mesa/main/teximage.h index 80a0a57b5..5f8a47776 100644 --- a/mesalib/src/mesa/main/teximage.h +++ b/mesalib/src/mesa/main/teximage.h @@ -66,9 +66,6 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat ); extern GLboolean _mesa_is_proxy_texture(GLenum target); -extern GLenum -_mesa_get_proxy_target(GLenum target); - extern struct gl_texture_image * _mesa_new_texture_image( struct gl_context *ctx ); @@ -83,10 +80,10 @@ _mesa_init_teximage_fields(struct gl_context *ctx, struct gl_texture_image *img, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum internalFormat, - gl_format format); + mesa_format format); -extern gl_format +extern mesa_format _mesa_choose_texture_format(struct gl_context *ctx, struct gl_texture_object *texObj, GLenum target, GLint level, @@ -102,11 +99,6 @@ _mesa_clear_texture_image(struct gl_context *ctx, struct gl_texture_image *texImage); -extern struct gl_texture_object * -_mesa_select_tex_object(struct gl_context *ctx, - const struct gl_texture_unit *texUnit, - GLenum target); - extern struct gl_texture_object * _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target); @@ -128,7 +120,7 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target); extern GLboolean _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, - gl_format format, + mesa_format format, GLint width, GLint height, GLint depth, GLint border); @@ -153,10 +145,18 @@ _mesa_legal_texture_dimensions(struct gl_context *ctx, GLenum target, GLint level, GLint width, GLint height, GLint depth, GLint border); -extern gl_format +extern mesa_format _mesa_validate_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat); + +bool +_mesa_legal_texture_base_format_for_target(struct gl_context *ctx, + GLenum target, + GLenum internalFormat, + unsigned dimensions, + const char *caller); + /** * Lock a texture for updating. See also _mesa_lock_context_textures(). */ diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c index 5d516c55f..6adc0ae84 100644 --- a/mesalib/src/mesa/main/texobj.c +++ b/mesalib/src/mesa/main/texobj.c @@ -156,7 +156,7 @@ _mesa_initialize_texture_object( struct gl_context *ctx, obj->_Swizzle = SWIZZLE_NOOP; obj->Sampler.sRGBDecode = GL_DECODE_EXT; obj->BufferObjectFormat = GL_R8; - obj->_BufferObjectFormat = MESA_FORMAT_R8; + obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8; obj->ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE; } @@ -189,12 +189,12 @@ finish_texture_init(struct gl_context *ctx, GLenum target, if (ctx->Driver.TexParameter) { static const GLfloat fparam_wrap[1] = {(GLfloat) GL_CLAMP_TO_EDGE}; const GLfloat fparam_filter[1] = {(GLfloat) filter}; - ctx->Driver.TexParameter(ctx, target, obj, GL_TEXTURE_WRAP_S, fparam_wrap); - ctx->Driver.TexParameter(ctx, target, obj, GL_TEXTURE_WRAP_T, fparam_wrap); - ctx->Driver.TexParameter(ctx, target, obj, GL_TEXTURE_WRAP_R, fparam_wrap); - ctx->Driver.TexParameter(ctx, target, obj, + ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_S, fparam_wrap); + ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_T, fparam_wrap); + ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_R, fparam_wrap); + ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_MIN_FILTER, fparam_filter); - ctx->Driver.TexParameter(ctx, target, obj, + ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_MAG_FILTER, fparam_filter); } break; @@ -745,7 +745,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex) GLubyte texel[4]; struct gl_texture_object *texObj; struct gl_texture_image *texImage; - gl_format texFormat; + mesa_format texFormat; GLuint dims, face, numFaces = 1; GLenum target; @@ -1198,8 +1198,8 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures) * Note that proxy targets are not valid here. * \return TEXTURE_x_INDEX or -1 if target is invalid */ -static GLint -target_enum_to_index(const struct gl_context *ctx, GLenum target) +int +_mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target) { switch (target) { case GL_TEXTURE_1D: @@ -1270,7 +1270,7 @@ _mesa_BindTexture( GLenum target, GLuint texName ) _mesa_debug(ctx, "glBindTexture %s %d\n", _mesa_lookup_enum_by_nr(target), (GLint) texName); - targetIndex = target_enum_to_index(ctx, target); + targetIndex = _mesa_tex_target_to_index(ctx, target); if (targetIndex < 0) { _mesa_error(ctx, GL_INVALID_ENUM, "glBindTexture(target)"); return; diff --git a/mesalib/src/mesa/main/texobj.h b/mesalib/src/mesa/main/texobj.h index 55091a642..a4573b399 100644 --- a/mesalib/src/mesa/main/texobj.h +++ b/mesalib/src/mesa/main/texobj.h @@ -54,6 +54,9 @@ _mesa_initialize_texture_object( struct gl_context *ctx, struct gl_texture_object *obj, GLuint name, GLenum target ); +extern int +_mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target); + extern void _mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *obj ); diff --git a/mesalib/src/mesa/main/texparam.c b/mesalib/src/mesa/main/texparam.c index 7c59d119f..b7ed50dd5 100644 --- a/mesalib/src/mesa/main/texparam.c +++ b/mesalib/src/mesa/main/texparam.c @@ -118,14 +118,15 @@ validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap) /** * Get current texture object for given target. * Return NULL if any error (and record the error). - * Note that this is different from _mesa_select_tex_object() in that proxy - * targets are not accepted. + * Note that this is different from _mesa_get_current_tex_object() in that + * proxy targets are not accepted. * Only the glGetTexLevelParameter() functions accept proxy targets. */ static struct gl_texture_object * get_texobj(struct gl_context *ctx, GLenum target, GLboolean get) { struct gl_texture_unit *texUnit; + int targetIndex; if (ctx->Texture.CurrentUnit >= ctx->Const.MaxCombinedTextureImageUnits) { _mesa_error(ctx, GL_INVALID_OPERATION, @@ -135,66 +136,15 @@ get_texobj(struct gl_context *ctx, GLenum target, GLboolean get) texUnit = _mesa_get_current_tex_unit(ctx); - switch (target) { - case GL_TEXTURE_1D: - if (_mesa_is_desktop_gl(ctx)) - return texUnit->CurrentTex[TEXTURE_1D_INDEX]; - break; - case GL_TEXTURE_2D: - return texUnit->CurrentTex[TEXTURE_2D_INDEX]; - case GL_TEXTURE_3D: - if (ctx->API != API_OPENGLES) - return texUnit->CurrentTex[TEXTURE_3D_INDEX]; - break; - case GL_TEXTURE_CUBE_MAP: - if (ctx->Extensions.ARB_texture_cube_map) { - return texUnit->CurrentTex[TEXTURE_CUBE_INDEX]; - } - break; - case GL_TEXTURE_RECTANGLE_NV: - if (_mesa_is_desktop_gl(ctx) - && ctx->Extensions.NV_texture_rectangle) { - return texUnit->CurrentTex[TEXTURE_RECT_INDEX]; - } - break; - case GL_TEXTURE_1D_ARRAY_EXT: - if (_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_array) { - return texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX]; - } - break; - case GL_TEXTURE_2D_ARRAY_EXT: - if ((_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) - && ctx->Extensions.EXT_texture_array) { - return texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX]; - } - break; - case GL_TEXTURE_EXTERNAL_OES: - if (_mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external) { - return texUnit->CurrentTex[TEXTURE_EXTERNAL_INDEX]; - } - break; - case GL_TEXTURE_CUBE_MAP_ARRAY: - if (ctx->Extensions.ARB_texture_cube_map_array) { - return texUnit->CurrentTex[TEXTURE_CUBE_ARRAY_INDEX]; - } - break; - case GL_TEXTURE_2D_MULTISAMPLE: - if (ctx->Extensions.ARB_texture_multisample) { - return texUnit->CurrentTex[TEXTURE_2D_MULTISAMPLE_INDEX]; - } - break; - case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: - if (ctx->Extensions.ARB_texture_multisample) { - return texUnit->CurrentTex[TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX]; - } - break; - default: - ; + targetIndex = _mesa_tex_target_to_index(ctx, target); + if (targetIndex < 0 || targetIndex == TEXTURE_BUFFER_INDEX) { + _mesa_error(ctx, GL_INVALID_ENUM, + "gl%sTexParameter(target)", get ? "Get" : ""); + return NULL; } + assert(targetIndex < NUM_TEXTURE_TARGETS); - _mesa_error(ctx, GL_INVALID_ENUM, - "gl%sTexParameter(target)", get ? "Get" : ""); - return NULL; + return texUnit->CurrentTex[targetIndex]; } @@ -784,7 +734,7 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param) } if (ctx->Driver.TexParameter && need_update) { - ctx->Driver.TexParameter(ctx, target, texObj, pname, ¶m); + ctx->Driver.TexParameter(ctx, texObj, pname, ¶m); } } @@ -855,7 +805,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params) } if (ctx->Driver.TexParameter && need_update) { - ctx->Driver.TexParameter(ctx, target, texObj, pname, params); + ctx->Driver.TexParameter(ctx, texObj, pname, params); } } @@ -898,7 +848,7 @@ _mesa_TexParameteri(GLenum target, GLenum pname, GLint param) if (ctx->Driver.TexParameter && need_update) { GLfloat fparam = (GLfloat) param; - ctx->Driver.TexParameter(ctx, target, texObj, pname, &fparam); + ctx->Driver.TexParameter(ctx, texObj, pname, &fparam); } } @@ -954,7 +904,7 @@ _mesa_TexParameteriv(GLenum target, GLenum pname, const GLint *params) fparams[2] = INT_TO_FLOAT(params[2]); fparams[3] = INT_TO_FLOAT(params[3]); } - ctx->Driver.TexParameter(ctx, target, texObj, pname, fparams); + ctx->Driver.TexParameter(ctx, texObj, pname, fparams); } } @@ -1081,7 +1031,7 @@ get_tex_level_parameter_image(struct gl_context *ctx, GLenum pname, GLint *params) { const struct gl_texture_image *img = NULL; - gl_format texFormat; + mesa_format texFormat; img = _mesa_select_tex_image(ctx, texObj, target, level); if (!img || img->TexFormat == MESA_FORMAT_NONE) { @@ -1169,7 +1119,7 @@ get_tex_level_parameter_image(struct gl_context *ctx, if (ctx->Version < 30 && !ctx->Extensions.EXT_texture_shared_exponent) goto invalid_pname; - *params = texFormat == MESA_FORMAT_RGB9_E5_FLOAT ? 5 : 0; + *params = texFormat == MESA_FORMAT_R9G9B9E5_FLOAT ? 5 : 0; break; /* GL_ARB_texture_compression */ @@ -1237,7 +1187,7 @@ get_tex_level_parameter_buffer(struct gl_context *ctx, GLenum pname, GLint *params) { const struct gl_buffer_object *bo = texObj->BufferObject; - gl_format texFormat = texObj->_BufferObjectFormat; + mesa_format texFormat = texObj->_BufferObjectFormat; GLenum internalFormat = texObj->BufferObjectFormat; GLenum baseFormat = _mesa_get_format_base_format(texFormat); @@ -1356,7 +1306,6 @@ void GLAPIENTRY _mesa_GetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params ) { - const struct gl_texture_unit *texUnit; struct gl_texture_object *texObj; GLint maxLevels; GET_CURRENT_CONTEXT(ctx); @@ -1367,8 +1316,6 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, return; } - texUnit = _mesa_get_current_tex_unit(ctx); - if (!legal_get_tex_level_parameter_target(ctx, target)) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexLevelParameter[if]v(target=0x%x)", target); @@ -1383,7 +1330,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level, return; } - texObj = _mesa_select_tex_object(ctx, texUnit, target); + texObj = _mesa_get_current_tex_object(ctx, target); if (target == GL_TEXTURE_BUFFER) get_tex_level_parameter_buffer(ctx, texObj, pname, params); diff --git a/mesalib/src/mesa/main/texstorage.c b/mesalib/src/mesa/main/texstorage.c index 22208572f..86c8f3c92 100644 --- a/mesalib/src/mesa/main/texstorage.c +++ b/mesalib/src/mesa/main/texstorage.c @@ -120,7 +120,7 @@ initialize_texture_fields(struct gl_context *ctx, struct gl_texture_object *texObj, GLint levels, GLsizei width, GLsizei height, GLsizei depth, - GLenum internalFormat, gl_format texFormat) + GLenum internalFormat, mesa_format texFormat) { const GLenum target = texObj->Target; const GLuint numFaces = _mesa_num_tex_faces(target); @@ -151,9 +151,8 @@ initialize_texture_fields(struct gl_context *ctx, /** - * Clear all fields of texture object to zeros. Used for proxy texture tests. - * Used for proxy texture tests (and to clean up when a texture memory - * allocation fails). + * Clear all fields of texture object to zeros. Used for proxy texture tests + * and to clean up when a texture memory allocation fails. */ static void clear_texture_fields(struct gl_context *ctx, @@ -332,6 +331,11 @@ tex_storage_error_check(struct gl_context *ctx, GLuint dims, GLenum target, return GL_TRUE; } + /* additional checks for depth textures */ + if (!_mesa_legal_texture_base_format_for_target(ctx, target, internalformat, + dims, "glTexStorage")) + return GL_TRUE; + return GL_FALSE; } @@ -345,7 +349,7 @@ texstorage(GLuint dims, GLenum target, GLsizei levels, GLenum internalformat, { struct gl_texture_object *texObj; GLboolean sizeOK, dimensionsOK; - gl_format texFormat; + mesa_format texFormat; GET_CURRENT_CONTEXT(ctx); diff --git a/mesalib/src/mesa/main/texstore.c b/mesalib/src/mesa/main/texstore.c index 8eaf43a6a..1e4308a04 100644 --- a/mesalib/src/mesa/main/texstore.c +++ b/mesalib/src/mesa/main/texstore.c @@ -923,7 +923,7 @@ _mesa_swizzle_ubyte_image(struct gl_context *ctx, static void memcpy_texture(struct gl_context *ctx, GLuint dimensions, - gl_format dstFormat, + mesa_format dstFormat, GLint dstRowStride, GLubyte **dstSlices, GLint srcWidth, GLint srcHeight, GLint srcDepth, @@ -1012,11 +1012,11 @@ _mesa_texstore_z32(TEXSTORE_PARAMS) const GLuint depthScale = 0xffffffff; GLenum dstType; (void) dims; - ASSERT(dstFormat == MESA_FORMAT_Z32 || - dstFormat == MESA_FORMAT_Z32_FLOAT); + ASSERT(dstFormat == MESA_FORMAT_Z_UNORM32 || + dstFormat == MESA_FORMAT_Z_FLOAT32); ASSERT(_mesa_get_format_bytes(dstFormat) == sizeof(GLuint)); - if (dstFormat == MESA_FORMAT_Z32) + if (dstFormat == MESA_FORMAT_Z_UNORM32) dstType = GL_UNSIGNED_INT; else dstType = GL_FLOAT; @@ -1049,7 +1049,7 @@ _mesa_texstore_x8_z24(TEXSTORE_PARAMS) const GLuint depthScale = 0xffffff; (void) dims; - ASSERT(dstFormat == MESA_FORMAT_X8_Z24); + ASSERT(dstFormat == MESA_FORMAT_Z24_UNORM_S8_UINT); { /* general path */ @@ -1079,7 +1079,7 @@ _mesa_texstore_z24_x8(TEXSTORE_PARAMS) const GLuint depthScale = 0xffffff; (void) dims; - ASSERT(dstFormat == MESA_FORMAT_Z24_X8); + ASSERT(dstFormat == MESA_FORMAT_X8Z24_UNORM); { /* general path */ @@ -1112,7 +1112,7 @@ _mesa_texstore_z16(TEXSTORE_PARAMS) { const GLuint depthScale = 0xffff; (void) dims; - ASSERT(dstFormat == MESA_FORMAT_Z16); + ASSERT(dstFormat == MESA_FORMAT_Z_UNORM16); ASSERT(_mesa_get_format_bytes(dstFormat) == sizeof(GLushort)); { @@ -1141,8 +1141,8 @@ _mesa_texstore_z16(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_rgb565(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_RGB565 || - dstFormat == MESA_FORMAT_RGB565_REV); + ASSERT(dstFormat == MESA_FORMAT_B5G6R5_UNORM || + dstFormat == MESA_FORMAT_R5G6B5_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 2); if (!ctx->_ImageTransferState && @@ -1163,7 +1163,7 @@ _mesa_texstore_rgb565(TEXSTORE_PARAMS) const GLubyte *srcUB = (const GLubyte *) src; GLushort *dstUS = (GLushort *) dst; /* check for byteswapped format */ - if (dstFormat == MESA_FORMAT_RGB565) { + if (dstFormat == MESA_FORMAT_B5G6R5_UNORM) { for (col = 0; col < srcWidth; col++) { dstUS[col] = PACK_COLOR_565( srcUB[0], srcUB[1], srcUB[2] ); srcUB += 3; @@ -1190,17 +1190,17 @@ _mesa_texstore_rgb565(TEXSTORE_PARAMS) /** - * Store a texture in MESA_FORMAT_RGBA8888 or MESA_FORMAT_RGBA8888_REV. + * Store a texture in MESA_FORMAT_A8B8G8R8_UNORM or MESA_FORMAT_R8G8B8A8_UNORM. */ static GLboolean _mesa_texstore_rgba8888(TEXSTORE_PARAMS) { const GLboolean littleEndian = _mesa_little_endian(); - ASSERT(dstFormat == MESA_FORMAT_RGBA8888 || - dstFormat == MESA_FORMAT_RGBA8888_REV || - dstFormat == MESA_FORMAT_RGBX8888 || - dstFormat == MESA_FORMAT_RGBX8888_REV); + ASSERT(dstFormat == MESA_FORMAT_A8B8G8R8_UNORM || + dstFormat == MESA_FORMAT_R8G8B8A8_UNORM || + dstFormat == MESA_FORMAT_X8B8G8R8_UNORM || + dstFormat == MESA_FORMAT_R8G8B8X8_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); if (!ctx->_ImageTransferState && @@ -1214,10 +1214,10 @@ _mesa_texstore_rgba8888(TEXSTORE_PARAMS) /* dstmap - how to swizzle from RGBA to dst format: */ - if ((littleEndian && (dstFormat == MESA_FORMAT_RGBA8888 || - dstFormat == MESA_FORMAT_RGBX8888)) || - (!littleEndian && (dstFormat == MESA_FORMAT_RGBA8888_REV || - dstFormat == MESA_FORMAT_RGBX8888_REV))) { + if ((littleEndian && (dstFormat == MESA_FORMAT_A8B8G8R8_UNORM || + dstFormat == MESA_FORMAT_X8B8G8R8_UNORM)) || + (!littleEndian && (dstFormat == MESA_FORMAT_R8G8B8A8_UNORM || + dstFormat == MESA_FORMAT_R8G8B8X8_UNORM))) { dstmap[3] = 0; dstmap[2] = 1; dstmap[1] = 2; @@ -1254,16 +1254,16 @@ _mesa_texstore_argb8888(TEXSTORE_PARAMS) { const GLboolean littleEndian = _mesa_little_endian(); - ASSERT(dstFormat == MESA_FORMAT_ARGB8888 || - dstFormat == MESA_FORMAT_ARGB8888_REV || - dstFormat == MESA_FORMAT_XRGB8888 || - dstFormat == MESA_FORMAT_XRGB8888_REV ); + ASSERT(dstFormat == MESA_FORMAT_B8G8R8A8_UNORM || + dstFormat == MESA_FORMAT_A8R8G8B8_UNORM || + dstFormat == MESA_FORMAT_B8G8R8X8_UNORM || + dstFormat == MESA_FORMAT_X8R8G8B8_UNORM ); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && - (dstFormat == MESA_FORMAT_ARGB8888 || - dstFormat == MESA_FORMAT_XRGB8888) && + (dstFormat == MESA_FORMAT_B8G8R8A8_UNORM || + dstFormat == MESA_FORMAT_B8G8R8X8_UNORM) && srcFormat == GL_RGB && (baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB) && @@ -1290,7 +1290,7 @@ _mesa_texstore_argb8888(TEXSTORE_PARAMS) } else if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && - dstFormat == MESA_FORMAT_ARGB8888 && + dstFormat == MESA_FORMAT_B8G8R8A8_UNORM && srcFormat == GL_LUMINANCE_ALPHA && baseInternalFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE) { @@ -1316,7 +1316,7 @@ _mesa_texstore_argb8888(TEXSTORE_PARAMS) } else if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && - dstFormat == MESA_FORMAT_ARGB8888 && + dstFormat == MESA_FORMAT_B8G8R8A8_UNORM && srcFormat == GL_RGBA && baseInternalFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE) { @@ -1358,20 +1358,20 @@ _mesa_texstore_argb8888(TEXSTORE_PARAMS) /* dstmap - how to swizzle from RGBA to dst format: */ - if ((littleEndian && dstFormat == MESA_FORMAT_ARGB8888) || - (littleEndian && dstFormat == MESA_FORMAT_XRGB8888) || - (!littleEndian && dstFormat == MESA_FORMAT_ARGB8888_REV) || - (!littleEndian && dstFormat == MESA_FORMAT_XRGB8888_REV)) { + if ((littleEndian && dstFormat == MESA_FORMAT_B8G8R8A8_UNORM) || + (littleEndian && dstFormat == MESA_FORMAT_B8G8R8X8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_A8R8G8B8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_X8R8G8B8_UNORM)) { dstmap[3] = 3; /* alpha */ dstmap[2] = 0; /* red */ dstmap[1] = 1; /* green */ dstmap[0] = 2; /* blue */ } else { - assert((littleEndian && dstFormat == MESA_FORMAT_ARGB8888_REV) || - (!littleEndian && dstFormat == MESA_FORMAT_ARGB8888) || - (littleEndian && dstFormat == MESA_FORMAT_XRGB8888_REV) || - (!littleEndian && dstFormat == MESA_FORMAT_XRGB8888)); + assert((littleEndian && dstFormat == MESA_FORMAT_A8R8G8B8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_B8G8R8A8_UNORM) || + (littleEndian && dstFormat == MESA_FORMAT_X8R8G8B8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_B8G8R8X8_UNORM)); dstmap[3] = 2; dstmap[2] = 1; dstmap[1] = 0; @@ -1401,7 +1401,7 @@ _mesa_texstore_argb8888(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_rgb888(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_RGB888); + ASSERT(dstFormat == MESA_FORMAT_BGR_UNORM8); ASSERT(_mesa_get_format_bytes(dstFormat) == 3); if (!ctx->_ImageTransferState && @@ -1463,7 +1463,7 @@ _mesa_texstore_rgb888(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_bgr888(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_BGR888); + ASSERT(dstFormat == MESA_FORMAT_RGB_UNORM8); ASSERT(_mesa_get_format_bytes(dstFormat) == 3); if (!ctx->_ImageTransferState && @@ -1525,8 +1525,8 @@ _mesa_texstore_bgr888(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_argb2101010(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_ARGB2101010 || - dstFormat == MESA_FORMAT_XRGB2101010_UNORM); + ASSERT(dstFormat == MESA_FORMAT_B10G10R10A2_UNORM || + dstFormat == MESA_FORMAT_B10G10R10X2_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -1579,7 +1579,7 @@ _mesa_texstore_unorm44(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_AL44); + ASSERT(dstFormat == MESA_FORMAT_L4A4_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 1); { @@ -1622,10 +1622,10 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS) const GLboolean littleEndian = _mesa_little_endian(); const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_AL88 || - dstFormat == MESA_FORMAT_AL88_REV || - dstFormat == MESA_FORMAT_GR88 || - dstFormat == MESA_FORMAT_RG88); + ASSERT(dstFormat == MESA_FORMAT_L8A8_UNORM || + dstFormat == MESA_FORMAT_A8L8_UNORM || + dstFormat == MESA_FORMAT_R8G8_UNORM || + dstFormat == MESA_FORMAT_G8R8_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 2); if (!ctx->_ImageTransferState && @@ -1637,9 +1637,9 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS) /* dstmap - how to swizzle from RGBA to dst format: */ - if (dstFormat == MESA_FORMAT_AL88 || dstFormat == MESA_FORMAT_AL88_REV) { - if ((littleEndian && dstFormat == MESA_FORMAT_AL88) || - (!littleEndian && dstFormat == MESA_FORMAT_AL88_REV)) { + if (dstFormat == MESA_FORMAT_L8A8_UNORM || dstFormat == MESA_FORMAT_A8L8_UNORM) { + if ((littleEndian && dstFormat == MESA_FORMAT_L8A8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_A8L8_UNORM)) { dstmap[0] = 0; dstmap[1] = 3; } @@ -1649,8 +1649,8 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS) } } else { - if ((littleEndian && dstFormat == MESA_FORMAT_GR88) || - (!littleEndian && dstFormat == MESA_FORMAT_RG88)) { + if ((littleEndian && dstFormat == MESA_FORMAT_R8G8_UNORM) || + (!littleEndian && dstFormat == MESA_FORMAT_G8R8_UNORM)) { dstmap[0] = 0; dstmap[1] = 1; } @@ -1687,8 +1687,8 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS) GLubyte *dstRow = dstSlices[img]; for (row = 0; row < srcHeight; row++) { GLushort *dstUS = (GLushort *) dstRow; - if (dstFormat == MESA_FORMAT_AL88 || - dstFormat == MESA_FORMAT_GR88) { + if (dstFormat == MESA_FORMAT_L8A8_UNORM || + dstFormat == MESA_FORMAT_R8G8_UNORM) { for (col = 0; col < srcWidth; col++) { /* src[0] is luminance (or R), src[1] is alpha (or G) */ dstUS[col] = PACK_COLOR_88( src[1], @@ -1721,10 +1721,10 @@ _mesa_texstore_unorm1616(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_AL1616 || - dstFormat == MESA_FORMAT_AL1616_REV || - dstFormat == MESA_FORMAT_GR1616 || - dstFormat == MESA_FORMAT_RG1616); + ASSERT(dstFormat == MESA_FORMAT_L16A16_UNORM || + dstFormat == MESA_FORMAT_A16L16_UNORM || + dstFormat == MESA_FORMAT_R16G16_UNORM || + dstFormat == MESA_FORMAT_G16R16_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -1744,8 +1744,8 @@ _mesa_texstore_unorm1616(TEXSTORE_PARAMS) GLubyte *dstRow = dstSlices[img]; for (row = 0; row < srcHeight; row++) { GLuint *dstUI = (GLuint *) dstRow; - if (dstFormat == MESA_FORMAT_AL1616 || - dstFormat == MESA_FORMAT_GR1616) { + if (dstFormat == MESA_FORMAT_L16A16_UNORM || + dstFormat == MESA_FORMAT_R16G16_UNORM) { for (col = 0; col < srcWidth; col++) { GLushort l, a; @@ -1780,10 +1780,10 @@ _mesa_texstore_unorm16(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_R16 || - dstFormat == MESA_FORMAT_A16 || - dstFormat == MESA_FORMAT_L16 || - dstFormat == MESA_FORMAT_I16); + ASSERT(dstFormat == MESA_FORMAT_R_UNORM16 || + dstFormat == MESA_FORMAT_A_UNORM16 || + dstFormat == MESA_FORMAT_L_UNORM16 || + dstFormat == MESA_FORMAT_I_UNORM16); ASSERT(_mesa_get_format_bytes(dstFormat) == 2); { @@ -1822,8 +1822,8 @@ _mesa_texstore_unorm16(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_rgba_16(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_RGBA_16 || - dstFormat == MESA_FORMAT_XBGR16161616_UNORM); + ASSERT(dstFormat == MESA_FORMAT_RGBA_UNORM16 || + dstFormat == MESA_FORMAT_RGBX_UNORM16); ASSERT(_mesa_get_format_bytes(dstFormat) == 8); { @@ -1874,9 +1874,9 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_RGB_16 || - dstFormat == MESA_FORMAT_SIGNED_RGBA_16 || - dstFormat == MESA_FORMAT_XBGR16161616_SNORM); + ASSERT(dstFormat == MESA_FORMAT_RGB_SNORM16 || + dstFormat == MESA_FORMAT_RGBA_SNORM16 || + dstFormat == MESA_FORMAT_RGBX_SNORM16); { /* general path */ @@ -1901,7 +1901,7 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS) GLubyte *dstRow = dstSlices[img]; for (row = 0; row < srcHeight; row++) { GLshort *dstRowS = (GLshort *) dstRow; - if (dstFormat == MESA_FORMAT_SIGNED_RGBA_16) { + if (dstFormat == MESA_FORMAT_RGBA_SNORM16) { for (col = 0; col < srcWidth; col++) { GLuint c; for (c = 0; c < comps; c++) { @@ -1913,7 +1913,7 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS) dstRow += dstRowStride; src += 4 * srcWidth; } - else if (dstFormat == MESA_FORMAT_XBGR16161616_SNORM) { + else if (dstFormat == MESA_FORMAT_RGBX_SNORM16) { for (col = 0; col < srcWidth; col++) { GLuint c; @@ -1955,10 +1955,10 @@ _mesa_texstore_unorm8(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_A8 || - dstFormat == MESA_FORMAT_L8 || - dstFormat == MESA_FORMAT_I8 || - dstFormat == MESA_FORMAT_R8); + ASSERT(dstFormat == MESA_FORMAT_A_UNORM8 || + dstFormat == MESA_FORMAT_L_UNORM8 || + dstFormat == MESA_FORMAT_I_UNORM8 || + dstFormat == MESA_FORMAT_R_UNORM8); ASSERT(_mesa_get_format_bytes(dstFormat) == 1); if (!ctx->_ImageTransferState && @@ -1969,7 +1969,7 @@ _mesa_texstore_unorm8(TEXSTORE_PARAMS) /* dstmap - how to swizzle from RGBA to dst format: */ - if (dstFormat == MESA_FORMAT_A8) { + if (dstFormat == MESA_FORMAT_A_UNORM8) { dstmap[0] = 3; } else { @@ -2147,10 +2147,10 @@ _mesa_texstore_snorm8(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_A8 || - dstFormat == MESA_FORMAT_SIGNED_L8 || - dstFormat == MESA_FORMAT_SIGNED_I8 || - dstFormat == MESA_FORMAT_SIGNED_R8); + ASSERT(dstFormat == MESA_FORMAT_A_SNORM8 || + dstFormat == MESA_FORMAT_L_SNORM8 || + dstFormat == MESA_FORMAT_I_SNORM8 || + dstFormat == MESA_FORMAT_R_SNORM8); ASSERT(_mesa_get_format_bytes(dstFormat) == 1); { @@ -2190,9 +2190,9 @@ _mesa_texstore_snorm88(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_AL88 || - dstFormat == MESA_FORMAT_SIGNED_RG88 || - dstFormat == MESA_FORMAT_SIGNED_RG88_REV); + ASSERT(dstFormat == MESA_FORMAT_L8A8_SNORM || + dstFormat == MESA_FORMAT_G8R8_SNORM || + dstFormat == MESA_FORMAT_R8G8_SNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 2); { @@ -2213,8 +2213,8 @@ _mesa_texstore_snorm88(TEXSTORE_PARAMS) for (row = 0; row < srcHeight; row++) { GLushort *dst = (GLushort *) dstRow; - if (dstFormat == MESA_FORMAT_SIGNED_AL88 || - dstFormat == MESA_FORMAT_SIGNED_RG88_REV) { + if (dstFormat == MESA_FORMAT_L8A8_SNORM || + dstFormat == MESA_FORMAT_R8G8_SNORM) { for (col = 0; col < srcWidth; col++) { GLubyte l = FLOAT_TO_BYTE_TEX(src[0]); GLubyte a = FLOAT_TO_BYTE_TEX(src[1]); @@ -2246,10 +2246,10 @@ _mesa_texstore_snorm16(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_R16 || - dstFormat == MESA_FORMAT_SIGNED_A16 || - dstFormat == MESA_FORMAT_SIGNED_L16 || - dstFormat == MESA_FORMAT_SIGNED_I16); + ASSERT(dstFormat == MESA_FORMAT_R_SNORM16 || + dstFormat == MESA_FORMAT_A_SNORM16 || + dstFormat == MESA_FORMAT_L_SNORM16 || + dstFormat == MESA_FORMAT_I_SNORM16); ASSERT(_mesa_get_format_bytes(dstFormat) == 2); { @@ -2292,9 +2292,9 @@ _mesa_texstore_snorm1616(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_AL1616 || - dstFormat == MESA_FORMAT_SIGNED_RG1616 || - dstFormat == MESA_FORMAT_SIGNED_GR1616); + ASSERT(dstFormat == MESA_FORMAT_LA_SNORM16 || + dstFormat == MESA_FORMAT_G16R16_SNORM || + dstFormat == MESA_FORMAT_R16G16_SNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -2315,8 +2315,8 @@ _mesa_texstore_snorm1616(TEXSTORE_PARAMS) for (row = 0; row < srcHeight; row++) { GLuint *dst = (GLuint *) dstRow; - if (dstFormat == MESA_FORMAT_SIGNED_AL1616 || - dstFormat == MESA_FORMAT_SIGNED_GR1616) { + if (dstFormat == MESA_FORMAT_LA_SNORM16 || + dstFormat == MESA_FORMAT_R16G16_SNORM) { for (col = 0; col < srcWidth; col++) { GLushort l, a; @@ -2345,16 +2345,16 @@ _mesa_texstore_snorm1616(TEXSTORE_PARAMS) } /** - * Store a texture in MESA_FORMAT_SIGNED_RGBX8888 or - * MESA_FORMAT_XBGR8888_SNORM. + * Store a texture in MESA_FORMAT_X8B8G8R8_SNORM or + * MESA_FORMAT_R8G8B8X8_SNORM. */ static GLboolean _mesa_texstore_signed_rgbx8888(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_RGBX8888 || - dstFormat == MESA_FORMAT_XBGR8888_SNORM); + ASSERT(dstFormat == MESA_FORMAT_X8B8G8R8_SNORM || + dstFormat == MESA_FORMAT_R8G8B8X8_SNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -2374,7 +2374,7 @@ _mesa_texstore_signed_rgbx8888(TEXSTORE_PARAMS) GLbyte *dstRow = (GLbyte *) dstSlices[img]; for (row = 0; row < srcHeight; row++) { GLbyte *dst = dstRow; - if (dstFormat == MESA_FORMAT_SIGNED_RGBX8888) { + if (dstFormat == MESA_FORMAT_X8B8G8R8_SNORM) { for (col = 0; col < srcWidth; col++) { dst[3] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]); dst[2] = FLOAT_TO_BYTE_TEX(srcRow[GCOMP]); @@ -2405,16 +2405,16 @@ _mesa_texstore_signed_rgbx8888(TEXSTORE_PARAMS) /** - * Store a texture in MESA_FORMAT_SIGNED_RGBA8888 or - * MESA_FORMAT_SIGNED_RGBA8888_REV + * Store a texture in MESA_FORMAT_A8B8G8R8_SNORM or + * MESA_FORMAT_R8G8B8A8_SNORM */ static GLboolean _mesa_texstore_signed_rgba8888(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_SIGNED_RGBA8888 || - dstFormat == MESA_FORMAT_SIGNED_RGBA8888_REV); + ASSERT(dstFormat == MESA_FORMAT_A8B8G8R8_SNORM || + dstFormat == MESA_FORMAT_R8G8B8A8_SNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -2434,7 +2434,7 @@ _mesa_texstore_signed_rgba8888(TEXSTORE_PARAMS) GLbyte *dstRow = (GLbyte *) dstSlices[img]; for (row = 0; row < srcHeight; row++) { GLbyte *dst = dstRow; - if (dstFormat == MESA_FORMAT_SIGNED_RGBA8888) { + if (dstFormat == MESA_FORMAT_A8B8G8R8_SNORM) { for (col = 0; col < srcWidth; col++) { dst[3] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]); dst[2] = FLOAT_TO_BYTE_TEX(srcRow[GCOMP]); @@ -2474,7 +2474,7 @@ _mesa_texstore_z24_s8(TEXSTORE_PARAMS) = _mesa_image_row_stride(srcPacking, srcWidth, srcFormat, srcType); GLint img, row; - ASSERT(dstFormat == MESA_FORMAT_Z24_S8); + ASSERT(dstFormat == MESA_FORMAT_S8_UINT_Z24_UNORM); ASSERT(srcFormat == GL_DEPTH_STENCIL_EXT || srcFormat == GL_DEPTH_COMPONENT || srcFormat == GL_STENCIL_INDEX); @@ -2558,7 +2558,7 @@ _mesa_texstore_s8_z24(TEXSTORE_PARAMS) GLuint *depth; GLubyte *stencil; - ASSERT(dstFormat == MESA_FORMAT_S8_Z24); + ASSERT(dstFormat == MESA_FORMAT_Z24_UNORM_X8_UINT); ASSERT(srcFormat == GL_DEPTH_STENCIL_EXT || srcFormat == GL_DEPTH_COMPONENT || srcFormat == GL_STENCIL_INDEX); @@ -2634,7 +2634,7 @@ _mesa_texstore_s8_z24(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_s8(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_S8); + ASSERT(dstFormat == MESA_FORMAT_S_UINT8); ASSERT(srcFormat == GL_STENCIL_INDEX); { @@ -2694,20 +2694,20 @@ _mesa_texstore_rgba_float32(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in _mesa_make_temp_float_image */ - if (dstFormat == MESA_FORMAT_XBGR32323232_FLOAT) { + if (dstFormat == MESA_FORMAT_RGBX_FLOAT32) { baseFormat = GL_RGBA; components = 4; } ASSERT(dstFormat == MESA_FORMAT_RGBA_FLOAT32 || dstFormat == MESA_FORMAT_RGB_FLOAT32 || - dstFormat == MESA_FORMAT_ALPHA_FLOAT32 || - dstFormat == MESA_FORMAT_LUMINANCE_FLOAT32 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32 || - dstFormat == MESA_FORMAT_INTENSITY_FLOAT32 || + dstFormat == MESA_FORMAT_A_FLOAT32 || + dstFormat == MESA_FORMAT_L_FLOAT32 || + dstFormat == MESA_FORMAT_LA_FLOAT32 || + dstFormat == MESA_FORMAT_I_FLOAT32 || dstFormat == MESA_FORMAT_R_FLOAT32 || dstFormat == MESA_FORMAT_RG_FLOAT32 || - dstFormat == MESA_FORMAT_XBGR32323232_FLOAT); + dstFormat == MESA_FORMAT_RGBX_FLOAT32); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_ALPHA || @@ -2759,20 +2759,20 @@ _mesa_texstore_rgba_float16(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in _mesa_make_temp_float_image */ - if (dstFormat == MESA_FORMAT_XBGR16161616_FLOAT) { + if (dstFormat == MESA_FORMAT_RGBX_FLOAT16) { baseFormat = GL_RGBA; components = 4; } ASSERT(dstFormat == MESA_FORMAT_RGBA_FLOAT16 || dstFormat == MESA_FORMAT_RGB_FLOAT16 || - dstFormat == MESA_FORMAT_ALPHA_FLOAT16 || - dstFormat == MESA_FORMAT_LUMINANCE_FLOAT16 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16 || - dstFormat == MESA_FORMAT_INTENSITY_FLOAT16 || + dstFormat == MESA_FORMAT_A_FLOAT16 || + dstFormat == MESA_FORMAT_L_FLOAT16 || + dstFormat == MESA_FORMAT_LA_FLOAT16 || + dstFormat == MESA_FORMAT_I_FLOAT16 || dstFormat == MESA_FORMAT_R_FLOAT16 || dstFormat == MESA_FORMAT_RG_FLOAT16 || - dstFormat == MESA_FORMAT_XBGR16161616_FLOAT); + dstFormat == MESA_FORMAT_RGBX_FLOAT16); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_ALPHA || @@ -2823,20 +2823,20 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR8888_SINT) { + if (dstFormat == MESA_FORMAT_RGBX_SINT8) { baseFormat = GL_RGBA; components = 4; } - ASSERT(dstFormat == MESA_FORMAT_R_INT8 || - dstFormat == MESA_FORMAT_RG_INT8 || - dstFormat == MESA_FORMAT_RGB_INT8 || - dstFormat == MESA_FORMAT_RGBA_INT8 || - dstFormat == MESA_FORMAT_ALPHA_INT8 || - dstFormat == MESA_FORMAT_INTENSITY_INT8 || - dstFormat == MESA_FORMAT_LUMINANCE_INT8 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_INT8 || - dstFormat == MESA_FORMAT_XBGR8888_SINT); + ASSERT(dstFormat == MESA_FORMAT_R_SINT8 || + dstFormat == MESA_FORMAT_RG_SINT8 || + dstFormat == MESA_FORMAT_RGB_SINT8 || + dstFormat == MESA_FORMAT_RGBA_SINT8 || + dstFormat == MESA_FORMAT_A_SINT8 || + dstFormat == MESA_FORMAT_I_SINT8 || + dstFormat == MESA_FORMAT_L_SINT8 || + dstFormat == MESA_FORMAT_LA_SINT8 || + dstFormat == MESA_FORMAT_RGBX_SINT8); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -2894,20 +2894,20 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR16161616_SINT) { + if (dstFormat == MESA_FORMAT_RGBX_SINT16) { baseFormat = GL_RGBA; components = 4; } - ASSERT(dstFormat == MESA_FORMAT_R_INT16 || - dstFormat == MESA_FORMAT_RG_INT16 || - dstFormat == MESA_FORMAT_RGB_INT16 || - dstFormat == MESA_FORMAT_RGBA_INT16 || - dstFormat == MESA_FORMAT_ALPHA_INT16 || - dstFormat == MESA_FORMAT_LUMINANCE_INT16 || - dstFormat == MESA_FORMAT_INTENSITY_INT16 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_INT16 || - dstFormat == MESA_FORMAT_XBGR16161616_SINT); + ASSERT(dstFormat == MESA_FORMAT_R_SINT16 || + dstFormat == MESA_FORMAT_RG_SINT16 || + dstFormat == MESA_FORMAT_RGB_SINT16 || + dstFormat == MESA_FORMAT_RGBA_SINT16 || + dstFormat == MESA_FORMAT_A_SINT16 || + dstFormat == MESA_FORMAT_L_SINT16 || + dstFormat == MESA_FORMAT_I_SINT16 || + dstFormat == MESA_FORMAT_LA_SINT16 || + dstFormat == MESA_FORMAT_RGBX_SINT16); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -2965,20 +2965,20 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR32323232_SINT) { + if (dstFormat == MESA_FORMAT_RGBX_SINT32) { baseFormat = GL_RGBA; components = 4; } - ASSERT(dstFormat == MESA_FORMAT_R_INT32 || - dstFormat == MESA_FORMAT_RG_INT32 || - dstFormat == MESA_FORMAT_RGB_INT32 || - dstFormat == MESA_FORMAT_RGBA_INT32 || - dstFormat == MESA_FORMAT_ALPHA_INT32 || - dstFormat == MESA_FORMAT_INTENSITY_INT32 || - dstFormat == MESA_FORMAT_LUMINANCE_INT32 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_INT32 || - dstFormat == MESA_FORMAT_XBGR32323232_SINT); + ASSERT(dstFormat == MESA_FORMAT_R_SINT32 || + dstFormat == MESA_FORMAT_RG_SINT32 || + dstFormat == MESA_FORMAT_RGB_SINT32 || + dstFormat == MESA_FORMAT_RGBA_SINT32 || + dstFormat == MESA_FORMAT_A_SINT32 || + dstFormat == MESA_FORMAT_I_SINT32 || + dstFormat == MESA_FORMAT_L_SINT32 || + dstFormat == MESA_FORMAT_LA_SINT32 || + dstFormat == MESA_FORMAT_RGBX_SINT32); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -3036,7 +3036,7 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR8888_UINT) { + if (dstFormat == MESA_FORMAT_RGBX_UINT8) { baseFormat = GL_RGBA; components = 4; } @@ -3045,11 +3045,11 @@ _mesa_texstore_rgba_uint8(TEXSTORE_PARAMS) dstFormat == MESA_FORMAT_RG_UINT8 || dstFormat == MESA_FORMAT_RGB_UINT8 || dstFormat == MESA_FORMAT_RGBA_UINT8 || - dstFormat == MESA_FORMAT_ALPHA_UINT8 || - dstFormat == MESA_FORMAT_INTENSITY_UINT8 || - dstFormat == MESA_FORMAT_LUMINANCE_UINT8 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_UINT8 || - dstFormat == MESA_FORMAT_XBGR8888_UINT); + dstFormat == MESA_FORMAT_A_UINT8 || + dstFormat == MESA_FORMAT_I_UINT8 || + dstFormat == MESA_FORMAT_L_UINT8 || + dstFormat == MESA_FORMAT_LA_UINT8 || + dstFormat == MESA_FORMAT_RGBX_UINT8); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -3104,7 +3104,7 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR16161616_UINT) { + if (dstFormat == MESA_FORMAT_RGBX_UINT16) { baseFormat = GL_RGBA; components = 4; } @@ -3113,11 +3113,11 @@ _mesa_texstore_rgba_uint16(TEXSTORE_PARAMS) dstFormat == MESA_FORMAT_RG_UINT16 || dstFormat == MESA_FORMAT_RGB_UINT16 || dstFormat == MESA_FORMAT_RGBA_UINT16 || - dstFormat == MESA_FORMAT_ALPHA_UINT16 || - dstFormat == MESA_FORMAT_INTENSITY_UINT16 || - dstFormat == MESA_FORMAT_LUMINANCE_UINT16 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_UINT16 || - dstFormat == MESA_FORMAT_XBGR16161616_UINT); + dstFormat == MESA_FORMAT_A_UINT16 || + dstFormat == MESA_FORMAT_I_UINT16 || + dstFormat == MESA_FORMAT_L_UINT16 || + dstFormat == MESA_FORMAT_LA_UINT16 || + dstFormat == MESA_FORMAT_RGBX_UINT16); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -3172,7 +3172,7 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS) GLint components = _mesa_components_in_format(baseFormat); /* this forces alpha to 1 in make_temp_uint_image */ - if (dstFormat == MESA_FORMAT_XBGR32323232_UINT) { + if (dstFormat == MESA_FORMAT_RGBX_UINT32) { baseFormat = GL_RGBA; components = 4; } @@ -3181,11 +3181,11 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS) dstFormat == MESA_FORMAT_RG_UINT32 || dstFormat == MESA_FORMAT_RGB_UINT32 || dstFormat == MESA_FORMAT_RGBA_UINT32 || - dstFormat == MESA_FORMAT_ALPHA_UINT32 || - dstFormat == MESA_FORMAT_INTENSITY_UINT32 || - dstFormat == MESA_FORMAT_LUMINANCE_UINT32 || - dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_UINT32 || - dstFormat == MESA_FORMAT_XBGR32323232_UINT); + dstFormat == MESA_FORMAT_A_UINT32 || + dstFormat == MESA_FORMAT_I_UINT32 || + dstFormat == MESA_FORMAT_L_UINT32 || + dstFormat == MESA_FORMAT_LA_UINT32 || + dstFormat == MESA_FORMAT_RGBX_UINT32); ASSERT(baseInternalFormat == GL_RGBA || baseInternalFormat == GL_RGB || baseInternalFormat == GL_RG || @@ -3235,13 +3235,13 @@ _mesa_texstore_rgba_uint32(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_srgb8(TEXSTORE_PARAMS) { - gl_format newDstFormat; + mesa_format newDstFormat; GLboolean k; - ASSERT(dstFormat == MESA_FORMAT_SRGB8); + ASSERT(dstFormat == MESA_FORMAT_BGR_SRGB8); /* reuse normal rgb texstore code */ - newDstFormat = MESA_FORMAT_RGB888; + newDstFormat = MESA_FORMAT_BGR_UNORM8; k = _mesa_texstore_rgb888(ctx, dims, baseInternalFormat, newDstFormat, @@ -3256,18 +3256,18 @@ _mesa_texstore_srgb8(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_srgba8(TEXSTORE_PARAMS) { - gl_format newDstFormat; + mesa_format newDstFormat; GLboolean k; - ASSERT(dstFormat == MESA_FORMAT_SRGBA8 || - dstFormat == MESA_FORMAT_XBGR8888_SRGB); + ASSERT(dstFormat == MESA_FORMAT_A8B8G8R8_SRGB || + dstFormat == MESA_FORMAT_R8G8B8X8_SRGB); /* reuse normal rgba texstore code */ - if (dstFormat == MESA_FORMAT_SRGBA8) { - newDstFormat = MESA_FORMAT_RGBA8888; + if (dstFormat == MESA_FORMAT_A8B8G8R8_SRGB) { + newDstFormat = MESA_FORMAT_A8B8G8R8_UNORM; } - else if (dstFormat == MESA_FORMAT_XBGR8888_SRGB) { - newDstFormat = MESA_FORMAT_RGBX8888_REV; + else if (dstFormat == MESA_FORMAT_R8G8B8X8_SRGB) { + newDstFormat = MESA_FORMAT_R8G8B8X8_UNORM; } else { ASSERT(0); @@ -3287,13 +3287,13 @@ _mesa_texstore_srgba8(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_sargb8(TEXSTORE_PARAMS) { - gl_format newDstFormat; + mesa_format newDstFormat; GLboolean k; - ASSERT(dstFormat == MESA_FORMAT_SARGB8); + ASSERT(dstFormat == MESA_FORMAT_B8G8R8A8_SRGB); /* reuse normal rgba texstore code */ - newDstFormat = MESA_FORMAT_ARGB8888; + newDstFormat = MESA_FORMAT_B8G8R8A8_UNORM; k = _mesa_texstore_argb8888(ctx, dims, baseInternalFormat, newDstFormat, @@ -3308,12 +3308,12 @@ _mesa_texstore_sargb8(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_sl8(TEXSTORE_PARAMS) { - gl_format newDstFormat; + mesa_format newDstFormat; GLboolean k; - ASSERT(dstFormat == MESA_FORMAT_SL8); + ASSERT(dstFormat == MESA_FORMAT_L_SRGB8); - newDstFormat = MESA_FORMAT_L8; + newDstFormat = MESA_FORMAT_L_UNORM8; /* _mesa_textore_a8 handles luminance8 too */ k = _mesa_texstore_unorm8(ctx, dims, baseInternalFormat, @@ -3329,13 +3329,13 @@ _mesa_texstore_sl8(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_sla8(TEXSTORE_PARAMS) { - gl_format newDstFormat; + mesa_format newDstFormat; GLboolean k; - ASSERT(dstFormat == MESA_FORMAT_SLA8); + ASSERT(dstFormat == MESA_FORMAT_L8A8_SRGB); /* reuse normal luminance/alpha texstore code */ - newDstFormat = MESA_FORMAT_AL88; + newDstFormat = MESA_FORMAT_L8A8_UNORM; k = _mesa_texstore_unorm88(ctx, dims, baseInternalFormat, newDstFormat, @@ -3351,7 +3351,7 @@ _mesa_texstore_rgb9_e5(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_RGB9_E5_FLOAT); + ASSERT(dstFormat == MESA_FORMAT_R9G9B9E5_FLOAT); ASSERT(baseInternalFormat == GL_RGB); { @@ -3389,7 +3389,7 @@ _mesa_texstore_r11_g11_b10f(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_R11_G11_B10_FLOAT); + ASSERT(dstFormat == MESA_FORMAT_R11G11B10_FLOAT); ASSERT(baseInternalFormat == GL_RGB); { @@ -3426,7 +3426,7 @@ _mesa_texstore_r11_g11_b10f(TEXSTORE_PARAMS) static GLboolean _mesa_texstore_z32f_x24s8(TEXSTORE_PARAMS) { - ASSERT(dstFormat == MESA_FORMAT_Z32_FLOAT_X24S8); + ASSERT(dstFormat == MESA_FORMAT_Z32_FLOAT_S8X24_UINT); ASSERT(srcFormat == GL_DEPTH_STENCIL || srcFormat == GL_DEPTH_COMPONENT || srcFormat == GL_STENCIL_INDEX); @@ -3479,7 +3479,7 @@ _mesa_texstore_argb2101010_uint(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_ARGB2101010_UINT); + ASSERT(dstFormat == MESA_FORMAT_B10G10R10A2_UINT); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -3535,7 +3535,7 @@ _mesa_texstore_abgr2101010_uint(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_ABGR2101010_UINT); + ASSERT(dstFormat == MESA_FORMAT_R10G10B10A2_UINT); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -3591,7 +3591,7 @@ _mesa_texstore_abgr2101010(TEXSTORE_PARAMS) { const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); - ASSERT(dstFormat == MESA_FORMAT_ABGR2101010); + ASSERT(dstFormat == MESA_FORMAT_R10G10B10A2_UNORM); ASSERT(_mesa_get_format_bytes(dstFormat) == 4); { @@ -3652,7 +3652,7 @@ _mesa_texstore_null(TEXSTORE_PARAMS) * Return the StoreTexImageFunc pointer to store an image in the given format. */ static StoreTexImageFunc -_mesa_get_texstore_func(gl_format format) +_mesa_get_texstore_func(mesa_format format) { static StoreTexImageFunc table[MESA_FORMAT_COUNT]; static GLboolean initialized = GL_FALSE; @@ -3660,56 +3660,56 @@ _mesa_get_texstore_func(gl_format format) if (!initialized) { table[MESA_FORMAT_NONE] = _mesa_texstore_null; - table[MESA_FORMAT_RGBA8888] = _mesa_texstore_rgba8888; - table[MESA_FORMAT_RGBA8888_REV] = _mesa_texstore_rgba8888; - table[MESA_FORMAT_ARGB8888] = _mesa_texstore_argb8888; - table[MESA_FORMAT_ARGB8888_REV] = _mesa_texstore_argb8888; - table[MESA_FORMAT_RGBX8888] = _mesa_texstore_rgba8888; - table[MESA_FORMAT_RGBX8888_REV] = _mesa_texstore_rgba8888; - table[MESA_FORMAT_XRGB8888] = _mesa_texstore_argb8888; - table[MESA_FORMAT_XRGB8888_REV] = _mesa_texstore_argb8888; - table[MESA_FORMAT_RGB888] = _mesa_texstore_rgb888; - table[MESA_FORMAT_BGR888] = _mesa_texstore_bgr888; - table[MESA_FORMAT_RGB565] = _mesa_texstore_rgb565; - table[MESA_FORMAT_RGB565_REV] = _mesa_texstore_rgb565; - table[MESA_FORMAT_ARGB4444] = store_ubyte_texture; - table[MESA_FORMAT_ARGB4444_REV] = store_ubyte_texture; - table[MESA_FORMAT_RGBA5551] = store_ubyte_texture; - table[MESA_FORMAT_ARGB1555] = store_ubyte_texture; - table[MESA_FORMAT_ARGB1555_REV] = store_ubyte_texture; - table[MESA_FORMAT_AL44] = _mesa_texstore_unorm44; - table[MESA_FORMAT_AL88] = _mesa_texstore_unorm88; - table[MESA_FORMAT_AL88_REV] = _mesa_texstore_unorm88; - table[MESA_FORMAT_AL1616] = _mesa_texstore_unorm1616; - table[MESA_FORMAT_AL1616_REV] = _mesa_texstore_unorm1616; - table[MESA_FORMAT_RGB332] = store_ubyte_texture; - table[MESA_FORMAT_A8] = _mesa_texstore_unorm8; - table[MESA_FORMAT_A16] = _mesa_texstore_unorm16; - table[MESA_FORMAT_L8] = _mesa_texstore_unorm8; - table[MESA_FORMAT_L16] = _mesa_texstore_unorm16; - table[MESA_FORMAT_I8] = _mesa_texstore_unorm8; - table[MESA_FORMAT_I16] = _mesa_texstore_unorm16; + table[MESA_FORMAT_A8B8G8R8_UNORM] = _mesa_texstore_rgba8888; + table[MESA_FORMAT_R8G8B8A8_UNORM] = _mesa_texstore_rgba8888; + table[MESA_FORMAT_B8G8R8A8_UNORM] = _mesa_texstore_argb8888; + table[MESA_FORMAT_A8R8G8B8_UNORM] = _mesa_texstore_argb8888; + table[MESA_FORMAT_X8B8G8R8_UNORM] = _mesa_texstore_rgba8888; + table[MESA_FORMAT_R8G8B8X8_UNORM] = _mesa_texstore_rgba8888; + table[MESA_FORMAT_B8G8R8X8_UNORM] = _mesa_texstore_argb8888; + table[MESA_FORMAT_X8R8G8B8_UNORM] = _mesa_texstore_argb8888; + table[MESA_FORMAT_BGR_UNORM8] = _mesa_texstore_rgb888; + table[MESA_FORMAT_RGB_UNORM8] = _mesa_texstore_bgr888; + table[MESA_FORMAT_B5G6R5_UNORM] = _mesa_texstore_rgb565; + table[MESA_FORMAT_R5G6B5_UNORM] = _mesa_texstore_rgb565; + table[MESA_FORMAT_B4G4R4A4_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_A4R4G4B4_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_A1B5G5R5_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_B5G5R5A1_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_A1R5G5B5_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_L4A4_UNORM] = _mesa_texstore_unorm44; + table[MESA_FORMAT_L8A8_UNORM] = _mesa_texstore_unorm88; + table[MESA_FORMAT_A8L8_UNORM] = _mesa_texstore_unorm88; + table[MESA_FORMAT_L16A16_UNORM] = _mesa_texstore_unorm1616; + table[MESA_FORMAT_A16L16_UNORM] = _mesa_texstore_unorm1616; + table[MESA_FORMAT_B2G3R3_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_A_UNORM8] = _mesa_texstore_unorm8; + table[MESA_FORMAT_A_UNORM16] = _mesa_texstore_unorm16; + table[MESA_FORMAT_L_UNORM8] = _mesa_texstore_unorm8; + table[MESA_FORMAT_L_UNORM16] = _mesa_texstore_unorm16; + table[MESA_FORMAT_I_UNORM8] = _mesa_texstore_unorm8; + table[MESA_FORMAT_I_UNORM16] = _mesa_texstore_unorm16; table[MESA_FORMAT_YCBCR] = _mesa_texstore_ycbcr; table[MESA_FORMAT_YCBCR_REV] = _mesa_texstore_ycbcr; - table[MESA_FORMAT_R8] = _mesa_texstore_unorm8; - table[MESA_FORMAT_GR88] = _mesa_texstore_unorm88; - table[MESA_FORMAT_RG88] = _mesa_texstore_unorm88; - table[MESA_FORMAT_R16] = _mesa_texstore_unorm16; - table[MESA_FORMAT_GR1616] = _mesa_texstore_unorm1616; - table[MESA_FORMAT_RG1616] = _mesa_texstore_unorm1616; - table[MESA_FORMAT_ARGB2101010] = _mesa_texstore_argb2101010; - table[MESA_FORMAT_Z24_S8] = _mesa_texstore_z24_s8; - table[MESA_FORMAT_S8_Z24] = _mesa_texstore_s8_z24; - table[MESA_FORMAT_Z16] = _mesa_texstore_z16; - table[MESA_FORMAT_X8_Z24] = _mesa_texstore_x8_z24; - table[MESA_FORMAT_Z24_X8] = _mesa_texstore_z24_x8; - table[MESA_FORMAT_Z32] = _mesa_texstore_z32; - table[MESA_FORMAT_S8] = _mesa_texstore_s8; - table[MESA_FORMAT_SRGB8] = _mesa_texstore_srgb8; - table[MESA_FORMAT_SRGBA8] = _mesa_texstore_srgba8; - table[MESA_FORMAT_SARGB8] = _mesa_texstore_sargb8; - table[MESA_FORMAT_SL8] = _mesa_texstore_sl8; - table[MESA_FORMAT_SLA8] = _mesa_texstore_sla8; + table[MESA_FORMAT_R_UNORM8] = _mesa_texstore_unorm8; + table[MESA_FORMAT_R8G8_UNORM] = _mesa_texstore_unorm88; + table[MESA_FORMAT_G8R8_UNORM] = _mesa_texstore_unorm88; + table[MESA_FORMAT_R_UNORM16] = _mesa_texstore_unorm16; + table[MESA_FORMAT_R16G16_UNORM] = _mesa_texstore_unorm1616; + table[MESA_FORMAT_G16R16_UNORM] = _mesa_texstore_unorm1616; + table[MESA_FORMAT_B10G10R10A2_UNORM] = _mesa_texstore_argb2101010; + table[MESA_FORMAT_S8_UINT_Z24_UNORM] = _mesa_texstore_z24_s8; + table[MESA_FORMAT_Z24_UNORM_X8_UINT] = _mesa_texstore_s8_z24; + table[MESA_FORMAT_Z_UNORM16] = _mesa_texstore_z16; + table[MESA_FORMAT_Z24_UNORM_S8_UINT] = _mesa_texstore_x8_z24; + table[MESA_FORMAT_X8Z24_UNORM] = _mesa_texstore_z24_x8; + table[MESA_FORMAT_Z_UNORM32] = _mesa_texstore_z32; + table[MESA_FORMAT_S_UINT8] = _mesa_texstore_s8; + table[MESA_FORMAT_BGR_SRGB8] = _mesa_texstore_srgb8; + table[MESA_FORMAT_A8B8G8R8_SRGB] = _mesa_texstore_srgba8; + table[MESA_FORMAT_B8G8R8A8_SRGB] = _mesa_texstore_sargb8; + table[MESA_FORMAT_L_SRGB8] = _mesa_texstore_sl8; + table[MESA_FORMAT_L8A8_SRGB] = _mesa_texstore_sla8; table[MESA_FORMAT_SRGB_DXT1] = _mesa_texstore_rgb_dxt1; table[MESA_FORMAT_SRGBA_DXT1] = _mesa_texstore_rgba_dxt1; table[MESA_FORMAT_SRGBA_DXT3] = _mesa_texstore_rgba_dxt3; @@ -3724,37 +3724,37 @@ _mesa_get_texstore_func(gl_format format) table[MESA_FORMAT_RGBA_FLOAT16] = _mesa_texstore_rgba_float16; table[MESA_FORMAT_RGB_FLOAT32] = _mesa_texstore_rgba_float32; table[MESA_FORMAT_RGB_FLOAT16] = _mesa_texstore_rgba_float16; - table[MESA_FORMAT_ALPHA_FLOAT32] = _mesa_texstore_rgba_float32; - table[MESA_FORMAT_ALPHA_FLOAT16] = _mesa_texstore_rgba_float16; - table[MESA_FORMAT_LUMINANCE_FLOAT32] = _mesa_texstore_rgba_float32; - table[MESA_FORMAT_LUMINANCE_FLOAT16] = _mesa_texstore_rgba_float16; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = _mesa_texstore_rgba_float32; - table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = _mesa_texstore_rgba_float16; - table[MESA_FORMAT_INTENSITY_FLOAT32] = _mesa_texstore_rgba_float32; - table[MESA_FORMAT_INTENSITY_FLOAT16] = _mesa_texstore_rgba_float16; + table[MESA_FORMAT_A_FLOAT32] = _mesa_texstore_rgba_float32; + table[MESA_FORMAT_A_FLOAT16] = _mesa_texstore_rgba_float16; + table[MESA_FORMAT_L_FLOAT32] = _mesa_texstore_rgba_float32; + table[MESA_FORMAT_L_FLOAT16] = _mesa_texstore_rgba_float16; + table[MESA_FORMAT_LA_FLOAT32] = _mesa_texstore_rgba_float32; + table[MESA_FORMAT_LA_FLOAT16] = _mesa_texstore_rgba_float16; + table[MESA_FORMAT_I_FLOAT32] = _mesa_texstore_rgba_float32; + table[MESA_FORMAT_I_FLOAT16] = _mesa_texstore_rgba_float16; table[MESA_FORMAT_R_FLOAT32] = _mesa_texstore_rgba_float32; table[MESA_FORMAT_R_FLOAT16] = _mesa_texstore_rgba_float16; table[MESA_FORMAT_RG_FLOAT32] = _mesa_texstore_rgba_float32; table[MESA_FORMAT_RG_FLOAT16] = _mesa_texstore_rgba_float16; table[MESA_FORMAT_DUDV8] = _mesa_texstore_dudv8; - table[MESA_FORMAT_SIGNED_R8] = _mesa_texstore_snorm8; - table[MESA_FORMAT_SIGNED_RG88_REV] = _mesa_texstore_snorm88; - table[MESA_FORMAT_SIGNED_RGBX8888] = _mesa_texstore_signed_rgbx8888; - table[MESA_FORMAT_SIGNED_RGBA8888] = _mesa_texstore_signed_rgba8888; - table[MESA_FORMAT_SIGNED_RGBA8888_REV] = _mesa_texstore_signed_rgba8888; - table[MESA_FORMAT_SIGNED_R16] = _mesa_texstore_snorm16; - table[MESA_FORMAT_SIGNED_GR1616] = _mesa_texstore_snorm1616; - table[MESA_FORMAT_SIGNED_RGB_16] = _mesa_texstore_signed_rgba_16; - table[MESA_FORMAT_SIGNED_RGBA_16] = _mesa_texstore_signed_rgba_16; - table[MESA_FORMAT_RGBA_16] = _mesa_texstore_rgba_16; - table[MESA_FORMAT_RED_RGTC1] = _mesa_texstore_red_rgtc1; - table[MESA_FORMAT_SIGNED_RED_RGTC1] = _mesa_texstore_signed_red_rgtc1; - table[MESA_FORMAT_RG_RGTC2] = _mesa_texstore_rg_rgtc2; - table[MESA_FORMAT_SIGNED_RG_RGTC2] = _mesa_texstore_signed_rg_rgtc2; - table[MESA_FORMAT_L_LATC1] = _mesa_texstore_red_rgtc1; - table[MESA_FORMAT_SIGNED_L_LATC1] = _mesa_texstore_signed_red_rgtc1; - table[MESA_FORMAT_LA_LATC2] = _mesa_texstore_rg_rgtc2; - table[MESA_FORMAT_SIGNED_LA_LATC2] = _mesa_texstore_signed_rg_rgtc2; + table[MESA_FORMAT_R_SNORM8] = _mesa_texstore_snorm8; + table[MESA_FORMAT_R8G8_SNORM] = _mesa_texstore_snorm88; + table[MESA_FORMAT_X8B8G8R8_SNORM] = _mesa_texstore_signed_rgbx8888; + table[MESA_FORMAT_A8B8G8R8_SNORM] = _mesa_texstore_signed_rgba8888; + table[MESA_FORMAT_R8G8B8A8_SNORM] = _mesa_texstore_signed_rgba8888; + table[MESA_FORMAT_R_SNORM16] = _mesa_texstore_snorm16; + table[MESA_FORMAT_R16G16_SNORM] = _mesa_texstore_snorm1616; + table[MESA_FORMAT_RGB_SNORM16] = _mesa_texstore_signed_rgba_16; + table[MESA_FORMAT_RGBA_SNORM16] = _mesa_texstore_signed_rgba_16; + table[MESA_FORMAT_RGBA_UNORM16] = _mesa_texstore_rgba_16; + table[MESA_FORMAT_R_RGTC1_UNORM] = _mesa_texstore_red_rgtc1; + table[MESA_FORMAT_R_RGTC1_SNORM] = _mesa_texstore_signed_red_rgtc1; + table[MESA_FORMAT_RG_RGTC2_UNORM] = _mesa_texstore_rg_rgtc2; + table[MESA_FORMAT_RG_RGTC2_SNORM] = _mesa_texstore_signed_rg_rgtc2; + table[MESA_FORMAT_L_LATC1_UNORM] = _mesa_texstore_red_rgtc1; + table[MESA_FORMAT_L_LATC1_SNORM] = _mesa_texstore_signed_red_rgtc1; + table[MESA_FORMAT_LA_LATC2_UNORM] = _mesa_texstore_rg_rgtc2; + table[MESA_FORMAT_LA_LATC2_SNORM] = _mesa_texstore_signed_rg_rgtc2; table[MESA_FORMAT_ETC1_RGB8] = _mesa_texstore_etc1_rgb8; table[MESA_FORMAT_ETC2_RGB8] = _mesa_texstore_etc2_rgb8; table[MESA_FORMAT_ETC2_SRGB8] = _mesa_texstore_etc2_srgb8; @@ -3768,59 +3768,59 @@ _mesa_get_texstore_func(gl_format format) _mesa_texstore_etc2_rgb8_punchthrough_alpha1; table[MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] = _mesa_texstore_etc2_srgb8_punchthrough_alpha1; - table[MESA_FORMAT_SIGNED_A8] = _mesa_texstore_snorm8; - table[MESA_FORMAT_SIGNED_L8] = _mesa_texstore_snorm8; - table[MESA_FORMAT_SIGNED_AL88] = _mesa_texstore_snorm88; - table[MESA_FORMAT_SIGNED_I8] = _mesa_texstore_snorm8; - table[MESA_FORMAT_SIGNED_A16] = _mesa_texstore_snorm16; - table[MESA_FORMAT_SIGNED_L16] = _mesa_texstore_snorm16; - table[MESA_FORMAT_SIGNED_AL1616] = _mesa_texstore_snorm1616; - table[MESA_FORMAT_SIGNED_I16] = _mesa_texstore_snorm16; - table[MESA_FORMAT_RGB9_E5_FLOAT] = _mesa_texstore_rgb9_e5; - table[MESA_FORMAT_R11_G11_B10_FLOAT] = _mesa_texstore_r11_g11_b10f; - table[MESA_FORMAT_Z32_FLOAT] = _mesa_texstore_z32; - table[MESA_FORMAT_Z32_FLOAT_X24S8] = _mesa_texstore_z32f_x24s8; - - table[MESA_FORMAT_ALPHA_UINT8] = _mesa_texstore_rgba_uint8; - table[MESA_FORMAT_ALPHA_UINT16] = _mesa_texstore_rgba_uint16; - table[MESA_FORMAT_ALPHA_UINT32] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_ALPHA_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_ALPHA_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_ALPHA_INT32] = _mesa_texstore_rgba_int32; - - table[MESA_FORMAT_INTENSITY_UINT8] = _mesa_texstore_rgba_uint8; - table[MESA_FORMAT_INTENSITY_UINT16] = _mesa_texstore_rgba_uint16; - table[MESA_FORMAT_INTENSITY_UINT32] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_INTENSITY_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_INTENSITY_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_INTENSITY_INT32] = _mesa_texstore_rgba_int32; - - table[MESA_FORMAT_LUMINANCE_UINT8] = _mesa_texstore_rgba_uint8; - table[MESA_FORMAT_LUMINANCE_UINT16] = _mesa_texstore_rgba_uint16; - table[MESA_FORMAT_LUMINANCE_UINT32] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_LUMINANCE_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_LUMINANCE_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_LUMINANCE_INT32] = _mesa_texstore_rgba_int32; - - table[MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = _mesa_texstore_rgba_uint8; - table[MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = _mesa_texstore_rgba_uint16; - table[MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_LUMINANCE_ALPHA_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_LUMINANCE_ALPHA_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_LUMINANCE_ALPHA_INT32] = _mesa_texstore_rgba_int32; - - table[MESA_FORMAT_R_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_RG_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_RGB_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_RGBA_INT8] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_R_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_RG_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_RGB_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_RGBA_INT16] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_R_INT32] = _mesa_texstore_rgba_int32; - table[MESA_FORMAT_RG_INT32] = _mesa_texstore_rgba_int32; - table[MESA_FORMAT_RGB_INT32] = _mesa_texstore_rgba_int32; - table[MESA_FORMAT_RGBA_INT32] = _mesa_texstore_rgba_int32; + table[MESA_FORMAT_A_SNORM8] = _mesa_texstore_snorm8; + table[MESA_FORMAT_L_SNORM8] = _mesa_texstore_snorm8; + table[MESA_FORMAT_L8A8_SNORM] = _mesa_texstore_snorm88; + table[MESA_FORMAT_I_SNORM8] = _mesa_texstore_snorm8; + table[MESA_FORMAT_A_SNORM16] = _mesa_texstore_snorm16; + table[MESA_FORMAT_L_SNORM16] = _mesa_texstore_snorm16; + table[MESA_FORMAT_LA_SNORM16] = _mesa_texstore_snorm1616; + table[MESA_FORMAT_I_SNORM16] = _mesa_texstore_snorm16; + table[MESA_FORMAT_R9G9B9E5_FLOAT] = _mesa_texstore_rgb9_e5; + table[MESA_FORMAT_R11G11B10_FLOAT] = _mesa_texstore_r11_g11_b10f; + table[MESA_FORMAT_Z_FLOAT32] = _mesa_texstore_z32; + table[MESA_FORMAT_Z32_FLOAT_S8X24_UINT] = _mesa_texstore_z32f_x24s8; + + table[MESA_FORMAT_A_UINT8] = _mesa_texstore_rgba_uint8; + table[MESA_FORMAT_A_UINT16] = _mesa_texstore_rgba_uint16; + table[MESA_FORMAT_A_UINT32] = _mesa_texstore_rgba_uint32; + table[MESA_FORMAT_A_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_A_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_A_SINT32] = _mesa_texstore_rgba_int32; + + table[MESA_FORMAT_I_UINT8] = _mesa_texstore_rgba_uint8; + table[MESA_FORMAT_I_UINT16] = _mesa_texstore_rgba_uint16; + table[MESA_FORMAT_I_UINT32] = _mesa_texstore_rgba_uint32; + table[MESA_FORMAT_I_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_I_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_I_SINT32] = _mesa_texstore_rgba_int32; + + table[MESA_FORMAT_L_UINT8] = _mesa_texstore_rgba_uint8; + table[MESA_FORMAT_L_UINT16] = _mesa_texstore_rgba_uint16; + table[MESA_FORMAT_L_UINT32] = _mesa_texstore_rgba_uint32; + table[MESA_FORMAT_L_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_L_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_L_SINT32] = _mesa_texstore_rgba_int32; + + table[MESA_FORMAT_LA_UINT8] = _mesa_texstore_rgba_uint8; + table[MESA_FORMAT_LA_UINT16] = _mesa_texstore_rgba_uint16; + table[MESA_FORMAT_LA_UINT32] = _mesa_texstore_rgba_uint32; + table[MESA_FORMAT_LA_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_LA_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_LA_SINT32] = _mesa_texstore_rgba_int32; + + table[MESA_FORMAT_R_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_RG_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_RGB_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_RGBA_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_R_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_RG_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_RGB_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_RGBA_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_R_SINT32] = _mesa_texstore_rgba_int32; + table[MESA_FORMAT_RG_SINT32] = _mesa_texstore_rgba_int32; + table[MESA_FORMAT_RGB_SINT32] = _mesa_texstore_rgba_int32; + table[MESA_FORMAT_RGBA_SINT32] = _mesa_texstore_rgba_int32; table[MESA_FORMAT_R_UINT8] = _mesa_texstore_rgba_uint8; table[MESA_FORMAT_RG_UINT8] = _mesa_texstore_rgba_uint8; @@ -3835,29 +3835,29 @@ _mesa_get_texstore_func(gl_format format) table[MESA_FORMAT_RGB_UINT32] = _mesa_texstore_rgba_uint32; table[MESA_FORMAT_RGBA_UINT32] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_ARGB2101010_UINT] = _mesa_texstore_argb2101010_uint; - table[MESA_FORMAT_ABGR2101010_UINT] = _mesa_texstore_abgr2101010_uint; - - table[MESA_FORMAT_XRGB4444_UNORM] = store_ubyte_texture; - table[MESA_FORMAT_XRGB1555_UNORM] = store_ubyte_texture; - table[MESA_FORMAT_XBGR8888_SNORM] = _mesa_texstore_signed_rgbx8888; - table[MESA_FORMAT_XBGR8888_SRGB] = _mesa_texstore_srgba8; - table[MESA_FORMAT_XBGR8888_UINT] = _mesa_texstore_rgba_uint8; - table[MESA_FORMAT_XBGR8888_SINT] = _mesa_texstore_rgba_int8; - table[MESA_FORMAT_XRGB2101010_UNORM] = _mesa_texstore_argb2101010; - table[MESA_FORMAT_XBGR16161616_UNORM] = _mesa_texstore_rgba_16; - table[MESA_FORMAT_XBGR16161616_SNORM] = _mesa_texstore_signed_rgba_16; - table[MESA_FORMAT_XBGR16161616_FLOAT] = _mesa_texstore_rgba_float16; - table[MESA_FORMAT_XBGR16161616_UINT] = _mesa_texstore_rgba_uint16; - table[MESA_FORMAT_XBGR16161616_SINT] = _mesa_texstore_rgba_int16; - table[MESA_FORMAT_XBGR32323232_FLOAT] = _mesa_texstore_rgba_float32; - table[MESA_FORMAT_XBGR32323232_UINT] = _mesa_texstore_rgba_uint32; - table[MESA_FORMAT_XBGR32323232_SINT] = _mesa_texstore_rgba_int32; - - table[MESA_FORMAT_ABGR2101010] = _mesa_texstore_abgr2101010; - - table[MESA_FORMAT_SIGNED_RG88] = _mesa_texstore_snorm88; - table[MESA_FORMAT_SIGNED_RG1616] = _mesa_texstore_snorm1616; + table[MESA_FORMAT_B10G10R10A2_UINT] = _mesa_texstore_argb2101010_uint; + table[MESA_FORMAT_R10G10B10A2_UINT] = _mesa_texstore_abgr2101010_uint; + + table[MESA_FORMAT_B4G4R4X4_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_B5G5R5X1_UNORM] = store_ubyte_texture; + table[MESA_FORMAT_R8G8B8X8_SNORM] = _mesa_texstore_signed_rgbx8888; + table[MESA_FORMAT_R8G8B8X8_SRGB] = _mesa_texstore_srgba8; + table[MESA_FORMAT_RGBX_UINT8] = _mesa_texstore_rgba_uint8; + table[MESA_FORMAT_RGBX_SINT8] = _mesa_texstore_rgba_int8; + table[MESA_FORMAT_B10G10R10X2_UNORM] = _mesa_texstore_argb2101010; + table[MESA_FORMAT_RGBX_UNORM16] = _mesa_texstore_rgba_16; + table[MESA_FORMAT_RGBX_SNORM16] = _mesa_texstore_signed_rgba_16; + table[MESA_FORMAT_RGBX_FLOAT16] = _mesa_texstore_rgba_float16; + table[MESA_FORMAT_RGBX_UINT16] = _mesa_texstore_rgba_uint16; + table[MESA_FORMAT_RGBX_SINT16] = _mesa_texstore_rgba_int16; + table[MESA_FORMAT_RGBX_FLOAT32] = _mesa_texstore_rgba_float32; + table[MESA_FORMAT_RGBX_UINT32] = _mesa_texstore_rgba_uint32; + table[MESA_FORMAT_RGBX_SINT32] = _mesa_texstore_rgba_int32; + + table[MESA_FORMAT_R10G10B10A2_UNORM] = _mesa_texstore_abgr2101010; + + table[MESA_FORMAT_G8R8_SNORM] = _mesa_texstore_snorm88; + table[MESA_FORMAT_G16R16_SNORM] = _mesa_texstore_snorm1616; initialized = GL_TRUE; } @@ -3870,7 +3870,7 @@ _mesa_get_texstore_func(gl_format format) GLboolean _mesa_texstore_needs_transfer_ops(struct gl_context *ctx, GLenum baseInternalFormat, - gl_format dstFormat) + mesa_format dstFormat) { GLenum dstType; @@ -3899,7 +3899,7 @@ _mesa_texstore_needs_transfer_ops(struct gl_context *ctx, GLboolean _mesa_texstore_can_use_memcpy(struct gl_context *ctx, - GLenum baseInternalFormat, gl_format dstFormat, + GLenum baseInternalFormat, mesa_format dstFormat, GLenum srcFormat, GLenum srcType, const struct gl_pixelstore_attrib *srcPacking) { @@ -3977,7 +3977,7 @@ _mesa_texstore(TEXSTORE_PARAMS) * \param texFormat the destination texture format */ static GLbitfield -get_read_write_mode(GLenum userFormat, gl_format texFormat) +get_read_write_mode(GLenum userFormat, mesa_format texFormat) { if ((userFormat == GL_STENCIL_INDEX || userFormat == GL_DEPTH_COMPONENT) && _mesa_get_format_base_format(texFormat) == GL_DEPTH_STENCIL) @@ -4220,7 +4220,7 @@ _mesa_store_compressed_texsubimage(struct gl_context *ctx, GLuint dims, GLint i, rows; GLubyte *dstMap; const GLubyte *src; - const gl_format texFormat = texImage->TexFormat; + const mesa_format texFormat = texImage->TexFormat; GLuint bw, bh; GLint slice; diff --git a/mesalib/src/mesa/main/texstore.h b/mesalib/src/mesa/main/texstore.h index fbb3b2668..490f9f5e0 100644 --- a/mesalib/src/mesa/main/texstore.h +++ b/mesalib/src/mesa/main/texstore.h @@ -57,7 +57,7 @@ #define TEXSTORE_PARAMS \ struct gl_context *ctx, GLuint dims, \ GLenum baseInternalFormat, \ - gl_format dstFormat, \ + mesa_format dstFormat, \ GLint dstRowStride, \ GLubyte **dstSlices, \ GLint srcWidth, GLint srcHeight, GLint srcDepth, \ @@ -72,11 +72,11 @@ _mesa_texstore(TEXSTORE_PARAMS); extern GLboolean _mesa_texstore_needs_transfer_ops(struct gl_context *ctx, GLenum baseInternalFormat, - gl_format dstFormat); + mesa_format dstFormat); extern GLboolean _mesa_texstore_can_use_memcpy(struct gl_context *ctx, - GLenum baseInternalFormat, gl_format dstFormat, + GLenum baseInternalFormat, mesa_format dstFormat, GLenum srcFormat, GLenum srcType, const struct gl_pixelstore_attrib *srcPacking); diff --git a/mesalib/src/mesa/main/textureview.c b/mesalib/src/mesa/main/textureview.c index 5f88a4171..77a3b782b 100644 --- a/mesalib/src/mesa/main/textureview.c +++ b/mesalib/src/mesa/main/textureview.c @@ -196,7 +196,7 @@ initialize_texture_fields(struct gl_context *ctx, struct gl_texture_object *texObj, GLint levels, GLsizei width, GLsizei height, GLsizei depth, - GLenum internalFormat, gl_format texFormat) + GLenum internalFormat, mesa_format texFormat) { const GLuint numFaces = _mesa_num_tex_faces(target); GLint level, levelWidth = width, levelHeight = height, levelDepth = depth; @@ -430,7 +430,7 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture, GLuint newViewMinLevel, newViewMinLayer; GLuint newViewNumLevels, newViewNumLayers; GLsizei width, height, depth; - gl_format texFormat; + mesa_format texFormat; GLboolean sizeOK, dimensionsOK; GLenum faceTarget; diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c index b73a396e2..44db2cbcd 100644 --- a/mesalib/src/mesa/main/varray.c +++ b/mesalib/src/mesa/main/varray.c @@ -112,20 +112,20 @@ static void vertex_attrib_binding(struct gl_context *ctx, GLuint attribIndex, GLuint bindingIndex) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; - struct gl_vertex_attrib_array *array = &arrayObj->VertexAttrib[attribIndex]; + struct gl_vertex_array_object *vao = ctx->Array.VAO; + struct gl_vertex_attrib_array *array = &vao->VertexAttrib[attribIndex]; if (array->VertexBinding != bindingIndex) { const GLbitfield64 array_bit = VERT_BIT(attribIndex); FLUSH_VERTICES(ctx, _NEW_ARRAY); - arrayObj->VertexBinding[array->VertexBinding]._BoundArrays &= ~array_bit; - arrayObj->VertexBinding[bindingIndex]._BoundArrays |= array_bit; + vao->VertexBinding[array->VertexBinding]._BoundArrays &= ~array_bit; + vao->VertexBinding[bindingIndex]._BoundArrays |= array_bit; array->VertexBinding = bindingIndex; - arrayObj->NewArrays |= array_bit; + vao->NewArrays |= array_bit; } } @@ -139,8 +139,8 @@ bind_vertex_buffer(struct gl_context *ctx, GLuint index, struct gl_buffer_object *vbo, GLintptr offset, GLsizei stride) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; - struct gl_vertex_buffer_binding *binding = &arrayObj->VertexBinding[index]; + struct gl_vertex_array_object *vao = ctx->Array.VAO; + struct gl_vertex_buffer_binding *binding = &vao->VertexBinding[index]; if (binding->BufferObj != vbo || binding->Offset != offset || @@ -153,7 +153,7 @@ bind_vertex_buffer(struct gl_context *ctx, GLuint index, binding->Offset = offset; binding->Stride = stride; - arrayObj->NewArrays |= binding->_BoundArrays; + vao->NewArrays |= binding->_BoundArrays; } } @@ -166,14 +166,14 @@ static void vertex_binding_divisor(struct gl_context *ctx, GLuint bindingIndex, GLuint divisor) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; struct gl_vertex_buffer_binding *binding = - &arrayObj->VertexBinding[bindingIndex]; + &vao->VertexBinding[bindingIndex]; if (binding->InstanceDivisor != divisor) { FLUSH_VERTICES(ctx, _NEW_ARRAY); binding->InstanceDivisor = divisor; - arrayObj->NewArrays |= binding->_BoundArrays; + vao->NewArrays |= binding->_BoundArrays; } } @@ -329,7 +329,7 @@ update_array_format(struct gl_context *ctx, elementSize = _mesa_bytes_per_vertex_attrib(size, type); assert(elementSize != -1); - array = &ctx->Array.ArrayObj->VertexAttrib[attrib]; + array = &ctx->Array.VAO->VertexAttrib[attrib]; array->Size = size; array->Type = type; array->Format = format; @@ -338,7 +338,7 @@ update_array_format(struct gl_context *ctx, array->RelativeOffset = relativeOffset; array->_ElementSize = elementSize; - ctx->Array.ArrayObj->NewArrays |= VERT_BIT(attrib); + ctx->Array.VAO->NewArrays |= VERT_BIT(attrib); ctx->NewState |= _NEW_ARRAY; return true; @@ -384,7 +384,7 @@ update_array(struct gl_context *ctx, * The check for VBOs is handled below. */ if (ctx->API == API_OPENGL_CORE - && (ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj)) { + && (ctx->Array.VAO == ctx->Array.DefaultVAO)) { _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no array object bound)", func); return; @@ -407,7 +407,7 @@ update_array(struct gl_context *ctx, * to the ARRAY_BUFFER buffer object binding point (see section * 2.9.6), and the pointer argument is not NULL." */ - if (ptr != NULL && ctx->Array.ArrayObj->ARBsemantics && + if (ptr != NULL && ctx->Array.VAO->ARBsemantics && !_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) { _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-VBO array)", func); return; @@ -422,7 +422,7 @@ update_array(struct gl_context *ctx, vertex_attrib_binding(ctx, attrib, attrib); /* The Stride and Ptr fields are not set by update_array_format() */ - array = &ctx->Array.ArrayObj->VertexAttrib[attrib]; + array = &ctx->Array.VAO->VertexAttrib[attrib]; array->Stride = stride; array->Ptr = (const GLvoid *) ptr; @@ -664,7 +664,7 @@ _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type, void GLAPIENTRY _mesa_EnableVertexAttribArray(GLuint index) { - struct gl_array_object *arrayObj; + struct gl_vertex_array_object *vao; GET_CURRENT_CONTEXT(ctx); if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { @@ -673,16 +673,16 @@ _mesa_EnableVertexAttribArray(GLuint index) return; } - arrayObj = ctx->Array.ArrayObj; + vao = ctx->Array.VAO; - ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(arrayObj->_VertexAttrib)); + ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(vao->_VertexAttrib)); - if (!arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) { + if (!vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) { /* was disabled, now being enabled */ 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); + vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_TRUE; + vao->_Enabled |= VERT_BIT_GENERIC(index); + vao->NewArrays |= VERT_BIT_GENERIC(index); } } @@ -690,7 +690,7 @@ _mesa_EnableVertexAttribArray(GLuint index) void GLAPIENTRY _mesa_DisableVertexAttribArray(GLuint index) { - struct gl_array_object *arrayObj; + struct gl_vertex_array_object *vao; GET_CURRENT_CONTEXT(ctx); if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { @@ -699,16 +699,16 @@ _mesa_DisableVertexAttribArray(GLuint index) return; } - arrayObj = ctx->Array.ArrayObj; + vao = ctx->Array.VAO; - ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(arrayObj->_VertexAttrib)); + ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(vao->_VertexAttrib)); - if (arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) { + if (vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) { /* was enabled, now being disabled */ 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); + vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_FALSE; + vao->_Enabled &= ~VERT_BIT_GENERIC(index); + vao->NewArrays |= VERT_BIT_GENERIC(index); } } @@ -722,7 +722,7 @@ static GLuint get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, const char *caller) { - const struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + const struct gl_vertex_array_object *vao = ctx->Array.VAO; const struct gl_vertex_attrib_array *array; if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { @@ -730,9 +730,9 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, return 0; } - ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(arrayObj->VertexAttrib)); + ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(vao->VertexAttrib)); - array = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)]; + array = &vao->VertexAttrib[VERT_ATTRIB_GENERIC(index)]; switch (pname) { case GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: @@ -746,7 +746,7 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: return array->Normalized; case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB: - return arrayObj->VertexBinding[array->VertexBinding].BufferObj->Name; + return vao->VertexBinding[array->VertexBinding].BufferObj->Name; case GL_VERTEX_ATTRIB_ARRAY_INTEGER: if ((_mesa_is_desktop_gl(ctx) && (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4)) @@ -757,7 +757,7 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname, case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB: if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_instanced_arrays) || _mesa_is_gles3(ctx)) { - return arrayObj->VertexBinding[array->VertexBinding].InstanceDivisor; + return vao->VertexBinding[array->VertexBinding].InstanceDivisor; } goto error; case GL_VERTEX_ATTRIB_BINDING: @@ -801,7 +801,7 @@ get_current_attrib(struct gl_context *ctx, GLuint index, const char *function) return NULL; } - ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.ArrayObj->_VertexAttrib)); + ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.VAO->_VertexAttrib)); FLUSH_CURRENT(ctx, 0); return ctx->Current.Attrib[VERT_ATTRIB_GENERIC(index)]; @@ -923,9 +923,9 @@ _mesa_GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid **pointer) return; } - ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.ArrayObj->_VertexAttrib)); + ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.VAO->_VertexAttrib)); - *pointer = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Ptr; + *pointer = (GLvoid *) ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Ptr; } @@ -1314,7 +1314,7 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor) return; } - ASSERT(genericIndex < Elements(ctx->Array.ArrayObj->VertexAttrib)); + ASSERT(genericIndex < Elements(ctx->Array.VAO->VertexAttrib)); /* The ARB_vertex_attrib_binding spec says: * @@ -1365,7 +1365,7 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, GLsizei stride) { GET_CURRENT_CONTEXT(ctx); - const struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + const struct gl_vertex_array_object *vao = ctx->Array.VAO; struct gl_buffer_object *vbo; ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -1376,7 +1376,7 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, * is bound." */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBindVertexBuffer(No array object bound)"); return; @@ -1412,8 +1412,8 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, return; } - if (buffer == arrayObj->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) { - vbo = arrayObj->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj; + if (buffer == vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) { + vbo = vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj; } else if (buffer != 0) { vbo = _mesa_lookup_bufferobj(ctx, buffer); @@ -1468,7 +1468,7 @@ _mesa_VertexAttribFormat(GLuint attribIndex, GLint size, GLenum type, * - ..." */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribFormat(No array object bound)"); return; @@ -1515,7 +1515,7 @@ _mesa_VertexAttribIFormat(GLuint attribIndex, GLint size, GLenum type, * - ..." */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribIFormat(No array object bound)"); return; @@ -1563,7 +1563,7 @@ _mesa_VertexAttribLFormat(GLuint attribIndex, GLint size, GLenum type, * that this is an oversight. */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribLFormat(No array object bound)"); return; @@ -1603,7 +1603,7 @@ _mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex) * is bound." */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexAttribBinding(No array object bound)"); return; @@ -1633,7 +1633,7 @@ _mesa_VertexAttribBinding(GLuint attribIndex, GLuint bindingIndex) } ASSERT(VERT_ATTRIB_GENERIC(attribIndex) < - Elements(ctx->Array.ArrayObj->VertexAttrib)); + Elements(ctx->Array.VAO->VertexAttrib)); vertex_attrib_binding(ctx, VERT_ATTRIB_GENERIC(attribIndex), VERT_ATTRIB_GENERIC(bindingIndex)); @@ -1657,7 +1657,7 @@ _mesa_VertexBindingDivisor(GLuint bindingIndex, GLuint divisor) * is bound." */ if (ctx->API == API_OPENGL_CORE && - ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj) { + ctx->Array.VAO == ctx->Array.DefaultVAO) { _mesa_error(ctx, GL_INVALID_OPERATION, "glVertexBindingDivisor(No array object bound)"); return; @@ -1758,25 +1758,25 @@ print_array(const char *name, GLint index, const struct gl_client_array *array) void _mesa_print_arrays(struct gl_context *ctx) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; GLuint i; - _mesa_update_array_object_max_element(ctx, arrayObj); + _mesa_update_vao_max_element(ctx, vao); - printf("Array Object %u\n", arrayObj->Name); - if (arrayObj->_VertexAttrib[VERT_ATTRIB_POS].Enabled) - print_array("Vertex", -1, &arrayObj->_VertexAttrib[VERT_ATTRIB_POS]); - if (arrayObj->_VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) - print_array("Normal", -1, &arrayObj->_VertexAttrib[VERT_ATTRIB_NORMAL]); - if (arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) - print_array("Color", -1, &arrayObj->_VertexAttrib[VERT_ATTRIB_COLOR0]); + printf("Array Object %u\n", vao->Name); + if (vao->_VertexAttrib[VERT_ATTRIB_POS].Enabled) + print_array("Vertex", -1, &vao->_VertexAttrib[VERT_ATTRIB_POS]); + if (vao->_VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) + print_array("Normal", -1, &vao->_VertexAttrib[VERT_ATTRIB_NORMAL]); + if (vao->_VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) + print_array("Color", -1, &vao->_VertexAttrib[VERT_ATTRIB_COLOR0]); for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) - if (arrayObj->_VertexAttrib[VERT_ATTRIB_TEX(i)].Enabled) - print_array("TexCoord", i, &arrayObj->_VertexAttrib[VERT_ATTRIB_TEX(i)]); + if (vao->_VertexAttrib[VERT_ATTRIB_TEX(i)].Enabled) + print_array("TexCoord", i, &vao->_VertexAttrib[VERT_ATTRIB_TEX(i)]); for (i = 0; i < VERT_ATTRIB_GENERIC_MAX; i++) - if (arrayObj->_VertexAttrib[VERT_ATTRIB_GENERIC(i)].Enabled) - print_array("Attrib", i, &arrayObj->_VertexAttrib[VERT_ATTRIB_GENERIC(i)]); - printf(" _MaxElement = %u\n", arrayObj->_MaxElement); + if (vao->_VertexAttrib[VERT_ATTRIB_GENERIC(i)].Enabled) + print_array("Attrib", i, &vao->_VertexAttrib[VERT_ATTRIB_GENERIC(i)]); + printf(" _MaxElement = %u\n", vao->_MaxElement); } @@ -1786,9 +1786,8 @@ _mesa_print_arrays(struct gl_context *ctx) void _mesa_init_varray(struct gl_context *ctx) { - ctx->Array.DefaultArrayObj = ctx->Driver.NewArrayObject(ctx, 0); - _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, - ctx->Array.DefaultArrayObj); + ctx->Array.DefaultVAO = ctx->Driver.NewArrayObject(ctx, 0); + _mesa_reference_vao(ctx, &ctx->Array.VAO, ctx->Array.DefaultVAO); ctx->Array.ActiveTexture = 0; /* GL_ARB_multitexture */ ctx->Array.Objects = _mesa_NewHashTable(); @@ -1801,9 +1800,9 @@ _mesa_init_varray(struct gl_context *ctx) static void delete_arrayobj_cb(GLuint id, void *data, void *userData) { - struct gl_array_object *arrayObj = (struct gl_array_object *) data; + struct gl_vertex_array_object *vao = (struct gl_vertex_array_object *) data; struct gl_context *ctx = (struct gl_context *) userData; - _mesa_delete_array_object(ctx, arrayObj); + _mesa_delete_vao(ctx, vao); } diff --git a/mesalib/src/mesa/program/prog_print.c b/mesalib/src/mesa/program/prog_print.c index 02ba01eca..4a5c1c1fb 100644 --- a/mesalib/src/mesa/program/prog_print.c +++ b/mesalib/src/mesa/program/prog_print.c @@ -1021,6 +1021,9 @@ _mesa_write_shader_to_file(const struct gl_shader *shader) case MESA_SHADER_GEOMETRY: type = "geom"; break; + case MESA_SHADER_COMPUTE: + type = "comp"; + break; } _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type); diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c index ea8eb0d3a..fa80bc58c 100644 --- a/mesalib/src/mesa/program/program.c +++ b/mesalib/src/mesa/program/program.c @@ -278,6 +278,21 @@ _mesa_init_vertex_program( struct gl_context *ctx, struct gl_vertex_program *pro } +/** + * Initialize a new compute program object. + */ +struct gl_program * +_mesa_init_compute_program(struct gl_context *ctx, + struct gl_compute_program *prog, GLenum target, + GLuint id) +{ + if (prog) + return _mesa_init_program_struct( ctx, &prog->Base, target, id ); + else + return NULL; +} + + /** * Initialize a new geometry program object. */ @@ -324,6 +339,11 @@ _mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id) CALLOC_STRUCT(gl_geometry_program), target, id); break; + case GL_COMPUTE_PROGRAM_NV: + prog = _mesa_init_compute_program(ctx, + CALLOC_STRUCT(gl_compute_program), + target, id); + break; default: _mesa_problem(ctx, "bad target in _mesa_new_program"); prog = NULL; diff --git a/mesalib/src/mesa/program/program.h b/mesalib/src/mesa/program/program.h index 71b0a4af2..ef698242f 100644 --- a/mesalib/src/mesa/program/program.h +++ b/mesalib/src/mesa/program/program.h @@ -83,6 +83,11 @@ _mesa_init_geometry_program(struct gl_context *ctx, struct gl_geometry_program *prog, GLenum target, GLuint id); +extern struct gl_program * +_mesa_init_compute_program(struct gl_context *ctx, + struct gl_compute_program *prog, + GLenum target, GLuint id); + extern struct gl_program * _mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id); @@ -202,6 +207,8 @@ _mesa_program_enum_to_shader_stage(GLenum v) return MESA_SHADER_FRAGMENT; case GL_GEOMETRY_PROGRAM_NV: return MESA_SHADER_GEOMETRY; + case GL_COMPUTE_PROGRAM_NV: + return MESA_SHADER_COMPUTE; default: ASSERT(0); return ~0; @@ -219,6 +226,8 @@ _mesa_shader_stage_to_program(unsigned stage) return GL_FRAGMENT_PROGRAM_ARB; case MESA_SHADER_GEOMETRY: return GL_GEOMETRY_PROGRAM_NV; + case MESA_SHADER_COMPUTE: + return GL_COMPUTE_PROGRAM_NV; } assert(!"Unexpected shader stage in _mesa_shader_stage_to_program"); diff --git a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c index ac8d0798a..c8f088dc8 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -229,7 +229,8 @@ st_bufferobj_data(struct gl_context *ctx, case GL_STATIC_DRAW: case GL_STATIC_READ: case GL_STATIC_COPY: - pipe_usage = PIPE_USAGE_STATIC; + default: + pipe_usage = PIPE_USAGE_DEFAULT; break; case GL_DYNAMIC_DRAW: case GL_DYNAMIC_READ: @@ -241,8 +242,6 @@ st_bufferobj_data(struct gl_context *ctx, case GL_STREAM_COPY: pipe_usage = PIPE_USAGE_STREAM; break; - default: - pipe_usage = PIPE_USAGE_DEFAULT; } pipe_resource_reference( &st_obj->buffer, NULL ); @@ -436,6 +435,6 @@ st_init_bufferobject_functions(struct dd_function_table *functions) functions->CopyBufferSubData = st_copy_buffer_subdata; /* For GL_APPLE_vertex_array_object */ - functions->NewArrayObject = _mesa_new_array_object; - functions->DeleteArrayObject = _mesa_delete_array_object; + functions->NewArrayObject = _mesa_new_vao; + functions->DeleteArrayObject = _mesa_delete_vao; } diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c index 97f213077..90f34e39e 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c @@ -483,7 +483,7 @@ make_texture(struct st_context *st, { struct gl_context *ctx = st->ctx; struct pipe_context *pipe = st->pipe; - gl_format mformat; + mesa_format mformat; struct pipe_resource *pt; enum pipe_format pipeFormat; GLenum baseInternalFormat; @@ -542,7 +542,7 @@ make_texture(struct st_context *st, */ success = _mesa_texstore(ctx, 2, /* dims */ baseInternalFormat, /* baseInternalFormat */ - mformat, /* gl_format */ + mformat, /* mesa_format */ transfer->stride, /* dstRowStride, bytes */ &dest, /* destSlices */ width, height, 1, /* size */ diff --git a/mesalib/src/mesa/state_tracker/st_cb_eglimage.c b/mesalib/src/mesa/state_tracker/st_cb_eglimage.c index 7484cb4f1..561967d6c 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_eglimage.c +++ b/mesalib/src/mesa/state_tracker/st_cb_eglimage.c @@ -99,7 +99,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target, struct st_texture_object *stObj; struct st_texture_image *stImage; GLenum internalFormat; - gl_format texFormat; + mesa_format texFormat; /* map pipe format to base format */ if (util_format_get_component_bits(ps->format, UTIL_FORMAT_COLORSPACE_RGB, 3) > 0) diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c index 780148487..6449c62a8 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c +++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c @@ -541,7 +541,7 @@ st_validate_attachment(struct gl_context *ctx, { const struct st_texture_object *stObj = st_texture_object(att->Texture); enum pipe_format format; - gl_format texFormat; + mesa_format texFormat; GLboolean valid; /* Sanity check: we must be binding the surface as a (color) render target @@ -568,7 +568,7 @@ st_validate_attachment(struct gl_context *ctx, * Later when we create a surface, we change the format to a linear one. */ if (!ctx->Extensions.EXT_framebuffer_sRGB && _mesa_get_format_color_encoding(texFormat) == GL_SRGB) { - const gl_format linearFormat = _mesa_get_srgb_format_linear(texFormat); + const mesa_format linearFormat = _mesa_get_srgb_format_linear(texFormat); format = st_mesa_format_to_pipe_format(linearFormat); } diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.c b/mesalib/src/mesa/state_tracker/st_cb_texture.c index aa0862867..f0bf3745b 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_texture.c +++ b/mesalib/src/mesa/state_tracker/st_cb_texture.c @@ -519,7 +519,7 @@ prep_teximage(struct gl_context *ctx, struct gl_texture_image *texImage, if (stObj->surface_based) { const GLenum target = texObj->Target; const GLuint level = texImage->Level; - gl_format texFormat; + mesa_format texFormat; _mesa_clear_texture_object(ctx, texObj); pipe_resource_reference(&stObj->pt, NULL); @@ -604,7 +604,7 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims, struct pipe_transfer *transfer; struct pipe_blit_info blit; enum pipe_format src_format, dst_format; - gl_format mesa_src_format; + mesa_format mesa_src_format; GLenum gl_target = texImage->TexObject->Target; unsigned bind; GLubyte *map; @@ -856,7 +856,7 @@ st_GetTexImage(struct gl_context * ctx, struct pipe_resource *dst = NULL; struct pipe_resource dst_templ; enum pipe_format dst_format, src_format; - gl_format mesa_format; + mesa_format mesa_format; GLenum gl_target = texImage->TexObject->Target; enum pipe_texture_target pipe_target; struct pipe_blit_info blit; @@ -865,7 +865,9 @@ st_GetTexImage(struct gl_context * ctx, ubyte *map = NULL; boolean done = FALSE; - if (!st->prefer_blit_based_texture_transfer) { + if (!st->prefer_blit_based_texture_transfer && + !_mesa_is_format_compressed(texImage->TexFormat)) { + /* Try to avoid the fallback if we're doing texture decompression here */ goto fallback; } @@ -1483,6 +1485,12 @@ st_finalize_texture(struct gl_context *ctx, if (tObj->Target == GL_TEXTURE_BUFFER) { struct st_buffer_object *st_obj = st_buffer_object(tObj->BufferObject); + if (!st_obj) { + pipe_resource_reference(&stObj->pt, NULL); + pipe_sampler_view_reference(&stObj->sampler_view, NULL); + return GL_TRUE; + } + if (st_obj->buffer != stObj->pt) { pipe_resource_reference(&stObj->pt, st_obj->buffer); pipe_sampler_view_release(st->pipe, &stObj->sampler_view); @@ -1689,7 +1697,7 @@ st_AllocTextureStorage(struct gl_context *ctx, static GLboolean st_TestProxyTexImage(struct gl_context *ctx, GLenum target, - GLint level, gl_format format, + GLint level, mesa_format format, GLint width, GLint height, GLint depth, GLint border) { diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index e7d5d7413..9829eb596 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -89,10 +89,6 @@ void st_init_limits(struct st_context *st) c->MaxArrayTextureLayers = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS); - c->MaxCombinedTextureImageUnits - = _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS), - MAX_COMBINED_TEXTURE_IMAGE_UNITS); - /* 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. @@ -243,6 +239,12 @@ void st_init_limits(struct st_context *st) options->LowerClipDistance = true; } + c->MaxCombinedTextureImageUnits = + _min(c->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits + + c->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits + + c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits, + MAX_COMBINED_TEXTURE_IMAGE_UNITS); + /* This depends on program constants. */ c->MaxTextureCoordUnits = _min(c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS); @@ -419,7 +421,9 @@ void st_init_extensions(struct st_context *st) PIPE_FORMAT_R16G16B16A16_FLOAT } }, { { o(ARB_texture_rgb10_a2ui) }, - { PIPE_FORMAT_B10G10R10A2_UINT } }, + { PIPE_FORMAT_R10G10B10A2_UINT, + PIPE_FORMAT_B10G10R10A2_UINT }, + GL_TRUE }, /* at least one format must be supported */ { { o(EXT_framebuffer_sRGB) }, { PIPE_FORMAT_A8B8G8R8_SRGB, @@ -537,7 +541,6 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.EXT_blend_color = GL_TRUE; ctx->Extensions.EXT_blend_func_separate = GL_TRUE; ctx->Extensions.EXT_blend_minmax = GL_TRUE; - ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE; ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; ctx->Extensions.EXT_point_parameters = GL_TRUE; @@ -740,9 +743,7 @@ void st_init_extensions(struct st_context *st) ctx->Const.MinMapBufferAlignment = screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT); - if (ctx->Const.MinMapBufferAlignment >= 64) { - ctx->Extensions.ARB_map_buffer_alignment = GL_TRUE; - } + if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS)) { ctx->Extensions.ARB_texture_buffer_object = GL_TRUE; diff --git a/mesalib/src/mesa/state_tracker/st_format.c b/mesalib/src/mesa/state_tracker/st_format.c index b0158f300..90e9f2f78 100644 --- a/mesalib/src/mesa/state_tracker/st_format.c +++ b/mesalib/src/mesa/state_tracker/st_format.c @@ -54,70 +54,70 @@ * Translate Mesa format to Gallium format. */ enum pipe_format -st_mesa_format_to_pipe_format(gl_format mesaFormat) +st_mesa_format_to_pipe_format(mesa_format mesaFormat) { switch (mesaFormat) { - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: return PIPE_FORMAT_ABGR8888_UNORM; - case MESA_FORMAT_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_UNORM: return PIPE_FORMAT_RGBA8888_UNORM; - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: return PIPE_FORMAT_BGRA8888_UNORM; - case MESA_FORMAT_ARGB8888_REV: + case MESA_FORMAT_A8R8G8B8_UNORM: return PIPE_FORMAT_ARGB8888_UNORM; - case MESA_FORMAT_RGBX8888: + case MESA_FORMAT_X8B8G8R8_UNORM: return PIPE_FORMAT_XBGR8888_UNORM; - case MESA_FORMAT_RGBX8888_REV: + case MESA_FORMAT_R8G8B8X8_UNORM: return PIPE_FORMAT_RGBX8888_UNORM; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: return PIPE_FORMAT_BGRX8888_UNORM; - case MESA_FORMAT_XRGB8888_REV: + case MESA_FORMAT_X8R8G8B8_UNORM: return PIPE_FORMAT_XRGB8888_UNORM; - case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_B5G5R5A1_UNORM: return PIPE_FORMAT_B5G5R5A1_UNORM; - case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_B4G4R4A4_UNORM: return PIPE_FORMAT_B4G4R4A4_UNORM; - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: return PIPE_FORMAT_B5G6R5_UNORM; - case MESA_FORMAT_RGB332: + case MESA_FORMAT_B2G3R3_UNORM: return PIPE_FORMAT_B2G3R3_UNORM; - case MESA_FORMAT_ARGB2101010: + case MESA_FORMAT_B10G10R10A2_UNORM: return PIPE_FORMAT_B10G10R10A2_UNORM; - case MESA_FORMAT_AL44: + case MESA_FORMAT_L4A4_UNORM: return PIPE_FORMAT_L4A4_UNORM; - case MESA_FORMAT_AL88: + case MESA_FORMAT_L8A8_UNORM: return PIPE_FORMAT_L8A8_UNORM; - case MESA_FORMAT_AL1616: + case MESA_FORMAT_L16A16_UNORM: return PIPE_FORMAT_L16A16_UNORM; - case MESA_FORMAT_A8: + case MESA_FORMAT_A_UNORM8: return PIPE_FORMAT_A8_UNORM; - case MESA_FORMAT_A16: + case MESA_FORMAT_A_UNORM16: return PIPE_FORMAT_A16_UNORM; - case MESA_FORMAT_L8: + case MESA_FORMAT_L_UNORM8: return PIPE_FORMAT_L8_UNORM; - case MESA_FORMAT_L16: + case MESA_FORMAT_L_UNORM16: return PIPE_FORMAT_L16_UNORM; - case MESA_FORMAT_I8: + case MESA_FORMAT_I_UNORM8: return PIPE_FORMAT_I8_UNORM; - case MESA_FORMAT_I16: + case MESA_FORMAT_I_UNORM16: return PIPE_FORMAT_I16_UNORM; - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: return PIPE_FORMAT_Z16_UNORM; - case MESA_FORMAT_Z32: + case MESA_FORMAT_Z_UNORM32: return PIPE_FORMAT_Z32_UNORM; - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: return PIPE_FORMAT_S8_UINT_Z24_UNORM; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: return PIPE_FORMAT_Z24_UNORM_S8_UINT; - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_X8Z24_UNORM: return PIPE_FORMAT_X8Z24_UNORM; - case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_UNORM_S8_UINT: return PIPE_FORMAT_Z24X8_UNORM; - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: return PIPE_FORMAT_S8_UINT; - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_FLOAT32: return PIPE_FORMAT_Z32_FLOAT; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: return PIPE_FORMAT_Z32_FLOAT_S8X24_UINT; case MESA_FORMAT_YCBCR: return PIPE_FORMAT_UYVY; @@ -137,15 +137,15 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) return PIPE_FORMAT_DXT3_SRGBA; case MESA_FORMAT_SRGBA_DXT5: return PIPE_FORMAT_DXT5_SRGBA; - case MESA_FORMAT_SLA8: + case MESA_FORMAT_L8A8_SRGB: return PIPE_FORMAT_L8A8_SRGB; - case MESA_FORMAT_SL8: + case MESA_FORMAT_L_SRGB8: return PIPE_FORMAT_L8_SRGB; - case MESA_FORMAT_SRGB8: + case MESA_FORMAT_BGR_SRGB8: return PIPE_FORMAT_R8G8B8_SRGB; - case MESA_FORMAT_SRGBA8: + case MESA_FORMAT_A8B8G8R8_SRGB: return PIPE_FORMAT_A8B8G8R8_SRGB; - case MESA_FORMAT_SARGB8: + case MESA_FORMAT_B8G8R8A8_SRGB: return PIPE_FORMAT_B8G8R8A8_SRGB; case MESA_FORMAT_RGBA_FLOAT32: return PIPE_FORMAT_R32G32B32A32_FLOAT; @@ -155,21 +155,21 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) return PIPE_FORMAT_R32G32B32_FLOAT; case MESA_FORMAT_RGB_FLOAT16: return PIPE_FORMAT_R16G16B16_FLOAT; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32: + case MESA_FORMAT_LA_FLOAT32: return PIPE_FORMAT_L32A32_FLOAT; - case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16: + case MESA_FORMAT_LA_FLOAT16: return PIPE_FORMAT_L16A16_FLOAT; - case MESA_FORMAT_LUMINANCE_FLOAT32: + case MESA_FORMAT_L_FLOAT32: return PIPE_FORMAT_L32_FLOAT; - case MESA_FORMAT_LUMINANCE_FLOAT16: + case MESA_FORMAT_L_FLOAT16: return PIPE_FORMAT_L16_FLOAT; - case MESA_FORMAT_ALPHA_FLOAT32: + case MESA_FORMAT_A_FLOAT32: return PIPE_FORMAT_A32_FLOAT; - case MESA_FORMAT_ALPHA_FLOAT16: + case MESA_FORMAT_A_FLOAT16: return PIPE_FORMAT_A16_FLOAT; - case MESA_FORMAT_INTENSITY_FLOAT32: + case MESA_FORMAT_I_FLOAT32: return PIPE_FORMAT_I32_FLOAT; - case MESA_FORMAT_INTENSITY_FLOAT16: + case MESA_FORMAT_I_FLOAT16: return PIPE_FORMAT_I16_FLOAT; case MESA_FORMAT_R_FLOAT32: return PIPE_FORMAT_R32_FLOAT; @@ -180,97 +180,97 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) case MESA_FORMAT_RG_FLOAT16: return PIPE_FORMAT_R16G16_FLOAT; - case MESA_FORMAT_R8: + case MESA_FORMAT_R_UNORM8: return PIPE_FORMAT_R8_UNORM; - case MESA_FORMAT_R16: + case MESA_FORMAT_R_UNORM16: return PIPE_FORMAT_R16_UNORM; - case MESA_FORMAT_GR88: + case MESA_FORMAT_R8G8_UNORM: return PIPE_FORMAT_R8G8_UNORM; - case MESA_FORMAT_GR1616: + case MESA_FORMAT_R16G16_UNORM: return PIPE_FORMAT_R16G16_UNORM; - case MESA_FORMAT_RGBA_16: + case MESA_FORMAT_RGBA_UNORM16: return PIPE_FORMAT_R16G16B16A16_UNORM; /* signed int formats */ - case MESA_FORMAT_ALPHA_UINT8: + case MESA_FORMAT_A_UINT8: return PIPE_FORMAT_A8_UINT; - case MESA_FORMAT_ALPHA_UINT16: + case MESA_FORMAT_A_UINT16: return PIPE_FORMAT_A16_UINT; - case MESA_FORMAT_ALPHA_UINT32: + case MESA_FORMAT_A_UINT32: return PIPE_FORMAT_A32_UINT; - case MESA_FORMAT_ALPHA_INT8: + case MESA_FORMAT_A_SINT8: return PIPE_FORMAT_A8_SINT; - case MESA_FORMAT_ALPHA_INT16: + case MESA_FORMAT_A_SINT16: return PIPE_FORMAT_A16_SINT; - case MESA_FORMAT_ALPHA_INT32: + case MESA_FORMAT_A_SINT32: return PIPE_FORMAT_A32_SINT; - case MESA_FORMAT_INTENSITY_UINT8: + case MESA_FORMAT_I_UINT8: return PIPE_FORMAT_I8_UINT; - case MESA_FORMAT_INTENSITY_UINT16: + case MESA_FORMAT_I_UINT16: return PIPE_FORMAT_I16_UINT; - case MESA_FORMAT_INTENSITY_UINT32: + case MESA_FORMAT_I_UINT32: return PIPE_FORMAT_I32_UINT; - case MESA_FORMAT_INTENSITY_INT8: + case MESA_FORMAT_I_SINT8: return PIPE_FORMAT_I8_SINT; - case MESA_FORMAT_INTENSITY_INT16: + case MESA_FORMAT_I_SINT16: return PIPE_FORMAT_I16_SINT; - case MESA_FORMAT_INTENSITY_INT32: + case MESA_FORMAT_I_SINT32: return PIPE_FORMAT_I32_SINT; - case MESA_FORMAT_LUMINANCE_UINT8: + case MESA_FORMAT_L_UINT8: return PIPE_FORMAT_L8_UINT; - case MESA_FORMAT_LUMINANCE_UINT16: + case MESA_FORMAT_L_UINT16: return PIPE_FORMAT_L16_UINT; - case MESA_FORMAT_LUMINANCE_UINT32: + case MESA_FORMAT_L_UINT32: return PIPE_FORMAT_L32_UINT; - case MESA_FORMAT_LUMINANCE_INT8: + case MESA_FORMAT_L_SINT8: return PIPE_FORMAT_L8_SINT; - case MESA_FORMAT_LUMINANCE_INT16: + case MESA_FORMAT_L_SINT16: return PIPE_FORMAT_L16_SINT; - case MESA_FORMAT_LUMINANCE_INT32: + case MESA_FORMAT_L_SINT32: return PIPE_FORMAT_L32_SINT; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT8: + case MESA_FORMAT_LA_UINT8: return PIPE_FORMAT_L8A8_UINT; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT16: + case MESA_FORMAT_LA_UINT16: return PIPE_FORMAT_L16A16_UINT; - case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: + case MESA_FORMAT_LA_UINT32: return PIPE_FORMAT_L32A32_UINT; - case MESA_FORMAT_LUMINANCE_ALPHA_INT8: + case MESA_FORMAT_LA_SINT8: return PIPE_FORMAT_L8A8_SINT; - case MESA_FORMAT_LUMINANCE_ALPHA_INT16: + case MESA_FORMAT_LA_SINT16: return PIPE_FORMAT_L16A16_SINT; - case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + case MESA_FORMAT_LA_SINT32: return PIPE_FORMAT_L32A32_SINT; - case MESA_FORMAT_R_INT8: + case MESA_FORMAT_R_SINT8: return PIPE_FORMAT_R8_SINT; - case MESA_FORMAT_RG_INT8: + case MESA_FORMAT_RG_SINT8: return PIPE_FORMAT_R8G8_SINT; - case MESA_FORMAT_RGB_INT8: + case MESA_FORMAT_RGB_SINT8: return PIPE_FORMAT_R8G8B8_SINT; - case MESA_FORMAT_RGBA_INT8: + case MESA_FORMAT_RGBA_SINT8: return PIPE_FORMAT_R8G8B8A8_SINT; - case MESA_FORMAT_R_INT16: + case MESA_FORMAT_R_SINT16: return PIPE_FORMAT_R16_SINT; - case MESA_FORMAT_RG_INT16: + case MESA_FORMAT_RG_SINT16: return PIPE_FORMAT_R16G16_SINT; - case MESA_FORMAT_RGB_INT16: + case MESA_FORMAT_RGB_SINT16: return PIPE_FORMAT_R16G16B16_SINT; - case MESA_FORMAT_RGBA_INT16: + case MESA_FORMAT_RGBA_SINT16: return PIPE_FORMAT_R16G16B16A16_SINT; - case MESA_FORMAT_R_INT32: + case MESA_FORMAT_R_SINT32: return PIPE_FORMAT_R32_SINT; - case MESA_FORMAT_RG_INT32: + case MESA_FORMAT_RG_SINT32: return PIPE_FORMAT_R32G32_SINT; - case MESA_FORMAT_RGB_INT32: + case MESA_FORMAT_RGB_SINT32: return PIPE_FORMAT_R32G32B32_SINT; - case MESA_FORMAT_RGBA_INT32: + case MESA_FORMAT_RGBA_SINT32: return PIPE_FORMAT_R32G32B32A32_SINT; /* unsigned int formats */ @@ -299,96 +299,98 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) case MESA_FORMAT_RGBA_UINT32: return PIPE_FORMAT_R32G32B32A32_UINT; - case MESA_FORMAT_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_UNORM: return PIPE_FORMAT_RGTC1_UNORM; - case MESA_FORMAT_SIGNED_RED_RGTC1: + case MESA_FORMAT_R_RGTC1_SNORM: return PIPE_FORMAT_RGTC1_SNORM; - case MESA_FORMAT_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_UNORM: return PIPE_FORMAT_RGTC2_UNORM; - case MESA_FORMAT_SIGNED_RG_RGTC2: + case MESA_FORMAT_RG_RGTC2_SNORM: return PIPE_FORMAT_RGTC2_SNORM; - case MESA_FORMAT_L_LATC1: + case MESA_FORMAT_L_LATC1_UNORM: return PIPE_FORMAT_LATC1_UNORM; - case MESA_FORMAT_SIGNED_L_LATC1: + case MESA_FORMAT_L_LATC1_SNORM: return PIPE_FORMAT_LATC1_SNORM; - case MESA_FORMAT_LA_LATC2: + case MESA_FORMAT_LA_LATC2_UNORM: return PIPE_FORMAT_LATC2_UNORM; - case MESA_FORMAT_SIGNED_LA_LATC2: + case MESA_FORMAT_LA_LATC2_SNORM: return PIPE_FORMAT_LATC2_SNORM; case MESA_FORMAT_ETC1_RGB8: return PIPE_FORMAT_ETC1_RGB8; /* signed normalized formats */ - case MESA_FORMAT_SIGNED_R8: + case MESA_FORMAT_R_SNORM8: return PIPE_FORMAT_R8_SNORM; - case MESA_FORMAT_SIGNED_RG88_REV: + case MESA_FORMAT_R8G8_SNORM: return PIPE_FORMAT_R8G8_SNORM; - case MESA_FORMAT_SIGNED_RGBA8888_REV: + case MESA_FORMAT_R8G8B8A8_SNORM: return PIPE_FORMAT_R8G8B8A8_SNORM; - case MESA_FORMAT_SIGNED_A8: + case MESA_FORMAT_A_SNORM8: return PIPE_FORMAT_A8_SNORM; - case MESA_FORMAT_SIGNED_L8: + case MESA_FORMAT_L_SNORM8: return PIPE_FORMAT_L8_SNORM; - case MESA_FORMAT_SIGNED_AL88: + case MESA_FORMAT_L8A8_SNORM: return PIPE_FORMAT_L8A8_SNORM; - case MESA_FORMAT_SIGNED_I8: + case MESA_FORMAT_I_SNORM8: return PIPE_FORMAT_I8_SNORM; - case MESA_FORMAT_SIGNED_R16: + case MESA_FORMAT_R_SNORM16: return PIPE_FORMAT_R16_SNORM; - case MESA_FORMAT_SIGNED_GR1616: + case MESA_FORMAT_R16G16_SNORM: return PIPE_FORMAT_R16G16_SNORM; - case MESA_FORMAT_SIGNED_RGBA_16: + case MESA_FORMAT_RGBA_SNORM16: return PIPE_FORMAT_R16G16B16A16_SNORM; - case MESA_FORMAT_SIGNED_A16: + case MESA_FORMAT_A_SNORM16: return PIPE_FORMAT_A16_SNORM; - case MESA_FORMAT_SIGNED_L16: + case MESA_FORMAT_L_SNORM16: return PIPE_FORMAT_L16_SNORM; - case MESA_FORMAT_SIGNED_AL1616: + case MESA_FORMAT_LA_SNORM16: return PIPE_FORMAT_L16A16_SNORM; - case MESA_FORMAT_SIGNED_I16: + case MESA_FORMAT_I_SNORM16: return PIPE_FORMAT_I16_SNORM; - case MESA_FORMAT_RGB9_E5_FLOAT: + case MESA_FORMAT_R9G9B9E5_FLOAT: return PIPE_FORMAT_R9G9B9E5_FLOAT; - case MESA_FORMAT_R11_G11_B10_FLOAT: + case MESA_FORMAT_R11G11B10_FLOAT: return PIPE_FORMAT_R11G11B10_FLOAT; - case MESA_FORMAT_ARGB2101010_UINT: + case MESA_FORMAT_B10G10R10A2_UINT: return PIPE_FORMAT_B10G10R10A2_UINT; + case MESA_FORMAT_R10G10B10A2_UINT: + return PIPE_FORMAT_R10G10B10A2_UINT; - case MESA_FORMAT_XRGB4444_UNORM: + case MESA_FORMAT_B4G4R4X4_UNORM: return PIPE_FORMAT_B4G4R4X4_UNORM; - case MESA_FORMAT_XRGB1555_UNORM: + case MESA_FORMAT_B5G5R5X1_UNORM: return PIPE_FORMAT_B5G5R5X1_UNORM; - case MESA_FORMAT_XBGR8888_SNORM: + case MESA_FORMAT_R8G8B8X8_SNORM: return PIPE_FORMAT_R8G8B8X8_SNORM; - case MESA_FORMAT_XBGR8888_SRGB: + case MESA_FORMAT_R8G8B8X8_SRGB: return PIPE_FORMAT_R8G8B8X8_SRGB; - case MESA_FORMAT_XBGR8888_UINT: + case MESA_FORMAT_RGBX_UINT8: return PIPE_FORMAT_R8G8B8X8_UINT; - case MESA_FORMAT_XBGR8888_SINT: + case MESA_FORMAT_RGBX_SINT8: return PIPE_FORMAT_R8G8B8X8_SINT; - case MESA_FORMAT_XRGB2101010_UNORM: + case MESA_FORMAT_B10G10R10X2_UNORM: return PIPE_FORMAT_B10G10R10X2_UNORM; - case MESA_FORMAT_XBGR16161616_UNORM: + case MESA_FORMAT_RGBX_UNORM16: return PIPE_FORMAT_R16G16B16X16_UNORM; - case MESA_FORMAT_XBGR16161616_SNORM: + case MESA_FORMAT_RGBX_SNORM16: return PIPE_FORMAT_R16G16B16X16_SNORM; - case MESA_FORMAT_XBGR16161616_FLOAT: + case MESA_FORMAT_RGBX_FLOAT16: return PIPE_FORMAT_R16G16B16X16_FLOAT; - case MESA_FORMAT_XBGR16161616_UINT: + case MESA_FORMAT_RGBX_UINT16: return PIPE_FORMAT_R16G16B16X16_UINT; - case MESA_FORMAT_XBGR16161616_SINT: + case MESA_FORMAT_RGBX_SINT16: return PIPE_FORMAT_R16G16B16X16_SINT; - case MESA_FORMAT_XBGR32323232_FLOAT: + case MESA_FORMAT_RGBX_FLOAT32: return PIPE_FORMAT_R32G32B32X32_FLOAT; - case MESA_FORMAT_XBGR32323232_UINT: + case MESA_FORMAT_RGBX_UINT32: return PIPE_FORMAT_R32G32B32X32_UINT; - case MESA_FORMAT_XBGR32323232_SINT: + case MESA_FORMAT_RGBX_SINT32: return PIPE_FORMAT_R32G32B32X32_SINT; default: @@ -400,76 +402,76 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) /** * Translate Gallium format to Mesa format. */ -gl_format +mesa_format st_pipe_format_to_mesa_format(enum pipe_format format) { switch (format) { case PIPE_FORMAT_ABGR8888_UNORM: - return MESA_FORMAT_RGBA8888; + return MESA_FORMAT_A8B8G8R8_UNORM; case PIPE_FORMAT_RGBA8888_UNORM: - return MESA_FORMAT_RGBA8888_REV; + return MESA_FORMAT_R8G8B8A8_UNORM; case PIPE_FORMAT_BGRA8888_UNORM: - return MESA_FORMAT_ARGB8888; + return MESA_FORMAT_B8G8R8A8_UNORM; case PIPE_FORMAT_ARGB8888_UNORM: - return MESA_FORMAT_ARGB8888_REV; + return MESA_FORMAT_A8R8G8B8_UNORM; case PIPE_FORMAT_XBGR8888_UNORM: - return MESA_FORMAT_RGBX8888; + return MESA_FORMAT_X8B8G8R8_UNORM; case PIPE_FORMAT_RGBX8888_UNORM: - return MESA_FORMAT_RGBX8888_REV; + return MESA_FORMAT_R8G8B8X8_UNORM; case PIPE_FORMAT_BGRX8888_UNORM: - return MESA_FORMAT_XRGB8888; + return MESA_FORMAT_B8G8R8X8_UNORM; case PIPE_FORMAT_XRGB8888_UNORM: - return MESA_FORMAT_XRGB8888_REV; + return MESA_FORMAT_X8R8G8B8_UNORM; case PIPE_FORMAT_B5G5R5A1_UNORM: - return MESA_FORMAT_ARGB1555; + return MESA_FORMAT_B5G5R5A1_UNORM; case PIPE_FORMAT_B4G4R4A4_UNORM: - return MESA_FORMAT_ARGB4444; + return MESA_FORMAT_B4G4R4A4_UNORM; case PIPE_FORMAT_B5G6R5_UNORM: - return MESA_FORMAT_RGB565; + return MESA_FORMAT_B5G6R5_UNORM; case PIPE_FORMAT_B2G3R3_UNORM: - return MESA_FORMAT_RGB332; + return MESA_FORMAT_B2G3R3_UNORM; case PIPE_FORMAT_B10G10R10A2_UNORM: - return MESA_FORMAT_ARGB2101010; + return MESA_FORMAT_B10G10R10A2_UNORM; case PIPE_FORMAT_L4A4_UNORM: - return MESA_FORMAT_AL44; + return MESA_FORMAT_L4A4_UNORM; case PIPE_FORMAT_L8A8_UNORM: - return MESA_FORMAT_AL88; + return MESA_FORMAT_L8A8_UNORM; case PIPE_FORMAT_L16A16_UNORM: - return MESA_FORMAT_AL1616; + return MESA_FORMAT_L16A16_UNORM; case PIPE_FORMAT_A8_UNORM: - return MESA_FORMAT_A8; + return MESA_FORMAT_A_UNORM8; case PIPE_FORMAT_A16_UNORM: - return MESA_FORMAT_A16; + return MESA_FORMAT_A_UNORM16; case PIPE_FORMAT_L8_UNORM: - return MESA_FORMAT_L8; + return MESA_FORMAT_L_UNORM8; case PIPE_FORMAT_L16_UNORM: - return MESA_FORMAT_L16; + return MESA_FORMAT_L_UNORM16; case PIPE_FORMAT_I8_UNORM: - return MESA_FORMAT_I8; + return MESA_FORMAT_I_UNORM8; case PIPE_FORMAT_I16_UNORM: - return MESA_FORMAT_I16; + return MESA_FORMAT_I_UNORM16; case PIPE_FORMAT_S8_UINT: - return MESA_FORMAT_S8; + return MESA_FORMAT_S_UINT8; case PIPE_FORMAT_R16G16B16A16_UNORM: - return MESA_FORMAT_RGBA_16; + return MESA_FORMAT_RGBA_UNORM16; case PIPE_FORMAT_Z16_UNORM: - return MESA_FORMAT_Z16; + return MESA_FORMAT_Z_UNORM16; case PIPE_FORMAT_Z32_UNORM: - return MESA_FORMAT_Z32; + return MESA_FORMAT_Z_UNORM32; case PIPE_FORMAT_S8_UINT_Z24_UNORM: - return MESA_FORMAT_Z24_S8; + return MESA_FORMAT_S8_UINT_Z24_UNORM; case PIPE_FORMAT_X8Z24_UNORM: - return MESA_FORMAT_Z24_X8; + return MESA_FORMAT_X8Z24_UNORM; case PIPE_FORMAT_Z24X8_UNORM: - return MESA_FORMAT_X8_Z24; + return MESA_FORMAT_Z24_UNORM_S8_UINT; case PIPE_FORMAT_Z24_UNORM_S8_UINT: - return MESA_FORMAT_S8_Z24; + return MESA_FORMAT_Z24_UNORM_X8_UINT; case PIPE_FORMAT_Z32_FLOAT: - return MESA_FORMAT_Z32_FLOAT; + return MESA_FORMAT_Z_FLOAT32; case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: - return MESA_FORMAT_Z32_FLOAT_X24S8; + return MESA_FORMAT_Z32_FLOAT_S8X24_UINT; case PIPE_FORMAT_UYVY: return MESA_FORMAT_YCBCR; @@ -493,15 +495,15 @@ st_pipe_format_to_mesa_format(enum pipe_format format) case PIPE_FORMAT_DXT5_SRGBA: return MESA_FORMAT_SRGBA_DXT5; case PIPE_FORMAT_L8A8_SRGB: - return MESA_FORMAT_SLA8; + return MESA_FORMAT_L8A8_SRGB; case PIPE_FORMAT_L8_SRGB: - return MESA_FORMAT_SL8; + return MESA_FORMAT_L_SRGB8; case PIPE_FORMAT_R8G8B8_SRGB: - return MESA_FORMAT_SRGB8; + return MESA_FORMAT_BGR_SRGB8; case PIPE_FORMAT_A8B8G8R8_SRGB: - return MESA_FORMAT_SRGBA8; + return MESA_FORMAT_A8B8G8R8_SRGB; case PIPE_FORMAT_B8G8R8A8_SRGB: - return MESA_FORMAT_SARGB8; + return MESA_FORMAT_B8G8R8A8_SRGB; case PIPE_FORMAT_R32G32B32A32_FLOAT: return MESA_FORMAT_RGBA_FLOAT32; case PIPE_FORMAT_R16G16B16A16_FLOAT: @@ -511,21 +513,21 @@ st_pipe_format_to_mesa_format(enum pipe_format format) case PIPE_FORMAT_R16G16B16_FLOAT: return MESA_FORMAT_RGB_FLOAT16; case PIPE_FORMAT_L32A32_FLOAT: - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32; + return MESA_FORMAT_LA_FLOAT32; case PIPE_FORMAT_L16A16_FLOAT: - return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16; + return MESA_FORMAT_LA_FLOAT16; case PIPE_FORMAT_L32_FLOAT: - return MESA_FORMAT_LUMINANCE_FLOAT32; + return MESA_FORMAT_L_FLOAT32; case PIPE_FORMAT_L16_FLOAT: - return MESA_FORMAT_LUMINANCE_FLOAT16; + return MESA_FORMAT_L_FLOAT16; case PIPE_FORMAT_A32_FLOAT: - return MESA_FORMAT_ALPHA_FLOAT32; + return MESA_FORMAT_A_FLOAT32; case PIPE_FORMAT_A16_FLOAT: - return MESA_FORMAT_ALPHA_FLOAT16; + return MESA_FORMAT_A_FLOAT16; case PIPE_FORMAT_I32_FLOAT: - return MESA_FORMAT_INTENSITY_FLOAT32; + return MESA_FORMAT_I_FLOAT32; case PIPE_FORMAT_I16_FLOAT: - return MESA_FORMAT_INTENSITY_FLOAT16; + return MESA_FORMAT_I_FLOAT16; case PIPE_FORMAT_R32_FLOAT: return MESA_FORMAT_R_FLOAT32; case PIPE_FORMAT_R16_FLOAT: @@ -536,92 +538,92 @@ st_pipe_format_to_mesa_format(enum pipe_format format) return MESA_FORMAT_RG_FLOAT16; case PIPE_FORMAT_R8_UNORM: - return MESA_FORMAT_R8; + return MESA_FORMAT_R_UNORM8; case PIPE_FORMAT_R16_UNORM: - return MESA_FORMAT_R16; + return MESA_FORMAT_R_UNORM16; case PIPE_FORMAT_R8G8_UNORM: - return MESA_FORMAT_GR88; + return MESA_FORMAT_R8G8_UNORM; case PIPE_FORMAT_R16G16_UNORM: - return MESA_FORMAT_GR1616; + return MESA_FORMAT_R16G16_UNORM; case PIPE_FORMAT_A8_UINT: - return MESA_FORMAT_ALPHA_UINT8; + return MESA_FORMAT_A_UINT8; case PIPE_FORMAT_A16_UINT: - return MESA_FORMAT_ALPHA_UINT16; + return MESA_FORMAT_A_UINT16; case PIPE_FORMAT_A32_UINT: - return MESA_FORMAT_ALPHA_UINT32; + return MESA_FORMAT_A_UINT32; case PIPE_FORMAT_A8_SINT: - return MESA_FORMAT_ALPHA_INT8; + return MESA_FORMAT_A_SINT8; case PIPE_FORMAT_A16_SINT: - return MESA_FORMAT_ALPHA_INT16; + return MESA_FORMAT_A_SINT16; case PIPE_FORMAT_A32_SINT: - return MESA_FORMAT_ALPHA_INT32; + return MESA_FORMAT_A_SINT32; case PIPE_FORMAT_I8_UINT: - return MESA_FORMAT_INTENSITY_UINT8; + return MESA_FORMAT_I_UINT8; case PIPE_FORMAT_I16_UINT: - return MESA_FORMAT_INTENSITY_UINT16; + return MESA_FORMAT_I_UINT16; case PIPE_FORMAT_I32_UINT: - return MESA_FORMAT_INTENSITY_UINT32; + return MESA_FORMAT_I_UINT32; case PIPE_FORMAT_I8_SINT: - return MESA_FORMAT_INTENSITY_INT8; + return MESA_FORMAT_I_SINT8; case PIPE_FORMAT_I16_SINT: - return MESA_FORMAT_INTENSITY_INT16; + return MESA_FORMAT_I_SINT16; case PIPE_FORMAT_I32_SINT: - return MESA_FORMAT_INTENSITY_INT32; + return MESA_FORMAT_I_SINT32; case PIPE_FORMAT_L8_UINT: - return MESA_FORMAT_LUMINANCE_UINT8; + return MESA_FORMAT_L_UINT8; case PIPE_FORMAT_L16_UINT: - return MESA_FORMAT_LUMINANCE_UINT16; + return MESA_FORMAT_L_UINT16; case PIPE_FORMAT_L32_UINT: - return MESA_FORMAT_LUMINANCE_UINT32; + return MESA_FORMAT_L_UINT32; case PIPE_FORMAT_L8_SINT: - return MESA_FORMAT_LUMINANCE_INT8; + return MESA_FORMAT_L_SINT8; case PIPE_FORMAT_L16_SINT: - return MESA_FORMAT_LUMINANCE_INT16; + return MESA_FORMAT_L_SINT16; case PIPE_FORMAT_L32_SINT: - return MESA_FORMAT_LUMINANCE_INT32; + return MESA_FORMAT_L_SINT32; case PIPE_FORMAT_L8A8_UINT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT8; + return MESA_FORMAT_LA_UINT8; case PIPE_FORMAT_L16A16_UINT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT16; + return MESA_FORMAT_LA_UINT16; case PIPE_FORMAT_L32A32_UINT: - return MESA_FORMAT_LUMINANCE_ALPHA_UINT32; + return MESA_FORMAT_LA_UINT32; case PIPE_FORMAT_L8A8_SINT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT8; + return MESA_FORMAT_LA_SINT8; case PIPE_FORMAT_L16A16_SINT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT16; + return MESA_FORMAT_LA_SINT16; case PIPE_FORMAT_L32A32_SINT: - return MESA_FORMAT_LUMINANCE_ALPHA_INT32; + return MESA_FORMAT_LA_SINT32; case PIPE_FORMAT_R8_SINT: - return MESA_FORMAT_R_INT8; + return MESA_FORMAT_R_SINT8; case PIPE_FORMAT_R8G8_SINT: - return MESA_FORMAT_RG_INT8; + return MESA_FORMAT_RG_SINT8; case PIPE_FORMAT_R8G8B8_SINT: - return MESA_FORMAT_RGB_INT8; + return MESA_FORMAT_RGB_SINT8; case PIPE_FORMAT_R8G8B8A8_SINT: - return MESA_FORMAT_RGBA_INT8; + return MESA_FORMAT_RGBA_SINT8; case PIPE_FORMAT_R16_SINT: - return MESA_FORMAT_R_INT16; + return MESA_FORMAT_R_SINT16; case PIPE_FORMAT_R16G16_SINT: - return MESA_FORMAT_RG_INT16; + return MESA_FORMAT_RG_SINT16; case PIPE_FORMAT_R16G16B16_SINT: - return MESA_FORMAT_RGB_INT16; + return MESA_FORMAT_RGB_SINT16; case PIPE_FORMAT_R16G16B16A16_SINT: - return MESA_FORMAT_RGBA_INT16; + return MESA_FORMAT_RGBA_SINT16; case PIPE_FORMAT_R32_SINT: - return MESA_FORMAT_R_INT32; + return MESA_FORMAT_R_SINT32; case PIPE_FORMAT_R32G32_SINT: - return MESA_FORMAT_RG_INT32; + return MESA_FORMAT_RG_SINT32; case PIPE_FORMAT_R32G32B32_SINT: - return MESA_FORMAT_RGB_INT32; + return MESA_FORMAT_RGB_SINT32; case PIPE_FORMAT_R32G32B32A32_SINT: - return MESA_FORMAT_RGBA_INT32; + return MESA_FORMAT_RGBA_SINT32; /* unsigned int formats */ case PIPE_FORMAT_R8_UINT: @@ -652,97 +654,99 @@ st_pipe_format_to_mesa_format(enum pipe_format format) return MESA_FORMAT_RGBA_UINT32; case PIPE_FORMAT_RGTC1_UNORM: - return MESA_FORMAT_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_UNORM; case PIPE_FORMAT_RGTC1_SNORM: - return MESA_FORMAT_SIGNED_RED_RGTC1; + return MESA_FORMAT_R_RGTC1_SNORM; case PIPE_FORMAT_RGTC2_UNORM: - return MESA_FORMAT_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_UNORM; case PIPE_FORMAT_RGTC2_SNORM: - return MESA_FORMAT_SIGNED_RG_RGTC2; + return MESA_FORMAT_RG_RGTC2_SNORM; case PIPE_FORMAT_LATC1_UNORM: - return MESA_FORMAT_L_LATC1; + return MESA_FORMAT_L_LATC1_UNORM; case PIPE_FORMAT_LATC1_SNORM: - return MESA_FORMAT_SIGNED_L_LATC1; + return MESA_FORMAT_L_LATC1_SNORM; case PIPE_FORMAT_LATC2_UNORM: - return MESA_FORMAT_LA_LATC2; + return MESA_FORMAT_LA_LATC2_UNORM; case PIPE_FORMAT_LATC2_SNORM: - return MESA_FORMAT_SIGNED_LA_LATC2; + return MESA_FORMAT_LA_LATC2_SNORM; case PIPE_FORMAT_ETC1_RGB8: return MESA_FORMAT_ETC1_RGB8; /* signed normalized formats */ case PIPE_FORMAT_R8_SNORM: - return MESA_FORMAT_SIGNED_R8; + return MESA_FORMAT_R_SNORM8; case PIPE_FORMAT_R8G8_SNORM: - return MESA_FORMAT_SIGNED_RG88_REV; + return MESA_FORMAT_R8G8_SNORM; case PIPE_FORMAT_R8G8B8A8_SNORM: - return MESA_FORMAT_SIGNED_RGBA8888_REV; + return MESA_FORMAT_R8G8B8A8_SNORM; case PIPE_FORMAT_A8_SNORM: - return MESA_FORMAT_SIGNED_A8; + return MESA_FORMAT_A_SNORM8; case PIPE_FORMAT_L8_SNORM: - return MESA_FORMAT_SIGNED_L8; + return MESA_FORMAT_L_SNORM8; case PIPE_FORMAT_L8A8_SNORM: - return MESA_FORMAT_SIGNED_AL88; + return MESA_FORMAT_L8A8_SNORM; case PIPE_FORMAT_I8_SNORM: - return MESA_FORMAT_SIGNED_I8; + return MESA_FORMAT_I_SNORM8; case PIPE_FORMAT_R16_SNORM: - return MESA_FORMAT_SIGNED_R16; + return MESA_FORMAT_R_SNORM16; case PIPE_FORMAT_R16G16_SNORM: - return MESA_FORMAT_SIGNED_GR1616; + return MESA_FORMAT_R16G16_SNORM; case PIPE_FORMAT_R16G16B16A16_SNORM: - return MESA_FORMAT_SIGNED_RGBA_16; + return MESA_FORMAT_RGBA_SNORM16; case PIPE_FORMAT_A16_SNORM: - return MESA_FORMAT_SIGNED_A16; + return MESA_FORMAT_A_SNORM16; case PIPE_FORMAT_L16_SNORM: - return MESA_FORMAT_SIGNED_L16; + return MESA_FORMAT_L_SNORM16; case PIPE_FORMAT_L16A16_SNORM: - return MESA_FORMAT_SIGNED_AL1616; + return MESA_FORMAT_LA_SNORM16; case PIPE_FORMAT_I16_SNORM: - return MESA_FORMAT_SIGNED_I16; + return MESA_FORMAT_I_SNORM16; case PIPE_FORMAT_R9G9B9E5_FLOAT: - return MESA_FORMAT_RGB9_E5_FLOAT; + return MESA_FORMAT_R9G9B9E5_FLOAT; case PIPE_FORMAT_R11G11B10_FLOAT: - return MESA_FORMAT_R11_G11_B10_FLOAT; + return MESA_FORMAT_R11G11B10_FLOAT; case PIPE_FORMAT_B10G10R10A2_UINT: - return MESA_FORMAT_ARGB2101010_UINT; + return MESA_FORMAT_B10G10R10A2_UINT; + case PIPE_FORMAT_R10G10B10A2_UINT: + return MESA_FORMAT_R10G10B10A2_UINT; case PIPE_FORMAT_B4G4R4X4_UNORM: - return MESA_FORMAT_XRGB4444_UNORM; + return MESA_FORMAT_B4G4R4X4_UNORM; case PIPE_FORMAT_B5G5R5X1_UNORM: - return MESA_FORMAT_XRGB1555_UNORM; + return MESA_FORMAT_B5G5R5X1_UNORM; case PIPE_FORMAT_R8G8B8X8_SNORM: - return MESA_FORMAT_XBGR8888_SNORM; + return MESA_FORMAT_R8G8B8X8_SNORM; case PIPE_FORMAT_R8G8B8X8_SRGB: - return MESA_FORMAT_XBGR8888_SRGB; + return MESA_FORMAT_R8G8B8X8_SRGB; case PIPE_FORMAT_R8G8B8X8_UINT: - return MESA_FORMAT_XBGR8888_UINT; + return MESA_FORMAT_RGBX_UINT8; case PIPE_FORMAT_R8G8B8X8_SINT: - return MESA_FORMAT_XBGR8888_SINT; + return MESA_FORMAT_RGBX_SINT8; case PIPE_FORMAT_B10G10R10X2_UNORM: - return MESA_FORMAT_XRGB2101010_UNORM; + return MESA_FORMAT_B10G10R10X2_UNORM; case PIPE_FORMAT_R16G16B16X16_UNORM: - return MESA_FORMAT_XBGR16161616_UNORM; + return MESA_FORMAT_RGBX_UNORM16; case PIPE_FORMAT_R16G16B16X16_SNORM: - return MESA_FORMAT_XBGR16161616_SNORM; + return MESA_FORMAT_RGBX_SNORM16; case PIPE_FORMAT_R16G16B16X16_FLOAT: - return MESA_FORMAT_XBGR16161616_FLOAT; + return MESA_FORMAT_RGBX_FLOAT16; case PIPE_FORMAT_R16G16B16X16_UINT: - return MESA_FORMAT_XBGR16161616_UINT; + return MESA_FORMAT_RGBX_UINT16; case PIPE_FORMAT_R16G16B16X16_SINT: - return MESA_FORMAT_XBGR16161616_SINT; + return MESA_FORMAT_RGBX_SINT16; case PIPE_FORMAT_R32G32B32X32_FLOAT: - return MESA_FORMAT_XBGR32323232_FLOAT; + return MESA_FORMAT_RGBX_FLOAT32; case PIPE_FORMAT_R32G32B32X32_UINT: - return MESA_FORMAT_XBGR32323232_UINT; + return MESA_FORMAT_RGBX_UINT32; case PIPE_FORMAT_R32G32B32X32_SINT: - return MESA_FORMAT_XBGR32323232_SINT; + return MESA_FORMAT_RGBX_SINT32; default: assert(0); @@ -1483,7 +1487,7 @@ static const struct format_mapping format_map[] = { }, { { GL_RGB10_A2UI, 0 }, - { PIPE_FORMAT_B10G10R10A2_UINT, 0 } + { PIPE_FORMAT_R10G10B10A2_UINT, PIPE_FORMAT_B10G10R10A2_UINT, 0 } }, }; @@ -1687,7 +1691,7 @@ enum pipe_format st_choose_matching_format(struct pipe_screen *screen, unsigned bind, GLenum format, GLenum type, GLboolean swapBytes) { - gl_format mesa_format; + mesa_format mesa_format; for (mesa_format = 1; mesa_format < MESA_FORMAT_COUNT; mesa_format++) { if (_mesa_get_format_color_encoding(mesa_format) == GL_SRGB) { @@ -1714,7 +1718,7 @@ st_choose_matching_format(struct pipe_screen *screen, unsigned bind, /** * Called via ctx->Driver.ChooseTextureFormat(). */ -gl_format +mesa_format st_ChooseTextureFormat(struct gl_context *ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type) diff --git a/mesalib/src/mesa/state_tracker/st_format.h b/mesalib/src/mesa/state_tracker/st_format.h index bf042ede1..ce1e2306d 100644 --- a/mesalib/src/mesa/state_tracker/st_format.h +++ b/mesalib/src/mesa/state_tracker/st_format.h @@ -41,9 +41,9 @@ struct pipe_screen; extern enum pipe_format -st_mesa_format_to_pipe_format(gl_format mesaFormat); +st_mesa_format_to_pipe_format(mesa_format mesaFormat); -extern gl_format +extern mesa_format st_pipe_format_to_mesa_format(enum pipe_format pipeFormat); @@ -61,7 +61,7 @@ extern enum pipe_format st_choose_matching_format(struct pipe_screen *screen, unsigned bind, GLenum format, GLenum type, GLboolean swapBytes); -extern gl_format +extern mesa_format st_ChooseTextureFormat(struct gl_context * ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type); 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 0871dd064..610fc68a8 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5027,6 +5027,8 @@ shader_stage_to_ptarget(gl_shader_stage stage) return PIPE_SHADER_FRAGMENT; case MESA_SHADER_GEOMETRY: return PIPE_SHADER_GEOMETRY; + case MESA_SHADER_COMPUTE: + return PIPE_SHADER_COMPUTE; } assert(!"should not be reached"); diff --git a/mesalib/src/mesa/state_tracker/st_manager.c b/mesalib/src/mesa/state_tracker/st_manager.c index 8158450dc..215b27634 100644 --- a/mesalib/src/mesa/state_tracker/st_manager.c +++ b/mesalib/src/mesa/state_tracker/st_manager.c @@ -469,7 +469,6 @@ st_context_teximage(struct st_context_iface *stctxi, { struct st_context *st = (struct st_context *) stctxi; struct gl_context *ctx = st->ctx; - struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); struct gl_texture_object *texObj; struct gl_texture_image *texImage; struct st_texture_object *stObj; @@ -495,7 +494,8 @@ st_context_teximage(struct st_context_iface *stctxi, return FALSE; } - texObj = _mesa_select_tex_object(ctx, texUnit, target); + texObj = _mesa_get_current_tex_object(ctx, target); + _mesa_lock_texture(ctx, texObj); stObj = st_texture_object(texObj); @@ -508,7 +508,7 @@ 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 = st_pipe_format_to_mesa_format(pipe_format); + mesa_format texFormat = st_pipe_format_to_mesa_format(pipe_format); if (util_format_has_alpha(tex->format)) internalFormat = GL_RGBA; diff --git a/mesalib/src/mesa/state_tracker/st_program.c b/mesalib/src/mesa/state_tracker/st_program.c index 7a15b23fa..cadbe1705 100644 --- a/mesalib/src/mesa/state_tracker/st_program.c +++ b/mesalib/src/mesa/state_tracker/st_program.c @@ -944,17 +944,16 @@ st_translate_geometry_program(struct st_context *st, case VARYING_SLOT_TEX5: case VARYING_SLOT_TEX6: case VARYING_SLOT_TEX7: - stgp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; + stgp->input_semantic_name[slot] = st->needs_texcoord_semantic ? + TGSI_SEMANTIC_TEXCOORD : TGSI_SEMANTIC_GENERIC; stgp->input_semantic_index[slot] = (attr - VARYING_SLOT_TEX0); break; case VARYING_SLOT_VAR0: default: assert(attr >= VARYING_SLOT_VAR0 && attr < VARYING_SLOT_MAX); stgp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; - stgp->input_semantic_index[slot] = (VARYING_SLOT_VAR0 - - VARYING_SLOT_TEX0 + - attr - - VARYING_SLOT_VAR0); + stgp->input_semantic_index[slot] = st->needs_texcoord_semantic ? + (attr - VARYING_SLOT_VAR0) : (attr - VARYING_SLOT_TEX0); break; } } @@ -1036,7 +1035,8 @@ st_translate_geometry_program(struct st_context *st, case VARYING_SLOT_TEX5: case VARYING_SLOT_TEX6: case VARYING_SLOT_TEX7: - gs_output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; + gs_output_semantic_name[slot] = st->needs_texcoord_semantic ? + TGSI_SEMANTIC_TEXCOORD : TGSI_SEMANTIC_GENERIC; gs_output_semantic_index[slot] = (attr - VARYING_SLOT_TEX0); break; case VARYING_SLOT_VAR0: @@ -1044,10 +1044,9 @@ st_translate_geometry_program(struct st_context *st, assert(slot < Elements(gs_output_semantic_name)); assert(attr >= VARYING_SLOT_VAR0); gs_output_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; - gs_output_semantic_index[slot] = (VARYING_SLOT_VAR0 - - VARYING_SLOT_TEX0 + - attr - - VARYING_SLOT_VAR0); + gs_output_semantic_index[slot] = st->needs_texcoord_semantic ? + (attr - VARYING_SLOT_VAR0) : (attr - VARYING_SLOT_TEX0); + break; } } } diff --git a/mesalib/src/mesa/state_tracker/st_vdpau.c b/mesalib/src/mesa/state_tracker/st_vdpau.c index 9b165ee39..c5b4780ce 100644 --- a/mesalib/src/mesa/state_tracker/st_vdpau.c +++ b/mesalib/src/mesa/state_tracker/st_vdpau.c @@ -47,6 +47,7 @@ #include "st_context.h" #include "st_texture.h" #include "st_format.h" +#include "st_cb_flush.h" static void st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum access, @@ -63,7 +64,7 @@ st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum access, struct pipe_resource *res; struct pipe_sampler_view *sv, templ; - gl_format texFormat; + mesa_format texFormat; getProcAddr = ctx->vdpGetProcAddress; if (output) { @@ -163,6 +164,7 @@ st_vdpau_unmap_surface(struct gl_context *ctx, GLenum target, GLenum access, struct gl_texture_image *texImage, const GLvoid *vdpSurface, GLuint index) { + struct st_context *st = st_context(ctx); struct st_texture_object *stObj = st_texture_object(texObj); struct st_texture_image *stImage = st_texture_image(texImage); @@ -171,6 +173,8 @@ st_vdpau_unmap_surface(struct gl_context *ctx, GLenum target, GLenum access, pipe_resource_reference(&stImage->pt, NULL); _mesa_dirty_texobj(ctx, texObj); + + st_flush(st, NULL, 0); } void diff --git a/mesalib/src/mesa/swrast/s_blit.c b/mesalib/src/mesa/swrast/s_blit.c index bbb0013e6..1ba188c5f 100644 --- a/mesalib/src/mesa/swrast/s_blit.c +++ b/mesalib/src/mesa/swrast/s_blit.c @@ -166,8 +166,8 @@ blit_nearest(struct gl_context *ctx, * using the core helpers for pack/unpack, we avoid needing to handle * masking for things like DEPTH copies of Z24S8. */ - if (readRb->Format == MESA_FORMAT_Z32_FLOAT || - readRb->Format == MESA_FORMAT_Z32_FLOAT_X24S8) { + if (readRb->Format == MESA_FORMAT_Z_FLOAT32 || + readRb->Format == MESA_FORMAT_Z32_FLOAT_S8X24_UINT) { mode = UNPACK_Z_FLOAT; } else { mode = UNPACK_Z_INT; @@ -536,7 +536,7 @@ blit_linear(struct gl_context *ctx, GLint srcBufferY0 = -1, srcBufferY1 = -1; GLvoid *dstBuffer; - gl_format readFormat = _mesa_get_srgb_format_linear(readRb->Format); + mesa_format readFormat = _mesa_get_srgb_format_linear(readRb->Format); GLuint bpp = _mesa_get_format_bytes(readFormat); GLenum pixelType; @@ -571,7 +571,7 @@ blit_linear(struct gl_context *ctx, GLint idx = drawFb->_ColorDrawBufferIndexes[i]; struct gl_renderbuffer_attachment *drawAtt; struct gl_renderbuffer *drawRb; - gl_format drawFormat; + mesa_format drawFormat; if (idx == -1) continue; diff --git a/mesalib/src/mesa/swrast/s_depth.c b/mesalib/src/mesa/swrast/s_depth.c index 7f3c76de4..93aaffc57 100644 --- a/mesalib/src/mesa/swrast/s_depth.c +++ b/mesalib/src/mesa/swrast/s_depth.c @@ -217,7 +217,7 @@ get_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb, const GLubyte *map = _swrast_pixel_address(rb, 0, 0); GLuint i; - if (rb->Format == MESA_FORMAT_Z32) { + if (rb->Format == MESA_FORMAT_Z_UNORM32) { const GLint rowStride = srb->RowStride; for (i = 0; i < count; i++) { if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) { @@ -252,7 +252,7 @@ put_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb, GLubyte *map = _swrast_pixel_address(rb, 0, 0); GLuint i; - if (rb->Format == MESA_FORMAT_Z32) { + if (rb->Format == MESA_FORMAT_Z_UNORM32) { const GLint rowStride = srb->RowStride; for (i = 0; i < count; i++) { if (mask[i] && x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) { @@ -300,12 +300,12 @@ _swrast_depth_test_span(struct gl_context *ctx, SWspan *span) else zStart = _swrast_pixel_address(rb, span->x, span->y); - if (rb->Format == MESA_FORMAT_Z16 && !(span->arrayMask & SPAN_XY)) { + if (rb->Format == MESA_FORMAT_Z_UNORM16 && !(span->arrayMask & SPAN_XY)) { /* directly read/write row of 16-bit Z values */ zBufferVals = zStart; ztest16 = GL_TRUE; } - else if (rb->Format == MESA_FORMAT_Z32 && !(span->arrayMask & SPAN_XY)) { + else if (rb->Format == MESA_FORMAT_Z_UNORM32 && !(span->arrayMask & SPAN_XY)) { /* directly read/write row of 32-bit Z values */ zBufferVals = zStart; } @@ -439,7 +439,7 @@ _swrast_depth_bounds_test( struct gl_context *ctx, SWspan *span ) else zStart = _swrast_pixel_address(rb, span->x, span->y); - if (rb->Format == MESA_FORMAT_Z32 && !(span->arrayMask & SPAN_XY)) { + if (rb->Format == MESA_FORMAT_Z_UNORM32 && !(span->arrayMask & SPAN_XY)) { /* directly access 32-bit values in the depth buffer */ zBufferVals = (const GLuint *) zStart; } @@ -552,10 +552,10 @@ _swrast_clear_depth_buffer(struct gl_context *ctx) height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin; mapMode = GL_MAP_WRITE_BIT; - if (rb->Format == MESA_FORMAT_S8_Z24 || - rb->Format == MESA_FORMAT_X8_Z24 || - rb->Format == MESA_FORMAT_Z24_S8 || - rb->Format == MESA_FORMAT_Z24_X8) { + if (rb->Format == MESA_FORMAT_Z24_UNORM_X8_UINT || + rb->Format == MESA_FORMAT_Z24_UNORM_S8_UINT || + rb->Format == MESA_FORMAT_S8_UINT_Z24_UNORM || + rb->Format == MESA_FORMAT_X8Z24_UNORM) { mapMode |= GL_MAP_READ_BIT; } @@ -567,7 +567,7 @@ _swrast_clear_depth_buffer(struct gl_context *ctx) } switch (rb->Format) { - case MESA_FORMAT_Z16: + case MESA_FORMAT_Z_UNORM16: { GLfloat clear = (GLfloat) ctx->Depth.Clear; GLushort clearVal = 0; @@ -587,8 +587,8 @@ _swrast_clear_depth_buffer(struct gl_context *ctx) } } break; - case MESA_FORMAT_Z32: - case MESA_FORMAT_Z32_FLOAT: + case MESA_FORMAT_Z_UNORM32: + case MESA_FORMAT_Z_FLOAT32: { GLfloat clear = (GLfloat) ctx->Depth.Clear; GLuint clearVal = 0; @@ -602,17 +602,17 @@ _swrast_clear_depth_buffer(struct gl_context *ctx) } } break; - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_X8_Z24: - case MESA_FORMAT_Z24_S8: - case MESA_FORMAT_Z24_X8: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_Z24_UNORM_S8_UINT: + case MESA_FORMAT_S8_UINT_Z24_UNORM: + case MESA_FORMAT_X8Z24_UNORM: { GLfloat clear = (GLfloat) ctx->Depth.Clear; GLuint clearVal = 0; GLuint mask; - if (rb->Format == MESA_FORMAT_S8_Z24 || - rb->Format == MESA_FORMAT_X8_Z24) + if (rb->Format == MESA_FORMAT_Z24_UNORM_X8_UINT || + rb->Format == MESA_FORMAT_Z24_UNORM_S8_UINT) mask = 0xff000000; else mask = 0xff; @@ -628,7 +628,7 @@ _swrast_clear_depth_buffer(struct gl_context *ctx) } break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: /* XXX untested */ { GLfloat clearVal = (GLfloat) ctx->Depth.Clear; @@ -692,15 +692,15 @@ _swrast_clear_depth_stencil_buffer(struct gl_context *ctx) } switch (rb->Format) { - case MESA_FORMAT_S8_Z24: - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_Z24_UNORM_X8_UINT: + case MESA_FORMAT_S8_UINT_Z24_UNORM: { GLfloat zClear = (GLfloat) ctx->Depth.Clear; GLuint clear = 0, mask; _mesa_pack_float_z_row(rb->Format, 1, &zClear, &clear); - if (rb->Format == MESA_FORMAT_S8_Z24) { + if (rb->Format == MESA_FORMAT_Z24_UNORM_X8_UINT) { mask = ((~writeMask) & 0xff) << 24; clear |= (ctx->Stencil.Clear & writeMask & 0xff) << 24; } @@ -725,7 +725,7 @@ _swrast_clear_depth_stencil_buffer(struct gl_context *ctx) } } break; - case MESA_FORMAT_Z32_FLOAT_X24S8: + case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: /* XXX untested */ { const GLfloat zClear = (GLfloat) ctx->Depth.Clear; diff --git a/mesalib/src/mesa/swrast/s_drawpix.c b/mesalib/src/mesa/swrast/s_drawpix.c index 1786de1a3..ed4487f3e 100644 --- a/mesalib/src/mesa/swrast/s_drawpix.c +++ b/mesalib/src/mesa/swrast/s_drawpix.c @@ -223,8 +223,8 @@ fast_draw_rgba_pixels(struct gl_context *ctx, GLint x, GLint y, if (format == GL_RGB && type == GL_UNSIGNED_BYTE && - (rb->Format == MESA_FORMAT_XRGB8888 || - rb->Format == MESA_FORMAT_ARGB8888)) { + (rb->Format == MESA_FORMAT_B8G8R8X8_UNORM || + rb->Format == MESA_FORMAT_B8G8R8A8_UNORM)) { fast_draw_rgb_ubyte_pixels(ctx, rb, x, y, width, height, &unpack, pixels); return GL_TRUE; @@ -232,8 +232,8 @@ fast_draw_rgba_pixels(struct gl_context *ctx, GLint x, GLint y, if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && - (rb->Format == MESA_FORMAT_XRGB8888 || - rb->Format == MESA_FORMAT_ARGB8888)) { + (rb->Format == MESA_FORMAT_B8G8R8X8_UNORM || + rb->Format == MESA_FORMAT_B8G8R8A8_UNORM)) { fast_draw_rgba_ubyte_pixels(ctx, rb, x, y, width, height, &unpack, pixels); return GL_TRUE; @@ -500,7 +500,7 @@ draw_rgba_pixels( struct gl_context *ctx, GLint x, GLint y, /** - * Draw depth+stencil values into a MESA_FORAMT_Z24_S8 or MESA_FORMAT_S8_Z24 + * Draw depth+stencil values into a MESA_FORAMT_Z24_S8 or MESA_FORMAT_Z24_UNORM_X8_UINT * renderbuffer. No masking, zooming, scaling, etc. */ static void @@ -572,8 +572,8 @@ draw_depth_stencil_pixels(struct gl_context *ctx, GLint x, GLint y, ASSERT(stencilRb); if (depthRb == stencilRb && - (depthRb->Format == MESA_FORMAT_Z24_S8 || - depthRb->Format == MESA_FORMAT_S8_Z24) && + (depthRb->Format == MESA_FORMAT_S8_UINT_Z24_UNORM || + depthRb->Format == MESA_FORMAT_Z24_UNORM_X8_UINT) && type == GL_UNSIGNED_INT_24_8 && !scaleOrBias && !zoom && diff --git a/mesalib/src/mesa/swrast/s_renderbuffer.c b/mesalib/src/mesa/swrast/s_renderbuffer.c index a19d02ac0..cf5e2230d 100644 --- a/mesalib/src/mesa/swrast/s_renderbuffer.c +++ b/mesalib/src/mesa/swrast/s_renderbuffer.c @@ -69,7 +69,7 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, case GL_RGB10: case GL_RGB12: case GL_RGB16: - rb->Format = MESA_FORMAT_RGB888; + rb->Format = MESA_FORMAT_BGR_UNORM8; break; case GL_RGBA: case GL_RGBA2: @@ -81,35 +81,35 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, case GL_RGBA12: #endif if (_mesa_little_endian()) - rb->Format = MESA_FORMAT_RGBA8888_REV; + rb->Format = MESA_FORMAT_R8G8B8A8_UNORM; else - rb->Format = MESA_FORMAT_RGBA8888; + rb->Format = MESA_FORMAT_A8B8G8R8_UNORM; break; case GL_RGBA16: case GL_RGBA16_SNORM: /* for accum buffer */ - rb->Format = MESA_FORMAT_SIGNED_RGBA_16; + rb->Format = MESA_FORMAT_RGBA_SNORM16; break; case GL_STENCIL_INDEX: case GL_STENCIL_INDEX1_EXT: case GL_STENCIL_INDEX4_EXT: case GL_STENCIL_INDEX8_EXT: case GL_STENCIL_INDEX16_EXT: - rb->Format = MESA_FORMAT_S8; + rb->Format = MESA_FORMAT_S_UINT8; break; case GL_DEPTH_COMPONENT: case GL_DEPTH_COMPONENT16: - rb->Format = MESA_FORMAT_Z16; + rb->Format = MESA_FORMAT_Z_UNORM16; break; case GL_DEPTH_COMPONENT24: - rb->Format = MESA_FORMAT_X8_Z24; + rb->Format = MESA_FORMAT_Z24_UNORM_S8_UINT; break; case GL_DEPTH_COMPONENT32: - rb->Format = MESA_FORMAT_Z32; + rb->Format = MESA_FORMAT_Z_UNORM32; break; case GL_DEPTH_STENCIL_EXT: case GL_DEPTH24_STENCIL8_EXT: - rb->Format = MESA_FORMAT_Z24_S8; + rb->Format = MESA_FORMAT_S8_UINT_Z24_UNORM; break; default: /* unsupported format */ diff --git a/mesalib/src/mesa/swrast/s_stencil.c b/mesalib/src/mesa/swrast/s_stencil.c index 3eeeb24b2..e7c35ff69 100644 --- a/mesalib/src/mesa/swrast/s_stencil.c +++ b/mesalib/src/mesa/swrast/s_stencil.c @@ -61,7 +61,7 @@ ENDIF * within the 4-byte pixel will be either 0 or 3. */ static GLint -get_stencil_offset(gl_format format) +get_stencil_offset(mesa_format format) { const GLubyte one = 1; GLubyte pixel[MAX_PIXEL_BYTES]; @@ -300,7 +300,7 @@ get_s8_values(struct gl_context *ctx, struct gl_renderbuffer *rb, const GLubyte *map = _swrast_pixel_address(rb, 0, 0); GLuint i; - if (rb->Format == MESA_FORMAT_S8) { + if (rb->Format == MESA_FORMAT_S_UINT8) { const GLint rowStride = srb->RowStride; for (i = 0; i < count; i++) { if (x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) { @@ -587,7 +587,7 @@ _swrast_clear_stencil_buffer(struct gl_context *ctx) } switch (rb->Format) { - case MESA_FORMAT_S8: + case MESA_FORMAT_S_UINT8: { GLubyte clear = ctx->Stencil.Clear & writeMask & 0xff; GLubyte mask = (~writeMask) & 0xff; @@ -614,7 +614,7 @@ _swrast_clear_stencil_buffer(struct gl_context *ctx) } } break; - case MESA_FORMAT_S8_Z24: + case MESA_FORMAT_Z24_UNORM_X8_UINT: { GLuint clear = (ctx->Stencil.Clear & writeMask & 0xff) << 24; GLuint mask = (((~writeMask) & 0xff) << 24) | 0xffffff; @@ -627,7 +627,7 @@ _swrast_clear_stencil_buffer(struct gl_context *ctx) } } break; - case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_UINT_Z24_UNORM: { GLuint clear = ctx->Stencil.Clear & writeMask & 0xff; GLuint mask = 0xffffff00 | ((~writeMask) & 0xff); diff --git a/mesalib/src/mesa/swrast/s_texfetch.c b/mesalib/src/mesa/swrast/s_texfetch.c index b886e6586..7a3e76f85 100644 --- a/mesalib/src/mesa/swrast/s_texfetch.c +++ b/mesalib/src/mesa/swrast/s_texfetch.c @@ -134,7 +134,7 @@ static void fetch_null_texelf( const struct swrast_texture_image *texImage, * XXX this is somewhat temporary. */ static struct { - gl_format Name; + mesa_format Name; FetchTexelFunc Fetch1D; FetchTexelFunc Fetch2D; FetchTexelFunc Fetch3D; @@ -149,175 +149,175 @@ texfetch_funcs[] = }, { - MESA_FORMAT_RGBA8888, + MESA_FORMAT_A8B8G8R8_UNORM, fetch_texel_1d_f_rgba8888, fetch_texel_2d_f_rgba8888, fetch_texel_3d_f_rgba8888 }, { - MESA_FORMAT_RGBA8888_REV, + MESA_FORMAT_R8G8B8A8_UNORM, fetch_texel_1d_f_rgba8888_rev, fetch_texel_2d_f_rgba8888_rev, fetch_texel_3d_f_rgba8888_rev }, { - MESA_FORMAT_ARGB8888, + MESA_FORMAT_B8G8R8A8_UNORM, fetch_texel_1d_f_argb8888, fetch_texel_2d_f_argb8888, fetch_texel_3d_f_argb8888 }, { - MESA_FORMAT_ARGB8888_REV, + MESA_FORMAT_A8R8G8B8_UNORM, fetch_texel_1d_f_argb8888_rev, fetch_texel_2d_f_argb8888_rev, fetch_texel_3d_f_argb8888_rev }, { - MESA_FORMAT_RGBX8888, + MESA_FORMAT_X8B8G8R8_UNORM, fetch_texel_1d_f_rgbx8888, fetch_texel_2d_f_rgbx8888, fetch_texel_3d_f_rgbx8888 }, { - MESA_FORMAT_RGBX8888_REV, + MESA_FORMAT_R8G8B8X8_UNORM, fetch_texel_1d_f_rgbx8888_rev, fetch_texel_2d_f_rgbx8888_rev, fetch_texel_3d_f_rgbx8888_rev }, { - MESA_FORMAT_XRGB8888, + MESA_FORMAT_B8G8R8X8_UNORM, fetch_texel_1d_f_xrgb8888, fetch_texel_2d_f_xrgb8888, fetch_texel_3d_f_xrgb8888 }, { - MESA_FORMAT_XRGB8888_REV, + MESA_FORMAT_X8R8G8B8_UNORM, fetch_texel_1d_f_xrgb8888_rev, fetch_texel_2d_f_xrgb8888_rev, fetch_texel_3d_f_xrgb8888_rev }, { - MESA_FORMAT_RGB888, + MESA_FORMAT_BGR_UNORM8, fetch_texel_1d_f_rgb888, fetch_texel_2d_f_rgb888, fetch_texel_3d_f_rgb888 }, { - MESA_FORMAT_BGR888, + MESA_FORMAT_RGB_UNORM8, fetch_texel_1d_f_bgr888, fetch_texel_2d_f_bgr888, fetch_texel_3d_f_bgr888 }, { - MESA_FORMAT_RGB565, + MESA_FORMAT_B5G6R5_UNORM, fetch_texel_1d_f_rgb565, fetch_texel_2d_f_rgb565, fetch_texel_3d_f_rgb565 }, { - MESA_FORMAT_RGB565_REV, + MESA_FORMAT_R5G6B5_UNORM, fetch_texel_1d_f_rgb565_rev, fetch_texel_2d_f_rgb565_rev, fetch_texel_3d_f_rgb565_rev }, { - MESA_FORMAT_ARGB4444, + MESA_FORMAT_B4G4R4A4_UNORM, fetch_texel_1d_f_argb4444, fetch_texel_2d_f_argb4444, fetch_texel_3d_f_argb4444 }, { - MESA_FORMAT_ARGB4444_REV, + MESA_FORMAT_A4R4G4B4_UNORM, fetch_texel_1d_f_argb4444_rev, fetch_texel_2d_f_argb4444_rev, fetch_texel_3d_f_argb4444_rev }, { - MESA_FORMAT_RGBA5551, + MESA_FORMAT_A1B5G5R5_UNORM, fetch_texel_1d_f_rgba5551, fetch_texel_2d_f_rgba5551, fetch_texel_3d_f_rgba5551 }, { - MESA_FORMAT_ARGB1555, + MESA_FORMAT_B5G5R5A1_UNORM, fetch_texel_1d_f_argb1555, fetch_texel_2d_f_argb1555, fetch_texel_3d_f_argb1555 }, { - MESA_FORMAT_ARGB1555_REV, + MESA_FORMAT_A1R5G5B5_UNORM, fetch_texel_1d_f_argb1555_rev, fetch_texel_2d_f_argb1555_rev, fetch_texel_3d_f_argb1555_rev }, { - MESA_FORMAT_AL44, + MESA_FORMAT_L4A4_UNORM, fetch_texel_1d_f_al44, fetch_texel_2d_f_al44, fetch_texel_3d_f_al44 }, { - MESA_FORMAT_AL88, + MESA_FORMAT_L8A8_UNORM, fetch_texel_1d_f_al88, fetch_texel_2d_f_al88, fetch_texel_3d_f_al88 }, { - MESA_FORMAT_AL88_REV, + MESA_FORMAT_A8L8_UNORM, fetch_texel_1d_f_al88_rev, fetch_texel_2d_f_al88_rev, fetch_texel_3d_f_al88_rev }, { - MESA_FORMAT_AL1616, + MESA_FORMAT_L16A16_UNORM, fetch_texel_1d_f_al1616, fetch_texel_2d_f_al1616, fetch_texel_3d_f_al1616 }, { - MESA_FORMAT_AL1616_REV, + MESA_FORMAT_A16L16_UNORM, fetch_texel_1d_f_al1616_rev, fetch_texel_2d_f_al1616_rev, fetch_texel_3d_f_al1616_rev }, { - MESA_FORMAT_RGB332, + MESA_FORMAT_B2G3R3_UNORM, fetch_texel_1d_f_rgb332, fetch_texel_2d_f_rgb332, fetch_texel_3d_f_rgb332 }, { - MESA_FORMAT_A8, + MESA_FORMAT_A_UNORM8, fetch_texel_1d_f_a8, fetch_texel_2d_f_a8, fetch_texel_3d_f_a8 }, { - MESA_FORMAT_A16, + MESA_FORMAT_A_UNORM16, fetch_texel_1d_f_a16, fetch_texel_2d_f_a16, fetch_texel_3d_f_a16 }, { - MESA_FORMAT_L8, + MESA_FORMAT_L_UNORM8, fetch_texel_1d_f_l8, fetch_texel_2d_f_l8, fetch_texel_3d_f_l8 }, { - MESA_FORMAT_L16, + MESA_FORMAT_L_UNORM16, fetch_texel_1d_f_l16, fetch_texel_2d_f_l16, fetch_texel_3d_f_l16 }, { - MESA_FORMAT_I8, + MESA_FORMAT_I_UNORM8, fetch_texel_1d_f_i8, fetch_texel_2d_f_i8, fetch_texel_3d_f_i8 }, { - MESA_FORMAT_I16, + MESA_FORMAT_I_UNORM16, fetch_texel_1d_f_i16, fetch_texel_2d_f_i16, fetch_texel_3d_f_i16 @@ -335,115 +335,115 @@ texfetch_funcs[] = fetch_texel_3d_f_ycbcr_rev }, { - MESA_FORMAT_R8, + MESA_FORMAT_R_UNORM8, fetch_texel_1d_f_r8, fetch_texel_2d_f_r8, fetch_texel_3d_f_r8 }, { - MESA_FORMAT_GR88, + MESA_FORMAT_R8G8_UNORM, fetch_texel_1d_f_gr88, fetch_texel_2d_f_gr88, fetch_texel_3d_f_gr88 }, { - MESA_FORMAT_RG88, + MESA_FORMAT_G8R8_UNORM, fetch_texel_1d_f_rg88, fetch_texel_2d_f_rg88, fetch_texel_3d_f_rg88 }, { - MESA_FORMAT_R16, + MESA_FORMAT_R_UNORM16, fetch_texel_1d_f_r16, fetch_texel_2d_f_r16, fetch_texel_3d_f_r16 }, { - MESA_FORMAT_GR1616, + MESA_FORMAT_R16G16_UNORM, fetch_texel_1d_f_rg1616, fetch_texel_2d_f_rg1616, fetch_texel_3d_f_rg1616 }, { - MESA_FORMAT_RG1616, + MESA_FORMAT_G16R16_UNORM, fetch_texel_1d_f_rg1616_rev, fetch_texel_2d_f_rg1616_rev, fetch_texel_3d_f_rg1616_rev }, { - MESA_FORMAT_ARGB2101010, + MESA_FORMAT_B10G10R10A2_UNORM, fetch_texel_1d_f_argb2101010, fetch_texel_2d_f_argb2101010, fetch_texel_3d_f_argb2101010 }, { - MESA_FORMAT_Z24_S8, + MESA_FORMAT_S8_UINT_Z24_UNORM, fetch_texel_1d_f_z24_s8, fetch_texel_2d_f_z24_s8, fetch_texel_3d_f_z24_s8 }, { - MESA_FORMAT_S8_Z24, + MESA_FORMAT_Z24_UNORM_X8_UINT, fetch_texel_1d_f_s8_z24, fetch_texel_2d_f_s8_z24, fetch_texel_3d_f_s8_z24 }, { - MESA_FORMAT_Z16, + MESA_FORMAT_Z_UNORM16, fetch_texel_1d_f_z16, fetch_texel_2d_f_z16, fetch_texel_3d_f_z16 }, { - MESA_FORMAT_X8_Z24, + MESA_FORMAT_Z24_UNORM_S8_UINT, fetch_texel_1d_f_s8_z24, fetch_texel_2d_f_s8_z24, fetch_texel_3d_f_s8_z24 }, { - MESA_FORMAT_Z24_X8, + MESA_FORMAT_X8Z24_UNORM, fetch_texel_1d_f_z24_s8, fetch_texel_2d_f_z24_s8, fetch_texel_3d_f_z24_s8 }, { - MESA_FORMAT_Z32, + MESA_FORMAT_Z_UNORM32, fetch_texel_1d_f_z32, fetch_texel_2d_f_z32, fetch_texel_3d_f_z32 }, { - MESA_FORMAT_S8, + MESA_FORMAT_S_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_SRGB8, + MESA_FORMAT_BGR_SRGB8, fetch_texel_1d_srgb8, fetch_texel_2d_srgb8, fetch_texel_3d_srgb8 }, { - MESA_FORMAT_SRGBA8, + MESA_FORMAT_A8B8G8R8_SRGB, fetch_texel_1d_srgba8, fetch_texel_2d_srgba8, fetch_texel_3d_srgba8 }, { - MESA_FORMAT_SARGB8, + MESA_FORMAT_B8G8R8A8_SRGB, fetch_texel_1d_sargb8, fetch_texel_2d_sargb8, fetch_texel_3d_sargb8 }, { - MESA_FORMAT_SL8, + MESA_FORMAT_L_SRGB8, fetch_texel_1d_sl8, fetch_texel_2d_sl8, fetch_texel_3d_sl8 }, { - MESA_FORMAT_SLA8, + MESA_FORMAT_L8A8_SRGB, fetch_texel_1d_sla8, fetch_texel_2d_sla8, fetch_texel_3d_sla8 @@ -534,49 +534,49 @@ texfetch_funcs[] = fetch_texel_3d_f_rgb_f16 }, { - MESA_FORMAT_ALPHA_FLOAT32, + MESA_FORMAT_A_FLOAT32, fetch_texel_1d_f_alpha_f32, fetch_texel_2d_f_alpha_f32, fetch_texel_3d_f_alpha_f32 }, { - MESA_FORMAT_ALPHA_FLOAT16, + MESA_FORMAT_A_FLOAT16, fetch_texel_1d_f_alpha_f16, fetch_texel_2d_f_alpha_f16, fetch_texel_3d_f_alpha_f16 }, { - MESA_FORMAT_LUMINANCE_FLOAT32, + MESA_FORMAT_L_FLOAT32, fetch_texel_1d_f_luminance_f32, fetch_texel_2d_f_luminance_f32, fetch_texel_3d_f_luminance_f32 }, { - MESA_FORMAT_LUMINANCE_FLOAT16, + MESA_FORMAT_L_FLOAT16, fetch_texel_1d_f_luminance_f16, fetch_texel_2d_f_luminance_f16, fetch_texel_3d_f_luminance_f16 }, { - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, + MESA_FORMAT_LA_FLOAT32, fetch_texel_1d_f_luminance_alpha_f32, fetch_texel_2d_f_luminance_alpha_f32, fetch_texel_3d_f_luminance_alpha_f32 }, { - MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, + MESA_FORMAT_LA_FLOAT16, fetch_texel_1d_f_luminance_alpha_f16, fetch_texel_2d_f_luminance_alpha_f16, fetch_texel_3d_f_luminance_alpha_f16 }, { - MESA_FORMAT_INTENSITY_FLOAT32, + MESA_FORMAT_I_FLOAT32, fetch_texel_1d_f_intensity_f32, fetch_texel_2d_f_intensity_f32, fetch_texel_3d_f_intensity_f32 }, { - MESA_FORMAT_INTENSITY_FLOAT16, + MESA_FORMAT_I_FLOAT16, fetch_texel_1d_f_intensity_f16, fetch_texel_2d_f_intensity_f16, fetch_texel_3d_f_intensity_f16 @@ -607,42 +607,42 @@ texfetch_funcs[] = }, { - MESA_FORMAT_ALPHA_UINT8, + MESA_FORMAT_A_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_ALPHA_UINT16, + MESA_FORMAT_A_UINT16, NULL, NULL, NULL }, { - MESA_FORMAT_ALPHA_UINT32, + MESA_FORMAT_A_UINT32, NULL, NULL, NULL }, { - MESA_FORMAT_ALPHA_INT8, + MESA_FORMAT_A_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_ALPHA_INT16, + MESA_FORMAT_A_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_ALPHA_INT32, + MESA_FORMAT_A_SINT32, NULL, NULL, NULL @@ -650,42 +650,42 @@ texfetch_funcs[] = { - MESA_FORMAT_INTENSITY_UINT8, + MESA_FORMAT_I_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_INTENSITY_UINT16, + MESA_FORMAT_I_UINT16, NULL, NULL, NULL }, { - MESA_FORMAT_INTENSITY_UINT32, + MESA_FORMAT_I_UINT32, NULL, NULL, NULL }, { - MESA_FORMAT_INTENSITY_INT8, + MESA_FORMAT_I_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_INTENSITY_INT16, + MESA_FORMAT_I_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_INTENSITY_INT32, + MESA_FORMAT_I_SINT32, NULL, NULL, NULL @@ -693,42 +693,42 @@ texfetch_funcs[] = { - MESA_FORMAT_LUMINANCE_UINT8, + MESA_FORMAT_L_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_UINT16, + MESA_FORMAT_L_UINT16, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_UINT32, + MESA_FORMAT_L_UINT32, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_INT8, + MESA_FORMAT_L_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_INT16, + MESA_FORMAT_L_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_INT32, + MESA_FORMAT_L_SINT32, NULL, NULL, NULL @@ -736,42 +736,42 @@ texfetch_funcs[] = { - MESA_FORMAT_LUMINANCE_ALPHA_UINT8, + MESA_FORMAT_LA_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_ALPHA_UINT16, + MESA_FORMAT_LA_UINT16, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_ALPHA_UINT32, + MESA_FORMAT_LA_UINT32, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT8, + MESA_FORMAT_LA_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT16, + MESA_FORMAT_LA_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_LUMINANCE_ALPHA_INT32, + MESA_FORMAT_LA_SINT32, NULL, NULL, NULL @@ -779,21 +779,21 @@ texfetch_funcs[] = { - MESA_FORMAT_R_INT8, + MESA_FORMAT_R_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_RG_INT8, + MESA_FORMAT_RG_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_RGB_INT8, + MESA_FORMAT_RGB_SINT8, NULL, NULL, NULL @@ -801,55 +801,55 @@ texfetch_funcs[] = /* non-normalized, signed int */ { - MESA_FORMAT_RGBA_INT8, + MESA_FORMAT_RGBA_SINT8, fetch_texel_1d_rgba_int8, fetch_texel_2d_rgba_int8, fetch_texel_3d_rgba_int8 }, { - MESA_FORMAT_R_INT16, + MESA_FORMAT_R_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_RG_INT16, + MESA_FORMAT_RG_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_RGB_INT16, + MESA_FORMAT_RGB_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_RGBA_INT16, + MESA_FORMAT_RGBA_SINT16, fetch_texel_1d_rgba_int16, fetch_texel_2d_rgba_int16, fetch_texel_3d_rgba_int16 }, { - MESA_FORMAT_R_INT32, + MESA_FORMAT_R_SINT32, NULL, NULL, NULL }, { - MESA_FORMAT_RG_INT32, + MESA_FORMAT_RG_SINT32, NULL, NULL, NULL }, { - MESA_FORMAT_RGB_INT32, + MESA_FORMAT_RGB_SINT32, NULL, NULL, NULL }, { - MESA_FORMAT_RGBA_INT32, + MESA_FORMAT_RGBA_SINT32, fetch_texel_1d_rgba_int32, fetch_texel_2d_rgba_int32, fetch_texel_3d_rgba_int32 @@ -939,109 +939,109 @@ texfetch_funcs[] = /* signed, normalized */ { - MESA_FORMAT_SIGNED_R8, + MESA_FORMAT_R_SNORM8, fetch_texel_1d_signed_r8, fetch_texel_2d_signed_r8, fetch_texel_3d_signed_r8 }, { - MESA_FORMAT_SIGNED_RG88_REV, + MESA_FORMAT_R8G8_SNORM, fetch_texel_1d_signed_rg88_rev, fetch_texel_2d_signed_rg88_rev, fetch_texel_3d_signed_rg88_rev }, { - MESA_FORMAT_SIGNED_RGBX8888, + MESA_FORMAT_X8B8G8R8_SNORM, fetch_texel_1d_signed_rgbx8888, fetch_texel_2d_signed_rgbx8888, fetch_texel_3d_signed_rgbx8888 }, { - MESA_FORMAT_SIGNED_RGBA8888, + MESA_FORMAT_A8B8G8R8_SNORM, fetch_texel_1d_signed_rgba8888, fetch_texel_2d_signed_rgba8888, fetch_texel_3d_signed_rgba8888 }, { - MESA_FORMAT_SIGNED_RGBA8888_REV, + MESA_FORMAT_R8G8B8A8_SNORM, fetch_texel_1d_signed_rgba8888_rev, fetch_texel_2d_signed_rgba8888_rev, fetch_texel_3d_signed_rgba8888_rev }, { - MESA_FORMAT_SIGNED_R16, + MESA_FORMAT_R_SNORM16, fetch_texel_1d_signed_r16, fetch_texel_2d_signed_r16, fetch_texel_3d_signed_r16 }, { - MESA_FORMAT_SIGNED_GR1616, + MESA_FORMAT_R16G16_SNORM, fetch_texel_1d_signed_rg1616, fetch_texel_2d_signed_rg1616, fetch_texel_3d_signed_rg1616 }, { - MESA_FORMAT_SIGNED_RGB_16, + MESA_FORMAT_RGB_SNORM16, fetch_texel_1d_signed_rgb_16, fetch_texel_2d_signed_rgb_16, fetch_texel_3d_signed_rgb_16 }, { - MESA_FORMAT_SIGNED_RGBA_16, + MESA_FORMAT_RGBA_SNORM16, fetch_texel_1d_signed_rgba_16, fetch_texel_2d_signed_rgba_16, fetch_texel_3d_signed_rgba_16 }, { - MESA_FORMAT_RGBA_16, + MESA_FORMAT_RGBA_UNORM16, fetch_texel_1d_rgba_16, fetch_texel_2d_rgba_16, fetch_texel_3d_rgba_16 }, { - MESA_FORMAT_RED_RGTC1, + MESA_FORMAT_R_RGTC1_UNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_SIGNED_RED_RGTC1, + MESA_FORMAT_R_RGTC1_SNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_RG_RGTC2, + MESA_FORMAT_RG_RGTC2_UNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_SIGNED_RG_RGTC2, + MESA_FORMAT_RG_RGTC2_SNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_L_LATC1, + MESA_FORMAT_L_LATC1_UNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_SIGNED_L_LATC1, + MESA_FORMAT_L_LATC1_SNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_LA_LATC2, + MESA_FORMAT_LA_LATC2_UNORM, fetch_compressed, fetch_compressed, fetch_compressed }, { - MESA_FORMAT_SIGNED_LA_LATC2, + MESA_FORMAT_LA_LATC2_SNORM, fetch_compressed, fetch_compressed, fetch_compressed @@ -1113,193 +1113,193 @@ texfetch_funcs[] = fetch_compressed }, { - MESA_FORMAT_SIGNED_A8, + MESA_FORMAT_A_SNORM8, fetch_texel_1d_signed_a8, fetch_texel_2d_signed_a8, fetch_texel_3d_signed_a8 }, { - MESA_FORMAT_SIGNED_L8, + MESA_FORMAT_L_SNORM8, fetch_texel_1d_signed_l8, fetch_texel_2d_signed_l8, fetch_texel_3d_signed_l8 }, { - MESA_FORMAT_SIGNED_AL88, + MESA_FORMAT_L8A8_SNORM, fetch_texel_1d_signed_al88, fetch_texel_2d_signed_al88, fetch_texel_3d_signed_al88 }, { - MESA_FORMAT_SIGNED_I8, + MESA_FORMAT_I_SNORM8, fetch_texel_1d_signed_i8, fetch_texel_2d_signed_i8, fetch_texel_3d_signed_i8 }, { - MESA_FORMAT_SIGNED_A16, + MESA_FORMAT_A_SNORM16, fetch_texel_1d_signed_a16, fetch_texel_2d_signed_a16, fetch_texel_3d_signed_a16 }, { - MESA_FORMAT_SIGNED_L16, + MESA_FORMAT_L_SNORM16, fetch_texel_1d_signed_l16, fetch_texel_2d_signed_l16, fetch_texel_3d_signed_l16 }, { - MESA_FORMAT_SIGNED_AL1616, + MESA_FORMAT_LA_SNORM16, fetch_texel_1d_signed_al1616, fetch_texel_2d_signed_al1616, fetch_texel_3d_signed_al1616 }, { - MESA_FORMAT_SIGNED_I16, + MESA_FORMAT_I_SNORM16, fetch_texel_1d_signed_i16, fetch_texel_2d_signed_i16, fetch_texel_3d_signed_i16 }, { - MESA_FORMAT_RGB9_E5_FLOAT, + MESA_FORMAT_R9G9B9E5_FLOAT, fetch_texel_1d_rgb9_e5, fetch_texel_2d_rgb9_e5, fetch_texel_3d_rgb9_e5 }, { - MESA_FORMAT_R11_G11_B10_FLOAT, + MESA_FORMAT_R11G11B10_FLOAT, fetch_texel_1d_r11_g11_b10f, fetch_texel_2d_r11_g11_b10f, fetch_texel_3d_r11_g11_b10f }, { - MESA_FORMAT_Z32_FLOAT, + MESA_FORMAT_Z_FLOAT32, fetch_texel_1d_f_r_f32, /* Reuse the R32F functions. */ fetch_texel_2d_f_r_f32, fetch_texel_3d_f_r_f32 }, { - MESA_FORMAT_Z32_FLOAT_X24S8, + MESA_FORMAT_Z32_FLOAT_S8X24_UINT, fetch_texel_1d_z32f_x24s8, fetch_texel_2d_z32f_x24s8, fetch_texel_3d_z32f_x24s8 }, { - MESA_FORMAT_ARGB2101010_UINT, + MESA_FORMAT_B10G10R10A2_UINT, NULL, NULL, NULL }, { - MESA_FORMAT_ABGR2101010_UINT, + MESA_FORMAT_R10G10B10A2_UINT, NULL, NULL, NULL }, { - MESA_FORMAT_XRGB4444_UNORM, + MESA_FORMAT_B4G4R4X4_UNORM, NULL, NULL, NULL }, { - MESA_FORMAT_XRGB1555_UNORM, + MESA_FORMAT_B5G5R5X1_UNORM, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR8888_SNORM, + MESA_FORMAT_R8G8B8X8_SNORM, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR8888_SRGB, + MESA_FORMAT_R8G8B8X8_SRGB, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR8888_UINT, + MESA_FORMAT_RGBX_UINT8, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR8888_SINT, + MESA_FORMAT_RGBX_SINT8, NULL, NULL, NULL }, { - MESA_FORMAT_XRGB2101010_UNORM, + MESA_FORMAT_B10G10R10X2_UNORM, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR16161616_UNORM, + MESA_FORMAT_RGBX_UNORM16, fetch_texel_1d_xbgr16161616_unorm, fetch_texel_2d_xbgr16161616_unorm, fetch_texel_3d_xbgr16161616_unorm }, { - MESA_FORMAT_XBGR16161616_SNORM, + MESA_FORMAT_RGBX_SNORM16, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR16161616_FLOAT, + MESA_FORMAT_RGBX_FLOAT16, fetch_texel_1d_xbgr16161616_float, fetch_texel_2d_xbgr16161616_float, fetch_texel_3d_xbgr16161616_float }, { - MESA_FORMAT_XBGR16161616_UINT, + MESA_FORMAT_RGBX_UINT16, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR16161616_SINT, + MESA_FORMAT_RGBX_SINT16, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR32323232_FLOAT, + MESA_FORMAT_RGBX_FLOAT32, fetch_texel_1d_xbgr32323232_float, fetch_texel_2d_xbgr32323232_float, fetch_texel_3d_xbgr32323232_float }, { - MESA_FORMAT_XBGR32323232_UINT, + MESA_FORMAT_RGBX_UINT32, NULL, NULL, NULL }, { - MESA_FORMAT_XBGR32323232_SINT, + MESA_FORMAT_RGBX_SINT32, NULL, NULL, NULL }, { - MESA_FORMAT_ABGR2101010, + MESA_FORMAT_R10G10B10A2_UNORM, NULL, NULL, NULL }, { - MESA_FORMAT_SIGNED_RG88, + MESA_FORMAT_G8R8_SNORM, NULL, NULL, NULL }, { - MESA_FORMAT_SIGNED_RG1616, + MESA_FORMAT_G16R16_SNORM, NULL, NULL, NULL @@ -1314,11 +1314,11 @@ static void set_fetch_functions(const struct gl_sampler_object *samp, struct swrast_texture_image *texImage, GLuint dims) { - gl_format format = texImage->Base.TexFormat; + mesa_format format = texImage->Base.TexFormat; #ifdef DEBUG /* check that the table entries are sorted by format name */ - gl_format fmt; + mesa_format fmt; for (fmt = 0; fmt < MESA_FORMAT_COUNT; fmt++) { assert(texfetch_funcs[fmt].Name == fmt); } diff --git a/mesalib/src/mesa/swrast/s_texfetch_tmp.h b/mesalib/src/mesa/swrast/s_texfetch_tmp.h index e2521b50c..f3048894e 100644 --- a/mesalib/src/mesa/swrast/s_texfetch_tmp.h +++ b/mesalib/src/mesa/swrast/s_texfetch_tmp.h @@ -69,7 +69,7 @@ #endif -/* MESA_FORMAT_Z32 ***********************************************************/ +/* MESA_FORMAT_Z_UNORM32 ***********************************************************/ /* Fetch depth texel from 1D, 2D or 3D 32-bit depth texture, * returning 1 GLfloat. @@ -83,7 +83,7 @@ static void FETCH(f_z32)( const struct swrast_texture_image *texImage, } -/* MESA_FORMAT_Z16 ***********************************************************/ +/* MESA_FORMAT_Z_UNORM16 ***********************************************************/ /* Fetch depth texel from 1D, 2D or 3D 16-bit depth texture, * returning 1 GLfloat. @@ -388,7 +388,7 @@ static void FETCH(f_rg_f16)( const struct swrast_texture_image *texImage, * Begin Hardware formats */ -/* MESA_FORMAT_RGBA8888 ******************************************************/ +/* MESA_FORMAT_A8B8G8R8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D rgba8888 texture, return 4 GLfloats */ static void FETCH(f_rgba8888)( const struct swrast_texture_image *texImage, @@ -422,7 +422,7 @@ static void FETCH(f_rgba8888_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB8888 ******************************************************/ +/* MESA_FORMAT_B8G8R8A8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D argb8888 texture, return 4 GLchans */ static void FETCH(f_argb8888)( const struct swrast_texture_image *texImage, @@ -438,7 +438,7 @@ static void FETCH(f_argb8888)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB8888_REV **************************************************/ +/* MESA_FORMAT_A8R8G8B8_UNORM **************************************************/ /* Fetch texel from 1D, 2D or 3D argb8888_rev texture, return 4 GLfloats */ static void FETCH(f_argb8888_rev)( const struct swrast_texture_image *texImage, @@ -454,7 +454,7 @@ static void FETCH(f_argb8888_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBX8888 ******************************************************/ +/* MESA_FORMAT_X8B8G8R8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D rgbx8888 texture, return 4 GLfloats */ static void FETCH(f_rgbx8888)( const struct swrast_texture_image *texImage, @@ -486,7 +486,7 @@ static void FETCH(f_rgbx8888_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_XRGB8888 ******************************************************/ +/* MESA_FORMAT_B8G8R8X8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D xrgb8888 texture, return 4 GLchans */ static void FETCH(f_xrgb8888)( const struct swrast_texture_image *texImage, @@ -502,7 +502,7 @@ static void FETCH(f_xrgb8888)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_XRGB8888_REV **************************************************/ +/* MESA_FORMAT_X8R8G8B8_UNORM **************************************************/ /* Fetch texel from 1D, 2D or 3D xrgb8888_rev texture, return 4 GLfloats */ static void FETCH(f_xrgb8888_rev)( const struct swrast_texture_image *texImage, @@ -518,7 +518,7 @@ static void FETCH(f_xrgb8888_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGB888 ********************************************************/ +/* MESA_FORMAT_BGR_UNORM8 ********************************************************/ /* Fetch texel from 1D, 2D or 3D rgb888 texture, return 4 GLchans */ static void FETCH(f_rgb888)( const struct swrast_texture_image *texImage, @@ -534,7 +534,7 @@ static void FETCH(f_rgb888)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_BGR888 ********************************************************/ +/* MESA_FORMAT_RGB_UNORM8 ********************************************************/ /* Fetch texel from 1D, 2D or 3D bgr888 texture, return 4 GLchans */ static void FETCH(f_bgr888)( const struct swrast_texture_image *texImage, @@ -553,7 +553,7 @@ static void FETCH(f_bgr888)( const struct swrast_texture_image *texImage, /* use color expansion like (g << 2) | (g >> 4) (does somewhat random rounding) instead of slow (g << 2) * 255 / 252 (always rounds down) */ -/* MESA_FORMAT_RGB565 ********************************************************/ +/* MESA_FORMAT_B5G6R5_UNORM ********************************************************/ /* Fetch texel from 1D, 2D or 3D rgb565 texture, return 4 GLchans */ static void FETCH(f_rgb565)( const struct swrast_texture_image *texImage, @@ -570,7 +570,7 @@ static void FETCH(f_rgb565)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGB565_REV ****************************************************/ +/* MESA_FORMAT_R5G6B5_UNORM ****************************************************/ /* Fetch texel from 1D, 2D or 3D rgb565_rev texture, return 4 GLchans */ static void FETCH(f_rgb565_rev)( const struct swrast_texture_image *texImage, @@ -587,7 +587,7 @@ static void FETCH(f_rgb565_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB4444 ******************************************************/ +/* MESA_FORMAT_B4G4R4A4_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D argb444 texture, return 4 GLchans */ static void FETCH(f_argb4444)( const struct swrast_texture_image *texImage, @@ -604,7 +604,7 @@ static void FETCH(f_argb4444)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB4444_REV **************************************************/ +/* MESA_FORMAT_A4R4G4B4_UNORM **************************************************/ /* Fetch texel from 1D, 2D or 3D argb4444_rev texture, return 4 GLchans */ static void FETCH(f_argb4444_rev)( const struct swrast_texture_image *texImage, @@ -619,7 +619,7 @@ static void FETCH(f_argb4444_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBA5551 ******************************************************/ +/* MESA_FORMAT_A1B5G5R5_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D argb1555 texture, return 4 GLchans */ static void FETCH(f_rgba5551)( const struct swrast_texture_image *texImage, @@ -635,7 +635,7 @@ static void FETCH(f_rgba5551)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB1555 ******************************************************/ +/* MESA_FORMAT_B5G5R5A1_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D argb1555 texture, return 4 GLchans */ static void FETCH(f_argb1555)( const struct swrast_texture_image *texImage, @@ -652,7 +652,7 @@ static void FETCH(f_argb1555)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB1555_REV **************************************************/ +/* MESA_FORMAT_A1R5G5B5_UNORM **************************************************/ /* Fetch texel from 1D, 2D or 3D argb1555_rev texture, return 4 GLchans */ static void FETCH(f_argb1555_rev)( const struct swrast_texture_image *texImage, @@ -669,7 +669,7 @@ static void FETCH(f_argb1555_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_ARGB2101010 ***************************************************/ +/* MESA_FORMAT_B10G10R10A2_UNORM ***************************************************/ /* Fetch texel from 1D, 2D or 3D argb2101010 texture, return 4 GLchans */ static void FETCH(f_argb2101010)( const struct swrast_texture_image *texImage, @@ -686,7 +686,7 @@ static void FETCH(f_argb2101010)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_GR88 **********************************************************/ +/* MESA_FORMAT_R8G8_UNORM **********************************************************/ /* Fetch texel from 1D, 2D or 3D rg88 texture, return 4 GLchans */ static void FETCH(f_gr88)( const struct swrast_texture_image *texImage, @@ -702,7 +702,7 @@ static void FETCH(f_gr88)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RG88 ******************************************************/ +/* MESA_FORMAT_G8R8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D rg88_rev texture, return 4 GLchans */ static void FETCH(f_rg88)( const struct swrast_texture_image *texImage, @@ -718,7 +718,7 @@ static void FETCH(f_rg88)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_AL44 **********************************************************/ +/* MESA_FORMAT_L4A4_UNORM **********************************************************/ /* Fetch texel from 1D, 2D or 3D al44 texture, return 4 GLchans */ static void FETCH(f_al44)( const struct swrast_texture_image *texImage, @@ -734,7 +734,7 @@ static void FETCH(f_al44)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_AL88 **********************************************************/ +/* MESA_FORMAT_L8A8_UNORM **********************************************************/ /* Fetch texel from 1D, 2D or 3D al88 texture, return 4 GLchans */ static void FETCH(f_al88)( const struct swrast_texture_image *texImage, @@ -750,7 +750,7 @@ static void FETCH(f_al88)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_R8 ************************************************************/ +/* MESA_FORMAT_R_UNORM8 ************************************************************/ /* Fetch texel from 1D, 2D or 3D rg88 texture, return 4 GLchans */ static void FETCH(f_r8)(const struct swrast_texture_image *texImage, @@ -766,7 +766,7 @@ static void FETCH(f_r8)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_R16 ***********************************************************/ +/* MESA_FORMAT_R_UNORM16 ***********************************************************/ /* Fetch texel from 1D, 2D or 3D r16 texture, return 4 GLchans */ static void FETCH(f_r16)(const struct swrast_texture_image *texImage, @@ -782,7 +782,7 @@ static void FETCH(f_r16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_AL88_REV ******************************************************/ +/* MESA_FORMAT_A8L8_UNORM ******************************************************/ /* Fetch texel from 1D, 2D or 3D al88_rev texture, return 4 GLchans */ static void FETCH(f_al88_rev)( const struct swrast_texture_image *texImage, @@ -798,7 +798,7 @@ static void FETCH(f_al88_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_GR1616 ********************************************************/ +/* MESA_FORMAT_R16G16_UNORM ********************************************************/ /* Fetch texel from 1D, 2D or 3D rg1616 texture, return 4 GLchans */ static void FETCH(f_rg1616)( const struct swrast_texture_image *texImage, @@ -814,7 +814,7 @@ static void FETCH(f_rg1616)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RG1616 ****************************************************/ +/* MESA_FORMAT_G16R16_UNORM ****************************************************/ /* Fetch texel from 1D, 2D or 3D rg1616_rev texture, return 4 GLchans */ static void FETCH(f_rg1616_rev)( const struct swrast_texture_image *texImage, @@ -830,7 +830,7 @@ static void FETCH(f_rg1616_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_AL1616 ********************************************************/ +/* MESA_FORMAT_L16A16_UNORM ********************************************************/ /* Fetch texel from 1D, 2D or 3D al1616 texture, return 4 GLchans */ static void FETCH(f_al1616)( const struct swrast_texture_image *texImage, @@ -846,7 +846,7 @@ static void FETCH(f_al1616)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_AL1616_REV ****************************************************/ +/* MESA_FORMAT_A16L16_UNORM ****************************************************/ /* Fetch texel from 1D, 2D or 3D al1616_rev texture, return 4 GLchans */ static void FETCH(f_al1616_rev)( const struct swrast_texture_image *texImage, @@ -862,7 +862,7 @@ static void FETCH(f_al1616_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGB332 ********************************************************/ +/* MESA_FORMAT_B2G3R3_UNORM ********************************************************/ /* Fetch texel from 1D, 2D or 3D rgb332 texture, return 4 GLchans */ static void FETCH(f_rgb332)( const struct swrast_texture_image *texImage, @@ -879,7 +879,7 @@ static void FETCH(f_rgb332)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_A8 ************************************************************/ +/* MESA_FORMAT_A_UNORM8 ************************************************************/ /* Fetch texel from 1D, 2D or 3D a8 texture, return 4 GLchans */ static void FETCH(f_a8)( const struct swrast_texture_image *texImage, @@ -895,7 +895,7 @@ static void FETCH(f_a8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_A16 ************************************************************/ +/* MESA_FORMAT_A_UNORM16 ************************************************************/ /* Fetch texel from 1D, 2D or 3D a8 texture, return 4 GLchans */ static void FETCH(f_a16)( const struct swrast_texture_image *texImage, @@ -911,7 +911,7 @@ static void FETCH(f_a16)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_L8 ************************************************************/ +/* MESA_FORMAT_L_UNORM8 ************************************************************/ /* Fetch texel from 1D, 2D or 3D l8 texture, return 4 GLchans */ static void FETCH(f_l8)( const struct swrast_texture_image *texImage, @@ -927,7 +927,7 @@ static void FETCH(f_l8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_L16 ***********************************************************/ +/* MESA_FORMAT_L_UNORM16 ***********************************************************/ /* Fetch texel from 1D, 2D or 3D l16 texture, return 4 GLchans */ static void FETCH(f_l16)( const struct swrast_texture_image *texImage, @@ -943,7 +943,7 @@ static void FETCH(f_l16)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_I8 ************************************************************/ +/* MESA_FORMAT_I_UNORM8 ************************************************************/ /* Fetch texel from 1D, 2D or 3D i8 texture, return 4 GLchans */ static void FETCH(f_i8)( const struct swrast_texture_image *texImage, @@ -959,7 +959,7 @@ static void FETCH(f_i8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_I16 ***********************************************************/ +/* MESA_FORMAT_I_UNORM16 ***********************************************************/ /* Fetch texel from 1D, 2D or 3D i16 texture, return 4 GLchans */ static void FETCH(f_i16)( const struct swrast_texture_image *texImage, @@ -976,7 +976,7 @@ static void FETCH(f_i16)( const struct swrast_texture_image *texImage, /* Fetch texel from 1D, 2D or 3D srgb8 texture, return 4 GLfloats */ -/* Note: component order is same as for MESA_FORMAT_RGB888 */ +/* Note: component order is same as for MESA_FORMAT_BGR_UNORM8 */ static void FETCH(srgb8)(const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) { @@ -1042,7 +1042,7 @@ static void FETCH(sla8)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBA_INT8 **************************************************/ +/* MESA_FORMAT_RGBA_SINT8 **************************************************/ static void FETCH(rgba_int8)(const struct swrast_texture_image *texImage, @@ -1058,7 +1058,7 @@ FETCH(rgba_int8)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBA_INT16 **************************************************/ +/* MESA_FORMAT_RGBA_SINT16 **************************************************/ static void FETCH(rgba_int16)(const struct swrast_texture_image *texImage, @@ -1074,7 +1074,7 @@ FETCH(rgba_int16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBA_INT32 **************************************************/ +/* MESA_FORMAT_RGBA_SINT32 **************************************************/ static void FETCH(rgba_int32)(const struct swrast_texture_image *texImage, @@ -1153,7 +1153,7 @@ static void FETCH(dudv8)(const struct swrast_texture_image *texImage, } -/* MESA_FORMAT_SIGNED_R8 ***********************************************/ +/* MESA_FORMAT_R_SNORM8 ***********************************************/ static void FETCH(signed_r8)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1168,7 +1168,7 @@ static void FETCH(signed_r8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_A8 ***********************************************/ +/* MESA_FORMAT_A_SNORM8 ***********************************************/ static void FETCH(signed_a8)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1183,7 +1183,7 @@ static void FETCH(signed_a8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_L8 ***********************************************/ +/* MESA_FORMAT_L_SNORM8 ***********************************************/ static void FETCH(signed_l8)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1198,7 +1198,7 @@ static void FETCH(signed_l8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_I8 ***********************************************/ +/* MESA_FORMAT_I_SNORM8 ***********************************************/ static void FETCH(signed_i8)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1213,7 +1213,7 @@ static void FETCH(signed_i8)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RG88_REV ***********************************************/ +/* MESA_FORMAT_R8G8_SNORM ***********************************************/ static void FETCH(signed_rg88_rev)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1228,7 +1228,7 @@ static void FETCH(signed_rg88_rev)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_AL88 ***********************************************/ +/* MESA_FORMAT_L8A8_SNORM ***********************************************/ static void FETCH(signed_al88)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1243,7 +1243,7 @@ static void FETCH(signed_al88)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RGBX8888 ***********************************************/ +/* MESA_FORMAT_X8B8G8R8_SNORM ***********************************************/ static void FETCH(signed_rgbx8888)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1258,7 +1258,7 @@ static void FETCH(signed_rgbx8888)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RGBA8888 ***********************************************/ +/* MESA_FORMAT_A8B8G8R8_SNORM ***********************************************/ static void FETCH(signed_rgba8888)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1286,7 +1286,7 @@ static void FETCH(signed_rgba8888_rev)( const struct swrast_texture_image *texIm -/* MESA_FORMAT_SIGNED_R16 ***********************************************/ +/* MESA_FORMAT_R_SNORM16 ***********************************************/ static void FETCH(signed_r16)(const struct swrast_texture_image *texImage, @@ -1302,7 +1302,7 @@ FETCH(signed_r16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_A16 ***********************************************/ +/* MESA_FORMAT_A_SNORM16 ***********************************************/ static void FETCH(signed_a16)(const struct swrast_texture_image *texImage, @@ -1318,7 +1318,7 @@ FETCH(signed_a16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_L16 ***********************************************/ +/* MESA_FORMAT_L_SNORM16 ***********************************************/ static void FETCH(signed_l16)(const struct swrast_texture_image *texImage, @@ -1334,7 +1334,7 @@ FETCH(signed_l16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_I16 ***********************************************/ +/* MESA_FORMAT_I_SNORM16 ***********************************************/ static void FETCH(signed_i16)(const struct swrast_texture_image *texImage, @@ -1350,7 +1350,7 @@ FETCH(signed_i16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RG1616 ***********************************************/ +/* MESA_FORMAT_G16R16_SNORM ***********************************************/ static void FETCH(signed_rg1616)(const struct swrast_texture_image *texImage, @@ -1366,7 +1366,7 @@ FETCH(signed_rg1616)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_AL1616 ***********************************************/ +/* MESA_FORMAT_LA_SNORM16 ***********************************************/ static void FETCH(signed_al1616)(const struct swrast_texture_image *texImage, @@ -1382,7 +1382,7 @@ FETCH(signed_al1616)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RGB_16 ***********************************************/ +/* MESA_FORMAT_RGB_SNORM16 ***********************************************/ static void FETCH(signed_rgb_16)(const struct swrast_texture_image *texImage, @@ -1398,7 +1398,7 @@ FETCH(signed_rgb_16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_SIGNED_RGBA_16 ***********************************************/ +/* MESA_FORMAT_RGBA_SNORM16 ***********************************************/ static void FETCH(signed_rgba_16)(const struct swrast_texture_image *texImage, @@ -1415,7 +1415,7 @@ FETCH(signed_rgba_16)(const struct swrast_texture_image *texImage, -/* MESA_FORMAT_RGBA_16 ***********************************************/ +/* MESA_FORMAT_RGBA_UNORM16 ***********************************************/ static void FETCH(rgba_16)(const struct swrast_texture_image *texImage, @@ -1538,8 +1538,8 @@ static void FETCH(f_z24_s8)( const struct swrast_texture_image *texImage, const GLuint *src = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); const GLdouble scale = 1.0 / (GLdouble) 0xffffff; texel[0] = (GLfloat) (((*src) >> 8) * scale); - ASSERT(texImage->Base.TexFormat == MESA_FORMAT_Z24_S8 || - texImage->Base.TexFormat == MESA_FORMAT_Z24_X8); + ASSERT(texImage->Base.TexFormat == MESA_FORMAT_S8_UINT_Z24_UNORM || + texImage->Base.TexFormat == MESA_FORMAT_X8Z24_UNORM); ASSERT(texel[0] >= 0.0F); ASSERT(texel[0] <= 1.0F); } @@ -1556,8 +1556,8 @@ static void FETCH(f_s8_z24)( const struct swrast_texture_image *texImage, const GLuint *src = TEXEL_ADDR(GLuint, texImage, i, j, k, 1); const GLdouble scale = 1.0 / (GLdouble) 0xffffff; texel[0] = (GLfloat) (((*src) & 0x00ffffff) * scale); - ASSERT(texImage->Base.TexFormat == MESA_FORMAT_S8_Z24 || - texImage->Base.TexFormat == MESA_FORMAT_X8_Z24); + ASSERT(texImage->Base.TexFormat == MESA_FORMAT_Z24_UNORM_X8_UINT || + texImage->Base.TexFormat == MESA_FORMAT_Z24_UNORM_S8_UINT); ASSERT(texel[0] >= 0.0F); ASSERT(texel[0] <= 1.0F); } @@ -1578,7 +1578,7 @@ static void FETCH(rgb9_e5)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_R11_G11_B10_FLOAT *********************************************/ +/* MESA_FORMAT_R11G11B10_FLOAT *********************************************/ static void FETCH(r11_g11_b10f)( const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel ) @@ -1591,7 +1591,7 @@ static void FETCH(r11_g11_b10f)( const struct swrast_texture_image *texImage, -/* MESA_FORMAT_Z32_FLOAT_X24S8 ***********************************************/ +/* MESA_FORMAT_Z32_FLOAT_S8X24_UINT ***********************************************/ static void FETCH(z32f_x24s8)(const struct swrast_texture_image *texImage, GLint i, GLint j, GLint k, GLfloat *texel) diff --git a/mesalib/src/mesa/swrast/s_texfilter.c b/mesalib/src/mesa/swrast/s_texfilter.c index 312b9ce9b..c3fd900b4 100644 --- a/mesalib/src/mesa/swrast/s_texfilter.c +++ b/mesalib/src/mesa/swrast/s_texfilter.c @@ -1428,7 +1428,7 @@ opt_sample_rgb_2d(struct gl_context *ctx, ASSERT(samp->WrapS==GL_REPEAT); ASSERT(samp->WrapT==GL_REPEAT); ASSERT(img->Border==0); - ASSERT(img->TexFormat == MESA_FORMAT_RGB888); + ASSERT(img->TexFormat == MESA_FORMAT_BGR_UNORM8); ASSERT(swImg->_IsPowerOfTwo); (void) swImg; @@ -1473,7 +1473,7 @@ opt_sample_rgba_2d(struct gl_context *ctx, ASSERT(samp->WrapS==GL_REPEAT); ASSERT(samp->WrapT==GL_REPEAT); ASSERT(img->Border==0); - ASSERT(img->TexFormat == MESA_FORMAT_RGBA8888); + ASSERT(img->TexFormat == MESA_FORMAT_A8B8G8R8_UNORM); ASSERT(swImg->_IsPowerOfTwo); (void) swImg; @@ -1521,11 +1521,11 @@ sample_lambda_2d(struct gl_context *ctx, case GL_NEAREST: if (repeatNoBorderPOT) { switch (tImg->TexFormat) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: opt_sample_rgb_2d(ctx, samp, tObj, m, texcoords + minStart, NULL, rgba + minStart); break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: opt_sample_rgba_2d(ctx, samp, tObj, m, texcoords + minStart, NULL, rgba + minStart); break; @@ -1578,11 +1578,11 @@ sample_lambda_2d(struct gl_context *ctx, case GL_NEAREST: if (repeatNoBorderPOT) { switch (tImg->TexFormat) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: opt_sample_rgb_2d(ctx, samp, tObj, m, texcoords + magStart, NULL, rgba + magStart); break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: opt_sample_rgba_2d(ctx, samp, tObj, m, texcoords + magStart, NULL, rgba + magStart); break; @@ -3760,9 +3760,9 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx, sampler->WrapT == GL_REPEAT && swImg->_IsPowerOfTwo && img->Border == 0) { - if (img->TexFormat == MESA_FORMAT_RGB888) + if (img->TexFormat == MESA_FORMAT_BGR_UNORM8) func = &opt_sample_rgb_2d; - else if (img->TexFormat == MESA_FORMAT_RGBA8888) + else if (img->TexFormat == MESA_FORMAT_A8B8G8R8_UNORM) func = &opt_sample_rgba_2d; } diff --git a/mesalib/src/mesa/swrast/s_texrender.c b/mesalib/src/mesa/swrast/s_texrender.c index 751d7767b..d67e48ad3 100644 --- a/mesalib/src/mesa/swrast/s_texrender.c +++ b/mesalib/src/mesa/swrast/s_texrender.c @@ -33,7 +33,7 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att) struct gl_renderbuffer *rb = att->Renderbuffer; struct swrast_renderbuffer *srb = swrast_renderbuffer(rb); struct swrast_texture_image *swImage; - gl_format format; + mesa_format format; GLuint zOffset; (void) ctx; diff --git a/mesalib/src/mesa/swrast/s_triangle.c b/mesalib/src/mesa/swrast/s_triangle.c index 085021b58..00383fb84 100644 --- a/mesalib/src/mesa/swrast/s_triangle.c +++ b/mesalib/src/mesa/swrast/s_triangle.c @@ -136,7 +136,7 @@ _swrast_culltriangle( struct gl_context *ctx, 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); \ + ASSERT(texImg->TexFormat == MESA_FORMAT_BGR_UNORM8); \ if (!rb || !texture) { \ return; \ } @@ -194,7 +194,7 @@ _swrast_culltriangle( struct gl_context *ctx, 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); \ + ASSERT(texImg->TexFormat == MESA_FORMAT_BGR_UNORM8); \ if (!rb || !texture) { \ return; \ } @@ -417,7 +417,7 @@ affine_span(struct gl_context *ctx, SWspan *span, switch (info->filter) { case GL_NEAREST: switch (info->format) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: switch (info->envmode) { case GL_MODULATE: SPAN_NEAREST(NEAREST_RGB;MODULATE,3); @@ -437,7 +437,7 @@ affine_span(struct gl_context *ctx, SWspan *span, return; } break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: switch(info->envmode) { case GL_MODULATE: SPAN_NEAREST(NEAREST_RGBA;MODULATE,4); @@ -466,7 +466,7 @@ affine_span(struct gl_context *ctx, SWspan *span, span->intTex[0] -= FIXED_HALF; span->intTex[1] -= FIXED_HALF; switch (info->format) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: switch (info->envmode) { case GL_MODULATE: SPAN_LINEAR(LINEAR_RGB;MODULATE,3); @@ -486,7 +486,7 @@ affine_span(struct gl_context *ctx, SWspan *span, return; } break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: switch (info->envmode) { case GL_MODULATE: SPAN_LINEAR(LINEAR_RGBA;MODULATE,4); @@ -572,10 +572,10 @@ affine_span(struct gl_context *ctx, SWspan *span, } \ \ switch (info.format) { \ - case MESA_FORMAT_RGB888: \ + case MESA_FORMAT_BGR_UNORM8: \ info.tbytesline = texImg->Width * 3; \ break; \ - case MESA_FORMAT_RGBA8888: \ + case MESA_FORMAT_A8B8G8R8_UNORM: \ info.tbytesline = texImg->Width * 4; \ break; \ default: \ @@ -689,7 +689,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, switch (info->filter) { case GL_NEAREST: switch (info->format) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: switch (info->envmode) { case GL_MODULATE: SPAN_NEAREST(NEAREST_RGB;MODULATE,3); @@ -709,7 +709,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, return; } break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: switch(info->envmode) { case GL_MODULATE: SPAN_NEAREST(NEAREST_RGBA;MODULATE,4); @@ -736,7 +736,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, case GL_LINEAR: switch (info->format) { - case MESA_FORMAT_RGB888: + case MESA_FORMAT_BGR_UNORM8: switch (info->envmode) { case GL_MODULATE: SPAN_LINEAR(LINEAR_RGB;MODULATE,3); @@ -756,7 +756,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, return; } break; - case MESA_FORMAT_RGBA8888: + case MESA_FORMAT_A8B8G8R8_UNORM: switch (info->envmode) { case GL_MODULATE: SPAN_LINEAR(LINEAR_RGBA;MODULATE,4); @@ -838,10 +838,10 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, } \ \ switch (info.format) { \ - case MESA_FORMAT_RGB888: \ + case MESA_FORMAT_BGR_UNORM8: \ info.tbytesline = texImg->Width * 3; \ break; \ - case MESA_FORMAT_RGBA8888: \ + case MESA_FORMAT_A8B8G8R8_UNORM: \ info.tbytesline = texImg->Width * 4; \ break; \ default: \ @@ -887,7 +887,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span, ASSERT(ctx->Depth.Test); \ ASSERT(!ctx->Depth.Mask); \ ASSERT(ctx->Depth.Func == GL_LESS); \ - assert(rb->Format == MESA_FORMAT_Z16); \ + assert(rb->Format == MESA_FORMAT_Z_UNORM16); \ if (!q) { \ return; \ } @@ -1025,7 +1025,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) ctx->Depth.Func == GL_LESS && !ctx->Stencil._Enabled && depthRb && - depthRb->Format == MESA_FORMAT_Z16) { + depthRb->Format == MESA_FORMAT_Z_UNORM16) { if (ctx->Color.ColorMask[0][0] == 0 && ctx->Color.ColorMask[0][1] == 0 && ctx->Color.ColorMask[0][2] == 0 && @@ -1050,7 +1050,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) const struct gl_texture_image *texImg; const struct swrast_texture_image *swImg; GLenum minFilter, magFilter, envMode; - gl_format format; + mesa_format format; texObj2D = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; if (ctx->Texture.Unit[0].Sampler) samp = ctx->Texture.Unit[0].Sampler; @@ -1080,7 +1080,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) && texImg->Border == 0 && (_mesa_format_row_stride(format, texImg->Width) == swImg->RowStride) - && (format == MESA_FORMAT_RGB888 || format == MESA_FORMAT_RGBA8888) + && (format == MESA_FORMAT_BGR_UNORM8 || format == MESA_FORMAT_A8B8G8R8_UNORM) && minFilter == magFilter && ctx->Light.Model.ColorControl == GL_SINGLE_COLOR && !swrast->_FogEnabled @@ -1088,7 +1088,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) && ctx->Texture.Unit[0].EnvMode != GL_COMBINE4_NV) { if (ctx->Hint.PerspectiveCorrection==GL_FASTEST) { if (minFilter == GL_NEAREST - && format == MESA_FORMAT_RGB888 + && format == MESA_FORMAT_BGR_UNORM8 && (envMode == GL_REPLACE || envMode == GL_DECAL) && ((swrast->_RasterMask == (DEPTH_BIT | TEXTURE_BIT) && ctx->Depth.Func == GL_LESS @@ -1107,7 +1107,7 @@ _swrast_choose_triangle( struct gl_context *ctx ) #if CHAN_BITS != 8 USE(general_triangle); #else - if (format == MESA_FORMAT_RGBA8888 && !_mesa_little_endian()) { + if (format == MESA_FORMAT_A8B8G8R8_UNORM && !_mesa_little_endian()) { /* We only handle RGBA8888 correctly on little endian * in the optimized code above. */ diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c index 16aee3be7..b316f097d 100644 --- a/mesalib/src/mesa/vbo/vbo_exec_array.c +++ b/mesalib/src/mesa/vbo/vbo_exec_array.c @@ -287,15 +287,15 @@ static void check_draw_elements_data(struct gl_context *ctx, GLsizei count, GLenum elemType, const void *elements, GLint basevertex) { - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; const void *elemMap; GLint i, k; - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) { + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) { elemMap = ctx->Driver.MapBufferRange(ctx, 0, - ctx->Array.ArrayObj->ElementArrayBufferObj->Size, + ctx->Array.VAO->IndexBufferObj->Size, GL_MAP_READ_BIT, - ctx->Array.ArrayObj->ElementArrayBufferObj); + ctx->Array.VAO->IndexBufferObj); elements = ADD_POINTERS(elements, elemMap); } @@ -318,17 +318,17 @@ check_draw_elements_data(struct gl_context *ctx, GLsizei count, GLenum elemType, } /* check element j of each enabled array */ - for (k = 0; k < Elements(arrayObj->_VertexAttrib); k++) { - check_array_data(ctx, &arrayObj->_VertexAttrib[k], k, j); + for (k = 0; k < Elements(vao->_VertexAttrib); k++) { + check_array_data(ctx, &vao->_VertexAttrib[k], k, j); } } - if (_mesa_is_bufferobj(arrayObj->ElementArrayBufferObj)) { - ctx->Driver.UnmapBuffer(ctx, ctx->Array.ArrayObj->ElementArrayBufferObj); + if (_mesa_is_bufferobj(vao->IndexBufferObj)) { + ctx->Driver.UnmapBuffer(ctx, ctx->Array.VAO->IndexBufferObj); } - for (k = 0; k < Elements(arrayObj->_VertexAttrib); k++) { - unmap_array_buffer(ctx, &arrayObj->_VertexAttrib[k]); + for (k = 0; k < Elements(vao->_VertexAttrib); k++) { + unmap_array_buffer(ctx, &vao->_VertexAttrib[k]); } } @@ -352,7 +352,7 @@ print_draw_arrays(struct gl_context *ctx, { struct vbo_context *vbo = vbo_context(ctx); struct vbo_exec_context *exec = &vbo->exec; - struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + struct gl_vertex_array_object *vao = ctx->Array.VAO; int i; printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n", @@ -368,7 +368,7 @@ print_draw_arrays(struct gl_context *ctx, exec->array.inputs[i]->Size, stride, /*exec->array.inputs[i]->Enabled,*/ - arrayObj->_VertexAttrib[VERT_ATTRIB_FF(i)].Enabled, + vao->_VertexAttrib[VERT_ATTRIB_FF(i)].Enabled, exec->array.inputs[i]->Ptr, bufName); @@ -405,7 +405,7 @@ recalculate_input_bindings(struct gl_context *ctx) { struct vbo_context *vbo = vbo_context(ctx); struct vbo_exec_context *exec = &vbo->exec; - struct gl_client_array *vertexAttrib = ctx->Array.ArrayObj->_VertexAttrib; + struct gl_client_array *vertexAttrib = ctx->Array.VAO->_VertexAttrib; const struct gl_client_array **inputs = &exec->array.inputs[0]; GLbitfield64 const_inputs = 0x0; GLuint i; @@ -883,15 +883,15 @@ dump_element_buffer(struct gl_context *ctx, GLenum type) { const GLvoid *map = ctx->Driver.MapBufferRange(ctx, 0, - ctx->Array.ArrayObj->ElementArrayBufferObj->Size, + ctx->Array.VAO->IndexBufferObj->Size, GL_MAP_READ_BIT, - ctx->Array.ArrayObj->ElementArrayBufferObj); + ctx->Array.VAO->IndexBufferObj); switch (type) { case GL_UNSIGNED_BYTE: { const GLubyte *us = (const GLubyte *) map; GLint i; - for (i = 0; i < ctx->Array.ArrayObj->ElementArrayBufferObj->Size; i++) { + for (i = 0; i < ctx->Array.VAO->IndexBufferObj->Size; i++) { printf("%02x ", us[i]); if (i % 32 == 31) printf("\n"); @@ -903,7 +903,7 @@ dump_element_buffer(struct gl_context *ctx, GLenum type) { const GLushort *us = (const GLushort *) map; GLint i; - for (i = 0; i < ctx->Array.ArrayObj->ElementArrayBufferObj->Size / 2; i++) { + for (i = 0; i < ctx->Array.VAO->IndexBufferObj->Size / 2; i++) { printf("%04x ", us[i]); if (i % 16 == 15) printf("\n"); @@ -915,7 +915,7 @@ dump_element_buffer(struct gl_context *ctx, GLenum type) { const GLuint *us = (const GLuint *) map; GLint i; - for (i = 0; i < ctx->Array.ArrayObj->ElementArrayBufferObj->Size / 4; i++) { + for (i = 0; i < ctx->Array.VAO->IndexBufferObj->Size / 4; i++) { printf("%08x ", us[i]); if (i % 8 == 7) printf("\n"); @@ -927,7 +927,7 @@ dump_element_buffer(struct gl_context *ctx, GLenum type) ; } - ctx->Driver.UnmapBuffer(ctx, ctx->Array.ArrayObj->ElementArrayBufferObj); + ctx->Driver.UnmapBuffer(ctx, ctx->Array.VAO->IndexBufferObj); } #endif @@ -955,7 +955,7 @@ vbo_validated_drawrangeelements(struct gl_context *ctx, GLenum mode, ib.count = count; ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = indices; prim[0].begin = 1; @@ -1041,7 +1041,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode, /* _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; + max_element = ctx->Array.VAO->_MaxElement; } else { /* Generally, hardware drivers don't need to know the buffer bounds @@ -1097,7 +1097,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode, "(start %u, end %u, type 0x%x, count %d) ElemBuf %u, " "base %d\n", start, end, type, count, - ctx->Array.ArrayObj->ElementArrayBufferObj->Name, + ctx->Array.VAO->IndexBufferObj->Name, basevertex); } @@ -1350,13 +1350,13 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, * subranges of the index buffer as one large index buffer may lead to * us reading unmapped memory. */ - if (!_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) + if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) fallback = GL_TRUE; if (!fallback) { ib.count = (max_index_ptr - min_index_ptr) / index_type_size; ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = (void *)min_index_ptr; for (i = 0; i < primcount; i++) { @@ -1387,7 +1387,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, continue; ib.count = count[i]; ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = indices[i]; prim[0].begin = 1; @@ -1657,7 +1657,7 @@ vbo_validated_drawelementsindirect(struct gl_context *ctx, ib.count = 0; /* unknown */ ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = NULL; memset(prim, 0, sizeof(prim)); @@ -1701,11 +1701,11 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx, vbo_bind_arrays(ctx); - /* NOTE: ElementArrayBufferObj is guaranteed to be a VBO. */ + /* NOTE: IndexBufferObj is guaranteed to be a VBO. */ ib.count = 0; /* unknown */ ib.type = type; - ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj; + ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = NULL; prim[0].begin = 1; diff --git a/mesalib/src/mesa/vbo/vbo_save_api.c b/mesalib/src/mesa/vbo/vbo_save_api.c index 43243e606..98ab68623 100644 --- a/mesalib/src/mesa/vbo/vbo_save_api.c +++ b/mesalib/src/mesa/vbo/vbo_save_api.c @@ -1138,9 +1138,9 @@ _save_OBE_DrawElements(GLenum mode, GLsizei count, GLenum type, _ae_map_vbos(ctx); - if (_mesa_is_bufferobj(ctx->Array.ArrayObj->ElementArrayBufferObj)) + if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) indices = - ADD_POINTERS(ctx->Array.ArrayObj->ElementArrayBufferObj->Pointer, indices); + ADD_POINTERS(ctx->Array.VAO->IndexBufferObj->Pointer, indices); vbo_save_NotifyBegin(ctx, (mode | VBO_SAVE_PRIM_WEAK | VBO_SAVE_PRIM_NO_CURRENT_UPDATE)); diff --git a/openssl/CHANGES b/openssl/CHANGES index ca82ad295..9302f586a 100644 --- a/openssl/CHANGES +++ b/openssl/CHANGES @@ -2,9 +2,31 @@ OpenSSL CHANGES _______________ + Changes between 1.0.1e and 1.0.1f [6 Jan 2014] + + *) Fix for TLS record tampering bug. A carefully crafted invalid + handshake could crash OpenSSL with a NULL pointer exception. + Thanks to Anton Johansson for reporting this issues. + (CVE-2013-4353) + + *) Keep original DTLS digest and encryption contexts in retransmission + structures so we can use the previous session parameters if they need + to be resent. (CVE-2013-6450) + [Steve Henson] + + *) Add option SSL_OP_SAFARI_ECDHE_ECDSA_BUG (part of SSL_OP_ALL) which + avoids preferring ECDHE-ECDSA ciphers when the client appears to be + Safari on OS X. Safari on OS X 10.8..10.8.3 advertises support for + several ECDHE-ECDSA ciphers, but fails to negotiate them. The bug + is fixed in OS X 10.8.4, but Apple have ruled out both hot fixing + 10.8..10.8.3 and forcing users to upgrade to 10.8.4 or newer. + [Rob Stradling, Adam Langley] + Changes between 1.0.1d and 1.0.1e [11 Feb 2013] - *) + *) Correct fix for CVE-2013-0169. The original didn't work on AES-NI + supporting platforms or when small records were transferred. + [Andy Polyakov, Steve Henson] Changes between 1.0.1c and 1.0.1d [5 Feb 2013] @@ -404,6 +426,63 @@ Add command line options to s_client/s_server. [Steve Henson] + Changes between 1.0.0j and 1.0.0k [5 Feb 2013] + + *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time. + + This addresses the flaw in CBC record processing discovered by + Nadhem Alfardan and Kenny Paterson. Details of this attack can be found + at: http://www.isg.rhul.ac.uk/tls/ + + Thanks go to Nadhem Alfardan and Kenny Paterson of the Information + Security Group at Royal Holloway, University of London + (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and + Emilia Ksper for the initial patch. + (CVE-2013-0169) + [Emilia Ksper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson] + + *) Return an error when checking OCSP signatures when key is NULL. + This fixes a DoS attack. (CVE-2013-0166) + [Steve Henson] + + *) Call OCSP Stapling callback after ciphersuite has been chosen, so + the right response is stapled. Also change SSL_get_certificate() + so it returns the certificate actually sent. + See http://rt.openssl.org/Ticket/Display.html?id=2836. + (This is a backport) + [Rob Stradling ] + + *) Fix possible deadlock when decoding public keys. + [Steve Henson] + + Changes between 1.0.0i and 1.0.0j [10 May 2012] + + [NB: OpenSSL 1.0.0i and later 1.0.0 patch levels were released after + OpenSSL 1.0.1.] + + *) Sanity check record length before skipping explicit IV in DTLS + to fix DoS attack. + + Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic + fuzzing as a service testing platform. + (CVE-2012-2333) + [Steve Henson] + + *) Initialise tkeylen properly when encrypting CMS messages. + Thanks to Solar Designer of Openwall for reporting this issue. + [Steve Henson] + + Changes between 1.0.0h and 1.0.0i [19 Apr 2012] + + *) Check for potentially exploitable overflows in asn1_d2i_read_bio + BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer + in CRYPTO_realloc_clean. + + Thanks to Tavis Ormandy, Google Security Team, for discovering this + issue and to Adam Langley for fixing it. + (CVE-2012-2110) + [Adam Langley (Google), Tavis Ormandy, Google Security Team] + Changes between 1.0.0g and 1.0.0h [12 Mar 2012] *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness @@ -1394,6 +1473,86 @@ *) Change 'Configure' script to enable Camellia by default. [NTT] + Changes between 0.9.8x and 0.9.8y [5 Feb 2013] + + *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time. + + This addresses the flaw in CBC record processing discovered by + Nadhem Alfardan and Kenny Paterson. Details of this attack can be found + at: http://www.isg.rhul.ac.uk/tls/ + + Thanks go to Nadhem Alfardan and Kenny Paterson of the Information + Security Group at Royal Holloway, University of London + (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and + Emilia Ksper for the initial patch. + (CVE-2013-0169) + [Emilia Ksper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson] + + *) Return an error when checking OCSP signatures when key is NULL. + This fixes a DoS attack. (CVE-2013-0166) + [Steve Henson] + + *) Call OCSP Stapling callback after ciphersuite has been chosen, so + the right response is stapled. Also change SSL_get_certificate() + so it returns the certificate actually sent. + See http://rt.openssl.org/Ticket/Display.html?id=2836. + (This is a backport) + [Rob Stradling ] + + *) Fix possible deadlock when decoding public keys. + [Steve Henson] + + Changes between 0.9.8w and 0.9.8x [10 May 2012] + + *) Sanity check record length before skipping explicit IV in DTLS + to fix DoS attack. + + Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic + fuzzing as a service testing platform. + (CVE-2012-2333) + [Steve Henson] + + *) Initialise tkeylen properly when encrypting CMS messages. + Thanks to Solar Designer of Openwall for reporting this issue. + [Steve Henson] + + Changes between 0.9.8v and 0.9.8w [23 Apr 2012] + + *) The fix for CVE-2012-2110 did not take into account that the + 'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an + int in OpenSSL 0.9.8, making it still vulnerable. Fix by + rejecting negative len parameter. (CVE-2012-2131) + [Tomas Hoger ] + + Changes between 0.9.8u and 0.9.8v [19 Apr 2012] + + *) Check for potentially exploitable overflows in asn1_d2i_read_bio + BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer + in CRYPTO_realloc_clean. + + Thanks to Tavis Ormandy, Google Security Team, for discovering this + issue and to Adam Langley for fixing it. + (CVE-2012-2110) + [Adam Langley (Google), Tavis Ormandy, Google Security Team] + + Changes between 0.9.8t and 0.9.8u [12 Mar 2012] + + *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness + in CMS and PKCS7 code. When RSA decryption fails use a random key for + content decryption and always return the same error. Note: this attack + needs on average 2^20 messages so it only affects automated senders. The + old behaviour can be reenabled in the CMS code by setting the + CMS_DEBUG_DECRYPT flag: this is useful for debugging and testing where + an MMA defence is not necessary. + Thanks to Ivan Nestlerode for discovering + this issue. (CVE-2012-0884) + [Steve Henson] + + *) Fix CVE-2011-4619: make sure we really are receiving a + client hello before rejecting multiple SGC restarts. Thanks to + Ivan Nestlerode for discovering this bug. + [Steve Henson] + Changes between 0.9.8s and 0.9.8t [18 Jan 2012] *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109. @@ -1401,7 +1560,7 @@ Development, Cisco Systems, Inc. for discovering this bug and preparing a fix. (CVE-2012-0050) [Antonio Martin] - + Changes between 0.9.8r and 0.9.8s [4 Jan 2012] *) Nadhem Alfardan and Kenny Paterson have discovered an extension diff --git a/openssl/Configure b/openssl/Configure index 9c803dc06..daff8e679 100644 --- a/openssl/Configure +++ b/openssl/Configure @@ -178,7 +178,7 @@ my %table=( "debug-ben-no-opt", "gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::", "debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::", "debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}", -"debug-bodo", "gcc:$gcc_devteam_warn -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64", +"debug-bodo", "gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64", "debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll", "debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", "debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", diff --git a/openssl/Makefile b/openssl/Makefile index 54e354161..0709da035 100644 --- a/openssl/Makefile +++ b/openssl/Makefile @@ -4,7 +4,7 @@ ## Makefile for OpenSSL ## -VERSION=1.0.1e +VERSION=1.0.1f MAJOR=1 MINOR=0.1 SHLIB_VERSION_NUMBER=1.0.0 @@ -304,7 +304,8 @@ libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT) FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ fi; \ - $(MAKE) -e SHLIBDIRS=crypto build-shared; \ + $(MAKE) -e SHLIBDIRS=crypto CC=$${CC:-$(CC)} build-shared; \ + touch -c fips_premain_dso$(EXE_EXT); \ else \ echo "There's no support for shared libraries on this platform" >&2; \ exit 1; \ diff --git a/openssl/Makefile.org b/openssl/Makefile.org index 2db31ead6..a9e27273d 100644 --- a/openssl/Makefile.org +++ b/openssl/Makefile.org @@ -302,7 +302,8 @@ libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT) FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \ export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \ fi; \ - $(MAKE) -e SHLIBDIRS=crypto build-shared; \ + $(MAKE) -e SHLIBDIRS=crypto CC=$${CC:-$(CC)} build-shared; \ + touch -c fips_premain_dso$(EXE_EXT); \ else \ echo "There's no support for shared libraries on this platform" >&2; \ exit 1; \ diff --git a/openssl/NEWS b/openssl/NEWS index 0269f2277..909fea96c 100644 --- a/openssl/NEWS +++ b/openssl/NEWS @@ -5,11 +5,17 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. - Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e: + Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014] + + o Fix for TLS record tampering bug CVE-2013-4353 + o Fix for TLS version checking bug CVE-2013-6449 + o Fix for DTLS retransmission bug CVE-2013-6450 + + Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]: o Corrected fix for CVE-2013-0169 - Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d: + Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]: o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version. o Include the fips configuration module. @@ -17,24 +23,24 @@ o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169 o Fix for TLS AESNI record handling flaw CVE-2012-2686 - Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c: + Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]: o Fix TLS/DTLS record length checking bug CVE-2012-2333 o Don't attempt to use non-FIPS composite ciphers in FIPS mode. - Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b: + Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]: o Fix compilation error on non-x86 platforms. o Make FIPS capable OpenSSL ciphers work in non-FIPS mode. o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0 - Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a: + Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]: o Fix for ASN1 overflow bug CVE-2012-2110 o Workarounds for some servers that hang on long client hellos. o Fix SEGV in AES code. - Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1: + Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]: o TLS/DTLS heartbeat support. o SCTP support. @@ -47,17 +53,30 @@ o Preliminary FIPS capability for unvalidated 2.0 FIPS module. o SRP support. - Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h: + Major changes between OpenSSL 1.0.0j and OpenSSL 1.0.0k [5 Feb 2013]: + + o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169 + o Fix OCSP bad key DoS attack CVE-2013-0166 + + Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]: + + o Fix DTLS record length checking bug CVE-2012-2333 + + Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]: + + o Fix for ASN1 overflow bug CVE-2012-2110 + + Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]: o Fix for CMS/PKCS#7 MMA CVE-2012-0884 o Corrected fix for CVE-2011-4619 o Various DTLS fixes. - Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g: + Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]: o Fix for DTLS DoS issue CVE-2012-0050 - Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f: + Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]: o Fix for DTLS plaintext recovery attack CVE-2011-4108 o Clear block padding bytes of SSL 3.0 records CVE-2011-4576 @@ -65,7 +84,7 @@ o Check parameters are not NULL in GOST ENGINE CVE-2012-0027 o Check for malformed RFC3779 data CVE-2011-4577 - Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e: + Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]: o Fix for CRL vulnerability issue CVE-2011-3207 o Fix for ECDH crashes CVE-2011-3210 @@ -73,11 +92,11 @@ o Support ECDH ciphersuites for certificates using SHA2 algorithms. o Various DTLS fixes. - Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d: + Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]: o Fix for security issue CVE-2011-0014 - Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c: + Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]: o Fix for security issue CVE-2010-4180 o Fix for CVE-2010-4252 @@ -85,18 +104,18 @@ o Fix various platform compilation issues. o Corrected fix for security issue CVE-2010-3864. - Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b: + Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]: o Fix for security issue CVE-2010-3864. o Fix for CVE-2010-2939 o Fix WIN32 build system for GOST ENGINE. - Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a: + Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]: o Fix for security issue CVE-2010-1633. o GOST MAC and CFB fixes. - Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0: + Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]: o RFC3280 path validation: sufficient to process PKITS tests. o Integrated support for PVK files and keyblobs. @@ -119,20 +138,55 @@ o Opaque PRF Input TLS extension support. o Updated time routines to avoid OS limitations. - Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r: + Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]: + + o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169 + o Fix OCSP bad key DoS attack CVE-2013-0166 + + Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]: + + o Fix DTLS record length checking bug CVE-2012-2333 + + Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]: + + o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110) + + Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]: + + o Fix for ASN1 overflow bug CVE-2012-2110 + + Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]: + + o Fix for CMS/PKCS#7 MMA CVE-2012-0884 + o Corrected fix for CVE-2011-4619 + o Various DTLS fixes. + + Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]: + + o Fix for DTLS DoS issue CVE-2012-0050 + + Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]: + + o Fix for DTLS plaintext recovery attack CVE-2011-4108 + o Fix policy check double free error CVE-2011-4109 + o Clear block padding bytes of SSL 3.0 records CVE-2011-4576 + o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619 + o Check for malformed RFC3779 data CVE-2011-4577 + + Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]: o Fix for security issue CVE-2011-0014 - Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q: + Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]: o Fix for security issue CVE-2010-4180 o Fix for CVE-2010-4252 - Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p: + Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]: o Fix for security issue CVE-2010-3864. - Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o: + Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]: o Fix for security issue CVE-2010-0742. o Various DTLS fixes. @@ -140,12 +194,12 @@ o Fix for no-rc4 compilation. o Chil ENGINE unload workaround. - Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n: + Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]: o CFB cipher definition fixes. o Fix security issues CVE-2010-0740 and CVE-2010-0433. - Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m: + Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]: o Cipher definition fixes. o Workaround for slow RAND_poll() on some WIN32 versions. @@ -157,33 +211,33 @@ o Ticket and SNI coexistence fixes. o Many fixes to DTLS handling. - Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l: + Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]: o Temporary work around for CVE-2009-3555: disable renegotiation. - Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k: + Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]: o Fix various build issues. o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789) - Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j: + Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]: o Fix security issue (CVE-2008-5077) o Merge FIPS 140-2 branch code. - Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h: + Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]: o CryptoAPI ENGINE support. o Various precautionary measures. o Fix for bugs affecting certificate request creation. o Support for local machine keyset attribute in PKCS#12 files. - Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g: + Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]: o Backport of CMS functionality to 0.9.8. o Fixes for bugs introduced with 0.9.8f. - Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f: + Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]: o Add gcc 4.2 support. o Add support for AES and SSE2 assembly lanugauge optimization @@ -194,23 +248,23 @@ o RFC4507bis support. o TLS Extensions support. - Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e: + Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]: o Various ciphersuite selection fixes. o RFC3779 support. - Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d: + Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]: o Introduce limits to prevent malicious key DoS (CVE-2006-2940) o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343) o Changes to ciphersuite selection algorithm - Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c: + Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]: o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 o New cipher Camellia - Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b: + Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]: o Cipher string fixes. o Fixes for VC++ 2005. @@ -220,12 +274,12 @@ o Built in dynamic engine compilation support on Win32. o Fixes auto dynamic engine loading in Win32. - Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a: + Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]: o Fix potential SSL 2.0 rollback, CVE-2005-2969 o Extended Windows CE support - Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8: + Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]: o Major work on the BIGNUM library for higher efficiency and to make operations more streamlined and less contradictory. This @@ -299,36 +353,36 @@ o Added initial support for Win64. o Added alternate pkg-config files. - Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m: + Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]: o FIPS 1.1.1 module linking. o Various ciphersuite selection fixes. - Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l: + Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]: o Introduce limits to prevent malicious key DoS (CVE-2006-2940) o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343) - Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k: + Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]: o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339 - Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j: + Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]: o Visual C++ 2005 fixes. o Update Windows build system for FIPS. - Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i: + Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]: o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build. - Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h: + Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]: o Fix SSL 2.0 Rollback, CVE-2005-2969 o Allow use of fixed-length exponent on DSA signing o Default fixed-window RSA, DSA, DH private-key operations - Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g: + Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]: o More compilation issues fixed. o Adaptation to more modern Kerberos API. @@ -337,7 +391,7 @@ o More constification. o Added processing of proxy certificates (RFC 3820). - Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f: + Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]: o Several compilation issues fixed. o Many memory allocation failure checks added. @@ -345,12 +399,12 @@ o Mandatory basic checks on certificates. o Performance improvements. - Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e: + Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]: o Fix race condition in CRL checking code. o Fixes to PKCS#7 (S/MIME) code. - Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d: + Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]: o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug o Security: Fix null-pointer assignment in do_change_cipher_spec() @@ -358,14 +412,14 @@ o Multiple X509 verification fixes o Speed up HMAC and other operations - Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c: + Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]: o Security: fix various ASN1 parsing bugs. o New -ignore_err option to OCSP utility. o Various interop and bug fixes in S/MIME code. o SSL/TLS protocol fix for unrequested client certificates. - Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b: + Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]: o Security: counter the Klima-Pokorny-Rosa extension of Bleichbacher's attack @@ -376,7 +430,7 @@ o ASN.1: treat domainComponent correctly. o Documentation: fixes and additions. - Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a: + Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]: o Security: Important security related bugfixes. o Enhanced compatibility with MIT Kerberos. @@ -387,7 +441,7 @@ o SSL/TLS: now handles manual certificate chain building. o SSL/TLS: certain session ID malfunctions corrected. - Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7: + Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]: o New library section OCSP. o Complete rewrite of ASN1 code. @@ -433,23 +487,23 @@ o SSL/TLS: add callback to retrieve SSL/TLS messages. o SSL/TLS: support AES cipher suites (RFC3268). - Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k: + Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]: o Security: fix various ASN1 parsing bugs. o SSL/TLS protocol fix for unrequested client certificates. - Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j: + Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]: o Security: counter the Klima-Pokorny-Rosa extension of Bleichbacher's attack o Security: make RSA blinding default. o Build: shared library support fixes. - Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i: + Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]: o Important security related bugfixes. - Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h: + Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]: o New configuration targets for Tandem OSS and A/UX. o New OIDs for Microsoft attributes. @@ -463,25 +517,25 @@ o Fixes for smaller building problems. o Updates of manuals, FAQ and other instructive documents. - Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g: + Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]: o Important building fixes on Unix. - Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f: + Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]: o Various important bugfixes. - Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e: + Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]: o Important security related bugfixes. o Various SSL/TLS library bugfixes. - Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d: + Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]: o Various SSL/TLS library bugfixes. o Fix DH parameter generation for 'non-standard' generators. - Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c: + Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]: o Various SSL/TLS library bugfixes. o BIGNUM library fixes. @@ -494,7 +548,7 @@ Broadcom and Cryptographic Appliance's keyserver [in 0.9.6c-engine release]. - Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b: + Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]: o Security fix: PRNG improvements. o Security fix: RSA OAEP check. @@ -511,7 +565,7 @@ o Increase default size for BIO buffering filter. o Compatibility fixes in some scripts. - Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a: + Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]: o Security fix: change behavior of OpenSSL to avoid using environment variables when running as root. @@ -536,7 +590,7 @@ o New function BN_rand_range(). o Add "-rand" option to openssl s_client and s_server. - Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6: + Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]: o Some documentation for BIO and SSL libraries. o Enhanced chain verification using key identifiers. @@ -551,7 +605,7 @@ [1] The support for external crypto devices is currently a separate distribution. See the file README.ENGINE. - Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a: + Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]: o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 o Shared library support for HPUX and Solaris-gcc @@ -560,7 +614,7 @@ o New 'rand' application o New way to check for existence of algorithms from scripts - Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5: + Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]: o S/MIME support in new 'smime' command o Documentation for the OpenSSL command line application @@ -596,7 +650,7 @@ o Enhanced support for Alpha Linux o Experimental MacOS support - Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4: + Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]: o Transparent support for PKCS#8 format private keys: these are used by several software packages and are more secure than the standard @@ -607,7 +661,7 @@ o New pipe-like BIO that allows using the SSL library when actual I/O must be handled by the application (BIO pair) - Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3: + Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]: o Lots of enhancements and cleanups to the Configuration mechanism o RSA OEAP related fixes o Added `openssl ca -revoke' option for revoking a certificate @@ -621,7 +675,7 @@ o Sparc assembler bignum implementation, optimized hash functions o Option to disable selected ciphers - Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b: + Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]: o Fixed a security hole related to session resumption o Fixed RSA encryption routines for the p < q case o "ALL" in cipher lists now means "everything except NULL ciphers" @@ -643,7 +697,7 @@ o Lots of memory leak fixes. o Lots of bug fixes. - Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c: + Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]: o Integration of the popular NO_RSA/NO_DSA patches o Initial support for compression inside the SSL record layer o Added BIO proxy and filtering functionality diff --git a/openssl/README b/openssl/README index ad2d90f0d..05b670c5d 100644 --- a/openssl/README +++ b/openssl/README @@ -1,5 +1,5 @@ - OpenSSL 1.0.1e 11 Feb 2013 + OpenSSL 1.0.1f 6 Jan 2014 Copyright (c) 1998-2011 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson diff --git a/openssl/apps/Makefile b/openssl/apps/Makefile index 95f499e33..72657ea65 100644 --- a/openssl/apps/Makefile +++ b/openssl/apps/Makefile @@ -577,14 +577,15 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h -openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h -openssl.o: ../include/openssl/sha.h ../include/openssl/srtp.h -openssl.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h -openssl.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h -openssl.o: ../include/openssl/stack.h ../include/openssl/symhacks.h -openssl.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h -openssl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h -openssl.o: ../include/openssl/x509v3.h apps.h openssl.c progs.h s_apps.h +openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h +openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h +openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h +openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h +openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h +openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h +openssl.o: ../include/openssl/txt_db.h ../include/openssl/x509.h +openssl.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h +openssl.o: openssl.c progs.h s_apps.h passwd.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h passwd.o: ../include/openssl/buffer.h ../include/openssl/conf.h passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h diff --git a/openssl/apps/apps.h b/openssl/apps/apps.h index c1ca99da1..3aeb46c4e 100644 --- a/openssl/apps/apps.h +++ b/openssl/apps/apps.h @@ -188,6 +188,7 @@ extern BIO *bio_err; do { CONF_modules_unload(1); destroy_ui_method(); \ OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \ CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ + RAND_cleanup(); \ ERR_free_strings(); zlib_cleanup();} while(0) # else # define apps_startup() \ @@ -198,6 +199,7 @@ extern BIO *bio_err; do { CONF_modules_unload(1); destroy_ui_method(); \ OBJ_cleanup(); EVP_cleanup(); \ CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \ + RAND_cleanup(); \ ERR_free_strings(); zlib_cleanup(); } while(0) # endif #endif diff --git a/openssl/apps/openssl.c b/openssl/apps/openssl.c index 1c880d90b..71e1e48ec 100644 --- a/openssl/apps/openssl.c +++ b/openssl/apps/openssl.c @@ -117,6 +117,7 @@ #include "apps.h" #include #include +#include #include #include #include diff --git a/openssl/apps/pkcs12.c b/openssl/apps/pkcs12.c index b54c6f84a..4d62a7b8c 100644 --- a/openssl/apps/pkcs12.c +++ b/openssl/apps/pkcs12.c @@ -112,7 +112,7 @@ int MAIN(int argc, char **argv) int maciter = PKCS12_DEFAULT_ITER; int twopass = 0; int keytype = 0; - int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; + int cert_pbe; int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; int ret = 1; int macver = 1; @@ -130,6 +130,13 @@ int MAIN(int argc, char **argv) apps_startup(); +#ifdef OPENSSL_FIPS + if (FIPS_mode()) + cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; + else +#endif + cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; + enc = EVP_des_ede3_cbc(); if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE); diff --git a/openssl/config b/openssl/config index 88b9bc69d..41fa2a6b8 100644 --- a/openssl/config +++ b/openssl/config @@ -739,7 +739,7 @@ case "$GUESSOS" in libc=/usr/lib/libc.so else # OpenBSD # ld searches for highest libc.so.* and so do we - libc=`(ls /usr/lib/libc.so.* | tail -1) 2>/dev/null` + libc=`(ls /usr/lib/libc.so.* /lib/libc.so.* | tail -1) 2>/dev/null` fi case "`(file -L $libc) 2>/dev/null`" in *ELF*) OUT="BSD-x86-elf" ;; diff --git a/openssl/crypto/Makefile b/openssl/crypto/Makefile index 947dd5d44..a90809b2b 100644 --- a/openssl/crypto/Makefile +++ b/openssl/crypto/Makefile @@ -77,7 +77,9 @@ ia64cpuid.s: ia64cpuid.S; $(CC) $(CFLAGS) -E ia64cpuid.S > $@ ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@ pariscid.s: pariscid.pl; $(PERL) pariscid.pl $(PERLASM_SCHEME) $@ alphacpuid.s: alphacpuid.pl - $(PERL) $< | $(CC) -E - | tee $@ > /dev/null + (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ + $(PERL) alphacpuid.pl > $$preproc && \ + $(CC) -E $$preproc > $@ && rm $$preproc) testapps: [ -z "$(THIS)" ] || ( if echo $(SDIRS) | fgrep ' des '; \ diff --git a/openssl/crypto/aes/asm/aes-parisc.pl b/openssl/crypto/aes/asm/aes-parisc.pl index c36b6a227..714dcfbbe 100644 --- a/openssl/crypto/aes/asm/aes-parisc.pl +++ b/openssl/crypto/aes/asm/aes-parisc.pl @@ -1015,7 +1015,8 @@ foreach (split("\n",$code)) { $SIZE_T==4 ? sprintf("extru%s,%d,8,",$1,31-$2) : sprintf("extrd,u%s,%d,8,",$1,63-$2)/e; - s/,\*/,/ if ($SIZE_T==4); + s/,\*/,/ if ($SIZE_T==4); + s/\bbv\b(.*\(%r2\))/bve$1/ if ($SIZE_T==8); print $_,"\n"; } close STDOUT; diff --git a/openssl/crypto/aes/asm/bsaes-x86_64.pl b/openssl/crypto/aes/asm/bsaes-x86_64.pl index ceb02b50d..41b90f084 100644 --- a/openssl/crypto/aes/asm/bsaes-x86_64.pl +++ b/openssl/crypto/aes/asm/bsaes-x86_64.pl @@ -83,9 +83,9 @@ # Add decryption procedure. Performance in CPU cycles spent to decrypt # one byte out of 4096-byte buffer with 128-bit key is: # -# Core 2 11.0 -# Nehalem 9.16 -# Atom 20.9 +# Core 2 9.83 +# Nehalem 7.74 +# Atom 19.0 # # November 2011. # @@ -456,6 +456,7 @@ sub MixColumns { # modified to emit output in order suitable for feeding back to aesenc[last] my @x=@_[0..7]; my @t=@_[8..15]; +my $inv=@_[16]; # optional $code.=<<___; pshufd \$0x93, @x[0], @t[0] # x0 <<< 32 pshufd \$0x93, @x[1], @t[1] @@ -497,7 +498,8 @@ $code.=<<___; pxor @t[4], @t[0] pshufd \$0x4E, @x[2], @x[6] pxor @t[5], @t[1] - +___ +$code.=<<___ if (!$inv); pxor @t[3], @x[4] pxor @t[7], @x[5] pxor @t[6], @x[3] @@ -505,9 +507,20 @@ $code.=<<___; pxor @t[2], @x[6] movdqa @t[1], @x[7] ___ +$code.=<<___ if ($inv); + pxor @x[4], @t[3] + pxor @t[7], @x[5] + pxor @x[3], @t[6] + movdqa @t[0], @x[3] + pxor @t[2], @x[6] + movdqa @t[6], @x[2] + movdqa @t[1], @x[7] + movdqa @x[6], @x[4] + movdqa @t[3], @x[6] +___ } -sub InvMixColumns { +sub InvMixColumns_orig { my @x=@_[0..7]; my @t=@_[8..15]; @@ -661,6 +674,54 @@ $code.=<<___; ___ } +sub InvMixColumns { +my @x=@_[0..7]; +my @t=@_[8..15]; + +# Thanks to Jussi Kivilinna for providing pointer to +# +# | 0e 0b 0d 09 | | 02 03 01 01 | | 05 00 04 00 | +# | 09 0e 0b 0d | = | 01 02 03 01 | x | 00 05 00 04 | +# | 0d 09 0e 0b | | 01 01 02 03 | | 04 00 05 00 | +# | 0b 0d 09 0e | | 03 01 01 02 | | 00 04 00 05 | + +$code.=<<___; + # multiplication by 0x05-0x00-0x04-0x00 + pshufd \$0x4E, @x[0], @t[0] + pshufd \$0x4E, @x[6], @t[6] + pxor @x[0], @t[0] + pshufd \$0x4E, @x[7], @t[7] + pxor @x[6], @t[6] + pshufd \$0x4E, @x[1], @t[1] + pxor @x[7], @t[7] + pshufd \$0x4E, @x[2], @t[2] + pxor @x[1], @t[1] + pshufd \$0x4E, @x[3], @t[3] + pxor @x[2], @t[2] + pxor @t[6], @x[0] + pxor @t[6], @x[1] + pshufd \$0x4E, @x[4], @t[4] + pxor @x[3], @t[3] + pxor @t[0], @x[2] + pxor @t[1], @x[3] + pshufd \$0x4E, @x[5], @t[5] + pxor @x[4], @t[4] + pxor @t[7], @x[1] + pxor @t[2], @x[4] + pxor @x[5], @t[5] + + pxor @t[7], @x[2] + pxor @t[6], @x[3] + pxor @t[6], @x[4] + pxor @t[3], @x[5] + pxor @t[4], @x[6] + pxor @t[7], @x[4] + pxor @t[7], @x[5] + pxor @t[5], @x[7] +___ + &MixColumns (@x,@t,1); # flipped 2<->3 and 4<->6 +} + sub aesenc { # not used my @b=@_[0..7]; my @t=@_[8..15]; @@ -2028,6 +2089,8 @@ ___ # const unsigned char iv[16]); # my ($twmask,$twres,$twtmp)=@XMM[13..15]; +$arg6=~s/d$//; + $code.=<<___; .globl bsaes_xts_encrypt .type bsaes_xts_encrypt,\@abi-omnipotent diff --git a/openssl/crypto/armcap.c b/openssl/crypto/armcap.c index 5258d2fbd..9abaf396e 100644 --- a/openssl/crypto/armcap.c +++ b/openssl/crypto/armcap.c @@ -23,7 +23,7 @@ unsigned int _armv7_tick(void); unsigned int OPENSSL_rdtsc(void) { - if (OPENSSL_armcap_P|ARMV7_TICK) + if (OPENSSL_armcap_P & ARMV7_TICK) return _armv7_tick(); else return 0; diff --git a/openssl/crypto/asn1/a_int.c b/openssl/crypto/asn1/a_int.c index ad0d2506f..297c45a9f 100644 --- a/openssl/crypto/asn1/a_int.c +++ b/openssl/crypto/asn1/a_int.c @@ -116,7 +116,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp) int pad=0,ret,i,neg; unsigned char *p,*n,pb=0; - if ((a == NULL) || (a->data == NULL)) return(0); + if (a == NULL) return(0); neg=a->type & V_ASN1_NEG; if (a->length == 0) ret=1; diff --git a/openssl/crypto/bio/bss_dgram.c b/openssl/crypto/bio/bss_dgram.c index 899090997..54c012c47 100644 --- a/openssl/crypto/bio/bss_dgram.c +++ b/openssl/crypto/bio/bss_dgram.c @@ -906,8 +906,8 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) memset(authchunks, 0, sizeof(sockopt_len)); ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); OPENSSL_assert(ret >= 0); - - for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); + + for (p = (unsigned char*) authchunks->gauth_chunks; p < (unsigned char*) authchunks + sockopt_len; p += sizeof(uint8_t)) { @@ -1197,7 +1197,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl) ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen); OPENSSL_assert(ii >= 0); - for (p = (unsigned char*) authchunks + sizeof(sctp_assoc_t); + for (p = (unsigned char*) authchunks->gauth_chunks; p < (unsigned char*) authchunks + optlen; p += sizeof(uint8_t)) { diff --git a/openssl/crypto/bn/Makefile b/openssl/crypto/bn/Makefile index 672773454..6dd136be5 100644 --- a/openssl/crypto/bn/Makefile +++ b/openssl/crypto/bn/Makefile @@ -125,7 +125,9 @@ ppc-mont.s: asm/ppc-mont.pl;$(PERL) asm/ppc-mont.pl $(PERLASM_SCHEME) $@ ppc64-mont.s: asm/ppc64-mont.pl;$(PERL) asm/ppc64-mont.pl $(PERLASM_SCHEME) $@ alpha-mont.s: asm/alpha-mont.pl - $(PERL) $< | $(CC) -E - | tee $@ > /dev/null + (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ + $(PERL) asm/alpha-mont.pl > $$preproc && \ + $(CC) -E $$preproc > $@ && rm $$preproc) # GNU make "catch all" %-mont.s: asm/%-mont.pl; $(PERL) $< $(PERLASM_SCHEME) $@ diff --git a/openssl/crypto/bn/asm/mips-mont.pl b/openssl/crypto/bn/asm/mips-mont.pl index b944a12b8..caae04ed3 100644 --- a/openssl/crypto/bn/asm/mips-mont.pl +++ b/openssl/crypto/bn/asm/mips-mont.pl @@ -133,7 +133,7 @@ $code.=<<___; bnez $at,1f li $t0,0 slt $at,$num,17 # on in-order CPU - bnezl $at,bn_mul_mont_internal + bnez $at,bn_mul_mont_internal nop 1: jr $ra li $a0,0 diff --git a/openssl/crypto/bn/asm/mips.pl b/openssl/crypto/bn/asm/mips.pl index 38b51645f..d2f3ef7bb 100644 --- a/openssl/crypto/bn/asm/mips.pl +++ b/openssl/crypto/bn/asm/mips.pl @@ -140,10 +140,10 @@ $code.=<<___; .set reorder li $minus4,-4 and $ta0,$a2,$minus4 - $LD $t0,0($a1) beqz $ta0,.L_bn_mul_add_words_tail .L_bn_mul_add_words_loop: + $LD $t0,0($a1) $MULTU $t0,$a3 $LD $t1,0($a0) $LD $t2,$BNSZ($a1) @@ -200,10 +200,9 @@ $code.=<<___; $ADDU $v0,$ta2 sltu $at,$ta3,$at $ST $ta3,-$BNSZ($a0) - $ADDU $v0,$at .set noreorder - bgtzl $ta0,.L_bn_mul_add_words_loop - $LD $t0,0($a1) + bgtz $ta0,.L_bn_mul_add_words_loop + $ADDU $v0,$at beqz $a2,.L_bn_mul_add_words_return nop @@ -300,10 +299,10 @@ $code.=<<___; .set reorder li $minus4,-4 and $ta0,$a2,$minus4 - $LD $t0,0($a1) beqz $ta0,.L_bn_mul_words_tail .L_bn_mul_words_loop: + $LD $t0,0($a1) $MULTU $t0,$a3 $LD $t2,$BNSZ($a1) $LD $ta0,2*$BNSZ($a1) @@ -341,10 +340,9 @@ $code.=<<___; $ADDU $v0,$at sltu $ta3,$v0,$at $ST $v0,-$BNSZ($a0) - $ADDU $v0,$ta3,$ta2 .set noreorder - bgtzl $ta0,.L_bn_mul_words_loop - $LD $t0,0($a1) + bgtz $ta0,.L_bn_mul_words_loop + $ADDU $v0,$ta3,$ta2 beqz $a2,.L_bn_mul_words_return nop @@ -429,10 +427,10 @@ $code.=<<___; .set reorder li $minus4,-4 and $ta0,$a2,$minus4 - $LD $t0,0($a1) beqz $ta0,.L_bn_sqr_words_tail .L_bn_sqr_words_loop: + $LD $t0,0($a1) $MULTU $t0,$t0 $LD $t2,$BNSZ($a1) $LD $ta0,2*$BNSZ($a1) @@ -463,11 +461,10 @@ $code.=<<___; mflo $ta3 mfhi $ta2 $ST $ta3,-2*$BNSZ($a0) - $ST $ta2,-$BNSZ($a0) .set noreorder - bgtzl $ta0,.L_bn_sqr_words_loop - $LD $t0,0($a1) + bgtz $ta0,.L_bn_sqr_words_loop + $ST $ta2,-$BNSZ($a0) beqz $a2,.L_bn_sqr_words_return nop @@ -547,10 +544,10 @@ $code.=<<___; .set reorder li $minus4,-4 and $at,$a3,$minus4 - $LD $t0,0($a1) beqz $at,.L_bn_add_words_tail .L_bn_add_words_loop: + $LD $t0,0($a1) $LD $ta0,0($a2) subu $a3,4 $LD $t1,$BNSZ($a1) @@ -589,11 +586,10 @@ $code.=<<___; $ADDU $t3,$ta3,$v0 sltu $v0,$t3,$ta3 $ST $t3,-$BNSZ($a0) - $ADDU $v0,$t9 .set noreorder - bgtzl $at,.L_bn_add_words_loop - $LD $t0,0($a1) + bgtz $at,.L_bn_add_words_loop + $ADDU $v0,$t9 beqz $a3,.L_bn_add_words_return nop @@ -679,10 +675,10 @@ $code.=<<___; .set reorder li $minus4,-4 and $at,$a3,$minus4 - $LD $t0,0($a1) beqz $at,.L_bn_sub_words_tail .L_bn_sub_words_loop: + $LD $t0,0($a1) $LD $ta0,0($a2) subu $a3,4 $LD $t1,$BNSZ($a1) @@ -722,11 +718,10 @@ $code.=<<___; $SUBU $t3,$ta3,$v0 sgtu $v0,$t3,$ta3 $ST $t3,-$BNSZ($a0) - $ADDU $v0,$t9 .set noreorder - bgtzl $at,.L_bn_sub_words_loop - $LD $t0,0($a1) + bgtz $at,.L_bn_sub_words_loop + $ADDU $v0,$t9 beqz $a3,.L_bn_sub_words_return nop @@ -840,8 +835,9 @@ $code.=<<___; sltu $ta0,$a1,$a2 or $t8,$ta0 .set noreorder - beqzl $at,.L_bn_div_3_words_inner_loop + beqz $at,.L_bn_div_3_words_inner_loop $SUBU $v0,1 + $ADDU $v0,1 .set reorder .L_bn_div_3_words_inner_loop_done: .set noreorder @@ -902,7 +898,8 @@ $code.=<<___; and $t2,$a0 $SRL $at,$a1,$t1 .set noreorder - bnezl $t2,.+8 + beqz $t2,.+12 + nop break 6 # signal overflow .set reorder $SLL $a0,$t9 @@ -917,7 +914,8 @@ $code.=<<___; $SRL $DH,$a2,4*$BNSZ # bits sgeu $at,$a0,$a2 .set noreorder - bnezl $at,.+8 + beqz $at,.+12 + nop $SUBU $a0,$a2 .set reorder diff --git a/openssl/crypto/bn/asm/parisc-mont.pl b/openssl/crypto/bn/asm/parisc-mont.pl index 4a766a87f..c02ef6f01 100644 --- a/openssl/crypto/bn/asm/parisc-mont.pl +++ b/openssl/crypto/bn/asm/parisc-mont.pl @@ -40,7 +40,7 @@ # of arithmetic operations, most notably multiplications. It requires # more memory references, most notably to tp[num], but this doesn't # seem to exhaust memory port capacity. And indeed, dedicated PA-RISC -# 2.0 code path, provides virtually same performance as pa-risc2[W].s: +# 2.0 code path provides virtually same performance as pa-risc2[W].s: # it's ~10% better for shortest key length and ~10% worse for longest # one. # @@ -988,6 +988,8 @@ foreach (split("\n",$code)) { # assemble 2.0 instructions in 32-bit mode... s/^\s+([a-z]+)([\S]*)\s+([\S]*)/&assemble($1,$2,$3)/e if ($BN_SZ==4); + s/\bbv\b/bve/gm if ($SIZE_T==8); + print $_,"\n"; } close STDOUT; diff --git a/openssl/crypto/bn/asm/x86_64-gf2m.pl b/openssl/crypto/bn/asm/x86_64-gf2m.pl index a30d4ef02..226c66c35 100644 --- a/openssl/crypto/bn/asm/x86_64-gf2m.pl +++ b/openssl/crypto/bn/asm/x86_64-gf2m.pl @@ -31,7 +31,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; ( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or die "can't locate x86_64-xlate.pl"; -open STDOUT,"| \"$^X\" $xlate $flavour $output"; +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; ($lo,$hi)=("%rax","%rdx"); $a=$lo; ($i0,$i1)=("%rsi","%rdi"); diff --git a/openssl/crypto/bn/asm/x86_64-mont5.pl b/openssl/crypto/bn/asm/x86_64-mont5.pl index 8f8dc5a59..dae0fe245 100644 --- a/openssl/crypto/bn/asm/x86_64-mont5.pl +++ b/openssl/crypto/bn/asm/x86_64-mont5.pl @@ -901,8 +901,8 @@ $code.=<<___; jnz .Lgather ___ $code.=<<___ if ($win64); - movaps %xmm6,(%rsp) - movaps %xmm7,0x10(%rsp) + movaps (%rsp),%xmm6 + movaps 0x10(%rsp),%xmm7 lea 0x28(%rsp),%rsp ___ $code.=<<___; diff --git a/openssl/crypto/bn/bn_nist.c b/openssl/crypto/bn/bn_nist.c index 43caee477..e22968d4a 100644 --- a/openssl/crypto/bn/bn_nist.c +++ b/openssl/crypto/bn/bn_nist.c @@ -286,26 +286,25 @@ const BIGNUM *BN_get0_nist_prime_521(void) } -static void nist_cp_bn_0(BN_ULONG *buf, BN_ULONG *a, int top, int max) +static void nist_cp_bn_0(BN_ULONG *dst, const BN_ULONG *src, int top, int max) { int i; - BN_ULONG *_tmp1 = (buf), *_tmp2 = (a); #ifdef BN_DEBUG OPENSSL_assert(top <= max); #endif - for (i = (top); i != 0; i--) - *_tmp1++ = *_tmp2++; - for (i = (max) - (top); i != 0; i--) - *_tmp1++ = (BN_ULONG) 0; + for (i = 0; i < top; i++) + dst[i] = src[i]; + for (; i < max; i++) + dst[i] = 0; } -static void nist_cp_bn(BN_ULONG *buf, BN_ULONG *a, int top) +static void nist_cp_bn(BN_ULONG *dst, const BN_ULONG *src, int top) { int i; - BN_ULONG *_tmp1 = (buf), *_tmp2 = (a); - for (i = (top); i != 0; i--) - *_tmp1++ = *_tmp2++; + + for (i = 0; i < top; i++) + dst[i] = src[i]; } #if BN_BITS2 == 64 @@ -451,8 +450,9 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, */ mask = 0-(PTR_SIZE_INT)bn_sub_words(c_d,r_d,_nist_p_192[0],BN_NIST_192_TOP); mask &= 0-(PTR_SIZE_INT)carry; + res = c_d; res = (BN_ULONG *) - (((PTR_SIZE_INT)c_d&~mask) | ((PTR_SIZE_INT)r_d&mask)); + (((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask)); nist_cp_bn(r_d, res, BN_NIST_192_TOP); r->top = BN_NIST_192_TOP; bn_correct_top(r); @@ -479,8 +479,11 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, int top = a->top, i; int carry; BN_ULONG *r_d, *a_d = a->d; - BN_ULONG buf[BN_NIST_224_TOP], - c_d[BN_NIST_224_TOP], + union { + BN_ULONG bn[BN_NIST_224_TOP]; + unsigned int ui[BN_NIST_224_TOP*sizeof(BN_ULONG)/sizeof(unsigned int)]; + } buf; + BN_ULONG c_d[BN_NIST_224_TOP], *res; PTR_SIZE_INT mask; union { bn_addsub_f f; PTR_SIZE_INT p; } u; @@ -519,18 +522,18 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, /* copy upper 256 bits of 448 bit number ... */ nist_cp_bn_0(c_d, a_d + (BN_NIST_224_TOP-1), top - (BN_NIST_224_TOP-1), BN_NIST_224_TOP); /* ... and right shift by 32 to obtain upper 224 bits */ - nist_set_224(buf, c_d, 14, 13, 12, 11, 10, 9, 8); + nist_set_224(buf.bn, c_d, 14, 13, 12, 11, 10, 9, 8); /* truncate lower part to 224 bits too */ r_d[BN_NIST_224_TOP-1] &= BN_MASK2l; #else - nist_cp_bn_0(buf, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP); + nist_cp_bn_0(buf.bn, a_d + BN_NIST_224_TOP, top - BN_NIST_224_TOP, BN_NIST_224_TOP); #endif #if defined(NIST_INT64) && BN_BITS2!=64 { NIST_INT64 acc; /* accumulator */ unsigned int *rp=(unsigned int *)r_d; - const unsigned int *bp=(const unsigned int *)buf; + const unsigned int *bp=(const unsigned int *)buf.ui; acc = rp[0]; acc -= bp[7-7]; acc -= bp[11-7]; rp[0] = (unsigned int)acc; acc >>= 32; @@ -565,13 +568,13 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, { BN_ULONG t_d[BN_NIST_224_TOP]; - nist_set_224(t_d, buf, 10, 9, 8, 7, 0, 0, 0); + nist_set_224(t_d, buf.bn, 10, 9, 8, 7, 0, 0, 0); carry = (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); - nist_set_224(t_d, buf, 0, 13, 12, 11, 0, 0, 0); + nist_set_224(t_d, buf.bn, 0, 13, 12, 11, 0, 0, 0); carry += (int)bn_add_words(r_d, r_d, t_d, BN_NIST_224_TOP); - nist_set_224(t_d, buf, 13, 12, 11, 10, 9, 8, 7); + nist_set_224(t_d, buf.bn, 13, 12, 11, 10, 9, 8, 7); carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); - nist_set_224(t_d, buf, 0, 0, 0, 0, 13, 12, 11); + nist_set_224(t_d, buf.bn, 0, 0, 0, 0, 13, 12, 11); carry -= (int)bn_sub_words(r_d, r_d, t_d, BN_NIST_224_TOP); #if BN_BITS2==64 @@ -606,7 +609,8 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, /* otherwise it's effectively same as in BN_nist_mod_192... */ mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_224[0],BN_NIST_224_TOP); mask &= 0-(PTR_SIZE_INT)carry; - res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | + res = c_d; + res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask)); nist_cp_bn(r_d, res, BN_NIST_224_TOP); r->top = BN_NIST_224_TOP; @@ -805,7 +809,8 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_256[0],BN_NIST_256_TOP); mask &= 0-(PTR_SIZE_INT)carry; - res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | + res = c_d; + res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask)); nist_cp_bn(r_d, res, BN_NIST_256_TOP); r->top = BN_NIST_256_TOP; @@ -1026,7 +1031,8 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, mask = 0-(PTR_SIZE_INT)(*u.f)(c_d,r_d,_nist_p_384[0],BN_NIST_384_TOP); mask &= 0-(PTR_SIZE_INT)carry; - res = (BN_ULONG *)(((PTR_SIZE_INT)c_d&~mask) | + res = c_d; + res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask)); nist_cp_bn(r_d, res, BN_NIST_384_TOP); r->top = BN_NIST_384_TOP; @@ -1092,7 +1098,8 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, bn_add_words(r_d,r_d,t_d,BN_NIST_521_TOP); mask = 0-(PTR_SIZE_INT)bn_sub_words(t_d,r_d,_nist_p_521,BN_NIST_521_TOP); - res = (BN_ULONG *)(((PTR_SIZE_INT)t_d&~mask) | + res = t_d; + res = (BN_ULONG *)(((PTR_SIZE_INT)res&~mask) | ((PTR_SIZE_INT)r_d&mask)); nist_cp_bn(r_d,res,BN_NIST_521_TOP); r->top = BN_NIST_521_TOP; diff --git a/openssl/crypto/buffer/buffer.c b/openssl/crypto/buffer/buffer.c index d7aa79ad7..d4a4ce43b 100644 --- a/openssl/crypto/buffer/buffer.c +++ b/openssl/crypto/buffer/buffer.c @@ -179,14 +179,14 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len) return(len); } -void BUF_reverse(unsigned char *out, unsigned char *in, size_t size) +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size) { size_t i; if (in) { out += size - 1; for (i = 0; i < size; i++) - *in++ = *out--; + *out-- = *in++; } else { diff --git a/openssl/crypto/buffer/buffer.h b/openssl/crypto/buffer/buffer.h index 178e41828..f8da32b48 100644 --- a/openssl/crypto/buffer/buffer.h +++ b/openssl/crypto/buffer/buffer.h @@ -88,7 +88,7 @@ int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); char * BUF_strdup(const char *str); char * BUF_strndup(const char *str, size_t siz); void * BUF_memdup(const void *data, size_t siz); -void BUF_reverse(unsigned char *out, unsigned char *in, size_t siz); +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); /* safe string functions */ size_t BUF_strlcpy(char *dst,const char *src,size_t siz); diff --git a/openssl/crypto/ec/ec_ameth.c b/openssl/crypto/ec/ec_ameth.c index 83909c185..0ce452407 100644 --- a/openssl/crypto/ec/ec_ameth.c +++ b/openssl/crypto/ec/ec_ameth.c @@ -88,7 +88,7 @@ static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key) if (!pstr) return 0; pstr->length = i2d_ECParameters(ec_key, &pstr->data); - if (pstr->length < 0) + if (pstr->length <= 0) { ASN1_STRING_free(pstr); ECerr(EC_F_ECKEY_PARAM2TYPE, ERR_R_EC_LIB); diff --git a/openssl/crypto/ec/ec_asn1.c b/openssl/crypto/ec/ec_asn1.c index 175eec534..145807b61 100644 --- a/openssl/crypto/ec/ec_asn1.c +++ b/openssl/crypto/ec/ec_asn1.c @@ -89,7 +89,8 @@ int EC_GROUP_get_trinomial_basis(const EC_GROUP *group, unsigned int *k) if (group == NULL) return 0; - if (EC_GROUP_method_of(group)->group_set_curve != ec_GF2m_simple_group_set_curve + if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) != + NID_X9_62_characteristic_two_field || !((group->poly[0] != 0) && (group->poly[1] != 0) && (group->poly[2] == 0))) { ECerr(EC_F_EC_GROUP_GET_TRINOMIAL_BASIS, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); @@ -107,7 +108,8 @@ int EC_GROUP_get_pentanomial_basis(const EC_GROUP *group, unsigned int *k1, if (group == NULL) return 0; - if (EC_GROUP_method_of(group)->group_set_curve != ec_GF2m_simple_group_set_curve + if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) != + NID_X9_62_characteristic_two_field || !((group->poly[0] != 0) && (group->poly[1] != 0) && (group->poly[2] != 0) && (group->poly[3] != 0) && (group->poly[4] == 0))) { ECerr(EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); diff --git a/openssl/crypto/ec/ec_lib.c b/openssl/crypto/ec/ec_lib.c index 25247b580..de9a0cc2b 100644 --- a/openssl/crypto/ec/ec_lib.c +++ b/openssl/crypto/ec/ec_lib.c @@ -480,10 +480,10 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx) if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) != EC_METHOD_get_field_type(EC_GROUP_method_of(b))) return 1; - /* compare the curve name (if present) */ + /* compare the curve name (if present in both) */ if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) && - EC_GROUP_get_curve_name(a) == EC_GROUP_get_curve_name(b)) - return 0; + EC_GROUP_get_curve_name(a) != EC_GROUP_get_curve_name(b)) + return 1; if (!ctx) ctx_new = ctx = BN_CTX_new(); @@ -993,12 +993,12 @@ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN if (group->meth->point_cmp == 0) { ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return 0; + return -1; } if ((group->meth != a->meth) || (a->meth != b->meth)) { ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS); - return 0; + return -1; } return group->meth->point_cmp(group, a, b, ctx); } diff --git a/openssl/crypto/engine/eng_rdrand.c b/openssl/crypto/engine/eng_rdrand.c index a9ba5ae6f..4e9e91d54 100644 --- a/openssl/crypto/engine/eng_rdrand.c +++ b/openssl/crypto/engine/eng_rdrand.c @@ -104,6 +104,7 @@ static int bind_helper(ENGINE *e) { if (!ENGINE_set_id(e, engine_e_rdrand_id) || !ENGINE_set_name(e, engine_e_rdrand_name) || + !ENGINE_set_flags(e, ENGINE_FLAGS_NO_REGISTER_ALL) || !ENGINE_set_init_function(e, rdrand_init) || !ENGINE_set_RAND(e, &rdrand_meth) ) return 0; diff --git a/openssl/crypto/evp/Makefile b/openssl/crypto/evp/Makefile index 1e46cebf5..5d0c6b7db 100644 --- a/openssl/crypto/evp/Makefile +++ b/openssl/crypto/evp/Makefile @@ -67,7 +67,7 @@ files: links: @$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER) @$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST) - [ ! -f $(TESTDATA) ] || cp $(TESTDATA) ../../test + @[ -f $(TESTDATA) ] && cp $(TESTDATA) ../../test && echo "$(TESTDATA) -> ../../test/$(TESTDATA)" @$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS) install: diff --git a/openssl/crypto/evp/digest.c b/openssl/crypto/evp/digest.c index 6fc469f9c..d14e8e48d 100644 --- a/openssl/crypto/evp/digest.c +++ b/openssl/crypto/evp/digest.c @@ -366,8 +366,11 @@ int EVP_Digest(const void *data, size_t count, void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx) { - EVP_MD_CTX_cleanup(ctx); - OPENSSL_free(ctx); + if (ctx) + { + EVP_MD_CTX_cleanup(ctx); + OPENSSL_free(ctx); + } } /* This call frees resources associated with the context */ diff --git a/openssl/crypto/evp/e_aes.c b/openssl/crypto/evp/e_aes.c index 1bfb5d92b..c7869b69e 100644 --- a/openssl/crypto/evp/e_aes.c +++ b/openssl/crypto/evp/e_aes.c @@ -842,7 +842,10 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, gctx->ctr = NULL; break; } + else #endif + (void)0; /* terminate potentially open 'else' */ + AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks); CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt); #ifdef AES_CTR_ASM @@ -1083,14 +1086,17 @@ static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, xctx->xts.block1 = (block128_f)vpaes_decrypt; } - vpaes_set_encrypt_key(key + ctx->key_len/2, + vpaes_set_encrypt_key(key + ctx->key_len/2, ctx->key_len * 4, &xctx->ks2); - xctx->xts.block2 = (block128_f)vpaes_encrypt; + xctx->xts.block2 = (block128_f)vpaes_encrypt; - xctx->xts.key1 = &xctx->ks1; - break; - } + xctx->xts.key1 = &xctx->ks1; + break; + } + else #endif + (void)0; /* terminate potentially open 'else' */ + if (enc) { AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1); diff --git a/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c b/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c index 483e04b60..fb2c884a7 100644 --- a/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c +++ b/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c @@ -328,10 +328,11 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (res!=SHA_CBLOCK) continue; - mask = 0-((inp_len+8-j)>>(sizeof(j)*8-1)); + /* j is not incremented yet */ + mask = 0-((inp_len+7-j)>>(sizeof(j)*8-1)); data->u[SHA_LBLOCK-1] |= bitlen&mask; sha1_block_data_order(&key->md,data,1); - mask &= 0-((j-inp_len-73)>>(sizeof(j)*8-1)); + mask &= 0-((j-inp_len-72)>>(sizeof(j)*8-1)); pmac->u[0] |= key->md.h0 & mask; pmac->u[1] |= key->md.h1 & mask; pmac->u[2] |= key->md.h2 & mask; diff --git a/openssl/crypto/evp/e_des3.c b/openssl/crypto/evp/e_des3.c index 1e6997266..8d7b7de29 100644 --- a/openssl/crypto/evp/e_des3.c +++ b/openssl/crypto/evp/e_des3.c @@ -101,7 +101,7 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { - if (inl>=EVP_MAXCHUNK) + while (inl>=EVP_MAXCHUNK) { DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, @@ -132,7 +132,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, printf("\n"); } #endif /* KSSL_DEBUG */ - if (inl>=EVP_MAXCHUNK) + while (inl>=EVP_MAXCHUNK) { DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, @@ -151,7 +151,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { - if (inl>=EVP_MAXCHUNK) + while (inl>=EVP_MAXCHUNK) { DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK, &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, diff --git a/openssl/crypto/evp/p5_crpt2.c b/openssl/crypto/evp/p5_crpt2.c index 975d004df..fe3c6c881 100644 --- a/openssl/crypto/evp/p5_crpt2.c +++ b/openssl/crypto/evp/p5_crpt2.c @@ -85,19 +85,24 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, unsigned char digtmp[EVP_MAX_MD_SIZE], *p, itmp[4]; int cplen, j, k, tkeylen, mdlen; unsigned long i = 1; - HMAC_CTX hctx; + HMAC_CTX hctx_tpl, hctx; mdlen = EVP_MD_size(digest); if (mdlen < 0) return 0; - HMAC_CTX_init(&hctx); + HMAC_CTX_init(&hctx_tpl); p = out; tkeylen = keylen; if(!pass) passlen = 0; else if(passlen == -1) passlen = strlen(pass); + if (!HMAC_Init_ex(&hctx_tpl, pass, passlen, digest, NULL)) + { + HMAC_CTX_cleanup(&hctx_tpl); + return 0; + } while(tkeylen) { if(tkeylen > mdlen) @@ -111,19 +116,36 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, itmp[1] = (unsigned char)((i >> 16) & 0xff); itmp[2] = (unsigned char)((i >> 8) & 0xff); itmp[3] = (unsigned char)(i & 0xff); - if (!HMAC_Init_ex(&hctx, pass, passlen, digest, NULL) - || !HMAC_Update(&hctx, salt, saltlen) - || !HMAC_Update(&hctx, itmp, 4) - || !HMAC_Final(&hctx, digtmp, NULL)) + if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) { + HMAC_CTX_cleanup(&hctx_tpl); + return 0; + } + if (!HMAC_Update(&hctx, salt, saltlen) + || !HMAC_Update(&hctx, itmp, 4) + || !HMAC_Final(&hctx, digtmp, NULL)) + { + HMAC_CTX_cleanup(&hctx_tpl); HMAC_CTX_cleanup(&hctx); return 0; } + HMAC_CTX_cleanup(&hctx); memcpy(p, digtmp, cplen); for(j = 1; j < iter; j++) { - HMAC(digest, pass, passlen, - digtmp, mdlen, digtmp, NULL); + if (!HMAC_CTX_copy(&hctx, &hctx_tpl)) + { + HMAC_CTX_cleanup(&hctx_tpl); + return 0; + } + if (!HMAC_Update(&hctx, digtmp, mdlen) + || !HMAC_Final(&hctx, digtmp, NULL)) + { + HMAC_CTX_cleanup(&hctx_tpl); + HMAC_CTX_cleanup(&hctx); + return 0; + } + HMAC_CTX_cleanup(&hctx); for(k = 0; k < cplen; k++) p[k] ^= digtmp[k]; } @@ -131,7 +153,7 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, i++; p+= cplen; } - HMAC_CTX_cleanup(&hctx); + HMAC_CTX_cleanup(&hctx_tpl); #ifdef DEBUG_PKCS5V2 fprintf(stderr, "Password:\n"); h__dump (pass, passlen); diff --git a/openssl/crypto/modes/Makefile b/openssl/crypto/modes/Makefile index c825b12f2..3d8bafd57 100644 --- a/openssl/crypto/modes/Makefile +++ b/openssl/crypto/modes/Makefile @@ -53,7 +53,10 @@ ghash-x86_64.s: asm/ghash-x86_64.pl ghash-sparcv9.s: asm/ghash-sparcv9.pl $(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS) ghash-alpha.s: asm/ghash-alpha.pl - $(PERL) $< | $(CC) -E - | tee $@ > /dev/null + (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ + $(PERL) asm/ghash-alpha.pl > $$preproc && \ + $(CC) -E $$preproc > $@ && rm $$preproc) + ghash-parisc.s: asm/ghash-parisc.pl $(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@ diff --git a/openssl/crypto/modes/asm/ghash-alpha.pl b/openssl/crypto/modes/asm/ghash-alpha.pl index 6358b2750..aa3602938 100644 --- a/openssl/crypto/modes/asm/ghash-alpha.pl +++ b/openssl/crypto/modes/asm/ghash-alpha.pl @@ -266,8 +266,8 @@ gcm_gmult_4bit: ldq $Xlo,8($Xi) ldq $Xhi,0($Xi) - br $rem_4bit,.Lpic1 -.Lpic1: lda $rem_4bit,rem_4bit-.Lpic1($rem_4bit) + bsr $t0,picmeup + nop ___ &loop(); @@ -341,8 +341,8 @@ gcm_ghash_4bit: ldq $Xhi,0($Xi) ldq $Xlo,8($Xi) - br $rem_4bit,.Lpic2 -.Lpic2: lda $rem_4bit,rem_4bit-.Lpic2($rem_4bit) + bsr $t0,picmeup + nop .Louter: extql $inhi,$inp,$inhi @@ -436,11 +436,20 @@ $code.=<<___; .end gcm_ghash_4bit .align 4 +.ent picmeup +picmeup: + .frame sp,0,$t0 + .prologue 0 + br $rem_4bit,.Lpic +.Lpic: lda $rem_4bit,12($rem_4bit) + ret ($t0) +.end picmeup + nop rem_4bit: - .quad 0x0000<<48, 0x1C20<<48, 0x3840<<48, 0x2460<<48 - .quad 0x7080<<48, 0x6CA0<<48, 0x48C0<<48, 0x54E0<<48 - .quad 0xE100<<48, 0xFD20<<48, 0xD940<<48, 0xC560<<48 - .quad 0x9180<<48, 0x8DA0<<48, 0xA9C0<<48, 0xB5E0<<48 + .long 0,0x0000<<16, 0,0x1C20<<16, 0,0x3840<<16, 0,0x2460<<16 + .long 0,0x7080<<16, 0,0x6CA0<<16, 0,0x48C0<<16, 0,0x54E0<<16 + .long 0,0xE100<<16, 0,0xFD20<<16, 0,0xD940<<16, 0,0xC560<<16 + .long 0,0x9180<<16, 0,0x8DA0<<16, 0,0xA9C0<<16, 0,0xB5E0<<16 .ascii "GHASH for Alpha, CRYPTOGAMS by " .align 4 diff --git a/openssl/crypto/modes/asm/ghash-parisc.pl b/openssl/crypto/modes/asm/ghash-parisc.pl index 8c7454ee9..d5ad96b40 100644 --- a/openssl/crypto/modes/asm/ghash-parisc.pl +++ b/openssl/crypto/modes/asm/ghash-parisc.pl @@ -724,6 +724,7 @@ foreach (split("\n",$code)) { s/cmpb,\*/comb,/; s/,\*/,/; } + s/\bbv\b/bve/ if ($SIZE_T==8); print $_,"\n"; } diff --git a/openssl/crypto/modes/cbc128.c b/openssl/crypto/modes/cbc128.c index 3d3782cbe..0e54f7547 100644 --- a/openssl/crypto/modes/cbc128.c +++ b/openssl/crypto/modes/cbc128.c @@ -117,7 +117,7 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, unsigned char ivec[16], block128_f block) { size_t n; - union { size_t align; unsigned char c[16]; } tmp; + union { size_t t[16/sizeof(size_t)]; unsigned char c[16]; } tmp; assert(in && out && key && ivec); @@ -137,11 +137,13 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, out += 16; } } - else { + else if (16%sizeof(size_t) == 0) { /* always true */ while (len>=16) { + size_t *out_t=(size_t *)out, *iv_t=(size_t *)iv; + (*block)(in, out, key); - for(n=0; n<16; n+=sizeof(size_t)) - *(size_t *)(out+n) ^= *(size_t *)(iv+n); + for(n=0; n<16/sizeof(size_t); n++) + out_t[n] ^= iv_t[n]; iv = in; len -= 16; in += 16; @@ -165,15 +167,16 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, out += 16; } } - else { - size_t c; + else if (16%sizeof(size_t) == 0) { /* always true */ while (len>=16) { + size_t c, *out_t=(size_t *)out, *ivec_t=(size_t *)ivec; + const size_t *in_t=(const size_t *)in; + (*block)(in, tmp.c, key); - for(n=0; n<16; n+=sizeof(size_t)) { - c = *(size_t *)(in+n); - *(size_t *)(out+n) = - *(size_t *)(tmp.c+n) ^ *(size_t *)(ivec+n); - *(size_t *)(ivec+n) = c; + for(n=0; n<16/sizeof(size_t); n++) { + c = in_t[n]; + out_t[n] = tmp.t[n] ^ ivec_t[n]; + ivec_t[n] = c; } len -= 16; in += 16; diff --git a/openssl/crypto/modes/ccm128.c b/openssl/crypto/modes/ccm128.c index c9b35e5b3..3ce11d0d9 100644 --- a/openssl/crypto/modes/ccm128.c +++ b/openssl/crypto/modes/ccm128.c @@ -87,7 +87,7 @@ int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, ctx->nonce.c[11] = (u8)(mlen>>(32%(sizeof(mlen)*8))); } else - *(u32*)(&ctx->nonce.c[8]) = 0; + ctx->nonce.u[1] = 0; ctx->nonce.c[12] = (u8)(mlen>>24); ctx->nonce.c[13] = (u8)(mlen>>16); diff --git a/openssl/crypto/modes/cts128.c b/openssl/crypto/modes/cts128.c index c0e1f3696..2d583de6f 100644 --- a/openssl/crypto/modes/cts128.c +++ b/openssl/crypto/modes/cts128.c @@ -108,12 +108,8 @@ size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, (*cbc)(in,out-16,residue,key,ivec,1); memcpy(out,tmp.c,residue); #else - { - size_t n; - for (n=0; n<16; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = 0; + memset(tmp.c,0,sizeof(tmp)); memcpy(tmp.c,in,residue); - } memcpy(out,out-16,residue); (*cbc)(tmp.c,out-16,16,key,ivec,1); #endif @@ -144,12 +140,8 @@ size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, #if defined(CBC_HANDLES_TRUNCATED_IO) (*cbc)(in,out-16+residue,residue,key,ivec,1); #else - { - size_t n; - for (n=0; n<16; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = 0; + memset(tmp.c,0,sizeof(tmp)); memcpy(tmp.c,in,residue); - } (*cbc)(tmp.c,out-16+residue,16,key,ivec,1); #endif return len+residue; @@ -177,8 +169,7 @@ size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out, (*block)(in,tmp.c+16,key); - for (n=0; n<16; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = *(size_t *)(tmp.c+16+n); + memcpy(tmp.c,tmp.c+16,16); memcpy(tmp.c,in+16,residue); (*block)(tmp.c,tmp.c,key); @@ -220,8 +211,7 @@ size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, unsigned char *o (*block)(in+residue,tmp.c+16,key); - for (n=0; n<16; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = *(size_t *)(tmp.c+16+n); + memcpy(tmp.c,tmp.c+16,16); memcpy(tmp.c,in,residue); (*block)(tmp.c,tmp.c,key); @@ -240,7 +230,7 @@ size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, unsigned char *o size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc) -{ size_t residue, n; +{ size_t residue; union { size_t align; unsigned char c[32]; } tmp; assert (in && out && key && ivec); @@ -257,8 +247,7 @@ size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, out += len; } - for (n=16; n<32; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = 0; + memset(tmp.c,0,sizeof(tmp)); /* this places in[16] at &tmp.c[16] and decrypted block at &tmp.c[0] */ (*cbc)(in,tmp.c,16,key,tmp.c+16,0); @@ -275,7 +264,7 @@ size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc) -{ size_t residue, n; +{ size_t residue; union { size_t align; unsigned char c[32]; } tmp; assert (in && out && key && ivec); @@ -297,8 +286,7 @@ size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, out += len; } - for (n=16; n<32; n+=sizeof(size_t)) - *(size_t *)(tmp.c+n) = 0; + memset(tmp.c,0,sizeof(tmp)); /* this places in[16] at &tmp.c[16] and decrypted block at &tmp.c[0] */ (*cbc)(in+residue,tmp.c,16,key,tmp.c+16,0); diff --git a/openssl/crypto/modes/gcm128.c b/openssl/crypto/modes/gcm128.c index 0e6ff8b0a..250063de8 100644 --- a/openssl/crypto/modes/gcm128.c +++ b/openssl/crypto/modes/gcm128.c @@ -941,15 +941,17 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, size_t j=GHASH_CHUNK; while (j) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) - *(size_t *)(out+i) = - *(size_t *)(in+i)^*(size_t *)(ctx->EKi.c+i); + for (i=0; i<16/sizeof(size_t); ++i) + out_t[i] = in_t[i] ^ ctx->EKi.t[i]; out += 16; in += 16; j -= 16; @@ -961,15 +963,17 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, size_t j=i; while (len>=16) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) - *(size_t *)(out+i) = - *(size_t *)(in+i)^*(size_t *)(ctx->EKi.c+i); + for (i=0; i<16/sizeof(size_t); ++i) + out_t[i] = in_t[i] ^ ctx->EKi.t[i]; out += 16; in += 16; len -= 16; @@ -978,16 +982,18 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, } #else while (len>=16) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) - *(size_t *)(ctx->Xi.c+i) ^= - *(size_t *)(out+i) = - *(size_t *)(in+i)^*(size_t *)(ctx->EKi.c+i); + for (i=0; i<16/sizeof(size_t); ++i) + ctx->Xi.t[i] ^= + out_t[i] = in_t[i]^ctx->EKi.t[i]; GCM_MUL(ctx,Xi); out += 16; in += 16; @@ -1091,15 +1097,17 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, GHASH(ctx,in,GHASH_CHUNK); while (j) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) - *(size_t *)(out+i) = - *(size_t *)(in+i)^*(size_t *)(ctx->EKi.c+i); + for (i=0; i<16/sizeof(size_t); ++i) + out_t[i] = in_t[i]^ctx->EKi.t[i]; out += 16; in += 16; j -= 16; @@ -1109,15 +1117,17 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, if ((i = (len&(size_t)-16))) { GHASH(ctx,in,i); while (len>=16) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) - *(size_t *)(out+i) = - *(size_t *)(in+i)^*(size_t *)(ctx->EKi.c+i); + for (i=0; i<16/sizeof(size_t); ++i) + out_t[i] = in_t[i]^ctx->EKi.t[i]; out += 16; in += 16; len -= 16; @@ -1125,16 +1135,19 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, } #else while (len>=16) { + size_t *out_t=(size_t *)out; + const size_t *in_t=(const size_t *)in; + (*block)(ctx->Yi.c,ctx->EKi.c,key); ++ctr; if (is_endian.little) PUTU32(ctx->Yi.c+12,ctr); else ctx->Yi.d[3] = ctr; - for (i=0; i<16; i+=sizeof(size_t)) { - size_t c = *(size_t *)(in+i); - *(size_t *)(out+i) = c^*(size_t *)(ctx->EKi.c+i); - *(size_t *)(ctx->Xi.c+i) ^= c; + for (i=0; i<16/sizeof(size_t); ++i) { + size_t c = in[i]; + out[i] = c^ctx->EKi.t[i]; + ctx->Xi.t[i] ^= c; } GCM_MUL(ctx,Xi); out += 16; @@ -1669,6 +1682,46 @@ static const u8 IV18[]={0x93,0x13,0x22,0x5d,0xf8,0x84,0x06,0xe5,0x55,0x90,0x9c,0 0xa2,0x41,0x89,0x97,0x20,0x0e,0xf8,0x2e,0x44,0xae,0x7e,0x3f}, T18[]= {0xa4,0x4a,0x82,0x66,0xee,0x1c,0x8e,0xb0,0xc8,0xb5,0xd4,0xcf,0x5a,0xe9,0xf1,0x9a}; +/* Test Case 19 */ +#define K19 K1 +#define P19 P1 +#define IV19 IV1 +#define C19 C1 +static const u8 A19[]= {0xd9,0x31,0x32,0x25,0xf8,0x84,0x06,0xe5,0xa5,0x59,0x09,0xc5,0xaf,0xf5,0x26,0x9a, + 0x86,0xa7,0xa9,0x53,0x15,0x34,0xf7,0xda,0x2e,0x4c,0x30,0x3d,0x8a,0x31,0x8a,0x72, + 0x1c,0x3c,0x0c,0x95,0x95,0x68,0x09,0x53,0x2f,0xcf,0x0e,0x24,0x49,0xa6,0xb5,0x25, + 0xb1,0x6a,0xed,0xf5,0xaa,0x0d,0xe6,0x57,0xba,0x63,0x7b,0x39,0x1a,0xaf,0xd2,0x55, + 0x52,0x2d,0xc1,0xf0,0x99,0x56,0x7d,0x07,0xf4,0x7f,0x37,0xa3,0x2a,0x84,0x42,0x7d, + 0x64,0x3a,0x8c,0xdc,0xbf,0xe5,0xc0,0xc9,0x75,0x98,0xa2,0xbd,0x25,0x55,0xd1,0xaa, + 0x8c,0xb0,0x8e,0x48,0x59,0x0d,0xbb,0x3d,0xa7,0xb0,0x8b,0x10,0x56,0x82,0x88,0x38, + 0xc5,0xf6,0x1e,0x63,0x93,0xba,0x7a,0x0a,0xbc,0xc9,0xf6,0x62,0x89,0x80,0x15,0xad}, + T19[]= {0x5f,0xea,0x79,0x3a,0x2d,0x6f,0x97,0x4d,0x37,0xe6,0x8e,0x0c,0xb8,0xff,0x94,0x92}; + +/* Test Case 20 */ +#define K20 K1 +#define A20 A1 +static const u8 IV20[64]={0xff,0xff,0xff,0xff}, /* this results in 0xff in counter LSB */ + P20[288], + C20[]= {0x56,0xb3,0x37,0x3c,0xa9,0xef,0x6e,0x4a,0x2b,0x64,0xfe,0x1e,0x9a,0x17,0xb6,0x14, + 0x25,0xf1,0x0d,0x47,0xa7,0x5a,0x5f,0xce,0x13,0xef,0xc6,0xbc,0x78,0x4a,0xf2,0x4f, + 0x41,0x41,0xbd,0xd4,0x8c,0xf7,0xc7,0x70,0x88,0x7a,0xfd,0x57,0x3c,0xca,0x54,0x18, + 0xa9,0xae,0xff,0xcd,0x7c,0x5c,0xed,0xdf,0xc6,0xa7,0x83,0x97,0xb9,0xa8,0x5b,0x49, + 0x9d,0xa5,0x58,0x25,0x72,0x67,0xca,0xab,0x2a,0xd0,0xb2,0x3c,0xa4,0x76,0xa5,0x3c, + 0xb1,0x7f,0xb4,0x1c,0x4b,0x8b,0x47,0x5c,0xb4,0xf3,0xf7,0x16,0x50,0x94,0xc2,0x29, + 0xc9,0xe8,0xc4,0xdc,0x0a,0x2a,0x5f,0xf1,0x90,0x3e,0x50,0x15,0x11,0x22,0x13,0x76, + 0xa1,0xcd,0xb8,0x36,0x4c,0x50,0x61,0xa2,0x0c,0xae,0x74,0xbc,0x4a,0xcd,0x76,0xce, + 0xb0,0xab,0xc9,0xfd,0x32,0x17,0xef,0x9f,0x8c,0x90,0xbe,0x40,0x2d,0xdf,0x6d,0x86, + 0x97,0xf4,0xf8,0x80,0xdf,0xf1,0x5b,0xfb,0x7a,0x6b,0x28,0x24,0x1e,0xc8,0xfe,0x18, + 0x3c,0x2d,0x59,0xe3,0xf9,0xdf,0xff,0x65,0x3c,0x71,0x26,0xf0,0xac,0xb9,0xe6,0x42, + 0x11,0xf4,0x2b,0xae,0x12,0xaf,0x46,0x2b,0x10,0x70,0xbe,0xf1,0xab,0x5e,0x36,0x06, + 0x87,0x2c,0xa1,0x0d,0xee,0x15,0xb3,0x24,0x9b,0x1a,0x1b,0x95,0x8f,0x23,0x13,0x4c, + 0x4b,0xcc,0xb7,0xd0,0x32,0x00,0xbc,0xe4,0x20,0xa2,0xf8,0xeb,0x66,0xdc,0xf3,0x64, + 0x4d,0x14,0x23,0xc1,0xb5,0x69,0x90,0x03,0xc1,0x3e,0xce,0xf4,0xbf,0x38,0xa3,0xb6, + 0x0e,0xed,0xc3,0x40,0x33,0xba,0xc1,0x90,0x27,0x83,0xdc,0x6d,0x89,0xe2,0xe7,0x74, + 0x18,0x8a,0x43,0x9c,0x7e,0xbc,0xc0,0x67,0x2d,0xbd,0xa4,0xdd,0xcf,0xb2,0x79,0x46, + 0x13,0xb0,0xbe,0x41,0x31,0x5e,0xf7,0x78,0x70,0x8a,0x70,0xee,0x7d,0x75,0x16,0x5c}, + T20[]= {0x8b,0x30,0x7f,0x6b,0x33,0x28,0x6d,0x0a,0xb0,0x26,0xa9,0xed,0x3f,0xe1,0xe8,0x5f}; + #define TEST_CASE(n) do { \ u8 out[sizeof(P##n)]; \ AES_set_encrypt_key(K##n,sizeof(K##n)*8,&key); \ @@ -1713,6 +1766,8 @@ int main() TEST_CASE(16); TEST_CASE(17); TEST_CASE(18); + TEST_CASE(19); + TEST_CASE(20); #ifdef OPENSSL_CPUID_OBJ { @@ -1743,11 +1798,16 @@ int main() ctr_t/(double)sizeof(buf), (gcm_t-ctr_t)/(double)sizeof(buf)); #ifdef GHASH - GHASH(&ctx,buf.c,sizeof(buf)); + { + void (*gcm_ghash_p)(u64 Xi[2],const u128 Htable[16], + const u8 *inp,size_t len) = ctx.ghash; + + GHASH((&ctx),buf.c,sizeof(buf)); start = OPENSSL_rdtsc(); - for (i=0;i<100;++i) GHASH(&ctx,buf.c,sizeof(buf)); + for (i=0;i<100;++i) GHASH((&ctx),buf.c,sizeof(buf)); gcm_t = OPENSSL_rdtsc() - start; printf("%.2f\n",gcm_t/(double)sizeof(buf)/(double)i); + } #endif } #endif diff --git a/openssl/crypto/modes/modes_lcl.h b/openssl/crypto/modes/modes_lcl.h index b6dc3c336..9d83e1284 100644 --- a/openssl/crypto/modes/modes_lcl.h +++ b/openssl/crypto/modes/modes_lcl.h @@ -29,10 +29,7 @@ typedef unsigned char u8; #if defined(__i386) || defined(__i386__) || \ defined(__x86_64) || defined(__x86_64__) || \ defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ - defined(__s390__) || defined(__s390x__) || \ - ( (defined(__arm__) || defined(__arm)) && \ - (defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ - defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__)) ) + defined(__s390__) || defined(__s390x__) # undef STRICT_ALIGNMENT #endif @@ -101,8 +98,8 @@ typedef struct { u64 hi,lo; } u128; struct gcm128_context { /* Following 6 names follow names in GCM specification */ - union { u64 u[2]; u32 d[4]; u8 c[16]; } Yi,EKi,EK0,len, - Xi,H; + union { u64 u[2]; u32 d[4]; u8 c[16]; size_t t[16/sizeof(size_t)]; } + Yi,EKi,EK0,len,Xi,H; /* Relative position of Xi, H and pre-computed Htable is used * in some assembler modules, i.e. don't change the order! */ #if TABLE_BITS==8 diff --git a/openssl/crypto/opensslv.h b/openssl/crypto/opensslv.h index 5bc8e53e6..b27a5bb8c 100644 --- a/openssl/crypto/opensslv.h +++ b/openssl/crypto/opensslv.h @@ -25,11 +25,11 @@ * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -#define OPENSSL_VERSION_NUMBER 0x1000105fL +#define OPENSSL_VERSION_NUMBER 0x1000106fL #ifdef OPENSSL_FIPS -#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1e-fips 11 Feb 2013" +#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1f-fips 6 Jan 2014" #else -#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1e 11 Feb 2013" +#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1f 6 Jan 2014" #endif #define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT diff --git a/openssl/crypto/pariscid.pl b/openssl/crypto/pariscid.pl index 477ec9b87..bfc56fdc7 100644 --- a/openssl/crypto/pariscid.pl +++ b/openssl/crypto/pariscid.pl @@ -97,33 +97,33 @@ OPENSSL_cleanse .PROC .CALLINFO NO_CALLS .ENTRY - cmpib,*= 0,$len,Ldone + cmpib,*= 0,$len,L\$done nop - cmpib,*>>= 15,$len,Little + cmpib,*>>= 15,$len,L\$ittle ldi $SIZE_T-1,%r1 -Lalign +L\$align and,*<> $inp,%r1,%r28 - b,n Laligned + b,n L\$aligned stb %r0,0($inp) ldo -1($len),$len - b Lalign + b L\$align ldo 1($inp),$inp -Laligned +L\$aligned andcm $len,%r1,%r28 -Lot +L\$ot $ST %r0,0($inp) - addib,*<> -$SIZE_T,%r28,Lot + addib,*<> -$SIZE_T,%r28,L\$ot ldo $SIZE_T($inp),$inp and,*<> $len,%r1,$len - b,n Ldone -Little + b,n L\$done +L\$ittle stb %r0,0($inp) - addib,*<> -1,$len,Little + addib,*<> -1,$len,L\$ittle ldo 1($inp),$inp -Ldone +L\$done bv ($rp) .EXIT nop @@ -151,7 +151,7 @@ OPENSSL_instrument_bus ldw 0($out),$tick add $diff,$tick,$tick stw $tick,0($out) -Loop +L\$oop mfctl %cr16,$tick sub $tick,$lasttick,$diff copy $tick,$lasttick @@ -161,7 +161,7 @@ Loop add $diff,$tick,$tick stw $tick,0($out) - addib,<> -1,$cnt,Loop + addib,<> -1,$cnt,L\$oop addi 4,$out,$out bv ($rp) @@ -190,14 +190,14 @@ OPENSSL_instrument_bus2 mfctl %cr16,$tick sub $tick,$lasttick,$diff copy $tick,$lasttick -Loop2 +L\$oop2 copy $diff,$lastdiff fdc 0($out) ldw 0($out),$tick add $diff,$tick,$tick stw $tick,0($out) - addib,= -1,$max,Ldone2 + addib,= -1,$max,L\$done2 nop mfctl %cr16,$tick @@ -208,17 +208,18 @@ Loop2 ldi 1,%r1 xor %r1,$tick,$tick - addb,<> $tick,$cnt,Loop2 + addb,<> $tick,$cnt,L\$oop2 shladd,l $tick,2,$out,$out -Ldone2 +L\$done2 bv ($rp) .EXIT add $rv,$cnt,$rv .PROCEND ___ } -$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); -$code =~ s/,\*/,/gm if ($SIZE_T==4); +$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); +$code =~ s/,\*/,/gm if ($SIZE_T==4); +$code =~ s/\bbv\b/bve/gm if ($SIZE_T==8); print $code; close STDOUT; diff --git a/openssl/crypto/pem/pem_info.c b/openssl/crypto/pem/pem_info.c index 1b2be527e..cc7f24a9c 100644 --- a/openssl/crypto/pem/pem_info.c +++ b/openssl/crypto/pem/pem_info.c @@ -167,6 +167,7 @@ start: #ifndef OPENSSL_NO_RSA if (strcmp(name,PEM_STRING_RSA) == 0) { + d2i=(D2I_OF(void))d2i_RSAPrivateKey; if (xi->x_pkey != NULL) { if (!sk_X509_INFO_push(ret,xi)) goto err; diff --git a/openssl/crypto/pkcs12/p12_crt.c b/openssl/crypto/pkcs12/p12_crt.c index 96b131def..a34915d02 100644 --- a/openssl/crypto/pkcs12/p12_crt.c +++ b/openssl/crypto/pkcs12/p12_crt.c @@ -90,7 +90,14 @@ PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, /* Set defaults */ if (!nid_cert) + { +#ifdef OPENSSL_FIPS + if (FIPS_mode()) + nid_cert = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; + else +#endif nid_cert = NID_pbe_WithSHA1And40BitRC2_CBC; + } if (!nid_key) nid_key = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; if (!iter) diff --git a/openssl/crypto/rand/md_rand.c b/openssl/crypto/rand/md_rand.c index 1e3bcb9bc..dd2916372 100644 --- a/openssl/crypto/rand/md_rand.c +++ b/openssl/crypto/rand/md_rand.c @@ -380,8 +380,11 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo) * are fed into the hash function and the results are kept in the * global 'md'. */ - - CRYPTO_w_lock(CRYPTO_LOCK_RAND); +#ifdef OPENSSL_FIPS + /* NB: in FIPS mode we are already under a lock */ + if (!FIPS_mode()) +#endif + CRYPTO_w_lock(CRYPTO_LOCK_RAND); /* prevent ssleay_rand_bytes() from trying to obtain the lock again */ CRYPTO_w_lock(CRYPTO_LOCK_RAND2); @@ -460,7 +463,10 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo) /* before unlocking, we must clear 'crypto_lock_rand' */ crypto_lock_rand = 0; - CRYPTO_w_unlock(CRYPTO_LOCK_RAND); +#ifdef OPENSSL_FIPS + if (!FIPS_mode()) +#endif + CRYPTO_w_unlock(CRYPTO_LOCK_RAND); while (num > 0) { @@ -512,10 +518,16 @@ static int ssleay_rand_bytes(unsigned char *buf, int num, int pseudo) MD_Init(&m); MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c)); MD_Update(&m,local_md,MD_DIGEST_LENGTH); - CRYPTO_w_lock(CRYPTO_LOCK_RAND); +#ifdef OPENSSL_FIPS + if (!FIPS_mode()) +#endif + CRYPTO_w_lock(CRYPTO_LOCK_RAND); MD_Update(&m,md,MD_DIGEST_LENGTH); MD_Final(&m,md); - CRYPTO_w_unlock(CRYPTO_LOCK_RAND); +#ifdef OPENSSL_FIPS + if (!FIPS_mode()) +#endif + CRYPTO_w_unlock(CRYPTO_LOCK_RAND); EVP_MD_CTX_cleanup(&m); if (ok) diff --git a/openssl/crypto/rand/rand.h b/openssl/crypto/rand/rand.h index dc8fcf94c..bb5520e80 100644 --- a/openssl/crypto/rand/rand.h +++ b/openssl/crypto/rand/rand.h @@ -138,6 +138,7 @@ void ERR_load_RAND_strings(void); #define RAND_F_SSLEAY_RAND_BYTES 100 /* Reason codes. */ +#define RAND_R_DUAL_EC_DRBG_DISABLED 104 #define RAND_R_ERROR_INITIALISING_DRBG 102 #define RAND_R_ERROR_INSTANTIATING_DRBG 103 #define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 diff --git a/openssl/crypto/rand/rand_err.c b/openssl/crypto/rand/rand_err.c index b8586c8f4..c4c80fc8c 100644 --- a/openssl/crypto/rand/rand_err.c +++ b/openssl/crypto/rand/rand_err.c @@ -78,6 +78,7 @@ static ERR_STRING_DATA RAND_str_functs[]= static ERR_STRING_DATA RAND_str_reasons[]= { +{ERR_REASON(RAND_R_DUAL_EC_DRBG_DISABLED),"dual ec drbg disabled"}, {ERR_REASON(RAND_R_ERROR_INITIALISING_DRBG),"error initialising drbg"}, {ERR_REASON(RAND_R_ERROR_INSTANTIATING_DRBG),"error instantiating drbg"}, {ERR_REASON(RAND_R_NO_FIPS_RANDOM_METHOD_SET),"no fips random method set"}, diff --git a/openssl/crypto/rand/rand_lib.c b/openssl/crypto/rand/rand_lib.c index 476a0cd18..5ac0e14ca 100644 --- a/openssl/crypto/rand/rand_lib.c +++ b/openssl/crypto/rand/rand_lib.c @@ -269,6 +269,14 @@ int RAND_init_fips(void) DRBG_CTX *dctx; size_t plen; unsigned char pers[32], *p; +#ifndef OPENSSL_ALLOW_DUAL_EC_DRBG + if (fips_drbg_type >> 16) + { + RANDerr(RAND_F_RAND_INIT_FIPS, RAND_R_DUAL_EC_DRBG_DISABLED); + return 0; + } +#endif + dctx = FIPS_get_default_drbg(); if (FIPS_drbg_init(dctx, fips_drbg_type, fips_drbg_flags) <= 0) { diff --git a/openssl/crypto/rc4/asm/rc4-parisc.pl b/openssl/crypto/rc4/asm/rc4-parisc.pl index 916506708..ad7e65651 100644 --- a/openssl/crypto/rc4/asm/rc4-parisc.pl +++ b/openssl/crypto/rc4/asm/rc4-parisc.pl @@ -307,7 +307,8 @@ L\$opts .STRINGZ "RC4 for PA-RISC, CRYPTOGAMS by " ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; -$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); +$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); +$code =~ s/\bbv\b/bve/gm if ($SIZE_T==8); print $code; close STDOUT; diff --git a/openssl/crypto/rsa/rsa_ameth.c b/openssl/crypto/rsa/rsa_ameth.c index 2460910ab..5a2062f90 100644 --- a/openssl/crypto/rsa/rsa_ameth.c +++ b/openssl/crypto/rsa/rsa_ameth.c @@ -351,27 +351,27 @@ static int rsa_pss_param_print(BIO *bp, RSA_PSS_PARAMS *pss, if (!BIO_indent(bp, indent, 128)) goto err; - if (BIO_puts(bp, "Salt Length: ") <= 0) + if (BIO_puts(bp, "Salt Length: 0x") <= 0) goto err; if (pss->saltLength) { if (i2a_ASN1_INTEGER(bp, pss->saltLength) <= 0) goto err; } - else if (BIO_puts(bp, "20 (default)") <= 0) + else if (BIO_puts(bp, "0x14 (default)") <= 0) goto err; BIO_puts(bp, "\n"); if (!BIO_indent(bp, indent, 128)) goto err; - if (BIO_puts(bp, "Trailer Field: ") <= 0) + if (BIO_puts(bp, "Trailer Field: 0x") <= 0) goto err; if (pss->trailerField) { if (i2a_ASN1_INTEGER(bp, pss->trailerField) <= 0) goto err; } - else if (BIO_puts(bp, "0xbc (default)") <= 0) + else if (BIO_puts(bp, "BC (default)") <= 0) goto err; BIO_puts(bp, "\n"); diff --git a/openssl/crypto/rsa/rsa_chk.c b/openssl/crypto/rsa/rsa_chk.c index 9d848db8c..cc30e7713 100644 --- a/openssl/crypto/rsa/rsa_chk.c +++ b/openssl/crypto/rsa/rsa_chk.c @@ -59,6 +59,12 @@ int RSA_check_key(const RSA *key) BN_CTX *ctx; int r; int ret=1; + + if (!key->p || !key->q || !key->n || !key->e || !key->d) + { + RSAerr(RSA_F_RSA_CHECK_KEY, RSA_R_VALUE_MISSING); + return 0; + } i = BN_new(); j = BN_new(); diff --git a/openssl/crypto/rsa/rsa_pmeth.c b/openssl/crypto/rsa/rsa_pmeth.c index 5b2ecf56a..157aa5c41 100644 --- a/openssl/crypto/rsa/rsa_pmeth.c +++ b/openssl/crypto/rsa/rsa_pmeth.c @@ -611,6 +611,8 @@ static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, pm = RSA_NO_PADDING; else if (!strcmp(value, "oeap")) pm = RSA_PKCS1_OAEP_PADDING; + else if (!strcmp(value, "oaep")) + pm = RSA_PKCS1_OAEP_PADDING; else if (!strcmp(value, "x931")) pm = RSA_X931_PADDING; else if (!strcmp(value, "pss")) diff --git a/openssl/crypto/sha/Makefile b/openssl/crypto/sha/Makefile index 6d191d393..2eb2b7af9 100644 --- a/openssl/crypto/sha/Makefile +++ b/openssl/crypto/sha/Makefile @@ -60,7 +60,9 @@ sha256-armv4.S: asm/sha256-armv4.pl $(PERL) $< $(PERLASM_SCHEME) $@ sha1-alpha.s: asm/sha1-alpha.pl - $(PERL) $< | $(CC) -E - | tee $@ > /dev/null + (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \ + $(PERL) asm/sha1-alpha.pl > $$preproc && \ + $(CC) -E $$preproc > $@ && rm $$preproc) # Solaris make has to be explicitly told sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@ diff --git a/openssl/crypto/sha/asm/sha1-parisc.pl b/openssl/crypto/sha/asm/sha1-parisc.pl index 6d7bf495b..6e5a328a6 100644 --- a/openssl/crypto/sha/asm/sha1-parisc.pl +++ b/openssl/crypto/sha/asm/sha1-parisc.pl @@ -254,6 +254,7 @@ $code.=<<___; ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; -$code =~ s/,\*/,/gm if ($SIZE_T==4); +$code =~ s/,\*/,/gm if ($SIZE_T==4); +$code =~ s/\bbv\b/bve/gm if ($SIZE_T==8); print $code; close STDOUT; diff --git a/openssl/crypto/sha/asm/sha1-x86_64.pl b/openssl/crypto/sha/asm/sha1-x86_64.pl index cfdc45cce..f15c7ec39 100644 --- a/openssl/crypto/sha/asm/sha1-x86_64.pl +++ b/openssl/crypto/sha/asm/sha1-x86_64.pl @@ -745,7 +745,7 @@ $code.=<<___; mov %rdi,$ctx # reassigned argument mov %rsi,$inp # reassigned argument mov %rdx,$num # reassigned argument - vzeroall + vzeroupper shl \$6,$num add $inp,$num @@ -1038,7 +1038,7 @@ ___ &Xtail_avx(\&body_20_39); $code.=<<___; - vzeroall + vzeroupper add 0($ctx),$A # update context add 4($ctx),@T[0] diff --git a/openssl/crypto/sha/asm/sha512-mips.pl b/openssl/crypto/sha/asm/sha512-mips.pl index ba5b25089..ffa053bb7 100644 --- a/openssl/crypto/sha/asm/sha512-mips.pl +++ b/openssl/crypto/sha/asm/sha512-mips.pl @@ -351,7 +351,7 @@ $code.=<<___; $ST $G,6*$SZ($ctx) $ST $H,7*$SZ($ctx) - bnel $inp,@X[15],.Loop + bne $inp,@X[15],.Loop $PTR_SUB $Ktbl,`($rounds-16)*$SZ` # rewind $Ktbl $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) diff --git a/openssl/crypto/sha/asm/sha512-parisc.pl b/openssl/crypto/sha/asm/sha512-parisc.pl index e24ee58ae..fc0e15b3c 100644 --- a/openssl/crypto/sha/asm/sha512-parisc.pl +++ b/openssl/crypto/sha/asm/sha512-parisc.pl @@ -785,6 +785,8 @@ foreach (split("\n",$code)) { s/cmpb,\*/comb,/ if ($SIZE_T==4); + s/\bbv\b/bve/ if ($SIZE_T==8); + print $_,"\n"; } diff --git a/openssl/crypto/sha/sha512.c b/openssl/crypto/sha/sha512.c index 50dd7dc74..50c229dde 100644 --- a/openssl/crypto/sha/sha512.c +++ b/openssl/crypto/sha/sha512.c @@ -232,7 +232,14 @@ int SHA384_Update (SHA512_CTX *c, const void *data, size_t len) { return SHA512_Update (c,data,len); } void SHA512_Transform (SHA512_CTX *c, const unsigned char *data) -{ sha512_block_data_order (c,data,1); } + { +#ifndef SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA + if ((size_t)data%sizeof(c->u.d[0]) != 0) + memcpy(c->u.p,data,sizeof(c->u.p)), + data = c->u.p; +#endif + sha512_block_data_order (c,data,1); + } unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md) { diff --git a/openssl/crypto/srp/srp_grps.h b/openssl/crypto/srp/srp_grps.h index d77c9fff4..8e3c35e3f 100644 --- a/openssl/crypto/srp/srp_grps.h +++ b/openssl/crypto/srp/srp_grps.h @@ -1,22 +1,22 @@ /* start of generated data */ static BN_ULONG bn_group_1024_value[] = { - bn_pack4(9FC6,1D2F,C0EB,06E3), - bn_pack4(FD51,38FE,8376,435B), - bn_pack4(2FD4,CBF4,976E,AA9A), - bn_pack4(68ED,BC3C,0572,6CC0), - bn_pack4(C529,F566,660E,57EC), - bn_pack4(8255,9B29,7BCF,1885), - bn_pack4(CE8E,F4AD,69B1,5D49), - bn_pack4(5DC7,D7B4,6154,D6B6), - bn_pack4(8E49,5C1D,6089,DAD1), - bn_pack4(E0D5,D8E2,50B9,8BE4), - bn_pack4(383B,4813,D692,C6E0), - bn_pack4(D674,DF74,96EA,81D3), - bn_pack4(9EA2,314C,9C25,6576), - bn_pack4(6072,6187,75FF,3C0B), - bn_pack4(9C33,F80A,FA8F,C5E8), - bn_pack4(EEAF,0AB9,ADB3,8DD6) + bn_pack4(0x9FC6,0x1D2F,0xC0EB,0x06E3), + bn_pack4(0xFD51,0x38FE,0x8376,0x435B), + bn_pack4(0x2FD4,0xCBF4,0x976E,0xAA9A), + bn_pack4(0x68ED,0xBC3C,0x0572,0x6CC0), + bn_pack4(0xC529,0xF566,0x660E,0x57EC), + bn_pack4(0x8255,0x9B29,0x7BCF,0x1885), + bn_pack4(0xCE8E,0xF4AD,0x69B1,0x5D49), + bn_pack4(0x5DC7,0xD7B4,0x6154,0xD6B6), + bn_pack4(0x8E49,0x5C1D,0x6089,0xDAD1), + bn_pack4(0xE0D5,0xD8E2,0x50B9,0x8BE4), + bn_pack4(0x383B,0x4813,0xD692,0xC6E0), + bn_pack4(0xD674,0xDF74,0x96EA,0x81D3), + bn_pack4(0x9EA2,0x314C,0x9C25,0x6576), + bn_pack4(0x6072,0x6187,0x75FF,0x3C0B), + bn_pack4(0x9C33,0xF80A,0xFA8F,0xC5E8), + bn_pack4(0xEEAF,0x0AB9,0xADB3,0x8DD6) }; static BIGNUM bn_group_1024 = { bn_group_1024_value, @@ -27,30 +27,30 @@ static BIGNUM bn_group_1024 = { }; static BN_ULONG bn_group_1536_value[] = { - bn_pack4(CF76,E3FE,D135,F9BB), - bn_pack4(1518,0F93,499A,234D), - bn_pack4(8CE7,A28C,2442,C6F3), - bn_pack4(5A02,1FFF,5E91,479E), - bn_pack4(7F8A,2FE9,B8B5,292E), - bn_pack4(837C,264A,E3A9,BEB8), - bn_pack4(E442,734A,F7CC,B7AE), - bn_pack4(6577,2E43,7D6C,7F8C), - bn_pack4(DB2F,D53D,24B7,C486), - bn_pack4(6EDF,0195,3934,9627), - bn_pack4(158B,FD3E,2B9C,8CF5), - bn_pack4(764E,3F4B,53DD,9DA1), - bn_pack4(4754,8381,DBC5,B1FC), - bn_pack4(9B60,9E0B,E3BA,B63D), - bn_pack4(8134,B1C8,B979,8914), - bn_pack4(DF02,8A7C,EC67,F0D0), - bn_pack4(80B6,55BB,9A22,E8DC), - bn_pack4(1558,903B,A0D0,F843), - bn_pack4(51C6,A94B,E460,7A29), - bn_pack4(5F4F,5F55,6E27,CBDE), - bn_pack4(BEEE,A961,4B19,CC4D), - bn_pack4(DBA5,1DF4,99AC,4C80), - bn_pack4(B1F1,2A86,17A4,7BBB), - bn_pack4(9DEF,3CAF,B939,277A) + bn_pack4(0xCF76,0xE3FE,0xD135,0xF9BB), + bn_pack4(0x1518,0x0F93,0x499A,0x234D), + bn_pack4(0x8CE7,0xA28C,0x2442,0xC6F3), + bn_pack4(0x5A02,0x1FFF,0x5E91,0x479E), + bn_pack4(0x7F8A,0x2FE9,0xB8B5,0x292E), + bn_pack4(0x837C,0x264A,0xE3A9,0xBEB8), + bn_pack4(0xE442,0x734A,0xF7CC,0xB7AE), + bn_pack4(0x6577,0x2E43,0x7D6C,0x7F8C), + bn_pack4(0xDB2F,0xD53D,0x24B7,0xC486), + bn_pack4(0x6EDF,0x0195,0x3934,0x9627), + bn_pack4(0x158B,0xFD3E,0x2B9C,0x8CF5), + bn_pack4(0x764E,0x3F4B,0x53DD,0x9DA1), + bn_pack4(0x4754,0x8381,0xDBC5,0xB1FC), + bn_pack4(0x9B60,0x9E0B,0xE3BA,0xB63D), + bn_pack4(0x8134,0xB1C8,0xB979,0x8914), + bn_pack4(0xDF02,0x8A7C,0xEC67,0xF0D0), + bn_pack4(0x80B6,0x55BB,0x9A22,0xE8DC), + bn_pack4(0x1558,0x903B,0xA0D0,0xF843), + bn_pack4(0x51C6,0xA94B,0xE460,0x7A29), + bn_pack4(0x5F4F,0x5F55,0x6E27,0xCBDE), + bn_pack4(0xBEEE,0xA961,0x4B19,0xCC4D), + bn_pack4(0xDBA5,0x1DF4,0x99AC,0x4C80), + bn_pack4(0xB1F1,0x2A86,0x17A4,0x7BBB), + bn_pack4(0x9DEF,0x3CAF,0xB939,0x277A) }; static BIGNUM bn_group_1536 = { bn_group_1536_value, @@ -61,38 +61,38 @@ static BIGNUM bn_group_1536 = { }; static BN_ULONG bn_group_2048_value[] = { - bn_pack4(0FA7,111F,9E4A,FF73), - bn_pack4(9B65,E372,FCD6,8EF2), - bn_pack4(35DE,236D,525F,5475), - bn_pack4(94B5,C803,D89F,7AE4), - bn_pack4(71AE,35F8,E9DB,FBB6), - bn_pack4(2A56,98F3,A8D0,C382), - bn_pack4(9CCC,041C,7BC3,08D8), - bn_pack4(AF87,4E73,03CE,5329), - bn_pack4(6160,2790,04E5,7AE6), - bn_pack4(032C,FBDB,F52F,B378), - bn_pack4(5EA7,7A27,75D2,ECFA), - bn_pack4(5445,23B5,24B0,D57D), - bn_pack4(5B9D,32E6,88F8,7748), - bn_pack4(F1D2,B907,8717,461A), - bn_pack4(76BD,207A,436C,6481), - bn_pack4(CA97,B43A,23FB,8016), - bn_pack4(1D28,1E44,6B14,773B), - bn_pack4(7359,D041,D5C3,3EA7), - bn_pack4(A80D,740A,DBF4,FF74), - bn_pack4(55F9,7993,EC97,5EEA), - bn_pack4(2918,A996,2F0B,93B8), - bn_pack4(661A,05FB,D5FA,AAE8), - bn_pack4(CF60,9517,9A16,3AB3), - bn_pack4(E808,3969,EDB7,67B0), - bn_pack4(CD7F,48A9,DA04,FD50), - bn_pack4(D523,12AB,4B03,310D), - bn_pack4(8193,E075,7767,A13D), - bn_pack4(A373,29CB,B4A0,99ED), - bn_pack4(FC31,9294,3DB5,6050), - bn_pack4(AF72,B665,1987,EE07), - bn_pack4(F166,DE5E,1389,582F), - bn_pack4(AC6B,DB41,324A,9A9B) + bn_pack4(0x0FA7,0x111F,0x9E4A,0xFF73), + bn_pack4(0x9B65,0xE372,0xFCD6,0x8EF2), + bn_pack4(0x35DE,0x236D,0x525F,0x5475), + bn_pack4(0x94B5,0xC803,0xD89F,0x7AE4), + bn_pack4(0x71AE,0x35F8,0xE9DB,0xFBB6), + bn_pack4(0x2A56,0x98F3,0xA8D0,0xC382), + bn_pack4(0x9CCC,0x041C,0x7BC3,0x08D8), + bn_pack4(0xAF87,0x4E73,0x03CE,0x5329), + bn_pack4(0x6160,0x2790,0x04E5,0x7AE6), + bn_pack4(0x032C,0xFBDB,0xF52F,0xB378), + bn_pack4(0x5EA7,0x7A27,0x75D2,0xECFA), + bn_pack4(0x5445,0x23B5,0x24B0,0xD57D), + bn_pack4(0x5B9D,0x32E6,0x88F8,0x7748), + bn_pack4(0xF1D2,0xB907,0x8717,0x461A), + bn_pack4(0x76BD,0x207A,0x436C,0x6481), + bn_pack4(0xCA97,0xB43A,0x23FB,0x8016), + bn_pack4(0x1D28,0x1E44,0x6B14,0x773B), + bn_pack4(0x7359,0xD041,0xD5C3,0x3EA7), + bn_pack4(0xA80D,0x740A,0xDBF4,0xFF74), + bn_pack4(0x55F9,0x7993,0xEC97,0x5EEA), + bn_pack4(0x2918,0xA996,0x2F0B,0x93B8), + bn_pack4(0x661A,0x05FB,0xD5FA,0xAAE8), + bn_pack4(0xCF60,0x9517,0x9A16,0x3AB3), + bn_pack4(0xE808,0x3969,0xEDB7,0x67B0), + bn_pack4(0xCD7F,0x48A9,0xDA04,0xFD50), + bn_pack4(0xD523,0x12AB,0x4B03,0x310D), + bn_pack4(0x8193,0xE075,0x7767,0xA13D), + bn_pack4(0xA373,0x29CB,0xB4A0,0x99ED), + bn_pack4(0xFC31,0x9294,0x3DB5,0x6050), + bn_pack4(0xAF72,0xB665,0x1987,0xEE07), + bn_pack4(0xF166,0xDE5E,0x1389,0x582F), + bn_pack4(0xAC6B,0xDB41,0x324A,0x9A9B) }; static BIGNUM bn_group_2048 = { bn_group_2048_value, @@ -103,54 +103,54 @@ static BIGNUM bn_group_2048 = { }; static BN_ULONG bn_group_3072_value[] = { - bn_pack4(FFFF,FFFF,FFFF,FFFF), - bn_pack4(4B82,D120,A93A,D2CA), - bn_pack4(43DB,5BFC,E0FD,108E), - bn_pack4(08E2,4FA0,74E5,AB31), - bn_pack4(7709,88C0,BAD9,46E2), - bn_pack4(BBE1,1757,7A61,5D6C), - bn_pack4(521F,2B18,177B,200C), - bn_pack4(D876,0273,3EC8,6A64), - bn_pack4(F12F,FA06,D98A,0864), - bn_pack4(CEE3,D226,1AD2,EE6B), - bn_pack4(1E8C,94E0,4A25,619D), - bn_pack4(ABF5,AE8C,DB09,33D7), - bn_pack4(B397,0F85,A6E1,E4C7), - bn_pack4(8AEA,7157,5D06,0C7D), - bn_pack4(ECFB,8504,58DB,EF0A), - bn_pack4(A855,21AB,DF1C,BA64), - bn_pack4(AD33,170D,0450,7A33), - bn_pack4(1572,8E5A,8AAA,C42D), - bn_pack4(15D2,2618,98FA,0510), - bn_pack4(3995,497C,EA95,6AE5), - bn_pack4(DE2B,CBF6,9558,1718), - bn_pack4(B5C5,5DF0,6F4C,52C9), - bn_pack4(9B27,83A2,EC07,A28F), - bn_pack4(E39E,772C,180E,8603), - bn_pack4(3290,5E46,2E36,CE3B), - bn_pack4(F174,6C08,CA18,217C), - bn_pack4(670C,354E,4ABC,9804), - bn_pack4(9ED5,2907,7096,966D), - bn_pack4(1C62,F356,2085,52BB), - bn_pack4(8365,5D23,DCA3,AD96), - bn_pack4(6916,3FA8,FD24,CF5F), - bn_pack4(98DA,4836,1C55,D39A), - bn_pack4(C200,7CB8,A163,BF05), - bn_pack4(4928,6651,ECE4,5B3D), - bn_pack4(AE9F,2411,7C4B,1FE6), - bn_pack4(EE38,6BFB,5A89,9FA5), - bn_pack4(0BFF,5CB6,F406,B7ED), - bn_pack4(F44C,42E9,A637,ED6B), - bn_pack4(E485,B576,625E,7EC6), - bn_pack4(4FE1,356D,6D51,C245), - bn_pack4(302B,0A6D,F25F,1437), - bn_pack4(EF95,19B3,CD3A,431B), - bn_pack4(514A,0879,8E34,04DD), - bn_pack4(020B,BEA6,3B13,9B22), - bn_pack4(2902,4E08,8A67,CC74), - bn_pack4(C4C6,628B,80DC,1CD1), - bn_pack4(C90F,DAA2,2168,C234), - bn_pack4(FFFF,FFFF,FFFF,FFFF) + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF), + bn_pack4(0x4B82,0xD120,0xA93A,0xD2CA), + bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E), + bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31), + bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2), + bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C), + bn_pack4(0x521F,0x2B18,0x177B,0x200C), + bn_pack4(0xD876,0x0273,0x3EC8,0x6A64), + bn_pack4(0xF12F,0xFA06,0xD98A,0x0864), + bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B), + bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D), + bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7), + bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7), + bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D), + bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A), + bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64), + bn_pack4(0xAD33,0x170D,0x0450,0x7A33), + bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D), + bn_pack4(0x15D2,0x2618,0x98FA,0x0510), + bn_pack4(0x3995,0x497C,0xEA95,0x6AE5), + bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718), + bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9), + bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F), + bn_pack4(0xE39E,0x772C,0x180E,0x8603), + bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B), + bn_pack4(0xF174,0x6C08,0xCA18,0x217C), + bn_pack4(0x670C,0x354E,0x4ABC,0x9804), + bn_pack4(0x9ED5,0x2907,0x7096,0x966D), + bn_pack4(0x1C62,0xF356,0x2085,0x52BB), + bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96), + bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F), + bn_pack4(0x98DA,0x4836,0x1C55,0xD39A), + bn_pack4(0xC200,0x7CB8,0xA163,0xBF05), + bn_pack4(0x4928,0x6651,0xECE4,0x5B3D), + bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6), + bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5), + bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED), + bn_pack4(0xF44C,0x42E9,0xA637,0xED6B), + bn_pack4(0xE485,0xB576,0x625E,0x7EC6), + bn_pack4(0x4FE1,0x356D,0x6D51,0xC245), + bn_pack4(0x302B,0x0A6D,0xF25F,0x1437), + bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B), + bn_pack4(0x514A,0x0879,0x8E34,0x04DD), + bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22), + bn_pack4(0x2902,0x4E08,0x8A67,0xCC74), + bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1), + bn_pack4(0xC90F,0xDAA2,0x2168,0xC234), + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF) }; static BIGNUM bn_group_3072 = { bn_group_3072_value, @@ -161,70 +161,70 @@ static BIGNUM bn_group_3072 = { }; static BN_ULONG bn_group_4096_value[] = { - bn_pack4(FFFF,FFFF,FFFF,FFFF), - bn_pack4(4DF4,35C9,3406,3199), - bn_pack4(86FF,B7DC,90A6,C08F), - bn_pack4(93B4,EA98,8D8F,DDC1), - bn_pack4(D006,9127,D5B0,5AA9), - bn_pack4(B81B,DD76,2170,481C), - bn_pack4(1F61,2970,CEE2,D7AF), - bn_pack4(233B,A186,515B,E7ED), - bn_pack4(99B2,964F,A090,C3A2), - bn_pack4(287C,5947,4E6B,C05D), - bn_pack4(2E8E,FC14,1FBE,CAA6), - bn_pack4(DBBB,C2DB,04DE,8EF9), - bn_pack4(2583,E9CA,2AD4,4CE8), - bn_pack4(1A94,6834,B615,0BDA), - bn_pack4(99C3,2718,6AF4,E23C), - bn_pack4(8871,9A10,BDBA,5B26), - bn_pack4(1A72,3C12,A787,E6D7), - bn_pack4(4B82,D120,A921,0801), - bn_pack4(43DB,5BFC,E0FD,108E), - bn_pack4(08E2,4FA0,74E5,AB31), - bn_pack4(7709,88C0,BAD9,46E2), - bn_pack4(BBE1,1757,7A61,5D6C), - bn_pack4(521F,2B18,177B,200C), - bn_pack4(D876,0273,3EC8,6A64), - bn_pack4(F12F,FA06,D98A,0864), - bn_pack4(CEE3,D226,1AD2,EE6B), - bn_pack4(1E8C,94E0,4A25,619D), - bn_pack4(ABF5,AE8C,DB09,33D7), - bn_pack4(B397,0F85,A6E1,E4C7), - bn_pack4(8AEA,7157,5D06,0C7D), - bn_pack4(ECFB,8504,58DB,EF0A), - bn_pack4(A855,21AB,DF1C,BA64), - bn_pack4(AD33,170D,0450,7A33), - bn_pack4(1572,8E5A,8AAA,C42D), - bn_pack4(15D2,2618,98FA,0510), - bn_pack4(3995,497C,EA95,6AE5), - bn_pack4(DE2B,CBF6,9558,1718), - bn_pack4(B5C5,5DF0,6F4C,52C9), - bn_pack4(9B27,83A2,EC07,A28F), - bn_pack4(E39E,772C,180E,8603), - bn_pack4(3290,5E46,2E36,CE3B), - bn_pack4(F174,6C08,CA18,217C), - bn_pack4(670C,354E,4ABC,9804), - bn_pack4(9ED5,2907,7096,966D), - bn_pack4(1C62,F356,2085,52BB), - bn_pack4(8365,5D23,DCA3,AD96), - bn_pack4(6916,3FA8,FD24,CF5F), - bn_pack4(98DA,4836,1C55,D39A), - bn_pack4(C200,7CB8,A163,BF05), - bn_pack4(4928,6651,ECE4,5B3D), - bn_pack4(AE9F,2411,7C4B,1FE6), - bn_pack4(EE38,6BFB,5A89,9FA5), - bn_pack4(0BFF,5CB6,F406,B7ED), - bn_pack4(F44C,42E9,A637,ED6B), - bn_pack4(E485,B576,625E,7EC6), - bn_pack4(4FE1,356D,6D51,C245), - bn_pack4(302B,0A6D,F25F,1437), - bn_pack4(EF95,19B3,CD3A,431B), - bn_pack4(514A,0879,8E34,04DD), - bn_pack4(020B,BEA6,3B13,9B22), - bn_pack4(2902,4E08,8A67,CC74), - bn_pack4(C4C6,628B,80DC,1CD1), - bn_pack4(C90F,DAA2,2168,C234), - bn_pack4(FFFF,FFFF,FFFF,FFFF) + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF), + bn_pack4(0x4DF4,0x35C9,0x3406,0x3199), + bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F), + bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1), + bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9), + bn_pack4(0xB81B,0xDD76,0x2170,0x481C), + bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF), + bn_pack4(0x233B,0xA186,0x515B,0xE7ED), + bn_pack4(0x99B2,0x964F,0xA090,0xC3A2), + bn_pack4(0x287C,0x5947,0x4E6B,0xC05D), + bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6), + bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9), + bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8), + bn_pack4(0x1A94,0x6834,0xB615,0x0BDA), + bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C), + bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26), + bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7), + bn_pack4(0x4B82,0xD120,0xA921,0x0801), + bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E), + bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31), + bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2), + bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C), + bn_pack4(0x521F,0x2B18,0x177B,0x200C), + bn_pack4(0xD876,0x0273,0x3EC8,0x6A64), + bn_pack4(0xF12F,0xFA06,0xD98A,0x0864), + bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B), + bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D), + bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7), + bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7), + bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D), + bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A), + bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64), + bn_pack4(0xAD33,0x170D,0x0450,0x7A33), + bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D), + bn_pack4(0x15D2,0x2618,0x98FA,0x0510), + bn_pack4(0x3995,0x497C,0xEA95,0x6AE5), + bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718), + bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9), + bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F), + bn_pack4(0xE39E,0x772C,0x180E,0x8603), + bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B), + bn_pack4(0xF174,0x6C08,0xCA18,0x217C), + bn_pack4(0x670C,0x354E,0x4ABC,0x9804), + bn_pack4(0x9ED5,0x2907,0x7096,0x966D), + bn_pack4(0x1C62,0xF356,0x2085,0x52BB), + bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96), + bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F), + bn_pack4(0x98DA,0x4836,0x1C55,0xD39A), + bn_pack4(0xC200,0x7CB8,0xA163,0xBF05), + bn_pack4(0x4928,0x6651,0xECE4,0x5B3D), + bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6), + bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5), + bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED), + bn_pack4(0xF44C,0x42E9,0xA637,0xED6B), + bn_pack4(0xE485,0xB576,0x625E,0x7EC6), + bn_pack4(0x4FE1,0x356D,0x6D51,0xC245), + bn_pack4(0x302B,0x0A6D,0xF25F,0x1437), + bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B), + bn_pack4(0x514A,0x0879,0x8E34,0x04DD), + bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22), + bn_pack4(0x2902,0x4E08,0x8A67,0xCC74), + bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1), + bn_pack4(0xC90F,0xDAA2,0x2168,0xC234), + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF) }; static BIGNUM bn_group_4096 = { bn_group_4096_value, @@ -235,102 +235,102 @@ static BIGNUM bn_group_4096 = { }; static BN_ULONG bn_group_6144_value[] = { - bn_pack4(FFFF,FFFF,FFFF,FFFF), - bn_pack4(E694,F91E,6DCC,4024), - bn_pack4(12BF,2D5B,0B74,74D6), - bn_pack4(043E,8F66,3F48,60EE), - bn_pack4(387F,E8D7,6E3C,0468), - bn_pack4(DA56,C9EC,2EF2,9632), - bn_pack4(EB19,CCB1,A313,D55C), - bn_pack4(F550,AA3D,8A1F,BFF0), - bn_pack4(06A1,D58B,B7C5,DA76), - bn_pack4(A797,15EE,F29B,E328), - bn_pack4(14CC,5ED2,0F80,37E0), - bn_pack4(CC8F,6D7E,BF48,E1D8), - bn_pack4(4BD4,07B2,2B41,54AA), - bn_pack4(0F1D,45B7,FF58,5AC5), - bn_pack4(23A9,7A7E,36CC,88BE), - bn_pack4(59E7,C97F,BEC7,E8F3), - bn_pack4(B5A8,4031,900B,1C9E), - bn_pack4(D55E,702F,4698,0C82), - bn_pack4(F482,D7CE,6E74,FEF6), - bn_pack4(F032,EA15,D172,1D03), - bn_pack4(5983,CA01,C64B,92EC), - bn_pack4(6FB8,F401,378C,D2BF), - bn_pack4(3320,5151,2BD7,AF42), - bn_pack4(DB7F,1447,E6CC,254B), - bn_pack4(44CE,6CBA,CED4,BB1B), - bn_pack4(DA3E,DBEB,CF9B,14ED), - bn_pack4(1797,27B0,865A,8918), - bn_pack4(B06A,53ED,9027,D831), - bn_pack4(E5DB,382F,4130,01AE), - bn_pack4(F8FF,9406,AD9E,530E), - bn_pack4(C975,1E76,3DBA,37BD), - bn_pack4(C1D4,DCB2,6026,46DE), - bn_pack4(36C3,FAB4,D27C,7026), - bn_pack4(4DF4,35C9,3402,8492), - bn_pack4(86FF,B7DC,90A6,C08F), - bn_pack4(93B4,EA98,8D8F,DDC1), - bn_pack4(D006,9127,D5B0,5AA9), - bn_pack4(B81B,DD76,2170,481C), - bn_pack4(1F61,2970,CEE2,D7AF), - bn_pack4(233B,A186,515B,E7ED), - bn_pack4(99B2,964F,A090,C3A2), - bn_pack4(287C,5947,4E6B,C05D), - bn_pack4(2E8E,FC14,1FBE,CAA6), - bn_pack4(DBBB,C2DB,04DE,8EF9), - bn_pack4(2583,E9CA,2AD4,4CE8), - bn_pack4(1A94,6834,B615,0BDA), - bn_pack4(99C3,2718,6AF4,E23C), - bn_pack4(8871,9A10,BDBA,5B26), - bn_pack4(1A72,3C12,A787,E6D7), - bn_pack4(4B82,D120,A921,0801), - bn_pack4(43DB,5BFC,E0FD,108E), - bn_pack4(08E2,4FA0,74E5,AB31), - bn_pack4(7709,88C0,BAD9,46E2), - bn_pack4(BBE1,1757,7A61,5D6C), - bn_pack4(521F,2B18,177B,200C), - bn_pack4(D876,0273,3EC8,6A64), - bn_pack4(F12F,FA06,D98A,0864), - bn_pack4(CEE3,D226,1AD2,EE6B), - bn_pack4(1E8C,94E0,4A25,619D), - bn_pack4(ABF5,AE8C,DB09,33D7), - bn_pack4(B397,0F85,A6E1,E4C7), - bn_pack4(8AEA,7157,5D06,0C7D), - bn_pack4(ECFB,8504,58DB,EF0A), - bn_pack4(A855,21AB,DF1C,BA64), - bn_pack4(AD33,170D,0450,7A33), - bn_pack4(1572,8E5A,8AAA,C42D), - bn_pack4(15D2,2618,98FA,0510), - bn_pack4(3995,497C,EA95,6AE5), - bn_pack4(DE2B,CBF6,9558,1718), - bn_pack4(B5C5,5DF0,6F4C,52C9), - bn_pack4(9B27,83A2,EC07,A28F), - bn_pack4(E39E,772C,180E,8603), - bn_pack4(3290,5E46,2E36,CE3B), - bn_pack4(F174,6C08,CA18,217C), - bn_pack4(670C,354E,4ABC,9804), - bn_pack4(9ED5,2907,7096,966D), - bn_pack4(1C62,F356,2085,52BB), - bn_pack4(8365,5D23,DCA3,AD96), - bn_pack4(6916,3FA8,FD24,CF5F), - bn_pack4(98DA,4836,1C55,D39A), - bn_pack4(C200,7CB8,A163,BF05), - bn_pack4(4928,6651,ECE4,5B3D), - bn_pack4(AE9F,2411,7C4B,1FE6), - bn_pack4(EE38,6BFB,5A89,9FA5), - bn_pack4(0BFF,5CB6,F406,B7ED), - bn_pack4(F44C,42E9,A637,ED6B), - bn_pack4(E485,B576,625E,7EC6), - bn_pack4(4FE1,356D,6D51,C245), - bn_pack4(302B,0A6D,F25F,1437), - bn_pack4(EF95,19B3,CD3A,431B), - bn_pack4(514A,0879,8E34,04DD), - bn_pack4(020B,BEA6,3B13,9B22), - bn_pack4(2902,4E08,8A67,CC74), - bn_pack4(C4C6,628B,80DC,1CD1), - bn_pack4(C90F,DAA2,2168,C234), - bn_pack4(FFFF,FFFF,FFFF,FFFF) + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF), + bn_pack4(0xE694,0xF91E,0x6DCC,0x4024), + bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6), + bn_pack4(0x043E,0x8F66,0x3F48,0x60EE), + bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468), + bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632), + bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C), + bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0), + bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76), + bn_pack4(0xA797,0x15EE,0xF29B,0xE328), + bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0), + bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8), + bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA), + bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5), + bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE), + bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3), + bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E), + bn_pack4(0xD55E,0x702F,0x4698,0x0C82), + bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6), + bn_pack4(0xF032,0xEA15,0xD172,0x1D03), + bn_pack4(0x5983,0xCA01,0xC64B,0x92EC), + bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF), + bn_pack4(0x3320,0x5151,0x2BD7,0xAF42), + bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B), + bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B), + bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED), + bn_pack4(0x1797,0x27B0,0x865A,0x8918), + bn_pack4(0xB06A,0x53ED,0x9027,0xD831), + bn_pack4(0xE5DB,0x382F,0x4130,0x01AE), + bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E), + bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD), + bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE), + bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026), + bn_pack4(0x4DF4,0x35C9,0x3402,0x8492), + bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F), + bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1), + bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9), + bn_pack4(0xB81B,0xDD76,0x2170,0x481C), + bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF), + bn_pack4(0x233B,0xA186,0x515B,0xE7ED), + bn_pack4(0x99B2,0x964F,0xA090,0xC3A2), + bn_pack4(0x287C,0x5947,0x4E6B,0xC05D), + bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6), + bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9), + bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8), + bn_pack4(0x1A94,0x6834,0xB615,0x0BDA), + bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C), + bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26), + bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7), + bn_pack4(0x4B82,0xD120,0xA921,0x0801), + bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E), + bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31), + bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2), + bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C), + bn_pack4(0x521F,0x2B18,0x177B,0x200C), + bn_pack4(0xD876,0x0273,0x3EC8,0x6A64), + bn_pack4(0xF12F,0xFA06,0xD98A,0x0864), + bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B), + bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D), + bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7), + bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7), + bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D), + bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A), + bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64), + bn_pack4(0xAD33,0x170D,0x0450,0x7A33), + bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D), + bn_pack4(0x15D2,0x2618,0x98FA,0x0510), + bn_pack4(0x3995,0x497C,0xEA95,0x6AE5), + bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718), + bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9), + bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F), + bn_pack4(0xE39E,0x772C,0x180E,0x8603), + bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B), + bn_pack4(0xF174,0x6C08,0xCA18,0x217C), + bn_pack4(0x670C,0x354E,0x4ABC,0x9804), + bn_pack4(0x9ED5,0x2907,0x7096,0x966D), + bn_pack4(0x1C62,0xF356,0x2085,0x52BB), + bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96), + bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F), + bn_pack4(0x98DA,0x4836,0x1C55,0xD39A), + bn_pack4(0xC200,0x7CB8,0xA163,0xBF05), + bn_pack4(0x4928,0x6651,0xECE4,0x5B3D), + bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6), + bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5), + bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED), + bn_pack4(0xF44C,0x42E9,0xA637,0xED6B), + bn_pack4(0xE485,0xB576,0x625E,0x7EC6), + bn_pack4(0x4FE1,0x356D,0x6D51,0xC245), + bn_pack4(0x302B,0x0A6D,0xF25F,0x1437), + bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B), + bn_pack4(0x514A,0x0879,0x8E34,0x04DD), + bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22), + bn_pack4(0x2902,0x4E08,0x8A67,0xCC74), + bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1), + bn_pack4(0xC90F,0xDAA2,0x2168,0xC234), + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF) }; static BIGNUM bn_group_6144 = { bn_group_6144_value, @@ -341,134 +341,134 @@ static BIGNUM bn_group_6144 = { }; static BN_ULONG bn_group_8192_value[] = { - bn_pack4(FFFF,FFFF,FFFF,FFFF), - bn_pack4(60C9,80DD,98ED,D3DF), - bn_pack4(C81F,56E8,80B9,6E71), - bn_pack4(9E30,50E2,7656,94DF), - bn_pack4(9558,E447,5677,E9AA), - bn_pack4(C919,0DA6,FC02,6E47), - bn_pack4(889A,002E,D5EE,382B), - bn_pack4(4009,438B,481C,6CD7), - bn_pack4(3590,46F4,EB87,9F92), - bn_pack4(FAF3,6BC3,1ECF,A268), - bn_pack4(B1D5,10BD,7EE7,4D73), - bn_pack4(F9AB,4819,5DED,7EA1), - bn_pack4(64F3,1CC5,0846,851D), - bn_pack4(4597,E899,A025,5DC1), - bn_pack4(DF31,0EE0,74AB,6A36), - bn_pack4(6D2A,13F8,3F44,F82D), - bn_pack4(062B,3CF5,B3A2,78A6), - bn_pack4(7968,3303,ED5B,DD3A), - bn_pack4(FA9D,4B7F,A2C0,87E8), - bn_pack4(4BCB,C886,2F83,85DD), - bn_pack4(3473,FC64,6CEA,306B), - bn_pack4(13EB,57A8,1A23,F0C7), - bn_pack4(2222,2E04,A403,7C07), - bn_pack4(E3FD,B8BE,FC84,8AD9), - bn_pack4(238F,16CB,E39D,652D), - bn_pack4(3423,B474,2BF1,C978), - bn_pack4(3AAB,639C,5AE4,F568), - bn_pack4(2576,F693,6BA4,2466), - bn_pack4(741F,A7BF,8AFC,47ED), - bn_pack4(3BC8,32B6,8D9D,D300), - bn_pack4(D8BE,C4D0,73B9,31BA), - bn_pack4(3877,7CB6,A932,DF8C), - bn_pack4(74A3,926F,12FE,E5E4), - bn_pack4(E694,F91E,6DBE,1159), - bn_pack4(12BF,2D5B,0B74,74D6), - bn_pack4(043E,8F66,3F48,60EE), - bn_pack4(387F,E8D7,6E3C,0468), - bn_pack4(DA56,C9EC,2EF2,9632), - bn_pack4(EB19,CCB1,A313,D55C), - bn_pack4(F550,AA3D,8A1F,BFF0), - bn_pack4(06A1,D58B,B7C5,DA76), - bn_pack4(A797,15EE,F29B,E328), - bn_pack4(14CC,5ED2,0F80,37E0), - bn_pack4(CC8F,6D7E,BF48,E1D8), - bn_pack4(4BD4,07B2,2B41,54AA), - bn_pack4(0F1D,45B7,FF58,5AC5), - bn_pack4(23A9,7A7E,36CC,88BE), - bn_pack4(59E7,C97F,BEC7,E8F3), - bn_pack4(B5A8,4031,900B,1C9E), - bn_pack4(D55E,702F,4698,0C82), - bn_pack4(F482,D7CE,6E74,FEF6), - bn_pack4(F032,EA15,D172,1D03), - bn_pack4(5983,CA01,C64B,92EC), - bn_pack4(6FB8,F401,378C,D2BF), - bn_pack4(3320,5151,2BD7,AF42), - bn_pack4(DB7F,1447,E6CC,254B), - bn_pack4(44CE,6CBA,CED4,BB1B), - bn_pack4(DA3E,DBEB,CF9B,14ED), - bn_pack4(1797,27B0,865A,8918), - bn_pack4(B06A,53ED,9027,D831), - bn_pack4(E5DB,382F,4130,01AE), - bn_pack4(F8FF,9406,AD9E,530E), - bn_pack4(C975,1E76,3DBA,37BD), - bn_pack4(C1D4,DCB2,6026,46DE), - bn_pack4(36C3,FAB4,D27C,7026), - bn_pack4(4DF4,35C9,3402,8492), - bn_pack4(86FF,B7DC,90A6,C08F), - bn_pack4(93B4,EA98,8D8F,DDC1), - bn_pack4(D006,9127,D5B0,5AA9), - bn_pack4(B81B,DD76,2170,481C), - bn_pack4(1F61,2970,CEE2,D7AF), - bn_pack4(233B,A186,515B,E7ED), - bn_pack4(99B2,964F,A090,C3A2), - bn_pack4(287C,5947,4E6B,C05D), - bn_pack4(2E8E,FC14,1FBE,CAA6), - bn_pack4(DBBB,C2DB,04DE,8EF9), - bn_pack4(2583,E9CA,2AD4,4CE8), - bn_pack4(1A94,6834,B615,0BDA), - bn_pack4(99C3,2718,6AF4,E23C), - bn_pack4(8871,9A10,BDBA,5B26), - bn_pack4(1A72,3C12,A787,E6D7), - bn_pack4(4B82,D120,A921,0801), - bn_pack4(43DB,5BFC,E0FD,108E), - bn_pack4(08E2,4FA0,74E5,AB31), - bn_pack4(7709,88C0,BAD9,46E2), - bn_pack4(BBE1,1757,7A61,5D6C), - bn_pack4(521F,2B18,177B,200C), - bn_pack4(D876,0273,3EC8,6A64), - bn_pack4(F12F,FA06,D98A,0864), - bn_pack4(CEE3,D226,1AD2,EE6B), - bn_pack4(1E8C,94E0,4A25,619D), - bn_pack4(ABF5,AE8C,DB09,33D7), - bn_pack4(B397,0F85,A6E1,E4C7), - bn_pack4(8AEA,7157,5D06,0C7D), - bn_pack4(ECFB,8504,58DB,EF0A), - bn_pack4(A855,21AB,DF1C,BA64), - bn_pack4(AD33,170D,0450,7A33), - bn_pack4(1572,8E5A,8AAA,C42D), - bn_pack4(15D2,2618,98FA,0510), - bn_pack4(3995,497C,EA95,6AE5), - bn_pack4(DE2B,CBF6,9558,1718), - bn_pack4(B5C5,5DF0,6F4C,52C9), - bn_pack4(9B27,83A2,EC07,A28F), - bn_pack4(E39E,772C,180E,8603), - bn_pack4(3290,5E46,2E36,CE3B), - bn_pack4(F174,6C08,CA18,217C), - bn_pack4(670C,354E,4ABC,9804), - bn_pack4(9ED5,2907,7096,966D), - bn_pack4(1C62,F356,2085,52BB), - bn_pack4(8365,5D23,DCA3,AD96), - bn_pack4(6916,3FA8,FD24,CF5F), - bn_pack4(98DA,4836,1C55,D39A), - bn_pack4(C200,7CB8,A163,BF05), - bn_pack4(4928,6651,ECE4,5B3D), - bn_pack4(AE9F,2411,7C4B,1FE6), - bn_pack4(EE38,6BFB,5A89,9FA5), - bn_pack4(0BFF,5CB6,F406,B7ED), - bn_pack4(F44C,42E9,A637,ED6B), - bn_pack4(E485,B576,625E,7EC6), - bn_pack4(4FE1,356D,6D51,C245), - bn_pack4(302B,0A6D,F25F,1437), - bn_pack4(EF95,19B3,CD3A,431B), - bn_pack4(514A,0879,8E34,04DD), - bn_pack4(020B,BEA6,3B13,9B22), - bn_pack4(2902,4E08,8A67,CC74), - bn_pack4(C4C6,628B,80DC,1CD1), - bn_pack4(C90F,DAA2,2168,C234), - bn_pack4(FFFF,FFFF,FFFF,FFFF) + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF), + bn_pack4(0x60C9,0x80DD,0x98ED,0xD3DF), + bn_pack4(0xC81F,0x56E8,0x80B9,0x6E71), + bn_pack4(0x9E30,0x50E2,0x7656,0x94DF), + bn_pack4(0x9558,0xE447,0x5677,0xE9AA), + bn_pack4(0xC919,0x0DA6,0xFC02,0x6E47), + bn_pack4(0x889A,0x002E,0xD5EE,0x382B), + bn_pack4(0x4009,0x438B,0x481C,0x6CD7), + bn_pack4(0x3590,0x46F4,0xEB87,0x9F92), + bn_pack4(0xFAF3,0x6BC3,0x1ECF,0xA268), + bn_pack4(0xB1D5,0x10BD,0x7EE7,0x4D73), + bn_pack4(0xF9AB,0x4819,0x5DED,0x7EA1), + bn_pack4(0x64F3,0x1CC5,0x0846,0x851D), + bn_pack4(0x4597,0xE899,0xA025,0x5DC1), + bn_pack4(0xDF31,0x0EE0,0x74AB,0x6A36), + bn_pack4(0x6D2A,0x13F8,0x3F44,0xF82D), + bn_pack4(0x062B,0x3CF5,0xB3A2,0x78A6), + bn_pack4(0x7968,0x3303,0xED5B,0xDD3A), + bn_pack4(0xFA9D,0x4B7F,0xA2C0,0x87E8), + bn_pack4(0x4BCB,0xC886,0x2F83,0x85DD), + bn_pack4(0x3473,0xFC64,0x6CEA,0x306B), + bn_pack4(0x13EB,0x57A8,0x1A23,0xF0C7), + bn_pack4(0x2222,0x2E04,0xA403,0x7C07), + bn_pack4(0xE3FD,0xB8BE,0xFC84,0x8AD9), + bn_pack4(0x238F,0x16CB,0xE39D,0x652D), + bn_pack4(0x3423,0xB474,0x2BF1,0xC978), + bn_pack4(0x3AAB,0x639C,0x5AE4,0xF568), + bn_pack4(0x2576,0xF693,0x6BA4,0x2466), + bn_pack4(0x741F,0xA7BF,0x8AFC,0x47ED), + bn_pack4(0x3BC8,0x32B6,0x8D9D,0xD300), + bn_pack4(0xD8BE,0xC4D0,0x73B9,0x31BA), + bn_pack4(0x3877,0x7CB6,0xA932,0xDF8C), + bn_pack4(0x74A3,0x926F,0x12FE,0xE5E4), + bn_pack4(0xE694,0xF91E,0x6DBE,0x1159), + bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6), + bn_pack4(0x043E,0x8F66,0x3F48,0x60EE), + bn_pack4(0x387F,0xE8D7,0x6E3C,0x0468), + bn_pack4(0xDA56,0xC9EC,0x2EF2,0x9632), + bn_pack4(0xEB19,0xCCB1,0xA313,0xD55C), + bn_pack4(0xF550,0xAA3D,0x8A1F,0xBFF0), + bn_pack4(0x06A1,0xD58B,0xB7C5,0xDA76), + bn_pack4(0xA797,0x15EE,0xF29B,0xE328), + bn_pack4(0x14CC,0x5ED2,0x0F80,0x37E0), + bn_pack4(0xCC8F,0x6D7E,0xBF48,0xE1D8), + bn_pack4(0x4BD4,0x07B2,0x2B41,0x54AA), + bn_pack4(0x0F1D,0x45B7,0xFF58,0x5AC5), + bn_pack4(0x23A9,0x7A7E,0x36CC,0x88BE), + bn_pack4(0x59E7,0xC97F,0xBEC7,0xE8F3), + bn_pack4(0xB5A8,0x4031,0x900B,0x1C9E), + bn_pack4(0xD55E,0x702F,0x4698,0x0C82), + bn_pack4(0xF482,0xD7CE,0x6E74,0xFEF6), + bn_pack4(0xF032,0xEA15,0xD172,0x1D03), + bn_pack4(0x5983,0xCA01,0xC64B,0x92EC), + bn_pack4(0x6FB8,0xF401,0x378C,0xD2BF), + bn_pack4(0x3320,0x5151,0x2BD7,0xAF42), + bn_pack4(0xDB7F,0x1447,0xE6CC,0x254B), + bn_pack4(0x44CE,0x6CBA,0xCED4,0xBB1B), + bn_pack4(0xDA3E,0xDBEB,0xCF9B,0x14ED), + bn_pack4(0x1797,0x27B0,0x865A,0x8918), + bn_pack4(0xB06A,0x53ED,0x9027,0xD831), + bn_pack4(0xE5DB,0x382F,0x4130,0x01AE), + bn_pack4(0xF8FF,0x9406,0xAD9E,0x530E), + bn_pack4(0xC975,0x1E76,0x3DBA,0x37BD), + bn_pack4(0xC1D4,0xDCB2,0x6026,0x46DE), + bn_pack4(0x36C3,0xFAB4,0xD27C,0x7026), + bn_pack4(0x4DF4,0x35C9,0x3402,0x8492), + bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F), + bn_pack4(0x93B4,0xEA98,0x8D8F,0xDDC1), + bn_pack4(0xD006,0x9127,0xD5B0,0x5AA9), + bn_pack4(0xB81B,0xDD76,0x2170,0x481C), + bn_pack4(0x1F61,0x2970,0xCEE2,0xD7AF), + bn_pack4(0x233B,0xA186,0x515B,0xE7ED), + bn_pack4(0x99B2,0x964F,0xA090,0xC3A2), + bn_pack4(0x287C,0x5947,0x4E6B,0xC05D), + bn_pack4(0x2E8E,0xFC14,0x1FBE,0xCAA6), + bn_pack4(0xDBBB,0xC2DB,0x04DE,0x8EF9), + bn_pack4(0x2583,0xE9CA,0x2AD4,0x4CE8), + bn_pack4(0x1A94,0x6834,0xB615,0x0BDA), + bn_pack4(0x99C3,0x2718,0x6AF4,0xE23C), + bn_pack4(0x8871,0x9A10,0xBDBA,0x5B26), + bn_pack4(0x1A72,0x3C12,0xA787,0xE6D7), + bn_pack4(0x4B82,0xD120,0xA921,0x0801), + bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E), + bn_pack4(0x08E2,0x4FA0,0x74E5,0xAB31), + bn_pack4(0x7709,0x88C0,0xBAD9,0x46E2), + bn_pack4(0xBBE1,0x1757,0x7A61,0x5D6C), + bn_pack4(0x521F,0x2B18,0x177B,0x200C), + bn_pack4(0xD876,0x0273,0x3EC8,0x6A64), + bn_pack4(0xF12F,0xFA06,0xD98A,0x0864), + bn_pack4(0xCEE3,0xD226,0x1AD2,0xEE6B), + bn_pack4(0x1E8C,0x94E0,0x4A25,0x619D), + bn_pack4(0xABF5,0xAE8C,0xDB09,0x33D7), + bn_pack4(0xB397,0x0F85,0xA6E1,0xE4C7), + bn_pack4(0x8AEA,0x7157,0x5D06,0x0C7D), + bn_pack4(0xECFB,0x8504,0x58DB,0xEF0A), + bn_pack4(0xA855,0x21AB,0xDF1C,0xBA64), + bn_pack4(0xAD33,0x170D,0x0450,0x7A33), + bn_pack4(0x1572,0x8E5A,0x8AAA,0xC42D), + bn_pack4(0x15D2,0x2618,0x98FA,0x0510), + bn_pack4(0x3995,0x497C,0xEA95,0x6AE5), + bn_pack4(0xDE2B,0xCBF6,0x9558,0x1718), + bn_pack4(0xB5C5,0x5DF0,0x6F4C,0x52C9), + bn_pack4(0x9B27,0x83A2,0xEC07,0xA28F), + bn_pack4(0xE39E,0x772C,0x180E,0x8603), + bn_pack4(0x3290,0x5E46,0x2E36,0xCE3B), + bn_pack4(0xF174,0x6C08,0xCA18,0x217C), + bn_pack4(0x670C,0x354E,0x4ABC,0x9804), + bn_pack4(0x9ED5,0x2907,0x7096,0x966D), + bn_pack4(0x1C62,0xF356,0x2085,0x52BB), + bn_pack4(0x8365,0x5D23,0xDCA3,0xAD96), + bn_pack4(0x6916,0x3FA8,0xFD24,0xCF5F), + bn_pack4(0x98DA,0x4836,0x1C55,0xD39A), + bn_pack4(0xC200,0x7CB8,0xA163,0xBF05), + bn_pack4(0x4928,0x6651,0xECE4,0x5B3D), + bn_pack4(0xAE9F,0x2411,0x7C4B,0x1FE6), + bn_pack4(0xEE38,0x6BFB,0x5A89,0x9FA5), + bn_pack4(0x0BFF,0x5CB6,0xF406,0xB7ED), + bn_pack4(0xF44C,0x42E9,0xA637,0xED6B), + bn_pack4(0xE485,0xB576,0x625E,0x7EC6), + bn_pack4(0x4FE1,0x356D,0x6D51,0xC245), + bn_pack4(0x302B,0x0A6D,0xF25F,0x1437), + bn_pack4(0xEF95,0x19B3,0xCD3A,0x431B), + bn_pack4(0x514A,0x0879,0x8E34,0x04DD), + bn_pack4(0x020B,0xBEA6,0x3B13,0x9B22), + bn_pack4(0x2902,0x4E08,0x8A67,0xCC74), + bn_pack4(0xC4C6,0x628B,0x80DC,0x1CD1), + bn_pack4(0xC90F,0xDAA2,0x2168,0xC234), + bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF) }; static BIGNUM bn_group_8192 = { bn_group_8192_value, diff --git a/openssl/crypto/srp/srp_lib.c b/openssl/crypto/srp/srp_lib.c index 92cea98dc..7c1dcc511 100644 --- a/openssl/crypto/srp/srp_lib.c +++ b/openssl/crypto/srp/srp_lib.c @@ -63,13 +63,17 @@ #include #if (BN_BYTES == 8) -#define bn_pack4(a1,a2,a3,a4) 0x##a1##a2##a3##a4##ul -#endif -#if (BN_BYTES == 4) -#define bn_pack4(a1,a2,a3,a4) 0x##a3##a4##ul, 0x##a1##a2##ul -#endif -#if (BN_BYTES == 2) -#define bn_pack4(a1,a2,a3,a4) 0x##a4##u,0x##a3##u,0x##a2##u,0x##a1##u +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define bn_pack4(a1,a2,a3,a4) ((a1##UI64<<48)|(a2##UI64<<32)|(a3##UI64<<16)|a4##UI64) +# elif defined(__arch64__) +# define bn_pack4(a1,a2,a3,a4) ((a1##UL<<48)|(a2##UL<<32)|(a3##UL<<16)|a4##UL) +# else +# define bn_pack4(a1,a2,a3,a4) ((a1##ULL<<48)|(a2##ULL<<32)|(a3##ULL<<16)|a4##ULL) +# endif +#elif (BN_BYTES == 4) +# define bn_pack4(a1,a2,a3,a4) ((a3##UL<<16)|a4##UL), ((a1##UL<<16)|a2##UL) +#else +# error "unsupported BN_BYTES" #endif diff --git a/openssl/crypto/x509/x509_vfy.c b/openssl/crypto/x509/x509_vfy.c index 12d71f54e..5195ffef2 100644 --- a/openssl/crypto/x509/x509_vfy.c +++ b/openssl/crypto/x509/x509_vfy.c @@ -694,6 +694,7 @@ static int check_cert(X509_STORE_CTX *ctx) X509_CRL *crl = NULL, *dcrl = NULL; X509 *x; int ok, cnum; + unsigned int last_reasons; cnum = ctx->error_depth; x = sk_X509_value(ctx->chain, cnum); ctx->current_cert = x; @@ -702,6 +703,7 @@ static int check_cert(X509_STORE_CTX *ctx) ctx->current_reasons = 0; while (ctx->current_reasons != CRLDP_ALL_REASONS) { + last_reasons = ctx->current_reasons; /* Try to retrieve relevant CRL */ if (ctx->get_crl) ok = ctx->get_crl(ctx, &crl, x); @@ -745,6 +747,15 @@ static int check_cert(X509_STORE_CTX *ctx) X509_CRL_free(dcrl); crl = NULL; dcrl = NULL; + /* If reasons not updated we wont get anywhere by + * another iteration, so exit loop. + */ + if (last_reasons == ctx->current_reasons) + { + ctx->error = X509_V_ERR_UNABLE_TO_GET_CRL; + ok = ctx->verify_cb(0, ctx); + goto err; + } } err: X509_CRL_free(crl); diff --git a/openssl/crypto/x509/x_all.c b/openssl/crypto/x509/x_all.c index b94aeeb87..e06602d65 100644 --- a/openssl/crypto/x509/x_all.c +++ b/openssl/crypto/x509/x_all.c @@ -97,6 +97,7 @@ int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx) { + x->cert_info->enc.modified = 1; return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CINF), x->cert_info->signature, x->sig_alg, x->signature, x->cert_info, ctx); @@ -123,6 +124,7 @@ int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md) int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx) { + x->crl->enc.modified = 1; return ASN1_item_sign_ctx(ASN1_ITEM_rptr(X509_CRL_INFO), x->crl->sig_alg, x->sig_alg, x->signature, x->crl, ctx); } diff --git a/openssl/crypto/x86cpuid.pl b/openssl/crypto/x86cpuid.pl index c18b0e248..b270b4433 100644 --- a/openssl/crypto/x86cpuid.pl +++ b/openssl/crypto/x86cpuid.pl @@ -67,6 +67,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &inc ("esi"); # number of cores &mov ("eax",1); + &xor ("ecx","ecx"); &cpuid (); &bt ("edx",28); &jnc (&label("generic")); @@ -91,6 +92,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &set_label("nocacheinfo"); &mov ("eax",1); + &xor ("ecx","ecx"); &cpuid (); &and ("edx",0xbfefffff); # force reserved bits #20, #30 to 0 &cmp ("ebp",0); diff --git a/openssl/demos/x509/mkreq.c b/openssl/demos/x509/mkreq.c index d17e4ade9..d1cba9dc5 100644 --- a/openssl/demos/x509/mkreq.c +++ b/openssl/demos/x509/mkreq.c @@ -7,13 +7,14 @@ #include #include +#include #include #ifndef OPENSSL_NO_ENGINE #include #endif int mkreq(X509_REQ **x509p, EVP_PKEY **pkeyp, int bits, int serial, int days); -int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value); +int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value); int main(int argc, char **argv) { @@ -148,7 +149,7 @@ err: * because we wont reference any other sections. */ -int add_ext(STACK_OF(X509_REQUEST) *sk, int nid, char *value) +int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value) { X509_EXTENSION *ex; ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value); diff --git a/openssl/doc/apps/rsa.pod b/openssl/doc/apps/rsa.pod index 69b2bef82..d7d784d52 100644 --- a/openssl/doc/apps/rsa.pod +++ b/openssl/doc/apps/rsa.pod @@ -24,6 +24,8 @@ B B [B<-check>] [B<-pubin>] [B<-pubout>] +[B<-RSAPublicKey_in>] +[B<-RSAPublicKey_out>] [B<-engine id>] =head1 DESCRIPTION @@ -118,6 +120,10 @@ by default a private key is output: with this option a public key will be output instead. This option is automatically set if the input is a public key. +=item B<-RSAPublicKey_in>, B<-RSAPublicKey_out> + +like B<-pubin> and B<-pubout> except B format is used instead. + =item B<-engine id> specifying an engine (by its unique B string) will cause B @@ -139,6 +145,11 @@ The PEM public key format uses the header and footer lines: -----BEGIN PUBLIC KEY----- -----END PUBLIC KEY----- +The PEM B format uses the header and footer lines: + + -----BEGIN RSA PUBLIC KEY----- + -----END RSA PUBLIC KEY----- + The B form is a format compatible with older Netscape servers and Microsoft IIS .key files, this uses unsalted RC4 for its encryption. It is not very secure and so should only be used when necessary. @@ -173,6 +184,10 @@ To just output the public part of a private key: openssl rsa -in key.pem -pubout -out pubkey.pem +Output the public part of a private key in B format: + + openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem + =head1 BUGS The command line password arguments don't currently work with diff --git a/openssl/doc/crypto/X509_STORE_CTX_get_error.pod b/openssl/doc/crypto/X509_STORE_CTX_get_error.pod index a883f6c09..60e8332ae 100644 --- a/openssl/doc/crypto/X509_STORE_CTX_get_error.pod +++ b/openssl/doc/crypto/X509_STORE_CTX_get_error.pod @@ -278,6 +278,8 @@ happen if extended CRL checking is enabled. an application specific error. This will never be returned unless explicitly set by an application. +=back + =head1 NOTES The above functions should be used instead of directly referencing the fields diff --git a/openssl/doc/crypto/ecdsa.pod b/openssl/doc/crypto/ecdsa.pod index 20edff97f..59a5916de 100644 --- a/openssl/doc/crypto/ecdsa.pod +++ b/openssl/doc/crypto/ecdsa.pod @@ -95,7 +95,7 @@ is ignored. ECDSA_verify() verifies that the signature in B of size B is a valid ECDSA signature of the hash value -value B of size B using the public key B. +B of size B using the public key B. The parameter B is ignored. ECDSA_do_sign() is wrapper function for ECDSA_do_sign_ex with B @@ -131,16 +131,12 @@ specific) int ret; ECDSA_SIG *sig; - EC_KEY *eckey = EC_KEY_new(); + EC_KEY *eckey; + eckey = EC_KEY_new_by_curve_name(NID_secp192k1); if (eckey == NULL) { /* error */ } - key->group = EC_GROUP_new_by_nid(NID_secp192k1); - if (key->group == NULL) - { - /* error */ - } if (!EC_KEY_generate_key(eckey)) { /* error */ diff --git a/openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod b/openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod index 632b556d1..5e6613335 100644 --- a/openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod +++ b/openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod @@ -66,16 +66,16 @@ values: =over 4 -=item 1 - -The operation succeeded. - =item 0 A failure while manipulating the STACK_OF(X509_NAME) object occurred or the X509_NAME could not be extracted from B. Check the error stack to find out the reason. +=item 1 + +The operation succeeded. + =back =head1 EXAMPLES diff --git a/openssl/doc/ssl/SSL_CTX_set_options.pod b/openssl/doc/ssl/SSL_CTX_set_options.pod index cc588f3a7..fded0601b 100644 --- a/openssl/doc/ssl/SSL_CTX_set_options.pod +++ b/openssl/doc/ssl/SSL_CTX_set_options.pod @@ -88,9 +88,10 @@ As of OpenSSL 0.9.8q and 1.0.0c, this option has no effect. ... -=item SSL_OP_MSIE_SSLV2_RSA_PADDING +=item SSL_OP_SAFARI_ECDHE_ECDSA_BUG -As of OpenSSL 0.9.7h and 0.9.8a, this option has no effect. +Don't prefer ECDHE-ECDSA ciphers when the client appears to be Safari on OS X. +OS X 10.8..10.8.3 has broken support for ECDHE-ECDSA ciphers. =item SSL_OP_SSLEAY_080_CLIENT_DH_BUG diff --git a/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod b/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod index b80e25be7..7e60df5ba 100644 --- a/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod +++ b/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod @@ -81,6 +81,8 @@ SSL_CTX_use_psk_identity_hint() and SSL_use_psk_identity_hint() return Return values from the server callback are interpreted as follows: +=over 4 + =item > 0 PSK identity was found and the server callback has provided the PSK @@ -99,4 +101,6 @@ completely. PSK identity was not found. An "unknown_psk_identity" alert message will be sent and the connection setup fails. +=back + =cut diff --git a/openssl/doc/ssl/SSL_accept.pod b/openssl/doc/ssl/SSL_accept.pod index cc724c0d5..b1c34d15b 100644 --- a/openssl/doc/ssl/SSL_accept.pod +++ b/openssl/doc/ssl/SSL_accept.pod @@ -44,17 +44,17 @@ The following return values can occur: =over 4 -=item 1 - -The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been -established. - =item 0 The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value B to find out the reason. +=item 1 + +The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been +established. + =item E0 The TLS/SSL handshake was not successful because a fatal error occurred either diff --git a/openssl/doc/ssl/SSL_connect.pod b/openssl/doc/ssl/SSL_connect.pod index cc56ebb75..946ca89d7 100644 --- a/openssl/doc/ssl/SSL_connect.pod +++ b/openssl/doc/ssl/SSL_connect.pod @@ -41,17 +41,17 @@ The following return values can occur: =over 4 -=item 1 - -The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been -established. - =item 0 The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value B to find out the reason. +=item 1 + +The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been +established. + =item E0 The TLS/SSL handshake was not successful, because a fatal error occurred either diff --git a/openssl/doc/ssl/SSL_do_handshake.pod b/openssl/doc/ssl/SSL_do_handshake.pod index 243576451..7f8cf249e 100644 --- a/openssl/doc/ssl/SSL_do_handshake.pod +++ b/openssl/doc/ssl/SSL_do_handshake.pod @@ -45,17 +45,17 @@ The following return values can occur: =over 4 -=item 1 - -The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been -established. - =item 0 The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL_get_error() with the return value B to find out the reason. +=item 1 + +The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been +established. + =item E0 The TLS/SSL handshake was not successful because a fatal error occurred either diff --git a/openssl/doc/ssl/SSL_shutdown.pod b/openssl/doc/ssl/SSL_shutdown.pod index 89911acbc..42a89b7c6 100644 --- a/openssl/doc/ssl/SSL_shutdown.pod +++ b/openssl/doc/ssl/SSL_shutdown.pod @@ -92,11 +92,6 @@ The following return values can occur: =over 4 -=item 1 - -The shutdown was successfully completed. The "close notify" alert was sent -and the peer's "close notify" alert was received. - =item 0 The shutdown is not yet finished. Call SSL_shutdown() for a second time, @@ -104,6 +99,11 @@ if a bidirectional shutdown shall be performed. The output of L may be misleading, as an erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred. +=item 1 + +The shutdown was successfully completed. The "close notify" alert was sent +and the peer's "close notify" alert was received. + =item -1 The shutdown was not successful because a fatal error occurred either diff --git a/openssl/engines/ccgost/gost89.h b/openssl/engines/ccgost/gost89.h index 215785251..8da2407b0 100644 --- a/openssl/engines/ccgost/gost89.h +++ b/openssl/engines/ccgost/gost89.h @@ -87,10 +87,6 @@ extern gost_subst_block Gost28147_CryptoProParamSetB; extern gost_subst_block Gost28147_CryptoProParamSetC; extern gost_subst_block Gost28147_CryptoProParamSetD; extern const byte CryptoProKeyMeshingKey[]; -#if __LONG_MAX__ > 2147483647L typedef unsigned int word32; -#else -typedef unsigned long word32; -#endif #endif diff --git a/openssl/ms/bcb4.bat b/openssl/ms/bcb4.bat index 71a670e79..00fb9e845 100644 --- a/openssl/ms/bcb4.bat +++ b/openssl/ms/bcb4.bat @@ -1,6 +1,6 @@ -perl Configure BC-32 -perl util\mkfiles.pl > MINFO - -@rem create make file -perl util\mk1mf.pl no-asm BC-NT > bcb.mak - +perl Configure BC-32 +perl util\mkfiles.pl > MINFO + +@rem create make file +perl util\mk1mf.pl no-asm BC-NT > bcb.mak + diff --git a/openssl/ms/do_nt.bat b/openssl/ms/do_nt.bat index 9c06c27ca..e2d525e05 100644 --- a/openssl/ms/do_nt.bat +++ b/openssl/ms/do_nt.bat @@ -1,7 +1,7 @@ - -perl util\mkfiles.pl >MINFO -perl util\mk1mf.pl no-asm VC-NT >ms\nt.mak -perl util\mk1mf.pl dll no-asm VC-NT >ms\ntdll.mak - -perl util\mkdef.pl libeay NT > ms\libeay32.def -perl util\mkdef.pl ssleay NT > ms\ssleay32.def + +perl util\mkfiles.pl >MINFO +perl util\mk1mf.pl no-asm VC-NT >ms\nt.mak +perl util\mk1mf.pl dll no-asm VC-NT >ms\ntdll.mak + +perl util\mkdef.pl libeay NT > ms\libeay32.def +perl util\mkdef.pl ssleay NT > ms\ssleay32.def diff --git a/openssl/ms/tenc.bat b/openssl/ms/tenc.bat index 466fdfccb..a4fa7f365 100644 --- a/openssl/ms/tenc.bat +++ b/openssl/ms/tenc.bat @@ -1,14 +1,14 @@ -rem called by testenc - -echo test %1 %2 %3 %4 %5 %6 -%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in %input% -out %tmp1% -%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in %tmp1% -out %out1% -%cmp% %input% %out1% -if errorlevel 1 goto err - -echo test base64 %1 %2 %3 %4 %5 %6 -%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in %input% -out %tmp1% -%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in %tmp1% -out %out1% -%cmp% %input% %out1% - -:err +rem called by testenc + +echo test %1 %2 %3 %4 %5 %6 +%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in %input% -out %tmp1% +%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in %tmp1% -out %out1% +%cmp% %input% %out1% +if errorlevel 1 goto err + +echo test base64 %1 %2 %3 %4 %5 %6 +%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in %input% -out %tmp1% +%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in %tmp1% -out %out1% +%cmp% %input% %out1% + +:err diff --git a/openssl/ms/tencce.bat b/openssl/ms/tencce.bat index 6a944d767..c8b1acd4b 100644 --- a/openssl/ms/tencce.bat +++ b/openssl/ms/tencce.bat @@ -1,19 +1,19 @@ -rem called by testencce - -echo test %1 %2 %3 %4 %5 %6 -cecopy %input% CE:\OpenSSL -cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1% -cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1% -del %out1% >nul 2>&1 -cecopy CE:\OpenSSL\%out1% . -%cmp% %input% %out1% -if errorlevel 1 goto err - -echo test base64 %1 %2 %3 %4 %5 %6 -cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1% -cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1% -del %out1% >nul 2>&1 -cecopy CE:\OpenSSL\%out1% . -%cmp% %input% %out1% - -:err +rem called by testencce + +echo test %1 %2 %3 %4 %5 %6 +cecopy %input% CE:\OpenSSL +cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1% +cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1% +del %out1% >nul 2>&1 +cecopy CE:\OpenSSL\%out1% . +%cmp% %input% %out1% +if errorlevel 1 goto err + +echo test base64 %1 %2 %3 %4 %5 %6 +cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in \OpenSSL\%input% -out \OpenSSL\%tmp1% +cerun CE:\OpenSSL\%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in \OpenSSL\%tmp1% -out \OpenSSL\%out1% +del %out1% >nul 2>&1 +cecopy CE:\OpenSSL\%out1% . +%cmp% %input% %out1% + +:err diff --git a/openssl/ms/testenc.bat b/openssl/ms/testenc.bat index 4b99bd589..f8e90939e 100644 --- a/openssl/ms/testenc.bat +++ b/openssl/ms/testenc.bat @@ -1,94 +1,94 @@ -@echo off -echo start testenc - -path=..\ms;%path% -set ssleay=%1% -set input=..\ms\testenc.bat -set tmp1=..\ms\cipher.out -set out1=..\ms\clear.out -set cmp=perl ..\ms\cmp.pl - -cd -call tenc.bat enc -if errorlevel 1 goto err - -call tenc.bat rc4 -if errorlevel 1 goto err - -call tenc.bat des-cfb -if errorlevel 1 goto err - -call tenc.bat des-ede-cfb -if errorlevel 1 goto err - -call tenc.bat des-ede3-cfb -if errorlevel 1 goto err - -call tenc.bat des-ofb -if errorlevel 1 goto err - -call tenc.bat des-ede-ofb -if errorlevel 1 goto err - -call tenc.bat des-ede3-ofb -if errorlevel 1 goto err - -call tenc.bat des-ecb -if errorlevel 1 goto err - -call tenc.bat des-ede -if errorlevel 1 goto err - -call tenc.bat des-ede3 -if errorlevel 1 goto err - -call tenc.bat des-cbc -if errorlevel 1 goto err - -call tenc.bat des-ede-cbc -if errorlevel 1 goto err - -call tenc.bat des-ede3-cbc -if errorlevel 1 goto err - -call tenc.bat idea-ecb -if errorlevel 1 goto err - -call tenc.bat idea-cfb -if errorlevel 1 goto err - -call tenc.bat idea-ofb -if errorlevel 1 goto err - -call tenc.bat idea-cbc -if errorlevel 1 goto err - -call tenc.bat rc2-ecb -if errorlevel 1 goto err - -call tenc.bat rc2-cfb -if errorlevel 1 goto err - -call tenc.bat rc2-ofb -if errorlevel 1 goto err - -call tenc.bat rc2-cbc -if errorlevel 1 goto err - -call tenc.bat bf-ecb -if errorlevel 1 goto err - -call tenc.bat bf-cfb -if errorlevel 1 goto err - -call tenc.bat bf-ofb -if errorlevel 1 goto err - -call tenc.bat bf-cbc -if errorlevel 1 goto err - -echo OK -del %out1% -del %tmp1% -:err - +@echo off +echo start testenc + +path=..\ms;%path% +set ssleay=%1% +set input=..\ms\testenc.bat +set tmp1=..\ms\cipher.out +set out1=..\ms\clear.out +set cmp=perl ..\ms\cmp.pl + +cd +call tenc.bat enc +if errorlevel 1 goto err + +call tenc.bat rc4 +if errorlevel 1 goto err + +call tenc.bat des-cfb +if errorlevel 1 goto err + +call tenc.bat des-ede-cfb +if errorlevel 1 goto err + +call tenc.bat des-ede3-cfb +if errorlevel 1 goto err + +call tenc.bat des-ofb +if errorlevel 1 goto err + +call tenc.bat des-ede-ofb +if errorlevel 1 goto err + +call tenc.bat des-ede3-ofb +if errorlevel 1 goto err + +call tenc.bat des-ecb +if errorlevel 1 goto err + +call tenc.bat des-ede +if errorlevel 1 goto err + +call tenc.bat des-ede3 +if errorlevel 1 goto err + +call tenc.bat des-cbc +if errorlevel 1 goto err + +call tenc.bat des-ede-cbc +if errorlevel 1 goto err + +call tenc.bat des-ede3-cbc +if errorlevel 1 goto err + +call tenc.bat idea-ecb +if errorlevel 1 goto err + +call tenc.bat idea-cfb +if errorlevel 1 goto err + +call tenc.bat idea-ofb +if errorlevel 1 goto err + +call tenc.bat idea-cbc +if errorlevel 1 goto err + +call tenc.bat rc2-ecb +if errorlevel 1 goto err + +call tenc.bat rc2-cfb +if errorlevel 1 goto err + +call tenc.bat rc2-ofb +if errorlevel 1 goto err + +call tenc.bat rc2-cbc +if errorlevel 1 goto err + +call tenc.bat bf-ecb +if errorlevel 1 goto err + +call tenc.bat bf-cfb +if errorlevel 1 goto err + +call tenc.bat bf-ofb +if errorlevel 1 goto err + +call tenc.bat bf-cbc +if errorlevel 1 goto err + +echo OK +del %out1% +del %tmp1% +:err + diff --git a/openssl/ms/testencce.bat b/openssl/ms/testencce.bat index 04faa5d99..1da3e0861 100644 --- a/openssl/ms/testencce.bat +++ b/openssl/ms/testencce.bat @@ -1,97 +1,97 @@ -@echo off -echo start testenc - -path=..\ms;%path% -set ssleay=%1% -copy ..\ms\testenc.bat >nul -set input=testenc.bat -set tmp1=cipher.out -set out1=clear.out -set cmp=perl ..\ms\cmp.pl - -cecopy %ssleay% CE:\OpenSSL - -cd -call tencce.bat enc -if errorlevel 1 goto err - -call tencce.bat rc4 -if errorlevel 1 goto err - -call tencce.bat des-cfb -if errorlevel 1 goto err - -call tencce.bat des-ede-cfb -if errorlevel 1 goto err - -call tencce.bat des-ede3-cfb -if errorlevel 1 goto err - -call tencce.bat des-ofb -if errorlevel 1 goto err - -call tencce.bat des-ede-ofb -if errorlevel 1 goto err - -call tencce.bat des-ede3-ofb -if errorlevel 1 goto err - -call tencce.bat des-ecb -if errorlevel 1 goto err - -call tencce.bat des-ede -if errorlevel 1 goto err - -call tencce.bat des-ede3 -if errorlevel 1 goto err - -call tencce.bat des-cbc -if errorlevel 1 goto err - -call tencce.bat des-ede-cbc -if errorlevel 1 goto err - -call tencce.bat des-ede3-cbc -if errorlevel 1 goto err - -call tencce.bat idea-ecb -if errorlevel 1 goto err - -call tencce.bat idea-cfb -if errorlevel 1 goto err - -call tencce.bat idea-ofb -if errorlevel 1 goto err - -call tencce.bat idea-cbc -if errorlevel 1 goto err - -call tencce.bat rc2-ecb -if errorlevel 1 goto err - -call tencce.bat rc2-cfb -if errorlevel 1 goto err - -call tencce.bat rc2-ofb -if errorlevel 1 goto err - -call tencce.bat rc2-cbc -if errorlevel 1 goto err - -call tencce.bat bf-ecb -if errorlevel 1 goto err - -call tencce.bat bf-cfb -if errorlevel 1 goto err - -call tencce.bat bf-ofb -if errorlevel 1 goto err - -call tencce.bat bf-cbc -if errorlevel 1 goto err - -echo OK -del %out1% >nul 2>&1 -del %tmp1% >nul 2>&1 -:err - +@echo off +echo start testenc + +path=..\ms;%path% +set ssleay=%1% +copy ..\ms\testenc.bat >nul +set input=testenc.bat +set tmp1=cipher.out +set out1=clear.out +set cmp=perl ..\ms\cmp.pl + +cecopy %ssleay% CE:\OpenSSL + +cd +call tencce.bat enc +if errorlevel 1 goto err + +call tencce.bat rc4 +if errorlevel 1 goto err + +call tencce.bat des-cfb +if errorlevel 1 goto err + +call tencce.bat des-ede-cfb +if errorlevel 1 goto err + +call tencce.bat des-ede3-cfb +if errorlevel 1 goto err + +call tencce.bat des-ofb +if errorlevel 1 goto err + +call tencce.bat des-ede-ofb +if errorlevel 1 goto err + +call tencce.bat des-ede3-ofb +if errorlevel 1 goto err + +call tencce.bat des-ecb +if errorlevel 1 goto err + +call tencce.bat des-ede +if errorlevel 1 goto err + +call tencce.bat des-ede3 +if errorlevel 1 goto err + +call tencce.bat des-cbc +if errorlevel 1 goto err + +call tencce.bat des-ede-cbc +if errorlevel 1 goto err + +call tencce.bat des-ede3-cbc +if errorlevel 1 goto err + +call tencce.bat idea-ecb +if errorlevel 1 goto err + +call tencce.bat idea-cfb +if errorlevel 1 goto err + +call tencce.bat idea-ofb +if errorlevel 1 goto err + +call tencce.bat idea-cbc +if errorlevel 1 goto err + +call tencce.bat rc2-ecb +if errorlevel 1 goto err + +call tencce.bat rc2-cfb +if errorlevel 1 goto err + +call tencce.bat rc2-ofb +if errorlevel 1 goto err + +call tencce.bat rc2-cbc +if errorlevel 1 goto err + +call tencce.bat bf-ecb +if errorlevel 1 goto err + +call tencce.bat bf-cfb +if errorlevel 1 goto err + +call tencce.bat bf-ofb +if errorlevel 1 goto err + +call tencce.bat bf-cbc +if errorlevel 1 goto err + +echo OK +del %out1% >nul 2>&1 +del %tmp1% >nul 2>&1 +:err + diff --git a/openssl/ms/testpem.bat b/openssl/ms/testpem.bat index 005f13b67..8b2e844d3 100644 --- a/openssl/ms/testpem.bat +++ b/openssl/ms/testpem.bat @@ -1,32 +1,32 @@ -@echo off -set ssleay=%1% -set tmp1=pem.out -set cmp=fc.exe - -call tpem.bat crl ..\test\testcrl.pem -if errorlevel 1 goto err - -call tpem.bat pkcs7 ..\test\testp7.pem -if errorlevel 1 goto err - -call tpem.bat req ..\test\testreq2.pem -if errorlevel 1 goto err - -call tpem.bat rsa ..\test\testrsa.pem -if errorlevel 1 goto err - -call tpem.bat x509 ..\test\testx509.pem -if errorlevel 1 goto err - -call tpem.bat x509 ..\test\v3-cert1.pem -if errorlevel 1 goto err - -call tpem.bat x509 ..\test\v3-cert1.pem -if errorlevel 1 goto err - -call tpem.bat sess_id ..\test\testsid.pem -if errorlevel 1 goto err - -echo OK -del %tmp1% -:err +@echo off +set ssleay=%1% +set tmp1=pem.out +set cmp=fc.exe + +call tpem.bat crl ..\test\testcrl.pem +if errorlevel 1 goto err + +call tpem.bat pkcs7 ..\test\testp7.pem +if errorlevel 1 goto err + +call tpem.bat req ..\test\testreq2.pem +if errorlevel 1 goto err + +call tpem.bat rsa ..\test\testrsa.pem +if errorlevel 1 goto err + +call tpem.bat x509 ..\test\testx509.pem +if errorlevel 1 goto err + +call tpem.bat x509 ..\test\v3-cert1.pem +if errorlevel 1 goto err + +call tpem.bat x509 ..\test\v3-cert1.pem +if errorlevel 1 goto err + +call tpem.bat sess_id ..\test\testsid.pem +if errorlevel 1 goto err + +echo OK +del %tmp1% +:err diff --git a/openssl/ms/testpemce.bat b/openssl/ms/testpemce.bat index c793c3e51..ac64a7912 100644 --- a/openssl/ms/testpemce.bat +++ b/openssl/ms/testpemce.bat @@ -1,42 +1,42 @@ -@echo off -set ssleay=%1% -set tmp1=pem.out -set cmp=fc.exe - -cecopy %ssleay% CE:\OpenSSL - -copy ..\test\testcrl.pem >nul -call tpemce.bat crl testcrl.pem -if errorlevel 1 goto err - -copy ..\test\testp7.pem >nul -call tpemce.bat pkcs7 testp7.pem -if errorlevel 1 goto err - -copy ..\test\testreq2.pem >nul -call tpemce.bat req testreq2.pem -if errorlevel 1 goto err - -copy ..\test\testrsa.pem >nul -call tpemce.bat rsa testrsa.pem -if errorlevel 1 goto err - -copy ..\test\testx509.pem >nul -call tpemce.bat x509 testx509.pem -if errorlevel 1 goto err - -copy ..\test\v3-cert1.pem >nul -call tpemce.bat x509 v3-cert1.pem -if errorlevel 1 goto err - -copy ..\test\v3-cert1.pem >nul -call tpemce.bat x509 v3-cert1.pem -if errorlevel 1 goto err - -copy ..\test\testsid.pem >nul -call tpemce.bat sess_id testsid.pem -if errorlevel 1 goto err - -echo OK -del %tmp1% >nul 2>&1 -:err +@echo off +set ssleay=%1% +set tmp1=pem.out +set cmp=fc.exe + +cecopy %ssleay% CE:\OpenSSL + +copy ..\test\testcrl.pem >nul +call tpemce.bat crl testcrl.pem +if errorlevel 1 goto err + +copy ..\test\testp7.pem >nul +call tpemce.bat pkcs7 testp7.pem +if errorlevel 1 goto err + +copy ..\test\testreq2.pem >nul +call tpemce.bat req testreq2.pem +if errorlevel 1 goto err + +copy ..\test\testrsa.pem >nul +call tpemce.bat rsa testrsa.pem +if errorlevel 1 goto err + +copy ..\test\testx509.pem >nul +call tpemce.bat x509 testx509.pem +if errorlevel 1 goto err + +copy ..\test\v3-cert1.pem >nul +call tpemce.bat x509 v3-cert1.pem +if errorlevel 1 goto err + +copy ..\test\v3-cert1.pem >nul +call tpemce.bat x509 v3-cert1.pem +if errorlevel 1 goto err + +copy ..\test\testsid.pem >nul +call tpemce.bat sess_id testsid.pem +if errorlevel 1 goto err + +echo OK +del %tmp1% >nul 2>&1 +:err diff --git a/openssl/ms/testss.bat b/openssl/ms/testss.bat index b4aaf3c60..5afa131db 100644 --- a/openssl/ms/testss.bat +++ b/openssl/ms/testss.bat @@ -1,98 +1,98 @@ -@echo off - -rem set ssleay=..\out\ssleay -set ssleay=%1 - -set reqcmd=%ssleay% req -set x509cmd=%ssleay% x509 -sha1 -set verifycmd=%ssleay% verify - -set CAkey=keyCA.ss -set CAcert=certCA.ss -set CAserial=certCA.srl -set CAreq=reqCA.ss -set CAconf=..\test\CAss.cnf -set CAreq2=req2CA.ss - -set Uconf=..\test\Uss.cnf -set Ukey=keyU.ss -set Ureq=reqU.ss -set Ucert=certU.ss - -echo make a certificate request using 'req' -%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new -if errorlevel 1 goto e_req - -echo convert the certificate request into a self signed certificate using 'x509' -%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% >err.ss -if errorlevel 1 goto e_x509 - -echo -- -echo convert a certificate into a certificate request using 'x509' -%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% >err.ss -if errorlevel 1 goto e_x509_2 - -%reqcmd% -verify -in %CAreq% -noout -if errorlevel 1 goto e_vrfy_1 - -%reqcmd% -verify -in %CAreq2% -noout -if errorlevel 1 goto e_vrfy_2 - -%verifycmd% -CAfile %CAcert% %CAcert% -if errorlevel 1 goto e_vrfy_3 - -echo -- -echo make another certificate request using 'req' -%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new >err.ss -if errorlevel 1 goto e_req_gen - -echo -- -echo sign certificate request with the just created CA via 'x509' -%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial% -if errorlevel 1 goto e_x_sign - -%verifycmd% -CAfile %CAcert% %Ucert% -echo -- -echo Certificate details -%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert% - -echo Everything appeared to work -echo -- -echo The generated CA certificate is %CAcert% -echo The generated CA private key is %CAkey% -echo The current CA signing serial number is in %CAserial% - -echo The generated user certificate is %Ucert% -echo The generated user private key is %Ukey% -echo -- - -del err.ss - -goto end - -:e_req -echo error using 'req' to generate a certificate request -goto end -:e_x509 -echo error using 'x509' to self sign a certificate request -goto end -:e_x509_2 -echo error using 'x509' convert a certificate to a certificate request -goto end -:e_vrfy_1 -echo first generated request is invalid -goto end -:e_vrfy_2 -echo second generated request is invalid -goto end -:e_vrfy_3 -echo first generated cert is invalid -goto end -:e_req_gen -echo error using 'req' to generate a certificate request -goto end -:e_x_sign -echo error using 'x509' to sign a certificate request -goto end - -:end +@echo off + +rem set ssleay=..\out\ssleay +set ssleay=%1 + +set reqcmd=%ssleay% req +set x509cmd=%ssleay% x509 -sha1 +set verifycmd=%ssleay% verify + +set CAkey=keyCA.ss +set CAcert=certCA.ss +set CAserial=certCA.srl +set CAreq=reqCA.ss +set CAconf=..\test\CAss.cnf +set CAreq2=req2CA.ss + +set Uconf=..\test\Uss.cnf +set Ukey=keyU.ss +set Ureq=reqU.ss +set Ucert=certU.ss + +echo make a certificate request using 'req' +%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new +if errorlevel 1 goto e_req + +echo convert the certificate request into a self signed certificate using 'x509' +%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% >err.ss +if errorlevel 1 goto e_x509 + +echo -- +echo convert a certificate into a certificate request using 'x509' +%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% >err.ss +if errorlevel 1 goto e_x509_2 + +%reqcmd% -verify -in %CAreq% -noout +if errorlevel 1 goto e_vrfy_1 + +%reqcmd% -verify -in %CAreq2% -noout +if errorlevel 1 goto e_vrfy_2 + +%verifycmd% -CAfile %CAcert% %CAcert% +if errorlevel 1 goto e_vrfy_3 + +echo -- +echo make another certificate request using 'req' +%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new >err.ss +if errorlevel 1 goto e_req_gen + +echo -- +echo sign certificate request with the just created CA via 'x509' +%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial% +if errorlevel 1 goto e_x_sign + +%verifycmd% -CAfile %CAcert% %Ucert% +echo -- +echo Certificate details +%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert% + +echo Everything appeared to work +echo -- +echo The generated CA certificate is %CAcert% +echo The generated CA private key is %CAkey% +echo The current CA signing serial number is in %CAserial% + +echo The generated user certificate is %Ucert% +echo The generated user private key is %Ukey% +echo -- + +del err.ss + +goto end + +:e_req +echo error using 'req' to generate a certificate request +goto end +:e_x509 +echo error using 'x509' to self sign a certificate request +goto end +:e_x509_2 +echo error using 'x509' convert a certificate to a certificate request +goto end +:e_vrfy_1 +echo first generated request is invalid +goto end +:e_vrfy_2 +echo second generated request is invalid +goto end +:e_vrfy_3 +echo first generated cert is invalid +goto end +:e_req_gen +echo error using 'req' to generate a certificate request +goto end +:e_x_sign +echo error using 'x509' to sign a certificate request +goto end + +:end diff --git a/openssl/ms/testssce.bat b/openssl/ms/testssce.bat index dbb25abdb..18381ed2f 100644 --- a/openssl/ms/testssce.bat +++ b/openssl/ms/testssce.bat @@ -1,104 +1,104 @@ -rem set ssleay=..\out\ssleay -set ssleay=%1 - -set reqcmd=%ssleay% req -set x509cmd=%ssleay% x509 -set verifycmd=%ssleay% verify - -set CAkey=\OpenSSL\keyCA.ss -set CAcert=\OpenSSL\certCA.ss -set CAserial=\OpenSSL\certCA.srl -set CAreq=\OpenSSL\reqCA.ss -cecopy ..\test\CAss.cnf CE:\OpenSSL -set CAconf=\OpenSSL\CAss.cnf -set CAreq2=\OpenSSL\req2CA.ss - -cecopy ..\test\Uss.cnf CE:\OpenSSL -set Uconf=\OpenSSL\Uss.cnf -set Ukey=\OpenSSL\keyU.ss -set Ureq=\OpenSSL\reqU.ss -set Ucert=\OpenSSL\certU.ss - -echo make a certificate request using 'req' -cerun CE:\OpenSSL\%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new -if errorlevel 1 goto e_req - -echo convert the certificate request into a self signed certificate using 'x509' -cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% "> \OpenSSL\err.ss" -if errorlevel 1 goto e_x509 - -echo -- -echo convert a certificate into a certificate request using 'x509' -cerun CE:\OpenSSL\%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% "> \OpenSSL\err.ss" -if errorlevel 1 goto e_x509_2 - -cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq% -noout -if errorlevel 1 goto e_vrfy_1 - -cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq2% -noout -if errorlevel 1 goto e_vrfy_2 - -cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %CAcert% -if errorlevel 1 goto e_vrfy_3 - -echo -- -echo make another certificate request using 'req' -cerun CE:\OpenSSL\%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new "> \OpenSSL\err.ss" -if errorlevel 1 goto e_req_gen - -echo -- -echo sign certificate request with the just created CA via 'x509' -cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial% -if errorlevel 1 goto e_x_sign - -cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %Ucert% -echo -- -echo Certificate details -cerun CE:\OpenSSL\%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert% - -cecopy CE:%CAcert% . -cecopy CE:%CAkey% . -cecopy CE:%CAserial% . -cecopy CE:%Ucert% . -cecopy CE:%Ukey% . - -echo Everything appeared to work -echo -- -echo The generated CA certificate is %CAcert% -echo The generated CA private key is %CAkey% -echo The current CA signing serial number is in %CAserial% - -echo The generated user certificate is %Ucert% -echo The generated user private key is %Ukey% -echo -- - -cedel CE:\OpenSSL\err.ss - -goto end - -:e_req -echo error using 'req' to generate a certificate request -goto end -:e_x509 -echo error using 'x509' to self sign a certificate request -goto end -:e_x509_2 -echo error using 'x509' convert a certificate to a certificate request -goto end -:e_vrfy_1 -echo first generated request is invalid -goto end -:e_vrfy_2 -echo second generated request is invalid -goto end -:e_vrfy_3 -echo first generated cert is invalid -goto end -:e_req_gen -echo error using 'req' to generate a certificate request -goto end -:e_x_sign -echo error using 'x509' to sign a certificate request -goto end - -:end +rem set ssleay=..\out\ssleay +set ssleay=%1 + +set reqcmd=%ssleay% req +set x509cmd=%ssleay% x509 +set verifycmd=%ssleay% verify + +set CAkey=\OpenSSL\keyCA.ss +set CAcert=\OpenSSL\certCA.ss +set CAserial=\OpenSSL\certCA.srl +set CAreq=\OpenSSL\reqCA.ss +cecopy ..\test\CAss.cnf CE:\OpenSSL +set CAconf=\OpenSSL\CAss.cnf +set CAreq2=\OpenSSL\req2CA.ss + +cecopy ..\test\Uss.cnf CE:\OpenSSL +set Uconf=\OpenSSL\Uss.cnf +set Ukey=\OpenSSL\keyU.ss +set Ureq=\OpenSSL\reqU.ss +set Ucert=\OpenSSL\certU.ss + +echo make a certificate request using 'req' +cerun CE:\OpenSSL\%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new +if errorlevel 1 goto e_req + +echo convert the certificate request into a self signed certificate using 'x509' +cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% "> \OpenSSL\err.ss" +if errorlevel 1 goto e_x509 + +echo -- +echo convert a certificate into a certificate request using 'x509' +cerun CE:\OpenSSL\%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% "> \OpenSSL\err.ss" +if errorlevel 1 goto e_x509_2 + +cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq% -noout +if errorlevel 1 goto e_vrfy_1 + +cerun CE:\OpenSSL\%reqcmd% -verify -in %CAreq2% -noout +if errorlevel 1 goto e_vrfy_2 + +cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %CAcert% +if errorlevel 1 goto e_vrfy_3 + +echo -- +echo make another certificate request using 'req' +cerun CE:\OpenSSL\%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new "> \OpenSSL\err.ss" +if errorlevel 1 goto e_req_gen + +echo -- +echo sign certificate request with the just created CA via 'x509' +cerun CE:\OpenSSL\%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey %CAkey% -CAserial %CAserial% +if errorlevel 1 goto e_x_sign + +cerun CE:\OpenSSL\%verifycmd% -CAfile %CAcert% %Ucert% +echo -- +echo Certificate details +cerun CE:\OpenSSL\%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert% + +cecopy CE:%CAcert% . +cecopy CE:%CAkey% . +cecopy CE:%CAserial% . +cecopy CE:%Ucert% . +cecopy CE:%Ukey% . + +echo Everything appeared to work +echo -- +echo The generated CA certificate is %CAcert% +echo The generated CA private key is %CAkey% +echo The current CA signing serial number is in %CAserial% + +echo The generated user certificate is %Ucert% +echo The generated user private key is %Ukey% +echo -- + +cedel CE:\OpenSSL\err.ss + +goto end + +:e_req +echo error using 'req' to generate a certificate request +goto end +:e_x509 +echo error using 'x509' to self sign a certificate request +goto end +:e_x509_2 +echo error using 'x509' convert a certificate to a certificate request +goto end +:e_vrfy_1 +echo first generated request is invalid +goto end +:e_vrfy_2 +echo second generated request is invalid +goto end +:e_vrfy_3 +echo first generated cert is invalid +goto end +:e_req_gen +echo error using 'req' to generate a certificate request +goto end +:e_x_sign +echo error using 'x509' to sign a certificate request +goto end + +:end diff --git a/openssl/ms/tpem.bat b/openssl/ms/tpem.bat index 7fc7a8327..cd01792e9 100644 --- a/openssl/ms/tpem.bat +++ b/openssl/ms/tpem.bat @@ -1,6 +1,6 @@ -rem called by testpem - -echo test %1 %2 -%ssleay% %1 -in %2 -out %tmp1% -%cmp% %2 %tmp1% - +rem called by testpem + +echo test %1 %2 +%ssleay% %1 -in %2 -out %tmp1% +%cmp% %2 %tmp1% + diff --git a/openssl/ms/tpemce.bat b/openssl/ms/tpemce.bat index 17b2acd39..483f559cf 100644 --- a/openssl/ms/tpemce.bat +++ b/openssl/ms/tpemce.bat @@ -1,8 +1,8 @@ -rem called by testpemce - -echo test %1 %2 -cecopy %2 CE:\OpenSSL -cerun CE:\OpenSSL\%ssleay% %1 -in \OpenSSL\%2 -out \OpenSSL\%tmp1% -del %tmp1% >nul 2>&1 -cecopy CE:\OpenSSL\%tmp1% . -%cmp% %2 %tmp1% +rem called by testpemce + +echo test %1 %2 +cecopy %2 CE:\OpenSSL +cerun CE:\OpenSSL\%ssleay% %1 -in \OpenSSL\%2 -out \OpenSSL\%tmp1% +del %tmp1% >nul 2>&1 +cecopy CE:\OpenSSL\%tmp1% . +%cmp% %2 %tmp1% diff --git a/openssl/openssl.spec b/openssl/openssl.spec index 8ad98b363..9436e9984 100644 --- a/openssl/openssl.spec +++ b/openssl/openssl.spec @@ -1,8 +1,5 @@ %define _unpackaged_files_terminate_build 0 -%define libmaj 1 -%define libmin 0 -%define librel 1 -%define librev e + Release: 1 %define openssldir /var/ssl @@ -10,9 +7,9 @@ Release: 1 Summary: Secure Sockets Layer and cryptography libraries and tools Name: openssl #Version: %{libmaj}.%{libmin}.%{librel} -Version: %{libmaj}.%{libmin}.%{librel}%{librev} +Version: 1.0.1f Source0: ftp://ftp.openssl.org/source/%{name}-%{version}.tar.gz -Copyright: Freely distributable +License: OpenSSL Group: System Environment/Libraries Provides: SSL URL: http://www.openssl.org/ diff --git a/openssl/ssl/d1_both.c b/openssl/ssl/d1_both.c index de8bab873..7a5596a6b 100644 --- a/openssl/ssl/d1_both.c +++ b/openssl/ssl/d1_both.c @@ -214,6 +214,12 @@ dtls1_hm_fragment_new(unsigned long frag_len, int reassembly) static void dtls1_hm_fragment_free(hm_fragment *frag) { + + if (frag->msg_header.is_ccs) + { + EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx); + EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash); + } if (frag->fragment) OPENSSL_free(frag->fragment); if (frag->reassembly) OPENSSL_free(frag->reassembly); OPENSSL_free(frag); @@ -313,9 +319,10 @@ int dtls1_do_write(SSL *s, int type) s->init_off -= DTLS1_HM_HEADER_LENGTH; s->init_num += DTLS1_HM_HEADER_LENGTH; - /* write atleast DTLS1_HM_HEADER_LENGTH bytes */ - if ( len <= DTLS1_HM_HEADER_LENGTH) - len += DTLS1_HM_HEADER_LENGTH; + if ( s->init_num > curr_mtu) + len = curr_mtu; + else + len = s->init_num; } dtls1_fix_message_header(s, frag_off, diff --git a/openssl/ssl/d1_clnt.c b/openssl/ssl/d1_clnt.c index a6ed09c51..48e5e06bd 100644 --- a/openssl/ssl/d1_clnt.c +++ b/openssl/ssl/d1_clnt.c @@ -538,13 +538,6 @@ int dtls1_connect(SSL *s) SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B); if (ret <= 0) goto end; -#ifndef OPENSSL_NO_SCTP - /* Change to new shared key of SCTP-Auth, - * will be ignored if no SCTP used. - */ - BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); -#endif - s->state=SSL3_ST_CW_FINISHED_A; s->init_num=0; @@ -571,6 +564,16 @@ int dtls1_connect(SSL *s) goto end; } +#ifndef OPENSSL_NO_SCTP + if (s->hit) + { + /* Change to new shared key of SCTP-Auth, + * will be ignored if no SCTP used. + */ + BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); + } +#endif + dtls1_reset_seq_numbers(s, SSL3_CC_WRITE); break; @@ -613,6 +616,13 @@ int dtls1_connect(SSL *s) } else { +#ifndef OPENSSL_NO_SCTP + /* Change to new shared key of SCTP-Auth, + * will be ignored if no SCTP used. + */ + BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); +#endif + #ifndef OPENSSL_NO_TLSEXT /* Allow NewSessionTicket if ticket expected */ if (s->tlsext_ticket_expected) @@ -773,7 +783,7 @@ int dtls1_client_hello(SSL *s) unsigned char *buf; unsigned char *p,*d; unsigned int i,j; - unsigned long Time,l; + unsigned long l; SSL_COMP *comp; buf=(unsigned char *)s->init_buf->data; @@ -798,13 +808,11 @@ int dtls1_client_hello(SSL *s) /* if client_random is initialized, reuse it, we are * required to use same upon reply to HelloVerify */ - for (i=0;p[i]=='\0' && is3->client_random);i++) ; + for (i=0;p[i]=='\0' && is3->client_random);i++) + ; if (i==sizeof(s->s3->client_random)) - { - Time=(unsigned long)time(NULL); /* Time */ - l2n(Time,p); - RAND_pseudo_bytes(p,sizeof(s->s3->client_random)-4); - } + ssl_fill_hello_random(s, 0, p, + sizeof(s->s3->client_random)); /* Do the message type and length last */ d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); diff --git a/openssl/ssl/d1_lib.c b/openssl/ssl/d1_lib.c index f61f71818..106939f24 100644 --- a/openssl/ssl/d1_lib.c +++ b/openssl/ssl/d1_lib.c @@ -196,6 +196,7 @@ void dtls1_free(SSL *s) pqueue_free(s->d1->buffered_app_data.q); OPENSSL_free(s->d1); + s->d1 = NULL; } void dtls1_clear(SSL *s) diff --git a/openssl/ssl/d1_pkt.c b/openssl/ssl/d1_pkt.c index 0bf87be6d..8186462d4 100644 --- a/openssl/ssl/d1_pkt.c +++ b/openssl/ssl/d1_pkt.c @@ -847,6 +847,12 @@ start: } } + if (s->d1->listen && rr->type != SSL3_RT_HANDSHAKE) + { + rr->length = 0; + goto start; + } + /* we now have a packet which can be read and processed */ if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec, @@ -1051,6 +1057,7 @@ start: !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && !s->s3->renegotiate) { + s->d1->handshake_read_seq++; s->new_session = 1; ssl3_renegotiate(s); if (ssl3_renegotiate_check(s)) diff --git a/openssl/ssl/d1_srvr.c b/openssl/ssl/d1_srvr.c index 29421da9a..9975e2087 100644 --- a/openssl/ssl/d1_srvr.c +++ b/openssl/ssl/d1_srvr.c @@ -276,10 +276,11 @@ int dtls1_accept(SSL *s) case SSL3_ST_SW_HELLO_REQ_B: s->shutdown=0; + dtls1_clear_record_buffer(s); dtls1_start_timer(s); ret=dtls1_send_hello_request(s); if (ret <= 0) goto end; - s->s3->tmp.next_state=SSL3_ST_SW_HELLO_REQ_C; + s->s3->tmp.next_state=SSL3_ST_SR_CLNT_HELLO_A; s->state=SSL3_ST_SW_FLUSH; s->init_num=0; @@ -721,10 +722,13 @@ int dtls1_accept(SSL *s) if (ret <= 0) goto end; #ifndef OPENSSL_NO_SCTP - /* Change to new shared key of SCTP-Auth, - * will be ignored if no SCTP used. - */ - BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); + if (!s->hit) + { + /* Change to new shared key of SCTP-Auth, + * will be ignored if no SCTP used. + */ + BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); + } #endif s->state=SSL3_ST_SW_FINISHED_A; @@ -749,7 +753,16 @@ int dtls1_accept(SSL *s) if (ret <= 0) goto end; s->state=SSL3_ST_SW_FLUSH; if (s->hit) + { s->s3->tmp.next_state=SSL3_ST_SR_FINISHED_A; + +#ifndef OPENSSL_NO_SCTP + /* Change to new shared key of SCTP-Auth, + * will be ignored if no SCTP used. + */ + BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY, 0, NULL); +#endif + } else { s->s3->tmp.next_state=SSL_ST_OK; @@ -912,15 +925,13 @@ int dtls1_send_server_hello(SSL *s) unsigned char *p,*d; int i; unsigned int sl; - unsigned long l,Time; + unsigned long l; if (s->state == SSL3_ST_SW_SRVR_HELLO_A) { buf=(unsigned char *)s->init_buf->data; p=s->s3->server_random; - Time=(unsigned long)time(NULL); /* Time */ - l2n(Time,p); - RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4); + ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE); /* Do the message type and length last */ d=p= &(buf[DTLS1_HM_HEADER_LENGTH]); diff --git a/openssl/ssl/s23_clnt.c b/openssl/ssl/s23_clnt.c index 47673e740..84670b6c1 100644 --- a/openssl/ssl/s23_clnt.c +++ b/openssl/ssl/s23_clnt.c @@ -269,12 +269,35 @@ static int ssl23_no_ssl2_ciphers(SSL *s) return 1; } +/* Fill a ClientRandom or ServerRandom field of length len. Returns <= 0 + * on failure, 1 on success. */ +int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, int len) + { + int send_time = 0; + + if (len < 4) + return 0; + if (server) + send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0; + else + send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0; + if (send_time) + { + unsigned long Time = time(NULL); + unsigned char *p = result; + l2n(Time, p); + return RAND_pseudo_bytes(p, len-4); + } + else + return RAND_pseudo_bytes(result, len); + } + static int ssl23_client_hello(SSL *s) { unsigned char *buf; unsigned char *p,*d; int i,ch_len; - unsigned long Time,l; + unsigned long l; int ssl2_compat; int version = 0, version_major, version_minor; #ifndef OPENSSL_NO_COMP @@ -355,9 +378,7 @@ static int ssl23_client_hello(SSL *s) #endif p=s->s3->client_random; - Time=(unsigned long)time(NULL); /* Time */ - l2n(Time,p); - if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) + if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0) return -1; if (version == TLS1_2_VERSION) diff --git a/openssl/ssl/s3_both.c b/openssl/ssl/s3_both.c index ead01c82a..53b9390fd 100644 --- a/openssl/ssl/s3_both.c +++ b/openssl/ssl/s3_both.c @@ -161,6 +161,8 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) i=s->method->ssl3_enc->final_finish_mac(s, sender,slen,s->s3->tmp.finish_md); + if (i == 0) + return 0; s->s3->tmp.finish_md_len = i; memcpy(p, s->s3->tmp.finish_md, i); p+=i; @@ -208,7 +210,11 @@ static void ssl3_take_mac(SSL *s) { const char *sender; int slen; - + /* If no new cipher setup return immediately: other functions will + * set the appropriate error. + */ + if (s->s3->tmp.new_cipher == NULL) + return; if (s->state & SSL_ST_CONNECT) { sender=s->method->ssl3_enc->server_finished_label; diff --git a/openssl/ssl/s3_cbc.c b/openssl/ssl/s3_cbc.c index 02edf3f91..443a31e74 100644 --- a/openssl/ssl/s3_cbc.c +++ b/openssl/ssl/s3_cbc.c @@ -148,7 +148,7 @@ int tls1_cbc_remove_padding(const SSL* s, unsigned padding_length, good, to_check, i; const unsigned overhead = 1 /* padding length byte */ + mac_size; /* Check if version requires explicit IV */ - if (s->version >= TLS1_1_VERSION || s->version == DTLS1_VERSION) + if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) { /* These lengths are all public so we can test them in * non-constant time. diff --git a/openssl/ssl/s3_clnt.c b/openssl/ssl/s3_clnt.c index 344e2eb1a..a6b3c01af 100644 --- a/openssl/ssl/s3_clnt.c +++ b/openssl/ssl/s3_clnt.c @@ -655,7 +655,7 @@ int ssl3_client_hello(SSL *s) unsigned char *buf; unsigned char *p,*d; int i; - unsigned long Time,l; + unsigned long l; #ifndef OPENSSL_NO_COMP int j; SSL_COMP *comp; @@ -680,9 +680,8 @@ int ssl3_client_hello(SSL *s) /* else use the pre-loaded session */ p=s->s3->client_random; - Time=(unsigned long)time(NULL); /* Time */ - l2n(Time,p); - if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) + + if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0) goto err; /* Do the message type and length last */ diff --git a/openssl/ssl/s3_lib.c b/openssl/ssl/s3_lib.c index e7c5dcb80..c4ef2738d 100644 --- a/openssl/ssl/s3_lib.c +++ b/openssl/ssl/s3_lib.c @@ -1683,7 +1683,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ SSL_3DES, SSL_SHA1, SSL_TLSV1, - SSL_NOT_EXP|SSL_HIGH, + SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 168, 168, @@ -1699,7 +1699,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ SSL_AES128, SSL_SHA1, SSL_TLSV1, - SSL_NOT_EXP|SSL_HIGH, + SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 128, 128, @@ -1715,7 +1715,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={ SSL_AES256, SSL_SHA1, SSL_TLSV1, - SSL_NOT_EXP|SSL_HIGH, + SSL_NOT_EXP|SSL_HIGH|SSL_FIPS, SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF, 256, 256, @@ -3037,6 +3037,11 @@ void ssl3_clear(SSL *s) s->s3->tmp.ecdh = NULL; } #endif +#ifndef OPENSSL_NO_TLSEXT +#ifndef OPENSSL_NO_EC + s->s3->is_probably_safari = 0; +#endif /* !OPENSSL_NO_EC */ +#endif /* !OPENSSL_NO_TLSEXT */ rp = s->s3->rbuf.buf; wp = s->s3->wbuf.buf; @@ -4016,6 +4021,13 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, ii=sk_SSL_CIPHER_find(allow,c); if (ii >= 0) { +#if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_TLSEXT) + if ((alg_k & SSL_kEECDH) && (alg_a & SSL_aECDSA) && s->s3->is_probably_safari) + { + if (!ret) ret=sk_SSL_CIPHER_value(allow,ii); + continue; + } +#endif ret=sk_SSL_CIPHER_value(allow,ii); break; } @@ -4274,7 +4286,7 @@ need to go to SSL_ST_ACCEPT. long ssl_get_algorithm2(SSL *s) { long alg2 = s->s3->tmp.new_cipher->algorithm2; - if (TLS1_get_version(s) >= TLS1_2_VERSION && + if (s->method->version == TLS1_2_VERSION && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF)) return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256; return alg2; diff --git a/openssl/ssl/s3_pkt.c b/openssl/ssl/s3_pkt.c index 804291e27..96ba63262 100644 --- a/openssl/ssl/s3_pkt.c +++ b/openssl/ssl/s3_pkt.c @@ -335,7 +335,7 @@ fprintf(stderr, "Record type=%d, Length=%d\n", rr->type, rr->length); if (version != s->version) { SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER); - if ((s->version & 0xFF00) == (version & 0xFF00)) + if ((s->version & 0xFF00) == (version & 0xFF00) && !s->enc_write_ctx && !s->write_hash) /* Send back error using their minor version number :-) */ s->version = (unsigned short)version; al=SSL_AD_PROTOCOL_VERSION; @@ -1459,8 +1459,14 @@ int ssl3_do_change_cipher_spec(SSL *s) slen=s->method->ssl3_enc->client_finished_label_len; } - s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, + i = s->method->ssl3_enc->final_finish_mac(s, sender,slen,s->s3->tmp.peer_finish_md); + if (i == 0) + { + SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR); + return 0; + } + s->s3->tmp.peer_finish_md_len = i; return(1); } diff --git a/openssl/ssl/s3_srvr.c b/openssl/ssl/s3_srvr.c index bfb848054..52efed328 100644 --- a/openssl/ssl/s3_srvr.c +++ b/openssl/ssl/s3_srvr.c @@ -958,7 +958,8 @@ int ssl3_get_client_hello(SSL *s) (s->version != DTLS1_VERSION && s->client_version < s->version)) { SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER); - if ((s->client_version>>8) == SSL3_VERSION_MAJOR) + if ((s->client_version>>8) == SSL3_VERSION_MAJOR && + !s->enc_write_ctx && !s->write_hash) { /* similar to ssl3_get_record, send alert using remote version number */ s->version = s->client_version; @@ -1193,12 +1194,9 @@ int ssl3_get_client_hello(SSL *s) * server_random before calling tls_session_secret_cb in order to allow * SessionTicket processing to use it in key derivation. */ { - unsigned long Time; unsigned char *pos; - Time=(unsigned long)time(NULL); /* Time */ pos=s->s3->server_random; - l2n(Time,pos); - if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0) + if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0) { al=SSL_AD_INTERNAL_ERROR; goto f_err; @@ -1435,19 +1433,13 @@ int ssl3_send_server_hello(SSL *s) unsigned char *p,*d; int i,sl; unsigned long l; -#ifdef OPENSSL_NO_TLSEXT - unsigned long Time; -#endif if (s->state == SSL3_ST_SW_SRVR_HELLO_A) { buf=(unsigned char *)s->init_buf->data; #ifdef OPENSSL_NO_TLSEXT p=s->s3->server_random; - /* Generate server_random if it was not needed previously */ - Time=(unsigned long)time(NULL); /* Time */ - l2n(Time,p); - if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0) + if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0) return -1; #endif /* Do the message type and length last */ diff --git a/openssl/ssl/ssl.h b/openssl/ssl/ssl.h index 593579ed3..dece04de0 100644 --- a/openssl/ssl/ssl.h +++ b/openssl/ssl/ssl.h @@ -555,11 +555,14 @@ struct ssl_session_st #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L -#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L /* no effect since 0.9.7h and 0.9.8b */ +#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L #define SSL_OP_TLS_D5_BUG 0x00000100L #define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L +/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ +#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 + /* Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added * in OpenSSL 0.9.6d. Usually (depending on the application protocol) * the workaround is not needed. Unfortunately some broken SSL/TLS @@ -641,6 +644,12 @@ struct ssl_session_st * TLS only.) "Released" buffers are put onto a free-list in the context * or just freed (depending on the context's setting for freelist_max_len). */ #define SSL_MODE_RELEASE_BUFFERS 0x00000010L +/* Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +#define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L +#define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L /* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, * they cannot be used to clear bits. */ diff --git a/openssl/ssl/ssl3.h b/openssl/ssl/ssl3.h index 247e88c2d..cb8b2492e 100644 --- a/openssl/ssl/ssl3.h +++ b/openssl/ssl/ssl3.h @@ -539,6 +539,15 @@ typedef struct ssl3_state_st /* Set if we saw the Next Protocol Negotiation extension from our peer. */ int next_proto_neg_seen; #endif + +#ifndef OPENSSL_NO_TLSEXT +#ifndef OPENSSL_NO_EC + /* This is set to true if we believe that this is a version of Safari + * running on OS X 10.6 or newer. We wish to know this because Safari + * on 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. */ + char is_probably_safari; +#endif /* !OPENSSL_NO_EC */ +#endif /* !OPENSSL_NO_TLSEXT */ } SSL3_STATE; #endif diff --git a/openssl/ssl/ssl_lib.c b/openssl/ssl/ssl_lib.c index 14d143da0..6dbc3c1f7 100644 --- a/openssl/ssl/ssl_lib.c +++ b/openssl/ssl/ssl_lib.c @@ -1797,7 +1797,9 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data); ret->extra_certs=NULL; - ret->comp_methods=SSL_COMP_get_compression_methods(); + /* No compression for DTLS */ + if (meth->version != DTLS1_VERSION) + ret->comp_methods=SSL_COMP_get_compression_methods(); ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH; @@ -2792,9 +2794,7 @@ void ssl_clear_cipher_ctx(SSL *s) /* Fix this function so that it takes an optional type parameter */ X509 *SSL_get_certificate(const SSL *s) { - if (s->server) - return(ssl_get_server_send_cert(s)); - else if (s->cert != NULL) + if (s->cert != NULL) return(s->cert->key->x509); else return(NULL); diff --git a/openssl/ssl/ssl_locl.h b/openssl/ssl/ssl_locl.h index 1b98947e6..e48590774 100644 --- a/openssl/ssl/ssl_locl.h +++ b/openssl/ssl/ssl_locl.h @@ -621,6 +621,8 @@ extern SSL3_ENC_METHOD TLSv1_enc_data; extern SSL3_ENC_METHOD SSLv3_enc_data; extern SSL3_ENC_METHOD DTLSv1_enc_data; +#define SSL_IS_DTLS(s) (s->method->version == DTLS1_VERSION) + #define IMPLEMENT_tls_meth_func(version, func_name, s_accept, s_connect, \ s_get_meth) \ const SSL_METHOD *func_name(void) \ @@ -847,6 +849,7 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher); STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s); int ssl_verify_alarm_type(long type); void ssl_load_ciphers(void); +int ssl_fill_hello_random(SSL *s, int server, unsigned char *field, int len); int ssl2_enc_init(SSL *s, int client); int ssl2_generate_key_material(SSL *s); diff --git a/openssl/ssl/ssltest.c b/openssl/ssl/ssltest.c index 316bbb0c9..4f80be8ee 100644 --- a/openssl/ssl/ssltest.c +++ b/openssl/ssl/ssltest.c @@ -881,7 +881,13 @@ bad: meth=SSLv23_method(); #else #ifdef OPENSSL_NO_SSL2 - meth=SSLv3_method(); + if (tls1) + meth=TLSv1_method(); + else + if (ssl3) + meth=SSLv3_method(); + else + meth=SSLv23_method(); #else meth=SSLv2_method(); #endif diff --git a/openssl/ssl/t1_enc.c b/openssl/ssl/t1_enc.c index 809ad2ee1..56db83430 100644 --- a/openssl/ssl/t1_enc.c +++ b/openssl/ssl/t1_enc.c @@ -414,15 +414,20 @@ int tls1_change_cipher_state(SSL *s, int which) s->mac_flags |= SSL_MAC_FLAG_WRITE_MAC_STREAM; else s->mac_flags &= ~SSL_MAC_FLAG_WRITE_MAC_STREAM; - if (s->enc_write_ctx != NULL) + if (s->enc_write_ctx != NULL && !SSL_IS_DTLS(s)) reuse_dd = 1; - else if ((s->enc_write_ctx=OPENSSL_malloc(sizeof(EVP_CIPHER_CTX))) == NULL) + else if ((s->enc_write_ctx=EVP_CIPHER_CTX_new()) == NULL) goto err; - else - /* make sure it's intialized in case we exit later with an error */ - EVP_CIPHER_CTX_init(s->enc_write_ctx); dd= s->enc_write_ctx; - mac_ctx = ssl_replace_hash(&s->write_hash,NULL); + if (SSL_IS_DTLS(s)) + { + mac_ctx = EVP_MD_CTX_create(); + if (!mac_ctx) + goto err; + s->write_hash = mac_ctx; + } + else + mac_ctx = ssl_replace_hash(&s->write_hash,NULL); #ifndef OPENSSL_NO_COMP if (s->compress != NULL) { @@ -915,18 +920,19 @@ int tls1_final_finish_mac(SSL *s, if (mask & ssl_get_algorithm2(s)) { int hashsize = EVP_MD_size(md); - if (hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf))) + EVP_MD_CTX *hdgst = s->s3->handshake_dgst[idx]; + if (!hdgst || hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf))) { /* internal error: 'buf' is too small for this cipersuite! */ err = 1; } else { - EVP_MD_CTX_copy_ex(&ctx,s->s3->handshake_dgst[idx]); - EVP_DigestFinal_ex(&ctx,q,&i); - if (i != (unsigned int)hashsize) /* can't really happen */ + if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) || + !EVP_DigestFinal_ex(&ctx,q,&i) || + (i != (unsigned int)hashsize)) err = 1; - q+=i; + q+=hashsize; } } } diff --git a/openssl/ssl/t1_lib.c b/openssl/ssl/t1_lib.c index e08088c57..33afdeba3 100644 --- a/openssl/ssl/t1_lib.c +++ b/openssl/ssl/t1_lib.c @@ -342,19 +342,11 @@ static unsigned char tls12_sigalgs[] = { #ifndef OPENSSL_NO_SHA tlsext_sigalg(TLSEXT_hash_sha1) #endif -#ifndef OPENSSL_NO_MD5 - tlsext_sigalg_rsa(TLSEXT_hash_md5) -#endif }; int tls12_get_req_sig_algs(SSL *s, unsigned char *p) { size_t slen = sizeof(tls12_sigalgs); -#ifdef OPENSSL_FIPS - /* If FIPS mode don't include MD5 which is last */ - if (FIPS_mode()) - slen -= 2; -#endif if (p) memcpy(p, tls12_sigalgs, slen); return (int)slen; @@ -866,6 +858,89 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *p, unsigned cha return ret; } +#ifndef OPENSSL_NO_EC +/* ssl_check_for_safari attempts to fingerprint Safari using OS X + * SecureTransport using the TLS extension block in |d|, of length |n|. + * Safari, since 10.6, sends exactly these extensions, in this order: + * SNI, + * elliptic_curves + * ec_point_formats + * + * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8, + * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them. + * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from + * 10.8..10.8.3 (which don't work). + */ +static void ssl_check_for_safari(SSL *s, const unsigned char *data, const unsigned char *d, int n) { + unsigned short type, size; + static const unsigned char kSafariExtensionsBlock[] = { + 0x00, 0x0a, /* elliptic_curves extension */ + 0x00, 0x08, /* 8 bytes */ + 0x00, 0x06, /* 6 bytes of curve ids */ + 0x00, 0x17, /* P-256 */ + 0x00, 0x18, /* P-384 */ + 0x00, 0x19, /* P-521 */ + + 0x00, 0x0b, /* ec_point_formats */ + 0x00, 0x02, /* 2 bytes */ + 0x01, /* 1 point format */ + 0x00, /* uncompressed */ + }; + + /* The following is only present in TLS 1.2 */ + static const unsigned char kSafariTLS12ExtensionsBlock[] = { + 0x00, 0x0d, /* signature_algorithms */ + 0x00, 0x0c, /* 12 bytes */ + 0x00, 0x0a, /* 10 bytes */ + 0x05, 0x01, /* SHA-384/RSA */ + 0x04, 0x01, /* SHA-256/RSA */ + 0x02, 0x01, /* SHA-1/RSA */ + 0x04, 0x03, /* SHA-256/ECDSA */ + 0x02, 0x03, /* SHA-1/ECDSA */ + }; + + if (data >= (d+n-2)) + return; + data += 2; + + if (data > (d+n-4)) + return; + n2s(data,type); + n2s(data,size); + + if (type != TLSEXT_TYPE_server_name) + return; + + if (data+size > d+n) + return; + data += size; + + if (TLS1_get_client_version(s) >= TLS1_2_VERSION) + { + const size_t len1 = sizeof(kSafariExtensionsBlock); + const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock); + + if (data + len1 + len2 != d+n) + return; + if (memcmp(data, kSafariExtensionsBlock, len1) != 0) + return; + if (memcmp(data + len1, kSafariTLS12ExtensionsBlock, len2) != 0) + return; + } + else + { + const size_t len = sizeof(kSafariExtensionsBlock); + + if (data + len != d+n) + return; + if (memcmp(data, kSafariExtensionsBlock, len) != 0) + return; + } + + s->s3->is_probably_safari = 1; +} +#endif /* !OPENSSL_NO_EC */ + int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) { unsigned short type; @@ -886,6 +961,11 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in SSL_TLSEXT_HB_DONT_SEND_REQUESTS); #endif +#ifndef OPENSSL_NO_EC + if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG) + ssl_check_for_safari(s, data, d, n); +#endif /* !OPENSSL_NO_EC */ + if (data >= (d+n-2)) goto ri_check; n2s(data,len); @@ -2364,14 +2444,6 @@ const EVP_MD *tls12_get_hash(unsigned char hash_alg) { switch(hash_alg) { -#ifndef OPENSSL_NO_MD5 - case TLSEXT_hash_md5: -#ifdef OPENSSL_FIPS - if (FIPS_mode()) - return NULL; -#endif - return EVP_md5(); -#endif #ifndef OPENSSL_NO_SHA case TLSEXT_hash_sha1: return EVP_sha1(); diff --git a/openssl/test/cms-test.pl b/openssl/test/cms-test.pl index c938bcf00..dfef799be 100644 --- a/openssl/test/cms-test.pl +++ b/openssl/test/cms-test.pl @@ -415,8 +415,10 @@ sub run_smime_tests { } sub cmp_files { + use FileHandle; my ( $f1, $f2 ) = @_; - my ( $fp1, $fp2 ); + my $fp1 = FileHandle->new(); + my $fp2 = FileHandle->new(); my ( $rd1, $rd2 ); diff --git a/openssl/util/shlib_wrap.sh b/openssl/util/shlib_wrap.sh index 9416d593d..8775cb541 100644 --- a/openssl/util/shlib_wrap.sh +++ b/openssl/util/shlib_wrap.sh @@ -90,4 +90,8 @@ fi cmd="$1${EXE_EXT}" shift -exec "$cmd" "$@" +if [ $# -eq 0 ]; then + exec "$cmd" # old sh, such as Tru64 4.x, fails to expand empty "$@" +else + exec "$cmd" "$@" +fi diff --git a/packages.txt b/packages.txt index 180753644..56a8e44ca 100644 --- a/packages.txt +++ b/packages.txt @@ -66,7 +66,7 @@ libxcb git version libxkbfile-1.0.8 mesa git version mkfontscale git version -openssl-1.0.1e +openssl-1.0.1f pixman git version presentproto-1.0 pthreads-w32 cvs version diff --git a/xkbcomp/man/Makefile.am b/xkbcomp/man/Makefile.am index f17336a0f..953e84cbd 100644 --- a/xkbcomp/man/Makefile.am +++ b/xkbcomp/man/Makefile.am @@ -8,5 +8,7 @@ CLEANFILES = $(appman_DATA) SUFFIXES = .$(APP_MAN_SUFFIX) .man # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure +MAN_SUBSTS += -e 's|__xkbconfigroot__|$(XKBCONFIGROOT)|' + .man.$(APP_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ diff --git a/xkbcomp/man/xkbcomp.man b/xkbcomp/man/xkbcomp.man index 667c98506..47e516a76 100644 --- a/xkbcomp/man/xkbcomp.man +++ b/xkbcomp/man/xkbcomp.man @@ -63,7 +63,7 @@ Show available options. Specifies top-level directories to be searched for files included by the keymap description. After all directories specified by \-I options have been searched, the current directory and finally, the default -xkb directory (usually __projectroot__/lib/X11/xkb) will be searched. +xkb directory __xkbconfigroot__ will be searched. .sp To prevent the current and default directories from being searched, use the \-I option alone (i.e. without a directory), before any \-I diff --git a/xorg-server/Makefile.am b/xorg-server/Makefile.am index add69d193..7c93d8d20 100644 --- a/xorg-server/Makefile.am +++ b/xorg-server/Makefile.am @@ -27,6 +27,14 @@ if PRESENT PRESENT_DIR=present endif +if PSEUDORAMIX +PSEUDORAMIX_DIR=pseudoramiX +endif + +if GLAMOR +GLAMOR_DIR=glamor +endif + SUBDIRS = \ doc \ man \ @@ -37,11 +45,11 @@ SUBDIRS = \ Xext \ miext \ os \ - pseudoramiX \ randr \ render \ Xi \ xkb \ + $(PSEUDORAMIX_DIR) \ $(DBE_DIR) \ $(RECORD_DIR) \ xfixes \ @@ -51,6 +59,7 @@ SUBDIRS = \ $(PRESENT_DIR) \ $(DRI3_DIR) \ exa \ + $(GLAMOR_DIR) \ config \ hw \ test @@ -102,6 +111,7 @@ DIST_SUBDIRS = \ composite \ glx \ exa \ + $(GLAMOR_DIR) \ config \ dri3 \ present \ diff --git a/xorg-server/Xi/xichangehierarchy.c b/xorg-server/Xi/xichangehierarchy.c index e2f4b8a0a..9e36354d1 100644 --- a/xorg-server/Xi/xichangehierarchy.c +++ b/xorg-server/Xi/xichangehierarchy.c @@ -143,6 +143,10 @@ add_master(ClientPtr client, xXIAddMasterInfo * c, int flags[MAXDEVICES]) int rc; name = calloc(c->name_len + 1, sizeof(char)); + if (name == NULL) { + rc = BadAlloc; + goto unwind; + } strncpy(name, (char *) &c[1], c->name_len); rc = AllocDevicePair(client, name, &ptr, &keybd, diff --git a/xorg-server/Xi/xipassivegrab.c b/xorg-server/Xi/xipassivegrab.c index eccec0ab8..8aba97781 100644 --- a/xorg-server/Xi/xipassivegrab.c +++ b/xorg-server/Xi/xipassivegrab.c @@ -63,7 +63,7 @@ SProcXIPassiveGrabDevice(ClientPtr client) swaps(&stuff->mask_len); swaps(&stuff->num_modifiers); - mods = (uint32_t *) &stuff[1]; + mods = (uint32_t *) &stuff[1] + stuff->mask_len; for (i = 0; i < stuff->num_modifiers; i++, mods++) { swapl(mods); diff --git a/xorg-server/config/Makefile.am b/xorg-server/config/Makefile.am index 327d07e7c..e0f0a8ddf 100644 --- a/xorg-server/config/Makefile.am +++ b/xorg-server/config/Makefile.am @@ -2,12 +2,19 @@ AM_CFLAGS = $(DIX_CFLAGS) noinst_LTLIBRARIES = libconfig.la libconfig_la_SOURCES = config.c config-backends.h +libconfig_la_LIBADD = + +if NEED_DBUS +AM_CFLAGS += $(DBUS_CFLAGS) +libconfig_la_SOURCES += dbus-core.c +libconfig_la_LIBADD += $(DBUS_LIBS) +endif if CONFIG_UDEV AM_CFLAGS += $(UDEV_CFLAGS) libconfig_la_SOURCES += udev.c -libconfig_la_LIBADD = $(UDEV_LIBS) +libconfig_la_LIBADD += $(UDEV_LIBS) if XORG xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR) @@ -16,23 +23,10 @@ endif else -if CONFIG_NEED_DBUS -AM_CFLAGS += $(DBUS_CFLAGS) -libconfig_la_SOURCES += dbus-core.c -libconfig_la_LIBADD = $(DBUS_LIBS) - -if CONFIG_DBUS_API -dbusconfigdir = $(sysconfdir)/dbus-1/system.d -dbusconfig_DATA = xorg-server.conf - -libconfig_la_SOURCES += dbus.c -endif - if CONFIG_HAL AM_CFLAGS += $(HAL_CFLAGS) libconfig_la_SOURCES += hal.c libconfig_la_LIBADD += $(HAL_LIBS) -endif else @@ -40,7 +34,7 @@ if CONFIG_WSCONS libconfig_la_SOURCES += wscons.c endif # CONFIG_WSCONS -endif # CONFIG_NEED_DBUS +endif # !CONFIG_HAL endif # !CONFIG_UDEV diff --git a/xorg-server/config/config-backends.h b/xorg-server/config/config-backends.h index 6423701fc..5f07557b7 100644 --- a/xorg-server/config/config-backends.h +++ b/xorg-server/config/config-backends.h @@ -37,41 +37,10 @@ int config_udev_pre_init(void); int config_udev_init(void); void config_udev_fini(void); void config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback); -#else - -#ifdef CONFIG_NEED_DBUS -#include - -typedef void (*config_dbus_core_connect_hook) (DBusConnection * connection, - void *data); -typedef void (*config_dbus_core_disconnect_hook) (void *data); - -struct config_dbus_core_hook { - config_dbus_core_connect_hook connect; - config_dbus_core_disconnect_hook disconnect; - void *data; - - struct config_dbus_core_hook *next; -}; - -int config_dbus_core_init(void); -void config_dbus_core_fini(void); -int config_dbus_core_add_hook(struct config_dbus_core_hook *hook); -void config_dbus_core_remove_hook(struct config_dbus_core_hook *hook); -#endif - -#ifdef CONFIG_DBUS_API -int config_dbus_init(void); -void config_dbus_fini(void); -#endif - -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) int config_hal_init(void); void config_hal_fini(void); -#endif -#endif - -#ifdef CONFIG_WSCONS +#elif defined(CONFIG_WSCONS) int config_wscons_init(void); void config_wscons_fini(void); #endif diff --git a/xorg-server/config/config.c b/xorg-server/config/config.c index d0889a394..760cf193a 100644 --- a/xorg-server/config/config.c +++ b/xorg-server/config/config.c @@ -47,20 +47,9 @@ config_init(void) #ifdef CONFIG_UDEV if (!config_udev_init()) ErrorF("[config] failed to initialise udev\n"); -#elif defined(CONFIG_NEED_DBUS) - if (config_dbus_core_init()) { -#ifdef CONFIG_DBUS_API - if (!config_dbus_init()) - ErrorF("[config] failed to initialise D-Bus API\n"); -#endif -#ifdef CONFIG_HAL - if (!config_hal_init()) - ErrorF("[config] failed to initialise HAL\n"); -#endif - } - else { - ErrorF("[config] failed to initialise D-Bus core\n"); - } +#elif defined(CONFIG_HAL) + if (!config_hal_init()) + ErrorF("[config] failed to initialise HAL\n"); #elif defined(CONFIG_WSCONS) if (!config_wscons_init()) ErrorF("[config] failed to initialise wscons\n"); @@ -72,14 +61,8 @@ config_fini(void) { #if defined(CONFIG_UDEV) config_udev_fini(); -#elif defined(CONFIG_NEED_DBUS) -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) config_hal_fini(); -#endif -#ifdef CONFIG_DBUS_API - config_dbus_fini(); -#endif - config_dbus_core_fini(); #elif defined(CONFIG_WSCONS) config_wscons_fini(); #endif diff --git a/xorg-server/config/dbus-core.c b/xorg-server/config/dbus-core.c index 768a98454..b0fd92de4 100644 --- a/xorg-server/config/dbus-core.c +++ b/xorg-server/config/dbus-core.c @@ -30,9 +30,9 @@ #include #include -#include "config-backends.h" #include "dix.h" #include "os.h" +#include "dbus-core.h" /* How often to attempt reconnecting when we get booted off the bus. */ #define RECONNECT_DELAY (10 * 1000) /* in ms */ @@ -41,7 +41,7 @@ struct dbus_core_info { int fd; DBusConnection *connection; OsTimerPtr timer; - struct config_dbus_core_hook *hooks; + struct dbus_core_hook *hooks; }; static struct dbus_core_info bus_info; @@ -74,7 +74,7 @@ block_handler(void *data, struct timeval **tv, void *read_mask) static void teardown(void) { - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; if (bus_info.timer) { TimerFree(bus_info.timer); @@ -112,7 +112,7 @@ message_filter(DBusConnection * connection, DBusMessage * message, void *data) * reconnect immediately (assuming it's just a restart). The * connection isn't valid at this point, so throw it out immediately. */ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) { - DebugF("[config/dbus-core] disconnected from bus\n"); + DebugF("[dbus-core] disconnected from bus\n"); bus_info.connection = NULL; teardown(); @@ -136,12 +136,12 @@ static int connect_to_bus(void) { DBusError error; - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; dbus_error_init(&error); bus_info.connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); if (!bus_info.connection || dbus_error_is_set(&error)) { - DebugF("[config/dbus-core] error connecting to system bus: %s (%s)\n", + LogMessage(X_ERROR, "dbus-core: error connecting to system bus: %s (%s)\n", error.name, error.message); goto err_begin; } @@ -150,13 +150,13 @@ connect_to_bus(void) dbus_connection_set_exit_on_disconnect(bus_info.connection, FALSE); if (!dbus_connection_get_unix_fd(bus_info.connection, &bus_info.fd)) { - ErrorF("[config/dbus-core] couldn't get fd for system bus\n"); + ErrorF("[dbus-core] couldn't get fd for system bus\n"); goto err_unref; } if (!dbus_connection_add_filter(bus_info.connection, message_filter, &bus_info, NULL)) { - ErrorF("[config/dbus-core] couldn't add filter: %s (%s)\n", error.name, + ErrorF("[dbus-core] couldn't add filter: %s (%s)\n", error.name, error.message); goto err_fd; } @@ -198,9 +198,9 @@ reconnect_timer(OsTimerPtr timer, CARD32 time, void *arg) } int -config_dbus_core_add_hook(struct config_dbus_core_hook *hook) +dbus_core_add_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next); @@ -215,9 +215,9 @@ config_dbus_core_add_hook(struct config_dbus_core_hook *hook) } void -config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) +dbus_core_remove_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next) { if (*prev == hook) { @@ -228,19 +228,19 @@ config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) } int -config_dbus_core_init(void) +dbus_core_init(void) { memset(&bus_info, 0, sizeof(bus_info)); bus_info.fd = -1; bus_info.hooks = NULL; - bus_info.connection = NULL; - bus_info.timer = TimerSet(NULL, 0, 1, reconnect_timer, NULL); + if (!connect_to_bus()) + bus_info.timer = TimerSet(NULL, 0, 1, reconnect_timer, NULL); return 1; } void -config_dbus_core_fini(void) +dbus_core_fini(void) { teardown(); } diff --git a/xorg-server/config/dbus.c b/xorg-server/config/dbus.c deleted file mode 100644 index 99a1537e1..000000000 --- a/xorg-server/config/dbus.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright © 2006-2007 Daniel Stone - * - * 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. - * - * Author: Daniel Stone - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include - -#include - -#include "config-backends.h" -#include "opaque.h" /* for 'display': there should be a better way. */ -#include "input.h" -#include "inputstr.h" - -#define API_VERSION 2 - -#define MATCH_RULE "type='method_call',interface='org.x.config.input'" - -#define MALFORMED_MSG "[config/dbus] malformed message, dropping" -#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \ - ret = BadValue; \ - goto unwind; } -#define MALFORMED_MESSAGE_ERROR() { DebugF(MALFORMED_MSG ": %s, %s", \ - error->name, error->message); \ - ret = BadValue; \ - goto unwind; } - -struct connection_info { - char busobject[32]; - char busname[64]; - DBusConnection *connection; -}; - -static void -reset_info(struct connection_info *info) -{ - info->connection = NULL; - info->busname[0] = '\0'; - info->busobject[0] = '\0'; -} - -static int -add_device(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DBusMessageIter iter, reply_iter, subiter; - InputOption *input_options = NULL; - int ret, err; - DeviceIntPtr dev = NULL; - - dbus_message_iter_init_append(reply, &reply_iter); - - if (!dbus_message_iter_init(message, &iter)) { - ErrorF("[config/dbus] couldn't initialise iterator\n"); - MALFORMED_MESSAGE(); - } - - input_options = input_option_new(input_options, "_source", "client/dbus"); - if (!input_options) { - ErrorF("[config/dbus] couldn't allocate first key/value pair\n"); - ret = BadAlloc; - goto unwind; - } - - /* signature should be [ss][ss]... */ - while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_ARRAY) { - char *key, *value; - - dbus_message_iter_recurse(&iter, &subiter); - - if (dbus_message_iter_get_arg_type(&subiter) != DBUS_TYPE_STRING) - MALFORMED_MESSAGE(); - - dbus_message_iter_get_basic(&subiter, &key); - if (!key) - MALFORMED_MESSAGE(); - /* The _ prefix refers to internal settings, and may not be given by - * the client. */ - if (key[0] == '_') { - ErrorF("[config/dbus] attempted subterfuge: option name %s given\n", - key); - MALFORMED_MESSAGE(); - } - - if (!dbus_message_iter_has_next(&subiter)) - MALFORMED_MESSAGE(); - dbus_message_iter_next(&subiter); - if (dbus_message_iter_get_arg_type(&subiter) != DBUS_TYPE_STRING) - MALFORMED_MESSAGE(); - - dbus_message_iter_get_basic(&subiter, &value); - if (!value) - MALFORMED_MESSAGE(); - - input_options = input_option_new(input_options, key, value); - - dbus_message_iter_next(&iter); - } - - ret = NewInputDeviceRequest(input_options, NULL, &dev); - if (ret != Success) { - DebugF("[config/dbus] NewInputDeviceRequest failed\n"); - goto unwind; - } - - if (!dev) { - DebugF("[config/dbus] NewInputDeviceRequest provided no device\n"); - ret = BadImplementation; - goto unwind; - } - - /* XXX: If we fail halfway through, we don't seem to have any way to - * empty the iterator, so you'll end up with some device IDs, - * plus an error. This seems to be a shortcoming in the D-Bus - * API. */ - for (; dev; dev = dev->next) { - if (!dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, - &dev->id)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - ret = BadAlloc; - goto unwind; - } - } - - unwind: - if (ret != Success) { - if (dev) - RemoveDevice(dev, TRUE); - - err = -ret; - dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, &err); - } - - input_option_free_list(&input_options); - - return ret; -} - -static int -remove_device(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - int deviceid, ret, err; - DeviceIntPtr dev; - DBusMessageIter iter, reply_iter; - - dbus_message_iter_init_append(reply, &reply_iter); - - if (!dbus_message_iter_init(message, &iter)) { - ErrorF("[config/dbus] failed to init iterator\n"); - MALFORMED_MESSAGE(); - } - - if (!dbus_message_get_args(message, error, DBUS_TYPE_UINT32, - &deviceid, DBUS_TYPE_INVALID)) { - MALFORMED_MESSAGE_ERROR(); - } - - dixLookupDevice(&dev, deviceid, serverClient, DixDestroyAccess); - if (!dev) { - DebugF("[config/dbus] bogus device id %d given\n", deviceid); - ret = BadMatch; - goto unwind; - } - - DebugF("[config/dbus] removing device %s (id %d)\n", dev->name, deviceid); - - /* Call PIE here so we don't try to dereference a device that's - * already been removed. */ - OsBlockSignals(); - ProcessInputEvents(); - DeleteInputDeviceRequest(dev); - OsReleaseSignals(); - - ret = Success; - - unwind: - err = (ret == Success) ? ret : -ret; - dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, &err); - - return ret; -} - -static int -list_devices(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DeviceIntPtr dev; - DBusMessageIter iter, subiter; - - dbus_message_iter_init_append(reply, &iter); - - for (dev = inputInfo.devices; dev; dev = dev->next) { - if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, NULL, - &subiter)) { - ErrorF("[config/dbus] couldn't init container\n"); - return BadAlloc; - } - if (!dbus_message_iter_append_basic(&subiter, DBUS_TYPE_UINT32, - &dev->id)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - return BadAlloc; - } - if (!dbus_message_iter_append_basic(&subiter, DBUS_TYPE_STRING, - &dev->name)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - return BadAlloc; - } - if (!dbus_message_iter_close_container(&iter, &subiter)) { - ErrorF("[config/dbus] couldn't close container\n"); - return BadAlloc; - } - } - - return Success; -} - -static int -get_version(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DBusMessageIter iter; - unsigned int version = API_VERSION; - - dbus_message_iter_init_append(reply, &iter); - if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &version)) { - ErrorF("[config/dbus] couldn't append version\n"); - return BadAlloc; - } - - return Success; -} - -static DBusHandlerResult -message_handler(DBusConnection * connection, DBusMessage * message, void *data) -{ - DBusError error; - DBusMessage *reply; - struct connection_info *info = data; - - /* ret is the overall D-Bus handler result, whereas err is the internal - * X error from our individual functions. */ - int ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - int err; - - DebugF("[config/dbus] received a message for %s\n", - dbus_message_get_interface(message)); - - dbus_error_init(&error); - - reply = dbus_message_new_method_return(message); - if (!reply) { - ErrorF("[config/dbus] failed to create reply\n"); - ret = DBUS_HANDLER_RESULT_NEED_MEMORY; - goto err_start; - } - - if (strcmp(dbus_message_get_member(message), "add") == 0) - err = add_device(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "remove") == 0) - err = remove_device(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "listDevices") == 0) - err = list_devices(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "version") == 0) - err = get_version(message, reply, &error); - else - goto err_reply; - - /* Failure to allocate is a special case. */ - if (err == BadAlloc) { - ret = DBUS_HANDLER_RESULT_NEED_MEMORY; - goto err_reply; - } - - /* While failure here is always an OOM, we don't return that, - * since that would result in devices being double-added/removed. */ - if (dbus_connection_send(info->connection, reply, NULL)) - dbus_connection_flush(info->connection); - else - ErrorF("[config/dbus] failed to send reply\n"); - - ret = DBUS_HANDLER_RESULT_HANDLED; - - err_reply: - dbus_message_unref(reply); - err_start: - dbus_error_free(&error); - - return ret; -} - -static void -connect_hook(DBusConnection * connection, void *data) -{ - DBusError error; - DBusObjectPathVTable vtable = {.message_function = message_handler, }; - struct connection_info *info = data; - - info->connection = connection; - - dbus_error_init(&error); - - dbus_bus_request_name(info->connection, info->busname, 0, &error); - if (dbus_error_is_set(&error)) { - ErrorF("[config/dbus] couldn't take over org.x.config: %s (%s)\n", - error.name, error.message); - goto err_start; - } - - /* blocks until we get a reply. */ - dbus_bus_add_match(info->connection, MATCH_RULE, &error); - if (dbus_error_is_set(&error)) { - ErrorF("[config/dbus] couldn't add match: %s (%s)\n", error.name, - error.message); - goto err_name; - } - - if (!dbus_connection_register_object_path(info->connection, - info->busobject, &vtable, info)) { - ErrorF("[config/dbus] couldn't register object path\n"); - goto err_match; - } - - DebugF("[dbus] registered %s, %s\n", info->busname, info->busobject); - - dbus_error_free(&error); - - return; - - err_match: - dbus_bus_remove_match(info->connection, MATCH_RULE, &error); - err_name: - dbus_bus_release_name(info->connection, info->busname, &error); - err_start: - dbus_error_free(&error); - - reset_info(info); -} - -static void -disconnect_hook(void *data) -{ -} - -#if 0 -void -pre_disconnect_hook(void) -{ - DBusError error; - - dbus_error_init(&error); - dbus_connection_unregister_object_path(connection_data->connection, - connection_data->busobject); - dbus_bus_remove_match(connection_data->connection, MATCH_RULE, &error); - dbus_bus_release_name(connection_data->connection, - connection_data->busname, &error); - dbus_error_free(&error); -} -#endif - -static struct connection_info connection_data; - -static struct config_dbus_core_hook core_hook = { - .connect = connect_hook, - .disconnect = disconnect_hook, - .data = &connection_data, -}; - -int -config_dbus_init(void) -{ - snprintf(connection_data.busname, sizeof(connection_data.busname), - "org.x.config.display%d", atoi(display)); - snprintf(connection_data.busobject, sizeof(connection_data.busobject), - "/org/x/config/%d", atoi(display)); - - return config_dbus_core_add_hook(&core_hook); -} - -void -config_dbus_fini(void) -{ - config_dbus_core_remove_hook(&core_hook); - connection_data.busname[0] = '\0'; - connection_data.busobject[0] = '\0'; -} diff --git a/xorg-server/config/hal.c b/xorg-server/config/hal.c index 2ead556b0..94cb6e7cd 100644 --- a/xorg-server/config/hal.c +++ b/xorg-server/config/hal.c @@ -33,6 +33,7 @@ #include #include +#include "dbus-core.h" #include "input.h" #include "inputstr.h" #include "hotplug.h" @@ -631,7 +632,7 @@ connect_hook(DBusConnection * connection, void *data) static struct config_hal_info hal_info; -static struct config_dbus_core_hook hook = { +static struct dbus_core_hook hook = { .connect = connect_hook, .disconnect = disconnect_hook, .data = &hal_info, @@ -644,7 +645,7 @@ config_hal_init(void) hal_info.system_bus = NULL; hal_info.hal_ctx = NULL; - if (!config_dbus_core_add_hook(&hook)) { + if (!dbus_core_add_hook(&hook)) { LogMessage(X_ERROR, "config/hal: failed to add D-Bus hook\n"); return 0; } @@ -658,5 +659,5 @@ config_hal_init(void) void config_hal_fini(void) { - config_dbus_core_remove_hook(&hook); + dbus_core_remove_hook(&hook); } diff --git a/xorg-server/config/xorg-server.conf b/xorg-server/config/xorg-server.conf deleted file mode 100644 index 47a9a7824..000000000 --- a/xorg-server/config/xorg-server.conf +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index 560c46030..c6764f5a8 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -614,7 +614,6 @@ AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--enable-xf86bigfont], [Build XF86 AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes]) AC_ARG_ENABLE(config-udev, AS_HELP_STRING([--enable-config-udev], [Build udev support (default: auto)]), [CONFIG_UDEV=$enableval], [CONFIG_UDEV=auto]) AC_ARG_ENABLE(config-udev-kms, AS_HELP_STRING([--enable-config-udev-kms], [Build udev kms support (default: auto)]), [CONFIG_UDEV_KMS=$enableval], [CONFIG_UDEV_KMS=auto]) -AC_ARG_ENABLE(config-dbus, AS_HELP_STRING([--enable-config-dbus], [Build D-BUS API support (default: no)]), [CONFIG_DBUS_API=$enableval], [CONFIG_DBUS_API=no]) AC_ARG_ENABLE(config-hal, AS_HELP_STRING([--disable-config-hal], [Build HAL support (default: auto)]), [CONFIG_HAL=$enableval], [CONFIG_HAL=auto]) AC_ARG_ENABLE(config-wscons, AS_HELP_STRING([--enable-config-wscons], [Build wscons config support (default: auto)]), [CONFIG_WSCONS=$enableval], [CONFIG_WSCONS=auto]) AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes]) @@ -636,6 +635,7 @@ AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest serv AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) +AC_ARG_ENABLE(glamor, AS_HELP_STRING([--enable-glamor], [Build glamor dix module (default: no)]), [GLAMOR=$enableval], [GLAMOR=no]) dnl kdrive and its subsystems AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no]) AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto]) @@ -702,7 +702,6 @@ dnl DDX Detection... Yes, it's ugly to have it here... but we need to dnl handle this early on so that we don't require unsupported extensions case $host_os in cygwin* | mingw*) - CONFIG_DBUS_API=no CONFIG_HAL=no CONFIG_UDEV=no CONFIG_UDEV_KMS=no @@ -799,7 +798,7 @@ FIXESPROTO="fixesproto >= 5.0" DAMAGEPROTO="damageproto >= 1.1" XCMISCPROTO="xcmiscproto >= 1.2.0" BIGREQSPROTO="bigreqsproto >= 1.1.0" -XTRANS="xtrans >= 1.3.2" +XTRANS="xtrans >= 1.3.3" PRESENTPROTO="presentproto >= 1.0" dnl List of libraries that require a specific version @@ -830,9 +829,28 @@ AC_SUBST(SDK_REQUIRED_MODULES) REQUIRED_MODULES="$FIXESPROTO $DAMAGEPROTO $XCMISCPROTO $XTRANS $BIGREQSPROTO $SDK_REQUIRED_MODULES" -if test "x$CONFIG_UDEV" = xyes && - { test "x$CONFIG_DBUS_API" = xyes || test "x$CONFIG_HAL" = xyes; }; then - AC_MSG_ERROR([Hotplugging through both libudev and dbus/hal not allowed]) +dnl systemd socket activation +dnl activate the code in libxtrans that grabs systemd's socket fds +AC_ARG_WITH([systemd-daemon], + AS_HELP_STRING([--with-systemd-daemon], + [support systemd socket activation (default: auto)]), + [WITH_SYSTEMD_DAEMON=$withval], [WITH_SYSTEMD_DAEMON=auto]) +PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon], + [HAVE_SYSTEMD_DAEMON=yes], [HAVE_SYSTEMD_DAEMON=no]) +if test "x$WITH_SYSTEMD_DAEMON" = xauto; then + WITH_SYSTEMD_DAEMON="$HAVE_SYSTEMD_DAEMON" +fi +if test "x$WITH_SYSTEMD_DAEMON" = xyes; then + if "x$HAVE_SYSTEMD_DAEMON" = xno; then + AC_MSG_ERROR([systemd support requested but no library has been found]) + fi + AC_DEFINE(HAVE_SYSTEMD_DAEMON, 1, [Define to 1 if libsystemd-daemon is available]) + REQUIRED_LIBS="$REQUIRED_LIBS libsystemd-daemon" +fi +AM_CONDITIONAL([HAVE_SYSTEMD_DAEMON], [test "x$HAVE_SYSTEMD_DAEMON" = "xyes"]) + +if test "x$CONFIG_UDEV" = xyes && test "x$CONFIG_HAL" = xyes; then + AC_MSG_ERROR([Hotplugging through both libudev and hal not allowed]) fi PKG_CHECK_MODULES(UDEV, $LIBUDEV, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no]) @@ -841,7 +859,6 @@ if test "x$CONFIG_UDEV" = xauto; then fi AM_CONDITIONAL(CONFIG_UDEV, [test "x$CONFIG_UDEV" = xyes]) if test "x$CONFIG_UDEV" = xyes; then - CONFIG_DBUS_API=no CONFIG_HAL=no if test "x$CONFIG_UDEV_KMS" = xauto; then CONFIG_UDEV_KMS="$HAVE_LIBUDEV" @@ -864,28 +881,12 @@ if test "x$CONFIG_UDEV" = xyes; then fi AM_CONDITIONAL(CONFIG_UDEV_KMS, [test "x$CONFIG_UDEV_KMS" = xyes]) -dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas -dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config -dnl API. PKG_CHECK_MODULES(DBUS, $LIBDBUS, [HAVE_DBUS=yes], [HAVE_DBUS=no]) if test "x$HAVE_DBUS" = xyes; then AC_DEFINE(HAVE_DBUS, 1, [Have D-Bus support]) fi AM_CONDITIONAL(HAVE_DBUS, [test "x$HAVE_DBUS" = xyes]) -if test "x$CONFIG_DBUS_API" = xauto; then - CONFIG_DBUS_API="$HAVE_DBUS" -fi -if test "x$CONFIG_DBUS_API" = xyes; then - if ! test "x$HAVE_DBUS" = xyes; then - AC_MSG_ERROR([D-Bus configuration API requested, but D-Bus is not installed.]) - fi - - AC_DEFINE(CONFIG_DBUS_API, 1, [Use the D-Bus input configuration API]) - CONFIG_NEED_DBUS="yes" -fi -AM_CONDITIONAL(CONFIG_DBUS_API, [test "x$CONFIG_DBUS_API" = xyes]) - PKG_CHECK_MODULES(HAL, hal, [HAVE_HAL=yes], [HAVE_HAL=no]) if test "x$CONFIG_HAL" = xauto; then CONFIG_HAL="$HAVE_HAL" @@ -896,14 +897,14 @@ if test "x$CONFIG_HAL" = xyes; then fi AC_DEFINE(CONFIG_HAL, 1, [Use the HAL hotplug API]) - CONFIG_NEED_DBUS="yes" + NEED_DBUS="yes" fi AM_CONDITIONAL(CONFIG_HAL, [test "x$CONFIG_HAL" = xyes]) -if test "x$CONFIG_NEED_DBUS" = xyes; then - AC_DEFINE(CONFIG_NEED_DBUS, 1, [Use D-Bus for input hotplug]) +if test "x$NEED_DBUS" = xyes; then + AC_DEFINE(NEED_DBUS, 1, [Enable D-Bus core]) fi -AM_CONDITIONAL(CONFIG_NEED_DBUS, [test "x$CONFIG_NEED_DBUS" = xyes]) +AM_CONDITIONAL(NEED_DBUS, [test "x$NEED_DBUS" = xyes]) if test "x$CONFIG_WSCONS" = xauto; then case $host_os in @@ -2063,6 +2064,14 @@ AM_CONDITIONAL([SOLARIS_VT], [test "x$solaris_vt" = xyes]) AM_CONDITIONAL([DGA], [test "x$DGA" = xyes]) AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes]) AM_CONDITIONAL([XORG_BUS_PLATFORM], [test "x$CONFIG_UDEV_KMS" = xyes]) + +dnl glamor +AM_CONDITIONAL([GLAMOR], [test "x$GLAMOR" = xyes]) +if test "x$GLAMOR" = xyes; then + AC_DEFINE(GLAMOR, 1, [Build glamor]) + PKG_CHECK_MODULES([GLAMOR], [egl gl]) +fi + dnl XWin DDX AC_MSG_CHECKING([whether to build XWin DDX]) @@ -2174,6 +2183,8 @@ if test "x$XQUARTZ" = xyes; then fi fi +AM_CONDITIONAL(PSEUDORAMIX, [test "x$XQUARTZ" = xyes -o "x$XWIN" = xyes ]) + # Support for objc in autotools is minimal and not documented. OBJC='$(CC)' OBJCLD='$(CCLD)' @@ -2432,6 +2443,7 @@ doc/Makefile doc/dtrace/Makefile man/Makefile fb/Makefile +glamor/Makefile record/Makefile config/Makefile mi/Makefile diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c index 341ca3f95..83d2539c7 100644 --- a/xorg-server/dix/dixfonts.c +++ b/xorg-server/dix/dixfonts.c @@ -1792,11 +1792,14 @@ GetFontPath(ClientPtr client, int *count, int *length, unsigned char **result) fpe = font_path_elements[i]; len += fpe->name_length + 1; } - font_path_string = (unsigned char *) realloc(font_path_string, len); - if (!font_path_string) + c = realloc(font_path_string, len); + if (c == NULL) { + free(font_path_string); + font_path_string = NULL; return BadAlloc; + } - c = font_path_string; + font_path_string = c; *length = 0; for (i = 0; i < num_fpes; i++) { fpe = font_path_elements[i]; diff --git a/xorg-server/dix/protocol.txt b/xorg-server/dix/protocol.txt index 8e152edaa..f83f38c58 100644 --- a/xorg-server/dix/protocol.txt +++ b/xorg-server/dix/protocol.txt @@ -311,11 +311,22 @@ R028 RANDR:GetPanning R029 RANDR:SetPanning R030 RANDR:SetOutputPrimary R031 RANDR:GetOutputPrimary +R032 RANDR:RRGetProviders +R033 RANDR:RRGetProviderInfo +R034 RANDR:RRSetProviderOffloadSink +R035 RANDR:RRSetProviderOutputSource +R036 RANDR:RRListProviderProperties +R037 RANDR:RRQueryProviderProperty +R038 RANDR:RRConfigureProviderProperty +R039 RANDR:RRChangeProviderProperty +R040 RANDR:RRDeleteProviderProperty +R041 RANDR:RRGetProviderProperty V000 RANDR:ScreenChangeNotify V001 RANDR:Notify E000 RANDR:BadRROutput E001 RANDR:BadRRCrtc E002 RANDR:BadRRMode +E003 RANDR:BadRRProvider R000 RECORD:QueryVersion R001 RECORD:CreateContext R002 RECORD:RegisterClients diff --git a/xorg-server/glamor/Makefile.am b/xorg-server/glamor/Makefile.am index 2fd521f11..3fe25304d 100644 --- a/xorg-server/glamor/Makefile.am +++ b/xorg-server/glamor/Makefile.am @@ -1,18 +1,10 @@ -lib_LTLIBRARIES = libglamor.la +noinst_LTLIBRARIES = libglamor.la libglamor_egl_stubs.la -if GLAMOR_GLES2 -libglamor_la_LIBADD = $(GLESV2_LIBS) -else -libglamor_la_LIBADD = $(GL_LIBS) -endif +libglamor_la_LIBADD = $(GLAMOR_LIBS) -AM_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) $(LIBDRM_CFLAGS) - -libglamor_la_LDFLAGS = -version-info 0:0:0 +AM_CFLAGS = $(CWARNFLAGS) $(DIX_CFLAGS) $(GLAMOR_CFLAGS) libglamor_la_SOURCES = \ - compat-api.h \ - compiler.h \ glamor.c \ glamor_copyarea.c \ glamor_copywindow.c \ @@ -48,24 +40,8 @@ libglamor_la_SOURCES = \ glamor_compositerects.c\ glamor_xv.c\ glamor_utils.h\ - glamor.h\ - glapi.h - -sdk_HEADERS = glamor.h - -if EGL -LIBGLAMOREGL = libglamoregl.la -module_LTLIBRARIES = $(LIBGLAMOREGL) -libglamoregl_la_DEPENDENCIES = libglamor.la -libglamoregl_la_LDFLAGS = -avoid-version -module -libglamoregl_la_LIBADD = $(EGL_LIBS) $(GLX_SYS_LIBS) $(GBM_LIBS) libglamor.la -libglamoregl_la_SOURCES = glamor_eglmodule.c glamor_egl.c -libglamoregl_la_CFLAGS = \ - $(AM_CFLAGS) \ - $(GLX_DEFINES) \ - $(LIBDRM_CFLAGS) \ - $(EGL_CFLAGS) \ - $(GBM_CFLAGS) -endif + glamor.h +libglamor_egl_stubs_la_SOURCES = glamor_egl_stubs.c +sdk_HEADERS = glamor.h diff --git a/xorg-server/glamor/compat-api.h b/xorg-server/glamor/compat-api.h deleted file mode 100644 index 1608478f8..000000000 --- a/xorg-server/glamor/compat-api.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2012 Red Hat, Inc. - * - * 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. - * - * Author: Dave Airlie - */ - -/* this file provides API compat between server post 1.13 and pre it, - it should be reused inside as many drivers as possible */ -#ifndef COMPAT_API_H -#define COMPAT_API_H - -#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR -#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum] -#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p -#endif - -#ifndef XF86_HAS_SCRN_CONV -#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum] -#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex] -#endif - -#ifndef XF86_SCRN_INTERFACE - -#define SCRN_ARG_TYPE int -#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = xf86Screens[(arg1)] - -#define SCREEN_ARG_TYPE int -#define SCREEN_PTR(arg1) ScreenPtr screen = screenInfo.screens[(arg1)] - -#define SCREEN_INIT_ARGS_DECL int scrnIndex, ScreenPtr screen, int argc, char **argv - -#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer timeout, pointer read_mask -#define BLOCKHANDLER_ARGS arg, blockData, timeout, read_mask - -#define WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask -#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask - -#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr screen -#define CLOSE_SCREEN_ARGS scrnIndex, screen - -#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags -#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0 - -#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags -#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0 - -#define FREE_SCREEN_ARGS_DECL int arg, int flags -#define FREE_SCREEN_ARGS arg, flags - -#define VT_FUNC_ARGS_DECL int arg, int flags -#define VT_FUNC_ARGS(flags) scrn->scrnIndex, (flags) - -#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex) - -#else -#define SCRN_ARG_TYPE ScrnInfoPtr -#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = (arg1) - -#define SCREEN_ARG_TYPE ScreenPtr -#define SCREEN_PTR(arg1) ScreenPtr screen = (arg1) - -#define SCREEN_INIT_ARGS_DECL ScreenPtr screen, int argc, char **argv - -#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer timeout, pointer read_mask -#define BLOCKHANDLER_ARGS arg, timeout, read_mask - -#define WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask -#define WAKEUPHANDLER_ARGS arg, result, read_mask - -#define CLOSE_SCREEN_ARGS_DECL ScreenPtr screen -#define CLOSE_SCREEN_ARGS screen - -#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y -#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y - -#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode -#define SWITCH_MODE_ARGS(arg, m) arg, m - -#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg -#define FREE_SCREEN_ARGS arg - -#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg -#define VT_FUNC_ARGS(flags) scrn - -#define XF86_ENABLEDISABLEFB_ARG(x) (x) - -#endif -#endif diff --git a/xorg-server/glamor/compiler.h b/xorg-server/glamor/compiler.h deleted file mode 100644 index fa2895976..000000000 --- a/xorg-server/glamor/compiler.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2011 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. - * - * Authors: - * Chris Wilson - * - * Copied from sna - * - */ - -#ifndef _GLAMOR_COMPILER_H_ -#define _GLAMOR_COMPILER_H_ - -#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) -#define likely(expr) (__builtin_expect (!!(expr), 1)) -#define unlikely(expr) (__builtin_expect (!!(expr), 0)) -#define noinline __attribute__((noinline)) -#define fastcall __attribute__((regparm(3))) -#define must_check __attribute__((warn_unused_result)) -#define constant __attribute__((const)) -#else -#define likely(expr) (expr) -#define unlikely(expr) (expr) -#define noinline -#define fastcall -#define must_check -#define constant -#endif - -#ifdef HAVE_VALGRIND -#define VG(x) x -#else -#define VG(x) -#endif - -#define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s))) - -#define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)])) - -#endif /* _SNA_COMPILER_H_ */ diff --git a/xorg-server/glamor/glamor.c b/xorg-server/glamor/glamor.c index 93d3c5e72..feb110a66 100644 --- a/xorg-server/glamor/glamor.c +++ b/xorg-server/glamor/glamor.c @@ -54,197 +54,192 @@ DevPrivateKey glamor_pixmap_private_key = &glamor_pixmap_private_key_index; PixmapPtr glamor_get_drawable_pixmap(DrawablePtr drawable) { - if (drawable->type == DRAWABLE_WINDOW) - return drawable-> - pScreen->GetWindowPixmap((WindowPtr) drawable); - else - return (PixmapPtr) drawable; + if (drawable->type == DRAWABLE_WINDOW) + return drawable->pScreen->GetWindowPixmap((WindowPtr) drawable); + else + return (PixmapPtr) drawable; } _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, glamor_pixmap_type_t type) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - if (pixmap_priv == NULL) { - pixmap_priv = calloc(sizeof(*pixmap_priv), 1); - glamor_set_pixmap_private(pixmap, pixmap_priv); - pixmap_priv->base.pixmap = pixmap; - pixmap_priv->base.glamor_priv = glamor_priv; - } - pixmap_priv->type = type; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = dixLookupPrivate(&pixmap->devPrivates, + glamor_pixmap_private_key); + if (pixmap_priv == NULL) { + pixmap_priv = calloc(sizeof(*pixmap_priv), 1); + glamor_set_pixmap_private(pixmap, pixmap_priv); + pixmap_priv->base.pixmap = pixmap; + pixmap_priv->base.glamor_priv = glamor_priv; + } + pixmap_priv->type = type; } _X_EXPORT void glamor_set_pixmap_texture(PixmapPtr pixmap, unsigned int tex) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo; - GLenum format; - - glamor_priv = glamor_get_screen_private(screen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (pixmap_priv->base.fbo) { - fbo = glamor_pixmap_detach_fbo(pixmap_priv); - glamor_destroy_fbo(fbo); - } - - gl_iformat_for_depth(pixmap->drawable.depth, &format); - fbo = glamor_create_fbo_from_tex(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, - format, tex, 0); - - if (fbo == NULL) { - ErrorF("XXX fail to create fbo.\n"); - return; - } - - glamor_pixmap_attach_fbo(pixmap, fbo); + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo; + GLenum format; + + glamor_priv = glamor_get_screen_private(screen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (pixmap_priv->base.fbo) { + fbo = glamor_pixmap_detach_fbo(pixmap_priv); + glamor_destroy_fbo(fbo); + } + + gl_iformat_for_depth(pixmap->drawable.depth, &format); + fbo = glamor_create_fbo_from_tex(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format, tex, 0); + + if (fbo == NULL) { + ErrorF("XXX fail to create fbo.\n"); + return; + } + + glamor_pixmap_attach_fbo(pixmap, fbo); } void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPtr *back_pixmap) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; - glamor_priv = glamor_get_screen_private(screen_pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(screen_pixmap); - glamor_priv->screen_fbo = pixmap_priv->base.fbo->fb; + glamor_priv = glamor_get_screen_private(screen_pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(screen_pixmap); + glamor_priv->screen_fbo = pixmap_priv->base.fbo->fb; - pixmap_priv->base.fbo->width = screen_pixmap->drawable.width; - pixmap_priv->base.fbo->height = screen_pixmap->drawable.height; + pixmap_priv->base.fbo->width = screen_pixmap->drawable.width; + pixmap_priv->base.fbo->height = screen_pixmap->drawable.height; - glamor_priv->back_pixmap = back_pixmap; + glamor_priv->back_pixmap = back_pixmap; } PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, - unsigned int usage) + unsigned int usage) { - PixmapPtr pixmap; - glamor_pixmap_type_t type = GLAMOR_TEXTURE_ONLY; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_fbo *fbo; - int pitch; - GLenum format; - - if (w > 32767 || h > 32767) - return NullPixmap; - - if ((usage == GLAMOR_CREATE_PIXMAP_CPU - || (usage == CREATE_PIXMAP_USAGE_GLYPH_PICTURE && w <= 64 && h <= 64) - || (w == 0 && h == 0) - || !glamor_check_pixmap_fbo_depth(depth)) - || (!GLAMOR_TEXTURED_LARGE_PIXMAP && - !glamor_check_fbo_size(glamor_priv, w, h))) - return fbCreatePixmap(screen, w, h, depth, usage); - else - pixmap = fbCreatePixmap(screen, 0, 0, depth, usage); - - pixmap_priv = calloc(1, sizeof(*pixmap_priv)); - - if (!pixmap_priv) { - fbDestroyPixmap(pixmap); - return fbCreatePixmap(screen, w, h, depth, usage); - } - glamor_set_pixmap_private(pixmap, pixmap_priv); - - if (usage == GLAMOR_CREATE_PIXMAP_MAP) - type = GLAMOR_MEMORY_MAP; - - pixmap_priv->base.pixmap = pixmap; - pixmap_priv->base.glamor_priv = glamor_priv; - - gl_iformat_for_depth(depth, &format); - - pitch = (((w * pixmap->drawable.bitsPerPixel + 7) / 8) + 3) & ~3; - screen->ModifyPixmapHeader(pixmap, w, h, 0, 0, pitch, NULL); - - if (type == GLAMOR_MEMORY_MAP || glamor_check_fbo_size(glamor_priv, w, h)) { - pixmap_priv->type = type; - fbo = glamor_create_fbo(glamor_priv, w, h, format, usage); - } - else { - DEBUGF("Create LARGE pixmap %p width %d height %d\n", pixmap, w, h); - pixmap_priv->type = GLAMOR_TEXTURE_LARGE; - fbo = glamor_create_fbo_array(glamor_priv, w, h, format, usage, - glamor_priv->max_fbo_size, - glamor_priv->max_fbo_size, - pixmap_priv); - } - - if (fbo == NULL) { - fbDestroyPixmap(pixmap); - free(pixmap_priv); - return fbCreatePixmap(screen, w, h, depth, usage); - } - - glamor_pixmap_attach_fbo(pixmap, fbo); - - return pixmap; + PixmapPtr pixmap; + glamor_pixmap_type_t type = GLAMOR_TEXTURE_ONLY; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_fbo *fbo; + int pitch; + GLenum format; + + if (w > 32767 || h > 32767) + return NullPixmap; + + if ((usage == GLAMOR_CREATE_PIXMAP_CPU + || (usage == CREATE_PIXMAP_USAGE_GLYPH_PICTURE && w <= 64 && h <= 64) + || (w == 0 && h == 0) + || !glamor_check_pixmap_fbo_depth(depth)) + || (!GLAMOR_TEXTURED_LARGE_PIXMAP && + !glamor_check_fbo_size(glamor_priv, w, h))) + return fbCreatePixmap(screen, w, h, depth, usage); + else + pixmap = fbCreatePixmap(screen, 0, 0, depth, usage); + + pixmap_priv = calloc(1, sizeof(*pixmap_priv)); + + if (!pixmap_priv) { + fbDestroyPixmap(pixmap); + return fbCreatePixmap(screen, w, h, depth, usage); + } + glamor_set_pixmap_private(pixmap, pixmap_priv); + + if (usage == GLAMOR_CREATE_PIXMAP_MAP) + type = GLAMOR_MEMORY_MAP; + + pixmap_priv->base.pixmap = pixmap; + pixmap_priv->base.glamor_priv = glamor_priv; + + gl_iformat_for_depth(depth, &format); + + pitch = (((w * pixmap->drawable.bitsPerPixel + 7) / 8) + 3) & ~3; + screen->ModifyPixmapHeader(pixmap, w, h, 0, 0, pitch, NULL); + + if (type == GLAMOR_MEMORY_MAP || glamor_check_fbo_size(glamor_priv, w, h)) { + pixmap_priv->type = type; + fbo = glamor_create_fbo(glamor_priv, w, h, format, usage); + } + else { + DEBUGF("Create LARGE pixmap %p width %d height %d\n", pixmap, w, h); + pixmap_priv->type = GLAMOR_TEXTURE_LARGE; + fbo = glamor_create_fbo_array(glamor_priv, w, h, format, usage, + glamor_priv->max_fbo_size, + glamor_priv->max_fbo_size, pixmap_priv); + } + + if (fbo == NULL) { + fbDestroyPixmap(pixmap); + free(pixmap_priv); + return fbCreatePixmap(screen, w, h, depth, usage); + } + + glamor_pixmap_attach_fbo(pixmap, fbo); + + return pixmap; } void glamor_destroy_textured_pixmap(PixmapPtr pixmap) { - if (pixmap->refcnt == 1) { - glamor_pixmap_private *pixmap_priv; + if (pixmap->refcnt == 1) { + glamor_pixmap_private *pixmap_priv; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv != NULL) - glamor_pixmap_destroy_fbo(pixmap_priv); - } + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv != NULL) + glamor_pixmap_destroy_fbo(pixmap_priv); + } } Bool glamor_destroy_pixmap(PixmapPtr pixmap) { - glamor_screen_private - *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - if (glamor_priv->dri3_enabled) - glamor_egl_destroy_textured_pixmap(pixmap); - else - glamor_destroy_textured_pixmap(pixmap); - return fbDestroyPixmap(pixmap); + glamor_screen_private + *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + if (glamor_priv->dri3_enabled) + glamor_egl_destroy_textured_pixmap(pixmap); + else + glamor_destroy_textured_pixmap(pixmap); + return fbDestroyPixmap(pixmap); } void glamor_block_handler(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->tick++; - dispatch->glFlush(); - glamor_fbo_expire(glamor_priv); - glamor_put_dispatch(glamor_priv); - if (glamor_priv->state == RENDER_STATE - && glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) { - glamor_priv->state = IDLE_STATE; - glamor_priv->render_idle_cnt = 0; - } + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->tick++; + dispatch->glFlush(); + glamor_fbo_expire(glamor_priv); + glamor_put_dispatch(glamor_priv); + if (glamor_priv->state == RENDER_STATE + && glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) { + glamor_priv->state = IDLE_STATE; + glamor_priv->render_idle_cnt = 0; + } } static void -_glamor_block_handler(void *data, OSTimePtr timeout, - void *last_select_mask) +_glamor_block_handler(void *data, OSTimePtr timeout, void *last_select_mask) { - glamor_screen_private *glamor_priv = data; - glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glFlush(); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = data; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glFlush(); + glamor_put_dispatch(glamor_priv); } static void @@ -255,374 +250,366 @@ _glamor_wakeup_handler(void *data, int result, void *last_select_mask) static void glamor_set_debug_level(int *debug_level) { - char *debug_level_string; - debug_level_string = getenv("GLAMOR_DEBUG"); - if (debug_level_string - && sscanf(debug_level_string, "%d", debug_level) == 1) - return; - *debug_level = 0; + char *debug_level_string; + + debug_level_string = getenv("GLAMOR_DEBUG"); + if (debug_level_string + && sscanf(debug_level_string, "%d", debug_level) == 1) + return; + *debug_level = 0; } int glamor_debug_level; + /** Set up glamor for an already-configured GL context. */ Bool glamor_init(ScreenPtr screen, unsigned int flags) { - glamor_screen_private *glamor_priv; - int gl_version; + glamor_screen_private *glamor_priv; + int gl_version; #ifdef RENDER - PictureScreenPtr ps = GetPictureScreenIfSet(screen); + PictureScreenPtr ps = GetPictureScreenIfSet(screen); #endif - if (flags & ~GLAMOR_VALID_FLAGS) { - ErrorF("glamor_init: Invalid flags %x\n", flags); - return FALSE; - } - glamor_priv = calloc(1, sizeof(*glamor_priv)); - if (glamor_priv == NULL) - return FALSE; - - if (flags & GLAMOR_INVERTED_Y_AXIS) { - glamor_priv->yInverted = 1; - } else - glamor_priv->yInverted = 0; - - if (!dixRegisterPrivateKey - (glamor_screen_private_key, PRIVATE_SCREEN, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate screen private\n", - screen->myNum); - goto fail; - } - - glamor_set_screen_private(screen, glamor_priv); - - if (!dixRegisterPrivateKey - (glamor_pixmap_private_key, PRIVATE_PIXMAP, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate pixmap private\n", - screen->myNum); - goto fail;; - } - - gl_version = glamor_gl_get_version(); + if (flags & ~GLAMOR_VALID_FLAGS) { + ErrorF("glamor_init: Invalid flags %x\n", flags); + return FALSE; + } + glamor_priv = calloc(1, sizeof(*glamor_priv)); + if (glamor_priv == NULL) + return FALSE; + + if (flags & GLAMOR_INVERTED_Y_AXIS) { + glamor_priv->yInverted = 1; + } + else + glamor_priv->yInverted = 0; + + if (!dixRegisterPrivateKey(glamor_screen_private_key, PRIVATE_SCREEN, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate screen private\n", + screen->myNum); + goto fail; + } + + glamor_set_screen_private(screen, glamor_priv); + + if (!dixRegisterPrivateKey(glamor_pixmap_private_key, PRIVATE_PIXMAP, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate pixmap private\n", + screen->myNum); + goto fail;; + } + + gl_version = glamor_gl_get_version(); #ifndef GLAMOR_GLES2 - if (gl_version < GLAMOR_GL_VERSION_ENCODE(1, 3)) { - ErrorF("Require OpenGL version 1.3 or latter.\n"); - goto fail; - } + if (gl_version < GLAMOR_GL_VERSION_ENCODE(1, 3)) { + ErrorF("Require OpenGL version 1.3 or latter.\n"); + goto fail; + } #else - if (gl_version < GLAMOR_GL_VERSION_ENCODE(2, 0)) { - ErrorF("Require Open GLES2.0 or latter.\n"); - goto fail; - } + if (gl_version < GLAMOR_GL_VERSION_ENCODE(2, 0)) { + ErrorF("Require Open GLES2.0 or latter.\n"); + goto fail; + } #endif - glamor_gl_dispatch_init(screen, &glamor_priv->_dispatch, gl_version); + glamor_gl_dispatch_init(screen, &glamor_priv->_dispatch, gl_version); #ifdef GLAMOR_GLES2 - if (!glamor_gl_has_extension("GL_EXT_texture_format_BGRA8888")) { - ErrorF("GL_EXT_texture_format_BGRA8888 required\n"); - goto fail; - } + if (!glamor_gl_has_extension("GL_EXT_texture_format_BGRA8888")) { + ErrorF("GL_EXT_texture_format_BGRA8888 required\n"); + goto fail; + } #endif - glamor_priv->has_pack_invert = - glamor_gl_has_extension("GL_MESA_pack_invert"); - glamor_priv->has_fbo_blit = - glamor_gl_has_extension("GL_EXT_framebuffer_blit"); - glamor_priv->_dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, - &glamor_priv->max_fbo_size); + glamor_priv->has_pack_invert = + glamor_gl_has_extension("GL_MESA_pack_invert"); + glamor_priv->has_fbo_blit = + glamor_gl_has_extension("GL_EXT_framebuffer_blit"); + glamor_priv->_dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, + &glamor_priv->max_fbo_size); #ifdef MAX_FBO_SIZE - glamor_priv->max_fbo_size = MAX_FBO_SIZE; + glamor_priv->max_fbo_size = MAX_FBO_SIZE; #endif - glamor_set_debug_level(&glamor_debug_level); + glamor_set_debug_level(&glamor_debug_level); #ifdef GLAMOR_GLES2 - glamor_priv->gl_flavor = GLAMOR_GL_ES2; + glamor_priv->gl_flavor = GLAMOR_GL_ES2; #else - glamor_priv->gl_flavor = GLAMOR_GL_DESKTOP; + glamor_priv->gl_flavor = GLAMOR_GL_DESKTOP; #endif - /* If we are using egl screen, call egl screen init to - * register correct close screen function. */ - if (flags & GLAMOR_USE_EGL_SCREEN) - glamor_egl_screen_init(screen); + /* If we are using egl screen, call egl screen init to + * register correct close screen function. */ + if (flags & GLAMOR_USE_EGL_SCREEN) + glamor_egl_screen_init(screen); - glamor_priv->saved_procs.close_screen = screen->CloseScreen; - screen->CloseScreen = glamor_close_screen; + glamor_priv->saved_procs.close_screen = screen->CloseScreen; + screen->CloseScreen = glamor_close_screen; - if (flags & GLAMOR_USE_SCREEN) { - if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, - _glamor_wakeup_handler, - glamor_priv)) { - goto fail; - } + if (flags & GLAMOR_USE_SCREEN) { + if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, + _glamor_wakeup_handler, + glamor_priv)) { + goto fail; + } - glamor_priv->saved_procs.create_gc = screen->CreateGC; - screen->CreateGC = glamor_create_gc; + glamor_priv->saved_procs.create_gc = screen->CreateGC; + screen->CreateGC = glamor_create_gc; - glamor_priv->saved_procs.create_pixmap = screen->CreatePixmap; - screen->CreatePixmap = glamor_create_pixmap; + glamor_priv->saved_procs.create_pixmap = screen->CreatePixmap; + screen->CreatePixmap = glamor_create_pixmap; - glamor_priv->saved_procs.destroy_pixmap = screen->DestroyPixmap; - screen->DestroyPixmap = glamor_destroy_pixmap; + glamor_priv->saved_procs.destroy_pixmap = screen->DestroyPixmap; + screen->DestroyPixmap = glamor_destroy_pixmap; - glamor_priv->saved_procs.get_spans = screen->GetSpans; - screen->GetSpans = glamor_get_spans; + glamor_priv->saved_procs.get_spans = screen->GetSpans; + screen->GetSpans = glamor_get_spans; - glamor_priv->saved_procs.get_image = screen->GetImage; - screen->GetImage = glamor_get_image; + glamor_priv->saved_procs.get_image = screen->GetImage; + screen->GetImage = glamor_get_image; - glamor_priv->saved_procs.change_window_attributes = - screen->ChangeWindowAttributes; - screen->ChangeWindowAttributes = - glamor_change_window_attributes; + glamor_priv->saved_procs.change_window_attributes = + screen->ChangeWindowAttributes; + screen->ChangeWindowAttributes = glamor_change_window_attributes; - glamor_priv->saved_procs.copy_window = screen->CopyWindow; - screen->CopyWindow = glamor_copy_window; + glamor_priv->saved_procs.copy_window = screen->CopyWindow; + screen->CopyWindow = glamor_copy_window; - glamor_priv->saved_procs.bitmap_to_region = - screen->BitmapToRegion; - screen->BitmapToRegion = glamor_bitmap_to_region; - } + glamor_priv->saved_procs.bitmap_to_region = screen->BitmapToRegion; + screen->BitmapToRegion = glamor_bitmap_to_region; + } #ifdef RENDER - if (flags & GLAMOR_USE_PICTURE_SCREEN) { - glamor_priv->saved_procs.composite = ps->Composite; - ps->Composite = glamor_composite; + if (flags & GLAMOR_USE_PICTURE_SCREEN) { + glamor_priv->saved_procs.composite = ps->Composite; + ps->Composite = glamor_composite; + glamor_priv->saved_procs.trapezoids = ps->Trapezoids; + ps->Trapezoids = glamor_trapezoids; - glamor_priv->saved_procs.trapezoids = ps->Trapezoids; - ps->Trapezoids = glamor_trapezoids; + glamor_priv->saved_procs.triangles = ps->Triangles; + ps->Triangles = glamor_triangles; + glamor_priv->saved_procs.addtraps = ps->AddTraps; + ps->AddTraps = glamor_add_traps; - glamor_priv->saved_procs.triangles = ps->Triangles; - ps->Triangles = glamor_triangles; + } - glamor_priv->saved_procs.addtraps = ps->AddTraps; - ps->AddTraps = glamor_add_traps; + glamor_priv->saved_procs.composite_rects = ps->CompositeRects; + ps->CompositeRects = glamor_composite_rectangles; - } + glamor_priv->saved_procs.glyphs = ps->Glyphs; + ps->Glyphs = glamor_glyphs; - glamor_priv->saved_procs.composite_rects = ps->CompositeRects; - ps->CompositeRects = glamor_composite_rectangles; + glamor_priv->saved_procs.unrealize_glyph = ps->UnrealizeGlyph; + ps->UnrealizeGlyph = glamor_glyph_unrealize; - glamor_priv->saved_procs.glyphs = ps->Glyphs; - ps->Glyphs = glamor_glyphs; + glamor_priv->saved_procs.create_picture = ps->CreatePicture; + ps->CreatePicture = glamor_create_picture; - glamor_priv->saved_procs.unrealize_glyph = ps->UnrealizeGlyph; - ps->UnrealizeGlyph = glamor_glyph_unrealize; + glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = glamor_set_window_pixmap; - glamor_priv->saved_procs.create_picture = ps->CreatePicture; - ps->CreatePicture = glamor_create_picture; - - glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; - screen->SetWindowPixmap = glamor_set_window_pixmap; - - glamor_priv->saved_procs.destroy_picture = ps->DestroyPicture; - ps->DestroyPicture = glamor_destroy_picture; - glamor_init_composite_shaders(screen); + glamor_priv->saved_procs.destroy_picture = ps->DestroyPicture; + ps->DestroyPicture = glamor_destroy_picture; + glamor_init_composite_shaders(screen); #endif - glamor_init_pixmap_fbo(screen); - glamor_init_solid_shader(screen); - glamor_init_tile_shader(screen); + glamor_init_pixmap_fbo(screen); + glamor_init_solid_shader(screen); + glamor_init_tile_shader(screen); #ifdef GLAMOR_TRAPEZOID_SHADER - glamor_init_trapezoid_shader(screen); + glamor_init_trapezoid_shader(screen); #endif - glamor_init_putimage_shaders(screen); - glamor_init_finish_access_shaders(screen); + glamor_init_putimage_shaders(screen); + glamor_init_finish_access_shaders(screen); #ifdef GLAMOR_GRADIENT_SHADER - glamor_init_gradient_shader(screen); + glamor_init_gradient_shader(screen); #endif #ifdef GLAMOR_XV - glamor_init_xv_shader(screen); + glamor_init_xv_shader(screen); #endif - glamor_pixmap_init(screen); + glamor_pixmap_init(screen); - glamor_priv->flags = flags; - glamor_priv->screen = screen; + glamor_priv->flags = flags; + glamor_priv->screen = screen; - return TRUE; + return TRUE; - fail: - free(glamor_priv); - glamor_set_screen_private(screen, NULL); - return FALSE; + fail: + free(glamor_priv); + glamor_set_screen_private(screen, NULL); + return FALSE; } static void glamor_release_screen_priv(ScreenPtr screen) { - glamor_screen_private *glamor_priv; + glamor_screen_private *glamor_priv; - glamor_priv = glamor_get_screen_private(screen); + glamor_priv = glamor_get_screen_private(screen); #ifdef GLAMOR_XV - glamor_fini_xv_shader(screen); + glamor_fini_xv_shader(screen); #endif #ifdef RENDER - glamor_fini_composite_shaders(screen); + glamor_fini_composite_shaders(screen); #endif - glamor_fini_pixmap_fbo(screen); - glamor_fini_solid_shader(screen); - glamor_fini_tile_shader(screen); + glamor_fini_pixmap_fbo(screen); + glamor_fini_solid_shader(screen); + glamor_fini_tile_shader(screen); #ifdef GLAMOR_TRAPEZOID_SHADER - glamor_fini_trapezoid_shader(screen); + glamor_fini_trapezoid_shader(screen); #endif - glamor_fini_putimage_shaders(screen); - glamor_fini_finish_access_shaders(screen); + glamor_fini_putimage_shaders(screen); + glamor_fini_finish_access_shaders(screen); #ifdef GLAMOR_GRADIENT_SHADER - glamor_fini_gradient_shader(screen); + glamor_fini_gradient_shader(screen); #endif - glamor_pixmap_fini(screen); - free(glamor_priv); + glamor_pixmap_fini(screen); + free(glamor_priv); - glamor_set_screen_private(screen, NULL); + glamor_set_screen_private(screen, NULL); } _X_EXPORT void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv) { - glamor_pixmap_private *old_priv; - glamor_pixmap_fbo *fbo; - - old_priv = dixGetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); - - if (priv) { - assert(old_priv == NULL); - } else { - if (old_priv == NULL) - return; - fbo = glamor_pixmap_detach_fbo(old_priv); - glamor_purge_fbo(fbo); - free(old_priv); - } - - dixSetPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key, - priv); + glamor_pixmap_private *old_priv; + glamor_pixmap_fbo *fbo; + + old_priv = dixGetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); + + if (priv) { + assert(old_priv == NULL); + } + else { + if (old_priv == NULL) + return; + fbo = glamor_pixmap_detach_fbo(old_priv); + glamor_purge_fbo(fbo); + free(old_priv); + } + + dixSetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key, priv); } Bool -glamor_close_screen(CLOSE_SCREEN_ARGS_DECL) +glamor_close_screen(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - PixmapPtr screen_pixmap; - int flags; + glamor_screen_private *glamor_priv; + PixmapPtr screen_pixmap; + int flags; + #ifdef RENDER - PictureScreenPtr ps = GetPictureScreenIfSet(screen); + PictureScreenPtr ps = GetPictureScreenIfSet(screen); #endif - glamor_priv = glamor_get_screen_private(screen); - flags = glamor_priv->flags; - glamor_glyphs_fini(screen); - screen->CloseScreen = glamor_priv->saved_procs.close_screen; - if (flags & GLAMOR_USE_SCREEN) { - - screen->CreateGC = glamor_priv->saved_procs.create_gc; - screen->CreatePixmap = glamor_priv->saved_procs.create_pixmap; - screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap; - screen->GetSpans = glamor_priv->saved_procs.get_spans; - screen->ChangeWindowAttributes = - glamor_priv->saved_procs.change_window_attributes; - screen->CopyWindow = glamor_priv->saved_procs.copy_window; - screen->BitmapToRegion = glamor_priv->saved_procs.bitmap_to_region; - } + glamor_priv = glamor_get_screen_private(screen); + flags = glamor_priv->flags; + glamor_glyphs_fini(screen); + screen->CloseScreen = glamor_priv->saved_procs.close_screen; + if (flags & GLAMOR_USE_SCREEN) { + + screen->CreateGC = glamor_priv->saved_procs.create_gc; + screen->CreatePixmap = glamor_priv->saved_procs.create_pixmap; + screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap; + screen->GetSpans = glamor_priv->saved_procs.get_spans; + screen->ChangeWindowAttributes = + glamor_priv->saved_procs.change_window_attributes; + screen->CopyWindow = glamor_priv->saved_procs.copy_window; + screen->BitmapToRegion = glamor_priv->saved_procs.bitmap_to_region; + } #ifdef RENDER - if (ps && (flags & GLAMOR_USE_PICTURE_SCREEN)) { - - ps->Composite = glamor_priv->saved_procs.composite; - ps->Trapezoids = glamor_priv->saved_procs.trapezoids; - ps->Triangles = glamor_priv->saved_procs.triangles; - ps->CreatePicture = glamor_priv->saved_procs.create_picture; - } - ps->CompositeRects = glamor_priv->saved_procs.composite_rects; - ps->Glyphs = glamor_priv->saved_procs.glyphs; - ps->UnrealizeGlyph = glamor_priv->saved_procs.unrealize_glyph; - screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; + if (ps && (flags & GLAMOR_USE_PICTURE_SCREEN)) { + + ps->Composite = glamor_priv->saved_procs.composite; + ps->Trapezoids = glamor_priv->saved_procs.trapezoids; + ps->Triangles = glamor_priv->saved_procs.triangles; + ps->CreatePicture = glamor_priv->saved_procs.create_picture; + } + ps->CompositeRects = glamor_priv->saved_procs.composite_rects; + ps->Glyphs = glamor_priv->saved_procs.glyphs; + ps->UnrealizeGlyph = glamor_priv->saved_procs.unrealize_glyph; + screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; #endif - screen_pixmap = screen->GetScreenPixmap(screen); - glamor_set_pixmap_private(screen_pixmap, NULL); - if (glamor_priv->back_pixmap && *glamor_priv->back_pixmap) - glamor_set_pixmap_private(*glamor_priv->back_pixmap, NULL); + screen_pixmap = screen->GetScreenPixmap(screen); + glamor_set_pixmap_private(screen_pixmap, NULL); + if (glamor_priv->back_pixmap && *glamor_priv->back_pixmap) + glamor_set_pixmap_private(*glamor_priv->back_pixmap, NULL); - glamor_release_screen_priv(screen); + glamor_release_screen_priv(screen); - return screen->CloseScreen(CLOSE_SCREEN_ARGS); + return screen->CloseScreen(screen); } - void glamor_fini(ScreenPtr screen) { - /* Do nothing currently. */ + /* Do nothing currently. */ } -void glamor_enable_dri3(ScreenPtr screen) +void +glamor_enable_dri3(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_priv->dri3_enabled = TRUE; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + glamor_priv->dri3_enabled = TRUE; } -Bool glamor_is_dri3_support_enabled(ScreenPtr screen) +Bool +glamor_is_dri3_support_enabled(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - return glamor_priv->dri3_enabled; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + return glamor_priv->dri3_enabled; } int -glamor_dri3_fd_from_pixmap (ScreenPtr screen, - PixmapPtr pixmap, - CARD16 *stride, - CARD32 *size) +glamor_dri3_fd_from_pixmap(ScreenPtr screen, + PixmapPtr pixmap, CARD16 *stride, CARD32 *size) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) - return -1; - switch (pixmap_priv->type) - { - case GLAMOR_TEXTURE_DRM: - case GLAMOR_TEXTURE_ONLY: - glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); - return glamor_egl_dri3_fd_name_from_tex(screen, - pixmap, - pixmap_priv->base.fbo->tex, - FALSE, - stride, - size); - default: break; - } - return -1; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) + return -1; + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_DRM: + case GLAMOR_TEXTURE_ONLY: + glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); + return glamor_egl_dri3_fd_name_from_tex(screen, + pixmap, + pixmap_priv->base.fbo->tex, + FALSE, stride, size); + default: + break; + } + return -1; } int -glamor_dri3_name_from_pixmap (PixmapPtr pixmap) +glamor_dri3_name_from_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) - return -1; - switch (pixmap_priv->type) - { - case GLAMOR_TEXTURE_DRM: - case GLAMOR_TEXTURE_ONLY: - glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); - return glamor_egl_dri3_fd_name_from_tex(pixmap->drawable.pScreen, - pixmap, - pixmap_priv->base.fbo->tex, - TRUE, - NULL, - NULL); - default: break; - } - return -1; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) + return -1; + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_DRM: + case GLAMOR_TEXTURE_ONLY: + glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); + return glamor_egl_dri3_fd_name_from_tex(pixmap->drawable.pScreen, + pixmap, + pixmap_priv->base.fbo->tex, + TRUE, NULL, NULL); + default: + break; + } + return -1; } diff --git a/xorg-server/glamor/glamor.h b/xorg-server/glamor/glamor.h index 1bb48ed74..05f565b12 100644 --- a/xorg-server/glamor/glamor.h +++ b/xorg-server/glamor/glamor.h @@ -30,14 +30,12 @@ #define GLAMOR_H #include -#include -#include #include #include #include #include #include -#include + /* * glamor_pixmap_type : glamor pixmap's type. * @MEMORY: pixmap is in memory. @@ -48,15 +46,15 @@ * @DRM_ONLY: pixmap is in a external DRM buffer. * @TEXTURE_ONLY: pixmap is in an internal texture. */ -typedef enum glamor_pixmap_type { - GLAMOR_MEMORY, - GLAMOR_MEMORY_MAP, - GLAMOR_TEXTURE_DRM, - GLAMOR_SEPARATE_TEXTURE, - GLAMOR_DRM_ONLY, - GLAMOR_TEXTURE_ONLY, - GLAMOR_TEXTURE_LARGE, - GLAMOR_TEXTURE_PACK +typedef enum glamor_pixmap_type { + GLAMOR_MEMORY, + GLAMOR_MEMORY_MAP, + GLAMOR_TEXTURE_DRM, + GLAMOR_SEPARATE_TEXTURE, + GLAMOR_DRM_ONLY, + GLAMOR_TEXTURE_ONLY, + GLAMOR_TEXTURE_LARGE, + GLAMOR_TEXTURE_PACK } glamor_pixmap_type_t; #define GLAMOR_EGL_EXTERNAL_BUFFER 3 @@ -116,17 +114,13 @@ extern _X_EXPORT void glamor_fini(ScreenPtr screen); * screen pixmap which must be a glamor pixmap and requires * the internal data structure still exist at that time. * Otherwise, the glamor internal structure will not be freed.*/ -#ifndef XF86_SCRN_INTERFACE -extern _X_EXPORT Bool glamor_close_screen(int scrnIndex, ScreenPtr screen); -#else extern _X_EXPORT Bool glamor_close_screen(ScreenPtr screen); -#endif - /* Let glamor to know the screen's fbo. The low level * driver should already assign a tex * to this pixmap through the set_pixmap_texture. */ -extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPtr *back_pixmap); +extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, + PixmapPtr *back_pixmap); /* @glamor_glyphs_init: Initialize glyphs internal data structures. * @@ -139,13 +133,14 @@ extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPt extern _X_EXPORT Bool glamor_glyphs_init(ScreenPtr pScreen); extern _X_EXPORT void glamor_set_pixmap_texture(PixmapPtr pixmap, - unsigned int tex); + unsigned int tex); -extern _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, glamor_pixmap_type_t type); +extern _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, + glamor_pixmap_type_t type); extern _X_EXPORT void glamor_destroy_textured_pixmap(PixmapPtr pixmap); extern _X_EXPORT void glamor_block_handler(ScreenPtr screen); -extern _X_EXPORT PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, - unsigned int usage); +extern _X_EXPORT PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, + int depth, unsigned int usage); extern _X_EXPORT void glamor_egl_screen_init(ScreenPtr screen); @@ -160,14 +155,21 @@ extern _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen); * Used by the DRI2 page flip. This function will exchange the KHR images and * fbos of the two pixmaps. * */ -extern _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back); +extern _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, + PixmapPtr back); -extern _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, PixmapPtr back); +extern _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, + PixmapPtr back); /* The DDX is not supposed to call these three functions */ extern _X_EXPORT void glamor_enable_dri3(ScreenPtr screen); -extern _X_EXPORT unsigned int glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h); -extern _X_EXPORT int glamor_egl_dri3_fd_name_from_tex(ScreenPtr, PixmapPtr, unsigned int, Bool, CARD16*, CARD32*); +extern _X_EXPORT unsigned int glamor_egl_create_argb8888_based_texture(ScreenPtr + screen, + int w, + int h); +extern _X_EXPORT int glamor_egl_dri3_fd_name_from_tex(ScreenPtr, PixmapPtr, + unsigned int, Bool, + CARD16 *, CARD32 *); /* @glamor_is_dri3_support_enabled: Returns if DRI3 support is enabled. * @@ -194,10 +196,9 @@ extern _X_EXPORT Bool glamor_is_dri3_support_enabled(ScreenPtr screen); * content. * Returns the fd on success, -1 on error. * */ -extern _X_EXPORT int glamor_dri3_fd_from_pixmap (ScreenPtr screen, - PixmapPtr pixmap, - CARD16 *stride, - CARD32 *size); +extern _X_EXPORT int glamor_dri3_fd_from_pixmap(ScreenPtr screen, + PixmapPtr pixmap, + CARD16 *stride, CARD32 *size); /* @glamor_dri3_name_from_pixmap: helper to get an gem name from a pixmap. * @@ -208,7 +209,7 @@ extern _X_EXPORT int glamor_dri3_fd_from_pixmap (ScreenPtr screen, * glamor DRI3 support to be activated. * Returns the name on success, -1 on error. * */ -extern _X_EXPORT int glamor_dri3_name_from_pixmap (PixmapPtr pixmap); +extern _X_EXPORT int glamor_dri3_name_from_pixmap(PixmapPtr pixmap); /* @glamor_egl_dri3_pixmap_from_fd: DRI3 helper to get a pixmap from a dma-buf fd. * @@ -222,13 +223,13 @@ extern _X_EXPORT int glamor_dri3_name_from_pixmap (PixmapPtr pixmap); * * Returns a valid pixmap if the import succeeded, else NULL. * */ -extern _X_EXPORT PixmapPtr glamor_egl_dri3_pixmap_from_fd (ScreenPtr screen, - int fd, - CARD16 width, - CARD16 height, - CARD16 stride, - CARD8 depth, - CARD8 bpp); +extern _X_EXPORT PixmapPtr glamor_egl_dri3_pixmap_from_fd(ScreenPtr screen, + int fd, + CARD16 width, + CARD16 height, + CARD16 stride, + CARD8 depth, + CARD8 bpp); #ifdef GLAMOR_FOR_XORG @@ -265,8 +266,7 @@ extern _X_EXPORT Bool glamor_egl_init_textured_pixmap(ScreenPtr screen); * screen pixmap is a special, we handle it separately in this function. */ extern _X_EXPORT Bool glamor_egl_create_textured_screen(ScreenPtr screen, - int handle, - int stride); + int handle, int stride); /* @glamor_egl_create_textured_screen_ext: * @@ -275,9 +275,10 @@ extern _X_EXPORT Bool glamor_egl_create_textured_screen(ScreenPtr screen, * the DDX's close screen, we have to free all the glamor related resources. */ extern _X_EXPORT Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, - int handle, - int stride, - PixmapPtr *back_pixmap); + int handle, + int stride, + PixmapPtr + *back_pixmap); /* * @glamor_egl_create_textured_pixmap: Try to create a textured pixmap from @@ -292,8 +293,7 @@ extern _X_EXPORT Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, * as well. Return true if successful, otherwise return FALSE. */ extern _X_EXPORT Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, - int handle, - int stride); + int handle, int stride); /* * @glamor_egl_create_textured_pixmap_from_bo: Try to create a textured pixmap @@ -305,8 +305,7 @@ extern _X_EXPORT Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, * This function is similar to glamor_egl_create_textured_pixmap. */ extern _X_EXPORT Bool - glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, - void *bo); + glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo); #endif @@ -314,119 +313,131 @@ extern _X_EXPORT void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap); extern _X_EXPORT int glamor_create_gc(GCPtr gc); -extern _X_EXPORT void glamor_validate_gc(GCPtr gc, unsigned long changes, DrawablePtr drawable); +extern _X_EXPORT void glamor_validate_gc(GCPtr gc, unsigned long changes, + DrawablePtr drawable); /* Glamor rendering/drawing functions with XXX_nf. * nf means no fallback within glamor internal if possible. If glamor * fail to accelerate the operation, glamor will return a false, and the * caller need to implement fallback method. Return a true means the * rendering request get done successfully. */ extern _X_EXPORT Bool glamor_fill_spans_nf(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, - int *widths, int sorted); + GCPtr gc, + int n, DDXPointPtr points, + int *widths, int sorted); extern _X_EXPORT Bool glamor_poly_fill_rect_nf(DrawablePtr drawable, - GCPtr gc, - int nrect, - xRectangle * prect); + GCPtr gc, + int nrect, xRectangle *prect); extern _X_EXPORT Bool glamor_put_image_nf(DrawablePtr drawable, - GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, - int image_format, char *bits); + GCPtr gc, int depth, int x, int y, + int w, int h, int left_pad, + int image_format, char *bits); extern _X_EXPORT Bool glamor_copy_n_to_n_nf(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure); + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, + void *closure); extern _X_EXPORT Bool glamor_composite_nf(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height); + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height); extern _X_EXPORT Bool glamor_trapezoids_nf(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps); + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps); extern _X_EXPORT Bool glamor_glyphs_nf(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, - GlyphListPtr list, GlyphPtr * glyphs); + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, + GlyphListPtr list, GlyphPtr *glyphs); extern _X_EXPORT Bool glamor_triangles_nf(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, - int ntris, xTriangle * tris); - + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, + int ntris, xTriangle *tris); extern _X_EXPORT void glamor_glyph_unrealize(ScreenPtr screen, GlyphPtr glyph); -extern _X_EXPORT Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted); +extern _X_EXPORT Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, + char *src, DDXPointPtr points, + int *widths, int n, int sorted); extern _X_EXPORT Bool glamor_get_spans_nf(DrawablePtr drawable, int wmax, - DDXPointPtr points, int *widths, int count, char *dst); + DDXPointPtr points, int *widths, + int count, char *dst); -extern _X_EXPORT Bool glamor_composite_rects_nf (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects); +extern _X_EXPORT Bool glamor_composite_rects_nf(CARD8 op, + PicturePtr pDst, + xRenderColor *color, + int nRect, xRectangle *rects); -extern _X_EXPORT Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d); +extern _X_EXPORT Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, + int w, int h, unsigned int format, + unsigned long planeMask, char *d); extern _X_EXPORT Bool glamor_add_traps_nf(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps); - -extern _X_EXPORT Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion); - -extern _X_EXPORT Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); + INT16 x_off, + INT16 y_off, int ntrap, + xTrap *traps); + +extern _X_EXPORT Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, + GCPtr pGC, int srcx, int srcy, int w, + int h, int dstx, int dsty, + unsigned long bitPlane, + RegionPtr *pRegion); + +extern _X_EXPORT Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, + GCPtr pGC, int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + void *pglyphBase); extern _X_EXPORT Bool glamor_poly_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + void *pglyphBase); extern _X_EXPORT Bool glamor_push_pixels_nf(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y); + DrawablePtr pDrawable, int w, int h, + int x, int y); -extern _X_EXPORT Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); +extern _X_EXPORT Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt); -extern _X_EXPORT Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg); +extern _X_EXPORT Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, + int nseg, xSegment *pSeg); -extern _X_EXPORT Bool glamor_poly_line_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); +extern _X_EXPORT Bool glamor_poly_line_nf(DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt); -extern _X_EXPORT Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points); +extern _X_EXPORT Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, + int mode, int n, DDXPointPtr points); -extern _X_EXPORT XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr pScreen, int num_texture_ports); +#if 0 +extern _X_EXPORT XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr pScreen, + int num_texture_ports); +#endif -#endif /* GLAMOR_H */ +#endif /* GLAMOR_H */ diff --git a/xorg-server/glamor/glamor_addtraps.c b/xorg-server/glamor/glamor_addtraps.c index ac852963c..655d87e3d 100644 --- a/xorg-server/glamor/glamor_addtraps.c +++ b/xorg-server/glamor/glamor_addtraps.c @@ -30,36 +30,32 @@ static Bool _glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps, - Bool fallback) + INT16 x_off, + INT16 y_off, int ntrap, xTrap *traps, Bool fallback) { - if (!fallback - && ( !pPicture->pDrawable - || glamor_ddx_fallback_check_pixmap(pPicture->pDrawable))) - return FALSE; + if (!fallback + && (!pPicture->pDrawable + || glamor_ddx_fallback_check_pixmap(pPicture->pDrawable))) + return FALSE; - if (glamor_prepare_access_picture(pPicture, GLAMOR_ACCESS_RW)) { - fbAddTraps(pPicture, x_off, y_off, ntrap, traps); - glamor_finish_access_picture(pPicture, GLAMOR_ACCESS_RW); - } + if (glamor_prepare_access_picture(pPicture, GLAMOR_ACCESS_RW)) { + fbAddTraps(pPicture, x_off, y_off, ntrap, traps); + glamor_finish_access_picture(pPicture, GLAMOR_ACCESS_RW); + } - return TRUE; + return TRUE; } void glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps) + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps) { - _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, TRUE); + _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, TRUE); } Bool glamor_add_traps_nf(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps) + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps) { - return _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, FALSE); + return _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, FALSE); } - diff --git a/xorg-server/glamor/glamor_compositerects.c b/xorg-server/glamor/glamor_compositerects.c index 1a5769958..3b6b2ed07 100644 --- a/xorg-server/glamor/glamor_compositerects.c +++ b/xorg-server/glamor/glamor_compositerects.c @@ -36,243 +36,241 @@ * compositeRects acceleration implementation */ -static int16_t bound(int16_t a, uint16_t b) +static int16_t +bound(int16_t a, uint16_t b) { - int v = (int)a + (int)b; - if (v > MAXSHORT) - return MAXSHORT; - return v; + int v = (int) a + (int) b; + + if (v > MAXSHORT) + return MAXSHORT; + return v; } static Bool -_pixman_region_init_clipped_rectangles(pixman_region16_t *region, - unsigned int num_rects, - xRectangle *rects, - int tx, int ty, - BoxPtr extents) +_pixman_region_init_clipped_rectangles(pixman_region16_t * region, + unsigned int num_rects, + xRectangle *rects, + int tx, int ty, BoxPtr extents) { - pixman_box16_t stack_boxes[64], *boxes = stack_boxes; - pixman_bool_t ret; - unsigned int i, j; - - if (num_rects > ARRAY_SIZE(stack_boxes)) { - boxes = malloc(sizeof(pixman_box16_t) * num_rects); - if (boxes == NULL) - return FALSE; - } - - for (i = j = 0; i < num_rects; i++) { - boxes[j].x1 = rects[i].x + tx; - if (boxes[j].x1 < extents->x1) - boxes[j].x1 = extents->x1; - - boxes[j].y1 = rects[i].y + ty; - if (boxes[j].y1 < extents->y1) - boxes[j].y1 = extents->y1; - - boxes[j].x2 = bound(rects[i].x + tx, rects[i].width); - if (boxes[j].x2 > extents->x2) - boxes[j].x2 = extents->x2; - - boxes[j].y2 = bound(rects[i].y + ty, rects[i].height); - if (boxes[j].y2 > extents->y2) - boxes[j].y2 = extents->y2; - - if (boxes[j].x2 > boxes[j].x1 && boxes[j].y2 > boxes[j].y1) - j++; - } - - ret = FALSE; - if (j) - ret = pixman_region_init_rects(region, boxes, j); - - if (boxes != stack_boxes) - free(boxes); - - DEBUGF("%s: nrects=%d, region=(%d, %d), (%d, %d) x %d\n", - __FUNCTION__, num_rects, - region->extents.x1, region->extents.y1, - region->extents.x2, region->extents.y2, - j); - return ret; + pixman_box16_t stack_boxes[64], *boxes = stack_boxes; + pixman_bool_t ret; + unsigned int i, j; + + if (num_rects > ARRAY_SIZE(stack_boxes)) { + boxes = malloc(sizeof(pixman_box16_t) * num_rects); + if (boxes == NULL) + return FALSE; + } + + for (i = j = 0; i < num_rects; i++) { + boxes[j].x1 = rects[i].x + tx; + if (boxes[j].x1 < extents->x1) + boxes[j].x1 = extents->x1; + + boxes[j].y1 = rects[i].y + ty; + if (boxes[j].y1 < extents->y1) + boxes[j].y1 = extents->y1; + + boxes[j].x2 = bound(rects[i].x + tx, rects[i].width); + if (boxes[j].x2 > extents->x2) + boxes[j].x2 = extents->x2; + + boxes[j].y2 = bound(rects[i].y + ty, rects[i].height); + if (boxes[j].y2 > extents->y2) + boxes[j].y2 = extents->y2; + + if (boxes[j].x2 > boxes[j].x1 && boxes[j].y2 > boxes[j].y1) + j++; + } + + ret = FALSE; + if (j) + ret = pixman_region_init_rects(region, boxes, j); + + if (boxes != stack_boxes) + free(boxes); + + DEBUGF("%s: nrects=%d, region=(%d, %d), (%d, %d) x %d\n", + __FUNCTION__, num_rects, + region->extents.x1, region->extents.y1, + region->extents.x2, region->extents.y2, j); + return ret; } - void -glamor_composite_rectangles(CARD8 op, - PicturePtr dst, - xRenderColor *color, - int num_rects, - xRectangle *rects) +glamor_composite_rectangles(CARD8 op, + PicturePtr dst, + xRenderColor * color, + int num_rects, xRectangle *rects) { - PixmapPtr pixmap; - struct glamor_pixmap_private *priv; - pixman_region16_t region; - pixman_box16_t *boxes; - int dst_x, dst_y; - int num_boxes; - PicturePtr source = NULL; - Bool need_free_region = FALSE; - - DEBUGF("%s(op=%d, %08x x %d [(%d, %d)x(%d, %d) ...])\n", - __FUNCTION__, op, - (color->alpha >> 8 << 24) | - (color->red >> 8 << 16) | - (color->green >> 8 << 8) | - (color->blue >> 8 << 0), - num_rects, - rects[0].x, rects[0].y, rects[0].width, rects[0].height); - - if (!num_rects) - return; - - if (region_is_empty(dst->pCompositeClip)) { - DEBUGF("%s: empty clip, skipping\n", __FUNCTION__); - return; - } - - if ((color->red|color->green|color->blue|color->alpha) <= 0x00ff) { - switch (op) { - case PictOpOver: - case PictOpOutReverse: - case PictOpAdd: - return; - case PictOpInReverse: - case PictOpSrc: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOut; - break; - case PictOpXor: - op = PictOpOverReverse; - break; - } - } - if (color->alpha <= 0x00ff) { - switch (op) { - case PictOpOver: - case PictOpOutReverse: - return; - case PictOpInReverse: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOut; - break; - case PictOpXor: - op = PictOpOverReverse; - break; - } - } else if (color->alpha >= 0xff00) { - switch (op) { - case PictOpOver: - op = PictOpSrc; - break; - case PictOpInReverse: - return; - case PictOpOutReverse: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOverReverse; - break; - case PictOpXor: - op = PictOpOut; - break; - } - } - DEBUGF("%s: converted to op %d\n", __FUNCTION__, op); - - if (!_pixman_region_init_clipped_rectangles(®ion, - num_rects, rects, - dst->pDrawable->x, - dst->pDrawable->y, - &dst->pCompositeClip->extents)) - { - DEBUGF("%s: allocation failed for region\n", __FUNCTION__); - return; - } - - pixmap = glamor_get_drawable_pixmap(dst->pDrawable); - priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv)) - goto fallback; - if (dst->alphaMap) { - DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__); - goto fallback; - } - - need_free_region = TRUE; - - DEBUGF("%s: drawable extents (%d, %d),(%d, %d) x %d\n", - __FUNCTION__, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, - RegionNumRects(®ion)); - - if (dst->pCompositeClip->data && - (!pixman_region_intersect(®ion, ®ion, dst->pCompositeClip) || - region_is_empty(®ion))) { - DEBUGF("%s: zero-intersection between rectangles and clip\n", - __FUNCTION__); - pixman_region_fini(®ion); - return; - } - - DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n", - __FUNCTION__, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, - RegionNumRects(®ion)); - - glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y); - pixman_region_translate(®ion, dst_x, dst_y); - - DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n", - __FUNCTION__, dst_x, dst_y, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2); - - - boxes = pixman_region_rectangles(®ion, &num_boxes); - if (op == PictOpSrc || op == PictOpClear) { - CARD32 pixel; - if (op == PictOpClear) - pixel = 0; - else - miRenderColorToPixel(dst->pFormat, color, &pixel); - glamor_solid_boxes(pixmap, boxes, num_boxes, pixel); - - goto done; - } else { - if (likely(priv->type != GLAMOR_TEXTURE_LARGE)) { - int error; - - source = CreateSolidPicture(0, color, &error); - if (!source) - goto done; - if (glamor_composite_clipped_region(op, source, - NULL, dst, - NULL, NULL, priv, - ®ion, - 0,0,0,0,0,0)) - goto done; - } - } -fallback: - miCompositeRects(op, dst, color, num_rects, rects); -done: - /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must - * manually append the damaged regions ourselves. - */ - DamageRegionAppend(&pixmap->drawable, ®ion); - DamageRegionProcessPending(&pixmap->drawable); - - if (need_free_region) - pixman_region_fini(®ion); - if (source) - FreePicture(source, 0); - return; + PixmapPtr pixmap; + struct glamor_pixmap_private *priv; + pixman_region16_t region; + pixman_box16_t *boxes; + int dst_x, dst_y; + int num_boxes; + PicturePtr source = NULL; + Bool need_free_region = FALSE; + + DEBUGF("%s(op=%d, %08x x %d [(%d, %d)x(%d, %d) ...])\n", + __FUNCTION__, op, + (color->alpha >> 8 << 24) | + (color->red >> 8 << 16) | + (color->green >> 8 << 8) | + (color->blue >> 8 << 0), + num_rects, rects[0].x, rects[0].y, rects[0].width, rects[0].height); + + if (!num_rects) + return; + + if (RegionNil(dst->pCompositeClip)) { + DEBUGF("%s: empty clip, skipping\n", __FUNCTION__); + return; + } + + if ((color->red | color->green | color->blue | color->alpha) <= 0x00ff) { + switch (op) { + case PictOpOver: + case PictOpOutReverse: + case PictOpAdd: + return; + case PictOpInReverse: + case PictOpSrc: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOut; + break; + case PictOpXor: + op = PictOpOverReverse; + break; + } + } + if (color->alpha <= 0x00ff) { + switch (op) { + case PictOpOver: + case PictOpOutReverse: + return; + case PictOpInReverse: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOut; + break; + case PictOpXor: + op = PictOpOverReverse; + break; + } + } + else if (color->alpha >= 0xff00) { + switch (op) { + case PictOpOver: + op = PictOpSrc; + break; + case PictOpInReverse: + return; + case PictOpOutReverse: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOverReverse; + break; + case PictOpXor: + op = PictOpOut; + break; + } + } + DEBUGF("%s: converted to op %d\n", __FUNCTION__, op); + + if (!_pixman_region_init_clipped_rectangles(®ion, + num_rects, rects, + dst->pDrawable->x, + dst->pDrawable->y, + &dst->pCompositeClip->extents)) + { + DEBUGF("%s: allocation failed for region\n", __FUNCTION__); + return; + } + + pixmap = glamor_get_drawable_pixmap(dst->pDrawable); + priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv)) + goto fallback; + if (dst->alphaMap) { + DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__); + goto fallback; + } + + need_free_region = TRUE; + + DEBUGF("%s: drawable extents (%d, %d),(%d, %d) x %d\n", + __FUNCTION__, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, + RegionNumRects(®ion)); + + if (dst->pCompositeClip->data && + (!pixman_region_intersect(®ion, ®ion, dst->pCompositeClip) || + RegionNil(®ion))) { + DEBUGF("%s: zero-intersection between rectangles and clip\n", + __FUNCTION__); + pixman_region_fini(®ion); + return; + } + + DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n", + __FUNCTION__, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, + RegionNumRects(®ion)); + + glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y); + pixman_region_translate(®ion, dst_x, dst_y); + + DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n", + __FUNCTION__, dst_x, dst_y, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2); + + boxes = pixman_region_rectangles(®ion, &num_boxes); + if (op == PictOpSrc || op == PictOpClear) { + CARD32 pixel; + + if (op == PictOpClear) + pixel = 0; + else + miRenderColorToPixel(dst->pFormat, color, &pixel); + glamor_solid_boxes(pixmap, boxes, num_boxes, pixel); + + goto done; + } + else { + if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { + int error; + + source = CreateSolidPicture(0, color, &error); + if (!source) + goto done; + if (glamor_composite_clipped_region(op, source, + NULL, dst, + NULL, NULL, priv, + ®ion, 0, 0, 0, 0, 0, 0)) + goto done; + } + } + fallback: + miCompositeRects(op, dst, color, num_rects, rects); + done: + /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must + * manually append the damaged regions ourselves. + */ + DamageRegionAppend(&pixmap->drawable, ®ion); + DamageRegionProcessPending(&pixmap->drawable); + + if (need_free_region) + pixman_region_fini(®ion); + if (source) + FreePicture(source, 0); + return; } diff --git a/xorg-server/glamor/glamor_copyarea.c b/xorg-server/glamor/glamor_copyarea.c index 4e6f953d2..2735ba0bc 100644 --- a/xorg-server/glamor/glamor_copyarea.c +++ b/xorg-server/glamor/glamor_copyarea.c @@ -34,643 +34,624 @@ #ifndef GLAMOR_GLES2 static Bool glamor_copy_n_to_n_fbo_blit(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, BoxPtr box, int nbox, int dx, int dy) + DrawablePtr dst, + GCPtr gc, BoxPtr box, int nbox, int dx, int dy) { - ScreenPtr screen = dst->pScreen; - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); - PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); - glamor_pixmap_private *src_pixmap_priv, *dst_pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int dst_x_off, dst_y_off, src_x_off, src_y_off, i; - int fbo_x_off, fbo_y_off; - int src_fbo_x_off, src_fbo_y_off; - - if (!glamor_priv->has_fbo_blit) { - glamor_delayed_fallback(screen, - "no EXT_framebuffer_blit\n"); - return FALSE; - } - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - - if (gc) { - if (gc->alu != GXcopy) { - glamor_delayed_fallback(screen, "non-copy ALU\n"); - return FALSE; - } - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { - glamor_delayed_fallback(screen, "no src fbo\n"); - return FALSE; - } - - if (glamor_set_destination_pixmap(dst_pixmap)) - return FALSE; - - pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off); - pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off); - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, - src_pixmap_priv->base.fbo->fb); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - dst_x_off += fbo_x_off; - dst_y_off += fbo_y_off; - src_y_off += dy + src_fbo_y_off; - src_x_off += src_fbo_x_off; - - for (i = 0; i < nbox; i++) { - if (glamor_priv->yInverted) { - dispatch->glBlitFramebuffer((box[i].x1 + dx + - src_x_off), - (box[i].y1 + - src_y_off), - (box[i].x2 + dx + - src_x_off), - (box[i].y2 + - src_y_off), - (box[i].x1 + - dst_x_off), - (box[i].y1 + - dst_y_off), - (box[i].x2 + - dst_x_off), - (box[i].y2 + - dst_y_off), - GL_COLOR_BUFFER_BIT, - GL_NEAREST); - } else { - int flip_dst_y1 = - dst_pixmap->drawable.height - (box[i].y2 + - dst_y_off); - int flip_dst_y2 = - dst_pixmap->drawable.height - (box[i].y1 + - dst_y_off); - int flip_src_y1 = - src_pixmap->drawable.height - (box[i].y2 + - src_y_off); - int flip_src_y2 = - src_pixmap->drawable.height - (box[i].y1 + - src_y_off); - - dispatch->glBlitFramebuffer(box[i].x1 + dx + - src_x_off, - flip_src_y1, - box[i].x2 + dx + - src_x_off, - flip_src_y2, - box[i].x1 + - dst_x_off, - flip_dst_y1, - box[i].x2 + - dst_x_off, - flip_dst_y2, - GL_COLOR_BUFFER_BIT, - GL_NEAREST); - } - } - glamor_put_dispatch(glamor_priv); - glamor_priv->state = BLIT_STATE; - return TRUE; + ScreenPtr screen = dst->pScreen; + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); + PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); + glamor_pixmap_private *src_pixmap_priv, *dst_pixmap_priv; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int dst_x_off, dst_y_off, src_x_off, src_y_off, i; + int fbo_x_off, fbo_y_off; + int src_fbo_x_off, src_fbo_y_off; + + if (!glamor_priv->has_fbo_blit) { + glamor_delayed_fallback(screen, "no EXT_framebuffer_blit\n"); + return FALSE; + } + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + + if (gc) { + if (gc->alu != GXcopy) { + glamor_delayed_fallback(screen, "non-copy ALU\n"); + return FALSE; + } + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { + glamor_delayed_fallback(screen, "no src fbo\n"); + return FALSE; + } + + if (glamor_set_destination_pixmap(dst_pixmap)) + return FALSE; + + pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off); + pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off); + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, + src_pixmap_priv->base.fbo->fb); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + dst_x_off += fbo_x_off; + dst_y_off += fbo_y_off; + src_y_off += dy + src_fbo_y_off; + src_x_off += src_fbo_x_off; + + for (i = 0; i < nbox; i++) { + if (glamor_priv->yInverted) { + dispatch->glBlitFramebuffer((box[i].x1 + dx + + src_x_off), + (box[i].y1 + + src_y_off), + (box[i].x2 + dx + + src_x_off), + (box[i].y2 + + src_y_off), + (box[i].x1 + + dst_x_off), + (box[i].y1 + + dst_y_off), + (box[i].x2 + + dst_x_off), + (box[i].y2 + + dst_y_off), + GL_COLOR_BUFFER_BIT, GL_NEAREST); + } + else { + int flip_dst_y1 = + dst_pixmap->drawable.height - (box[i].y2 + dst_y_off); + int flip_dst_y2 = + dst_pixmap->drawable.height - (box[i].y1 + dst_y_off); + int flip_src_y1 = + src_pixmap->drawable.height - (box[i].y2 + src_y_off); + int flip_src_y2 = + src_pixmap->drawable.height - (box[i].y1 + src_y_off); + + dispatch->glBlitFramebuffer(box[i].x1 + dx + + src_x_off, + flip_src_y1, + box[i].x2 + dx + + src_x_off, + flip_src_y2, + box[i].x1 + + dst_x_off, + flip_dst_y1, + box[i].x2 + + dst_x_off, + flip_dst_y2, + GL_COLOR_BUFFER_BIT, GL_NEAREST); + } + } + glamor_put_dispatch(glamor_priv); + glamor_priv->state = BLIT_STATE; + return TRUE; } #endif static Bool glamor_copy_n_to_n_textured(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, BoxPtr box, int nbox, int dx, int dy) + DrawablePtr dst, + GCPtr gc, BoxPtr box, int nbox, int dx, int dy) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(dst->pScreen); - glamor_gl_dispatch *dispatch; - PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); - int i; - float vertices[8], texcoords[8]; - glamor_pixmap_private *src_pixmap_priv; - glamor_pixmap_private *dst_pixmap_priv; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - enum glamor_pixmap_status src_status = GLAMOR_NONE; - GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; - - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - - if (!src_pixmap_priv->base.gl_fbo) { + glamor_screen_private *glamor_priv = + glamor_get_screen_private(dst->pScreen); + glamor_gl_dispatch *dispatch; + PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); + int i; + float vertices[8], texcoords[8]; + glamor_pixmap_private *src_pixmap_priv; + glamor_pixmap_private *dst_pixmap_priv; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + enum glamor_pixmap_status src_status = GLAMOR_NONE; + GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; + + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + + if (!src_pixmap_priv->base.gl_fbo) { #ifndef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n"); - return FALSE; + glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n"); + return FALSE; #else - src_status = glamor_upload_pixmap_to_texture(src_pixmap); - if (src_status != GLAMOR_UPLOAD_DONE) - return FALSE; + src_status = glamor_upload_pixmap_to_texture(src_pixmap); + if (src_status != GLAMOR_UPLOAD_DONE) + return FALSE; - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); #endif - } + } + pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); + pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); - pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); - pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); + dispatch = glamor_get_dispatch(glamor_priv); - dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + dx += src_x_off; + dy += src_y_off; - glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - dx += src_x_off; - dy += src_y_off; - - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, - src_pixmap_priv->base.fbo->tex); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_BORDER); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_BORDER); + dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); #endif - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); - dispatch->glUniform1i(glamor_priv->finish_access_revert[0], - REVERT_NONE); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], - SWAP_NONE_UPLOADING); - - for (i = 0; i < nbox; i++) { - - glamor_set_normalize_vcoords(dst_pixmap_priv, - dst_xscale, dst_yscale, - box[i].x1 + dst_x_off, - box[i].y1 + dst_y_off, - box[i].x2 + dst_x_off, - box[i].y2 + dst_y_off, - glamor_priv->yInverted, - vertices); - - glamor_set_normalize_tcoords(src_pixmap_priv, - src_xscale, - src_yscale, - box[i].x1 + dx, - box[i].y1 + dy, - box[i].x2 + dx, - box[i].y2 + dy, - glamor_priv->yInverted, - texcoords); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - } - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[0], REVERT_NONE); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], + SWAP_NONE_UPLOADING); + + for (i = 0; i < nbox; i++) { + + glamor_set_normalize_vcoords(dst_pixmap_priv, + dst_xscale, dst_yscale, + box[i].x1 + dst_x_off, + box[i].y1 + dst_y_off, + box[i].x2 + dst_x_off, + box[i].y2 + dst_y_off, + glamor_priv->yInverted, vertices); + + glamor_set_normalize_tcoords(src_pixmap_priv, + src_xscale, + src_yscale, + box[i].x1 + dx, + box[i].y1 + dy, + box[i].x2 + dx, + box[i].y2 + dy, + glamor_priv->yInverted, texcoords); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - /* The source texture is bound to a fbo, we have to flush it here. */ - glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; - return TRUE; + dispatch->glUseProgram(0); + /* The source texture is bound to a fbo, we have to flush it here. */ + glamor_put_dispatch(glamor_priv); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; + return TRUE; } static Bool __glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure) { - PixmapPtr dst_pixmap, src_pixmap, temp_pixmap = NULL; - DrawablePtr temp_src = src; - glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; - glamor_screen_private *glamor_priv; - BoxRec bound; - ScreenPtr screen; - int temp_dx = dx; - int temp_dy = dy; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - int i; - int overlaped = 0; - Bool ret = FALSE; - - dst_pixmap = glamor_get_drawable_pixmap(dst); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - src_pixmap = glamor_get_drawable_pixmap(src); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - screen = dst_pixmap->drawable.pScreen; - glamor_priv = glamor_get_screen_private(dst->pScreen); - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - - if (src_pixmap_priv->base.fbo - && src_pixmap_priv->base.fbo->fb == dst_pixmap_priv->base.fbo->fb) { - int x_shift = abs(src_x_off - dx - dst_x_off); - int y_shift = abs(src_y_off - dy - dst_y_off); - for (i = 0; i < nbox; i++) { - if (x_shift < abs(box[i].x2 - box[i].x1) - && y_shift < abs(box[i].y2 - box[i].y1)) { - overlaped = 1; - break; - } - } - } - DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", - box[0].x1, box[0].y1, - box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, - dx, dy, - src_pixmap, dst_pixmap); + PixmapPtr dst_pixmap, src_pixmap, temp_pixmap = NULL; + DrawablePtr temp_src = src; + glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; + glamor_screen_private *glamor_priv; + BoxRec bound; + ScreenPtr screen; + int temp_dx = dx; + int temp_dy = dy; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + int i; + int overlaped = 0; + Bool ret = FALSE; + + dst_pixmap = glamor_get_drawable_pixmap(dst); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + src_pixmap = glamor_get_drawable_pixmap(src); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + screen = dst_pixmap->drawable.pScreen; + glamor_priv = glamor_get_screen_private(dst->pScreen); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + + if (src_pixmap_priv->base.fbo + && src_pixmap_priv->base.fbo->fb == dst_pixmap_priv->base.fbo->fb) { + int x_shift = abs(src_x_off - dx - dst_x_off); + int y_shift = abs(src_y_off - dy - dst_y_off); + + for (i = 0; i < nbox; i++) { + if (x_shift < abs(box[i].x2 - box[i].x1) + && y_shift < abs(box[i].y2 - box[i].y1)) { + overlaped = 1; + break; + } + } + } + DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", + box[0].x1, box[0].y1, + box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, + dx, dy, src_pixmap, dst_pixmap); #ifndef GLAMOR_GLES2 - if (!overlaped && - (glamor_priv->state != RENDER_STATE - || !src_pixmap_priv->base.gl_tex || !dst_pixmap_priv->base.gl_tex) - && glamor_copy_n_to_n_fbo_blit(src, dst, gc, box, nbox, dx, - dy)) { - ret = TRUE; - goto done; - } + if (!overlaped && + (glamor_priv->state != RENDER_STATE + || !src_pixmap_priv->base.gl_tex || !dst_pixmap_priv->base.gl_tex) + && glamor_copy_n_to_n_fbo_blit(src, dst, gc, box, nbox, dx, dy)) { + ret = TRUE; + goto done; + } #endif - glamor_calculate_boxes_bound(&bound, box, nbox); - - /* Overlaped indicate the src and dst are the same pixmap. */ - if (overlaped || (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv) - && (((bound.x2 - bound.x1) * (bound.y2 - bound.y1) - * 4 > - src_pixmap->drawable.width * - src_pixmap->drawable.height) - || !(glamor_check_fbo_size(glamor_priv, - src_pixmap->drawable.width, - src_pixmap->drawable.height))))) { - - temp_pixmap = glamor_create_pixmap(screen, - bound.x2 - bound.x1, - bound.y2 - bound.y1, - src_pixmap-> - drawable.depth, - overlaped ? 0 : - GLAMOR_CREATE_PIXMAP_CPU); - assert(bound.x2 - bound.x1 <= glamor_priv->max_fbo_size); - assert(bound.y2 - bound.y1 <= glamor_priv->max_fbo_size); - if (!temp_pixmap) - goto done; - glamor_translate_boxes(box, nbox, -bound.x1, -bound.y1); - temp_src = &temp_pixmap->drawable; - - if (overlaped) - glamor_copy_n_to_n_textured(src, temp_src, gc, box, - nbox, - temp_dx + bound.x1, - temp_dy + bound.y1); - else - fbCopyNtoN(src, temp_src, gc, box, nbox, - temp_dx + bound.x1, temp_dy + bound.y1, - reverse, upsidedown, bitplane, closure); - glamor_translate_boxes(box, nbox, bound.x1, bound.y1); - temp_dx = -bound.x1; - temp_dy = -bound.y1; - } else { - temp_dx = dx; - temp_dy = dy; - temp_src = src; - } - - if (glamor_copy_n_to_n_textured - (temp_src, dst, gc, box, nbox, temp_dx, temp_dy)) { - ret = TRUE; - } -done: - if (temp_src != src) - glamor_destroy_pixmap(temp_pixmap); - return ret; + glamor_calculate_boxes_bound(&bound, box, nbox); + + /* Overlaped indicate the src and dst are the same pixmap. */ + if (overlaped || (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv) + && (((bound.x2 - bound.x1) * (bound.y2 - bound.y1) + * 4 > + src_pixmap->drawable.width * + src_pixmap->drawable.height) + || !(glamor_check_fbo_size(glamor_priv, + src_pixmap->drawable.width, + src_pixmap->drawable. + height))))) { + + temp_pixmap = glamor_create_pixmap(screen, + bound.x2 - bound.x1, + bound.y2 - bound.y1, + src_pixmap->drawable.depth, + overlaped ? 0 : + GLAMOR_CREATE_PIXMAP_CPU); + assert(bound.x2 - bound.x1 <= glamor_priv->max_fbo_size); + assert(bound.y2 - bound.y1 <= glamor_priv->max_fbo_size); + if (!temp_pixmap) + goto done; + glamor_translate_boxes(box, nbox, -bound.x1, -bound.y1); + temp_src = &temp_pixmap->drawable; + + if (overlaped) + glamor_copy_n_to_n_textured(src, temp_src, gc, box, + nbox, + temp_dx + bound.x1, temp_dy + bound.y1); + else + fbCopyNtoN(src, temp_src, gc, box, nbox, + temp_dx + bound.x1, temp_dy + bound.y1, + reverse, upsidedown, bitplane, closure); + glamor_translate_boxes(box, nbox, bound.x1, bound.y1); + temp_dx = -bound.x1; + temp_dy = -bound.y1; + } + else { + temp_dx = dx; + temp_dy = dy; + temp_src = src; + } + + if (glamor_copy_n_to_n_textured + (temp_src, dst, gc, box, nbox, temp_dx, temp_dy)) { + ret = TRUE; + } + done: + if (temp_src != src) + glamor_destroy_pixmap(temp_pixmap); + return ret; } static Bool _glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure, Bool fallback) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, + void *closure, Bool fallback) { - PixmapPtr dst_pixmap, src_pixmap; - glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - BoxPtr extent; - RegionRec region; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - Bool ok = FALSE; - int force_clip = 0; - - if (nbox == 0) - return TRUE; - dst_pixmap = glamor_get_drawable_pixmap(dst); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - src_pixmap = glamor_get_drawable_pixmap(src); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - - glamor_priv = glamor_get_screen_private(dst->pScreen); - - DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", - box[0].x1, box[0].y1, - box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, - dx, dy, - src_pixmap, dst_pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) - goto fall_back; - - if (gc) { - if (!glamor_set_planemask(dst_pixmap, gc->planemask)) - goto fall_back; - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, gc->alu)) { - glamor_put_dispatch(glamor_priv); - goto fail; - } - glamor_put_dispatch(glamor_priv); - } - - if (!src_pixmap_priv) { - glamor_set_pixmap_type(src_pixmap, GLAMOR_MEMORY); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - } - - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - - RegionInitBoxes(®ion, box, nbox); - extent = RegionExtents(®ion); - - if (!glamor_check_fbo_size(glamor_priv, - extent->x2 - extent->x1, extent->y2 - extent->y1) - && (src_pixmap_priv->type == GLAMOR_MEMORY - || (src_pixmap_priv == dst_pixmap_priv))) { - force_clip = 1; - } - - if (force_clip || dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - glamor_pixmap_clipped_regions *clipped_dst_regions; - int n_dst_region, i, j; - PixmapPtr temp_source_pixmap; - glamor_pixmap_private *temp_source_priv = NULL; - - RegionTranslate(®ion, dst_x_off, dst_y_off); - if (!force_clip) - clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, - ®ion, &n_dst_region, 0, - reverse, upsidedown); - else - clipped_dst_regions = glamor_compute_clipped_regions_ext(dst_pixmap_priv, - ®ion, &n_dst_region, - glamor_priv->max_fbo_size, - glamor_priv->max_fbo_size, - reverse, upsidedown); - for(i = 0; i < n_dst_region; i++) - { - int n_src_region; - glamor_pixmap_clipped_regions *clipped_src_regions; - BoxPtr current_boxes; - int n_current_boxes; - - SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, clipped_dst_regions[i].block_idx); - - temp_source_pixmap = NULL; - if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionTranslate(clipped_dst_regions[i].region, - -dst_x_off + src_x_off + dx, -dst_y_off + src_y_off + dy); - clipped_src_regions = glamor_compute_clipped_regions(src_pixmap_priv, - clipped_dst_regions[i].region, - &n_src_region, 0, - reverse, upsidedown); - DEBUGF("Source is large pixmap.\n"); - for (j = 0; j < n_src_region; j++) - { - if (src_pixmap_priv != dst_pixmap_priv) - SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, clipped_src_regions[j].block_idx); - else if (src_pixmap_priv == dst_pixmap_priv && - clipped_src_regions[j].block_idx != clipped_dst_regions[i].block_idx) { - /* source and the dest are the same, but need different block_idx. - * we create a empty pixmap and fill the required source fbo and box to - * it. It's a little hacky, but avoid extra copy. */ - temp_source_pixmap = glamor_create_pixmap(src->pScreen, 0, 0, - src->depth, 0); - if (!temp_source_pixmap) { - ok = FALSE; - goto fail; - } - src->pScreen->ModifyPixmapHeader(temp_source_pixmap, - src_pixmap->drawable.width, - src_pixmap->drawable.height, - 0, 0, src_pixmap->devKind, NULL); - temp_source_priv = glamor_get_pixmap_private(temp_source_pixmap); - *temp_source_priv = *src_pixmap_priv; - temp_source_priv->large.box = src_pixmap_priv->large.box_array[clipped_src_regions[j].block_idx]; - temp_source_priv->base.fbo = src_pixmap_priv->large.fbo_array[clipped_src_regions[j].block_idx]; - temp_source_priv->base.pixmap = temp_source_pixmap; - } - assert(temp_source_pixmap || !(src_pixmap_priv == dst_pixmap_priv - && (clipped_src_regions[j].block_idx != clipped_dst_regions[i].block_idx))); - - RegionTranslate(clipped_src_regions[j].region, - -src_x_off - dx, - -src_y_off - dy); - current_boxes = RegionRects(clipped_src_regions[j].region); - n_current_boxes = RegionNumRects(clipped_src_regions[j].region); - DEBUGF("dst pixmap fbo idx %d src pixmap fbo idx %d \n", - clipped_dst_regions[i].block_idx, - clipped_src_regions[j].block_idx); - DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", - current_boxes[0].x1, current_boxes[0].y1, - current_boxes[0].x2, current_boxes[0].y2, - dx, dy, src_pixmap, dst_pixmap); - if (!temp_source_pixmap) - ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - else { - ok = __glamor_copy_n_to_n(&temp_source_pixmap->drawable, - dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - temp_source_priv->type = GLAMOR_MEMORY; - temp_source_priv->base.fbo = NULL; - glamor_destroy_pixmap(temp_source_pixmap); - temp_source_pixmap = NULL; - } - - RegionDestroy(clipped_src_regions[j].region); - if (!ok) { - assert(0); - goto fail; - } - } - - if (n_src_region == 0) - ok = TRUE; - free(clipped_src_regions); - } else { - RegionTranslate(clipped_dst_regions[i].region, - - dst_x_off, - - dst_y_off); - current_boxes = RegionRects(clipped_dst_regions[i].region); - n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); - - DEBUGF("dest pixmap fbo idx %d \n", - clipped_dst_regions[i].block_idx); - DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", - current_boxes[0].x1, current_boxes[0].y1, - current_boxes[0].x2, current_boxes[0].y2, - dx, dy, src_pixmap, dst_pixmap); - - ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - - } - RegionDestroy(clipped_dst_regions[i].region); - } - if (n_dst_region == 0) - ok = TRUE; - free(clipped_dst_regions); - RegionUninit(®ion); - } else { - ok = __glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, dy, - reverse, upsidedown, bitplane, - closure); - } - -fail: - dispatch = glamor_get_dispatch(glamor_priv); - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - - if (ok) - return TRUE; -fall_back: - if (!fallback - && glamor_ddx_fallback_check_pixmap(src) - && glamor_ddx_fallback_check_pixmap(dst)) - goto done; - - if (src_pixmap_priv->type == GLAMOR_DRM_ONLY - || dst_pixmap_priv->type == GLAMOR_DRM_ONLY) { - LogMessage(X_WARNING, - "Access a DRM only pixmap is not allowed within glamor.\n"); - return TRUE; - } - glamor_report_delayed_fallbacks(src->pScreen); - glamor_report_delayed_fallbacks(dst->pScreen); - - glamor_fallback("from %p to %p (%c,%c)\n", src, dst, - glamor_get_drawable_location(src), - glamor_get_drawable_location(dst)); - - if (glamor_prepare_access(dst, GLAMOR_ACCESS_RW)) { - if (dst == src - || glamor_prepare_access(src, GLAMOR_ACCESS_RO)) { - fbCopyNtoN(src, dst, gc, box, nbox, - dx, dy, reverse, upsidedown, bitplane, - closure); - if (dst != src) - glamor_finish_access(src, GLAMOR_ACCESS_RO); - } - glamor_finish_access(dst, GLAMOR_ACCESS_RW); - } - ok = TRUE; - - done: - glamor_clear_delayed_fallbacks(src->pScreen); - glamor_clear_delayed_fallbacks(dst->pScreen); - return ok; + PixmapPtr dst_pixmap, src_pixmap; + glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + BoxPtr extent; + RegionRec region; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + Bool ok = FALSE; + int force_clip = 0; + + if (nbox == 0) + return TRUE; + dst_pixmap = glamor_get_drawable_pixmap(dst); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + src_pixmap = glamor_get_drawable_pixmap(src); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + + glamor_priv = glamor_get_screen_private(dst->pScreen); + + DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", + box[0].x1, box[0].y1, + box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, + dx, dy, src_pixmap, dst_pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) + goto fall_back; + + if (gc) { + if (!glamor_set_planemask(dst_pixmap, gc->planemask)) + goto fall_back; + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, gc->alu)) { + glamor_put_dispatch(glamor_priv); + goto fail; + } + glamor_put_dispatch(glamor_priv); + } + + if (!src_pixmap_priv) { + glamor_set_pixmap_type(src_pixmap, GLAMOR_MEMORY); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + } + + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + + RegionInitBoxes(®ion, box, nbox); + extent = RegionExtents(®ion); + + if (!glamor_check_fbo_size(glamor_priv, + extent->x2 - extent->x1, extent->y2 - extent->y1) + && (src_pixmap_priv->type == GLAMOR_MEMORY + || (src_pixmap_priv == dst_pixmap_priv))) { + force_clip = 1; + } + + if (force_clip || dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_clipped_regions *clipped_dst_regions; + int n_dst_region, i, j; + PixmapPtr temp_source_pixmap; + glamor_pixmap_private *temp_source_priv = NULL; + + RegionTranslate(®ion, dst_x_off, dst_y_off); + if (!force_clip) + clipped_dst_regions = + glamor_compute_clipped_regions(dst_pixmap_priv, ®ion, + &n_dst_region, 0, reverse, + upsidedown); + else + clipped_dst_regions = + glamor_compute_clipped_regions_ext(dst_pixmap_priv, ®ion, + &n_dst_region, + glamor_priv->max_fbo_size, + glamor_priv->max_fbo_size, + reverse, upsidedown); + for (i = 0; i < n_dst_region; i++) { + int n_src_region; + glamor_pixmap_clipped_regions *clipped_src_regions; + BoxPtr current_boxes; + int n_current_boxes; + + SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, + clipped_dst_regions[i].block_idx); + + temp_source_pixmap = NULL; + if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionTranslate(clipped_dst_regions[i].region, + -dst_x_off + src_x_off + dx, + -dst_y_off + src_y_off + dy); + clipped_src_regions = + glamor_compute_clipped_regions(src_pixmap_priv, + clipped_dst_regions[i]. + region, &n_src_region, 0, + reverse, upsidedown); + DEBUGF("Source is large pixmap.\n"); + for (j = 0; j < n_src_region; j++) { + if (src_pixmap_priv != dst_pixmap_priv) + SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, + clipped_src_regions[j]. + block_idx); + else if (src_pixmap_priv == dst_pixmap_priv && + clipped_src_regions[j].block_idx != + clipped_dst_regions[i].block_idx) { + /* source and the dest are the same, but need different block_idx. + * we create a empty pixmap and fill the required source fbo and box to + * it. It's a little hacky, but avoid extra copy. */ + temp_source_pixmap = + glamor_create_pixmap(src->pScreen, 0, 0, src->depth, + 0); + if (!temp_source_pixmap) { + ok = FALSE; + goto fail; + } + src->pScreen->ModifyPixmapHeader(temp_source_pixmap, + src_pixmap->drawable. + width, + src_pixmap->drawable. + height, 0, 0, + src_pixmap->devKind, + NULL); + temp_source_priv = + glamor_get_pixmap_private(temp_source_pixmap); + *temp_source_priv = *src_pixmap_priv; + temp_source_priv->large.box = + src_pixmap_priv->large. + box_array[clipped_src_regions[j].block_idx]; + temp_source_priv->base.fbo = + src_pixmap_priv->large. + fbo_array[clipped_src_regions[j].block_idx]; + temp_source_priv->base.pixmap = temp_source_pixmap; + } + assert(temp_source_pixmap || + !(src_pixmap_priv == dst_pixmap_priv && + (clipped_src_regions[j].block_idx != + clipped_dst_regions[i].block_idx))); + + RegionTranslate(clipped_src_regions[j].region, + -src_x_off - dx, -src_y_off - dy); + current_boxes = RegionRects(clipped_src_regions[j].region); + n_current_boxes = + RegionNumRects(clipped_src_regions[j].region); + DEBUGF("dst pixmap fbo idx %d src pixmap fbo idx %d \n", + clipped_dst_regions[i].block_idx, + clipped_src_regions[j].block_idx); + DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", + current_boxes[0].x1, current_boxes[0].y1, + current_boxes[0].x2, current_boxes[0].y2, dx, dy, + src_pixmap, dst_pixmap); + if (!temp_source_pixmap) + ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, + n_current_boxes, dx, dy, + reverse, upsidedown, bitplane, + closure); + else { + ok = __glamor_copy_n_to_n(&temp_source_pixmap->drawable, + dst, gc, current_boxes, + n_current_boxes, dx, dy, + reverse, upsidedown, bitplane, + closure); + temp_source_priv->type = GLAMOR_MEMORY; + temp_source_priv->base.fbo = NULL; + glamor_destroy_pixmap(temp_source_pixmap); + temp_source_pixmap = NULL; + } + + RegionDestroy(clipped_src_regions[j].region); + if (!ok) { + assert(0); + goto fail; + } + } + + if (n_src_region == 0) + ok = TRUE; + free(clipped_src_regions); + } + else { + RegionTranslate(clipped_dst_regions[i].region, + -dst_x_off, -dst_y_off); + current_boxes = RegionRects(clipped_dst_regions[i].region); + n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); + + DEBUGF("dest pixmap fbo idx %d \n", + clipped_dst_regions[i].block_idx); + DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", + current_boxes[0].x1, current_boxes[0].y1, + current_boxes[0].x2, current_boxes[0].y2, + dx, dy, src_pixmap, dst_pixmap); + + ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, + n_current_boxes, dx, dy, reverse, + upsidedown, bitplane, closure); + + } + RegionDestroy(clipped_dst_regions[i].region); + } + if (n_dst_region == 0) + ok = TRUE; + free(clipped_dst_regions); + RegionUninit(®ion); + } + else { + ok = __glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, dy, + reverse, upsidedown, bitplane, closure); + } + + fail: + dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + + if (ok) + return TRUE; + fall_back: + if (!fallback && glamor_ddx_fallback_check_pixmap(src) + && glamor_ddx_fallback_check_pixmap(dst)) + goto done; + + if (src_pixmap_priv->type == GLAMOR_DRM_ONLY + || dst_pixmap_priv->type == GLAMOR_DRM_ONLY) { + LogMessage(X_WARNING, + "Access a DRM only pixmap is not allowed within glamor.\n"); + return TRUE; + } + glamor_report_delayed_fallbacks(src->pScreen); + glamor_report_delayed_fallbacks(dst->pScreen); + + glamor_fallback("from %p to %p (%c,%c)\n", src, dst, + glamor_get_drawable_location(src), + glamor_get_drawable_location(dst)); + + if (glamor_prepare_access(dst, GLAMOR_ACCESS_RW)) { + if (dst == src || glamor_prepare_access(src, GLAMOR_ACCESS_RO)) { + fbCopyNtoN(src, dst, gc, box, nbox, + dx, dy, reverse, upsidedown, bitplane, closure); + if (dst != src) + glamor_finish_access(src, GLAMOR_ACCESS_RO); + } + glamor_finish_access(dst, GLAMOR_ACCESS_RW); + } + ok = TRUE; + + done: + glamor_clear_delayed_fallbacks(src->pScreen); + glamor_clear_delayed_fallbacks(dst->pScreen); + return ok; } RegionPtr glamor_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc, - int srcx, int srcy, int width, int height, int dstx, - int dsty) + int srcx, int srcy, int width, int height, int dstx, int dsty) { - RegionPtr region; - region = miDoCopy(src, dst, gc, - srcx, srcy, width, height, - dstx, dsty, glamor_copy_n_to_n, 0, NULL); + RegionPtr region; - return region; + region = miDoCopy(src, dst, gc, + srcx, srcy, width, height, + dstx, dsty, glamor_copy_n_to_n, 0, NULL); + + return region; } void glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, Bool upsidedown, Pixel bitplane, void *closure) { - _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, - dy, reverse, upsidedown, bitplane, closure, TRUE); + _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, + dy, reverse, upsidedown, bitplane, closure, TRUE); } Bool glamor_copy_n_to_n_nf(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure) { - return _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, - dy, reverse, upsidedown, bitplane, closure, FALSE); + return _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, + dy, reverse, upsidedown, bitplane, closure, + FALSE); } - diff --git a/xorg-server/glamor/glamor_copyplane.c b/xorg-server/glamor/glamor_copyplane.c index 3f2652ac7..c42d33e94 100644 --- a/xorg-server/glamor/glamor_copyplane.c +++ b/xorg-server/glamor/glamor_copyplane.c @@ -30,43 +30,43 @@ static Bool _glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion, Bool fallback) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane, RegionPtr *pRegion, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pSrc) - && glamor_ddx_fallback_check_pixmap(pDst)) - goto fail; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pSrc) + && glamor_ddx_fallback_check_pixmap(pDst)) + goto fail; - glamor_prepare_access(pDst, GLAMOR_ACCESS_RW); - glamor_prepare_access(pSrc, GLAMOR_ACCESS_RO); - *pRegion = fbCopyPlane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane); - glamor_finish_access(pSrc, GLAMOR_ACCESS_RO); - glamor_finish_access(pDst, GLAMOR_ACCESS_RW); - return TRUE; + glamor_prepare_access(pDst, GLAMOR_ACCESS_RW); + glamor_prepare_access(pSrc, GLAMOR_ACCESS_RO); + *pRegion = fbCopyPlane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane); + glamor_finish_access(pSrc, GLAMOR_ACCESS_RO); + glamor_finish_access(pDst, GLAMOR_ACCESS_RW); + return TRUE; fail: - return FALSE; + return FALSE; } RegionPtr glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane) { - RegionPtr ret; - _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane, &ret, TRUE); - return ret; + RegionPtr ret; + + _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane, &ret, TRUE); + return ret; } Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane, RegionPtr *pRegion) { - return _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane, pRegion, FALSE); + return _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane, pRegion, FALSE); } diff --git a/xorg-server/glamor/glamor_copywindow.c b/xorg-server/glamor/glamor_copywindow.c index b181ff529..1ced4b336 100644 --- a/xorg-server/glamor/glamor_copywindow.c +++ b/xorg-server/glamor/glamor_copywindow.c @@ -29,30 +29,28 @@ */ void -glamor_copy_window(WindowPtr win, DDXPointRec old_origin, - RegionPtr src_region) +glamor_copy_window(WindowPtr win, DDXPointRec old_origin, RegionPtr src_region) { - RegionRec dst_region; - int dx, dy; - PixmapPtr pixmap = win->drawable.pScreen->GetWindowPixmap(win); + RegionRec dst_region; + int dx, dy; + PixmapPtr pixmap = win->drawable.pScreen->GetWindowPixmap(win); - dx = old_origin.x - win->drawable.x; - dy = old_origin.y - win->drawable.y; - REGION_TRANSLATE(win->drawable.pScreen, src_region, -dx, -dy); + dx = old_origin.x - win->drawable.x; + dy = old_origin.y - win->drawable.y; + REGION_TRANSLATE(win->drawable.pScreen, src_region, -dx, -dy); - REGION_INIT(win->drawable.pScreen, &dst_region, NullBox, 0); + REGION_INIT(win->drawable.pScreen, &dst_region, NullBox, 0); - REGION_INTERSECT(win->drawable.pScreen, &dst_region, - &win->borderClip, src_region); + REGION_INTERSECT(win->drawable.pScreen, &dst_region, + &win->borderClip, src_region); #ifdef COMPOSITE - if (pixmap->screen_x || pixmap->screen_y) - REGION_TRANSLATE(win->drawable.pScreen, &dst_region, - -pixmap->screen_x, -pixmap->screen_y); + if (pixmap->screen_x || pixmap->screen_y) + REGION_TRANSLATE(win->drawable.pScreen, &dst_region, + -pixmap->screen_x, -pixmap->screen_y); #endif - miCopyRegion(&pixmap->drawable, &pixmap->drawable, - NULL, &dst_region, dx, dy, glamor_copy_n_to_n, 0, - NULL); + miCopyRegion(&pixmap->drawable, &pixmap->drawable, + NULL, &dst_region, dx, dy, glamor_copy_n_to_n, 0, NULL); - REGION_UNINIT(win->drawable.pScreen, &dst_region); + REGION_UNINIT(win->drawable.pScreen, &dst_region); } diff --git a/xorg-server/glamor/glamor_core.c b/xorg-server/glamor/glamor_core.c index eb1a08d43..4eac85603 100644 --- a/xorg-server/glamor/glamor_core.c +++ b/xorg-server/glamor/glamor_core.c @@ -38,76 +38,76 @@ const Bool glamor_get_drawable_location(const DrawablePtr drawable) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(drawable->pScreen); - if (pixmap_priv == NULL || pixmap_priv->base.gl_fbo == 0) - return 'm'; - if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo) - return 's'; - else - return 'f'; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(drawable->pScreen); + if (pixmap_priv == NULL || pixmap_priv->base.gl_fbo == 0) + return 'm'; + if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo) + return 's'; + else + return 'f'; } GLint glamor_compile_glsl_prog(glamor_gl_dispatch * dispatch, GLenum type, - const char *source) + const char *source) { - GLint ok; - GLint prog; - - prog = dispatch->glCreateShader(type); - dispatch->glShaderSource(prog, 1, (const GLchar **) &source, NULL); - dispatch->glCompileShader(prog); - dispatch->glGetShaderiv(prog, GL_COMPILE_STATUS, &ok); - if (!ok) { - GLchar *info; - GLint size; - - dispatch->glGetShaderiv(prog, GL_INFO_LOG_LENGTH, &size); - info = malloc(size); - if (info) { - dispatch->glGetShaderInfoLog(prog, size, NULL, info); - ErrorF("Failed to compile %s: %s\n", - type == GL_FRAGMENT_SHADER ? "FS" : "VS", info); - ErrorF("Program source:\n%s", source); - free(info); - } else - ErrorF("Failed to get shader compilation info.\n"); - FatalError("GLSL compile failure\n"); - } - - return prog; + GLint ok; + GLint prog; + + prog = dispatch->glCreateShader(type); + dispatch->glShaderSource(prog, 1, (const GLchar **) &source, NULL); + dispatch->glCompileShader(prog); + dispatch->glGetShaderiv(prog, GL_COMPILE_STATUS, &ok); + if (!ok) { + GLchar *info; + GLint size; + + dispatch->glGetShaderiv(prog, GL_INFO_LOG_LENGTH, &size); + info = malloc(size); + if (info) { + dispatch->glGetShaderInfoLog(prog, size, NULL, info); + ErrorF("Failed to compile %s: %s\n", + type == GL_FRAGMENT_SHADER ? "FS" : "VS", info); + ErrorF("Program source:\n%s", source); + free(info); + } + else + ErrorF("Failed to get shader compilation info.\n"); + FatalError("GLSL compile failure\n"); + } + + return prog; } void glamor_link_glsl_prog(glamor_gl_dispatch * dispatch, GLint prog) { - GLint ok; + GLint ok; - dispatch->glLinkProgram(prog); - dispatch->glGetProgramiv(prog, GL_LINK_STATUS, &ok); - if (!ok) { - GLchar *info; - GLint size; + dispatch->glLinkProgram(prog); + dispatch->glGetProgramiv(prog, GL_LINK_STATUS, &ok); + if (!ok) { + GLchar *info; + GLint size; - dispatch->glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size); - info = malloc(size); + dispatch->glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size); + info = malloc(size); - dispatch->glGetProgramInfoLog(prog, size, NULL, info); - ErrorF("Failed to link: %s\n", info); - FatalError("GLSL link failure\n"); - } + dispatch->glGetProgramInfoLog(prog, size, NULL, info); + ErrorF("Failed to link: %s\n", info); + FatalError("GLSL link failure\n"); + } } - Bool glamor_prepare_access(DrawablePtr drawable, glamor_access_t access) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - return glamor_download_pixmap_to_cpu(pixmap, access); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + + return glamor_download_pixmap_to_cpu(pixmap, access); } /* @@ -142,221 +142,205 @@ glamor_prepare_access(DrawablePtr drawable, glamor_access_t access) void glamor_init_finish_access_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *vs_source = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 source_texture;\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord0.xy;\n" "}\n"; - - const char *common_source = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture;\n" - "uniform sampler2D sampler;\n" - "uniform int revert;\n" - "uniform int swap_rb;\n" - - "#define REVERT_NONE 0\n" - "#define REVERT_NORMAL 1\n" - "#define SWAP_NONE_DOWNLOADING 0\n" - "#define SWAP_DOWNLOADING 1\n" - "#define SWAP_UPLOADING 2\n" - "#define SWAP_NONE_UPLOADING 3\n"; - - const char *fs_source = - "void main()\n" - "{\n" - " if (revert == REVERT_NONE) \n" - " { \n" - " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" - " gl_FragColor = texture2D(sampler, source_texture).bgra;\n" - " else \n" - " gl_FragColor = texture2D(sampler, source_texture).rgba;\n" - " } \n" - " else \n" - " { \n" - " if (swap_rb == SWAP_DOWNLOADING) \n" - " gl_FragColor = texture2D(sampler, source_texture).argb;\n" - " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" - " else if (swap_rb == SWAP_UPLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).gbar;\n" - " else if (swap_rb == SWAP_NONE_UPLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" - " } \n" "}\n"; - - const char *set_alpha_source = - "void main()\n" - "{\n" - " if (revert == REVERT_NONE) \n" - " { \n" - " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).bgr, 1);\n" - " else \n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).rgb, 1);\n" - " } \n" - " else \n" - " { \n" - " if (swap_rb == SWAP_DOWNLOADING) \n" - " gl_FragColor = vec4(1, texture2D(sampler, source_texture).rgb);\n" - " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" - " gl_FragColor = vec4(1, texture2D(sampler, source_texture).bgr);\n" - " else if (swap_rb == SWAP_UPLOADING)\n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).gba, 1);\n" - " else if (swap_rb == SWAP_NONE_UPLOADING)\n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).abg, 1);\n" - " } \n" - "}\n"; - GLint fs_prog, vs_prog, avs_prog, set_alpha_prog; - GLint sampler_uniform_location; - char *source; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->finish_access_prog[0] = dispatch->glCreateProgram(); - glamor_priv->finish_access_prog[1] = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, - vs_source); - - XNFasprintf(&source, "%s%s", common_source, fs_source); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - dispatch->glAttachShader(glamor_priv->finish_access_prog[0], - vs_prog); - dispatch->glAttachShader(glamor_priv->finish_access_prog[0], - fs_prog); - - avs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, - vs_source); - - XNFasprintf(&source, "%s%s", common_source, set_alpha_source); - set_alpha_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - dispatch->glAttachShader(glamor_priv->finish_access_prog[1], - avs_prog); - dispatch->glAttachShader(glamor_priv->finish_access_prog[1], - set_alpha_prog); - - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, - glamor_priv->finish_access_prog[0]); - - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, - glamor_priv->finish_access_prog[1]); - - glamor_priv->finish_access_revert[0] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "revert"); - - glamor_priv->finish_access_swap_rb[0] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "swap_rb"); - sampler_uniform_location = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "sampler"); - dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); - dispatch->glUniform1i(sampler_uniform_location, 0); - dispatch->glUniform1i(glamor_priv->finish_access_revert[0], 0); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); - dispatch->glUseProgram(0); - - glamor_priv->finish_access_revert[1] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "revert"); - glamor_priv->finish_access_swap_rb[1] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "swap_rb"); - sampler_uniform_location = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "sampler"); - dispatch->glUseProgram(glamor_priv->finish_access_prog[1]); - dispatch->glUniform1i(glamor_priv->finish_access_revert[1], 0); - dispatch->glUniform1i(sampler_uniform_location, 0); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *vs_source = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 source_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord0.xy;\n" + "}\n"; + + const char *common_source = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D sampler;\n" + "uniform int revert;\n" + "uniform int swap_rb;\n" + "#define REVERT_NONE 0\n" + "#define REVERT_NORMAL 1\n" + "#define SWAP_NONE_DOWNLOADING 0\n" + "#define SWAP_DOWNLOADING 1\n" + "#define SWAP_UPLOADING 2\n" + "#define SWAP_NONE_UPLOADING 3\n"; + + const char *fs_source = + "void main()\n" + "{\n" + " if (revert == REVERT_NONE) \n" + " { \n" + " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" + " gl_FragColor = texture2D(sampler, source_texture).bgra;\n" + " else \n" + " gl_FragColor = texture2D(sampler, source_texture).rgba;\n" + " } \n" + " else \n" + " { \n" + " if (swap_rb == SWAP_DOWNLOADING) \n" + " gl_FragColor = texture2D(sampler, source_texture).argb;\n" + " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" + " else if (swap_rb == SWAP_UPLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).gbar;\n" + " else if (swap_rb == SWAP_NONE_UPLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" + " } \n" + "}\n"; + + const char *set_alpha_source = + "void main()\n" + "{\n" + " if (revert == REVERT_NONE) \n" + " { \n" + " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).bgr, 1);\n" + " else \n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).rgb, 1);\n" + " } \n" + " else \n" + " { \n" + " if (swap_rb == SWAP_DOWNLOADING) \n" + " gl_FragColor = vec4(1, texture2D(sampler, source_texture).rgb);\n" + " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" + " gl_FragColor = vec4(1, texture2D(sampler, source_texture).bgr);\n" + " else if (swap_rb == SWAP_UPLOADING)\n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).gba, 1);\n" + " else if (swap_rb == SWAP_NONE_UPLOADING)\n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).abg, 1);\n" + " } \n" + "}\n"; + GLint fs_prog, vs_prog, avs_prog, set_alpha_prog; + GLint sampler_uniform_location; + char *source; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->finish_access_prog[0] = dispatch->glCreateProgram(); + glamor_priv->finish_access_prog[1] = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, vs_source); + + XNFasprintf(&source, "%s%s", common_source, fs_source); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, source); + free(source); + + dispatch->glAttachShader(glamor_priv->finish_access_prog[0], vs_prog); + dispatch->glAttachShader(glamor_priv->finish_access_prog[0], fs_prog); + + avs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, vs_source); + + XNFasprintf(&source, "%s%s", common_source, set_alpha_source); + set_alpha_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, + source); + free(source); + + dispatch->glAttachShader(glamor_priv->finish_access_prog[1], avs_prog); + dispatch->glAttachShader(glamor_priv->finish_access_prog[1], + set_alpha_prog); + + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->finish_access_prog[0]); + + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->finish_access_prog[1]); + + glamor_priv->finish_access_revert[0] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "revert"); + + glamor_priv->finish_access_swap_rb[0] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "swap_rb"); + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "sampler"); + dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); + dispatch->glUniform1i(sampler_uniform_location, 0); + dispatch->glUniform1i(glamor_priv->finish_access_revert[0], 0); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); + dispatch->glUseProgram(0); + + glamor_priv->finish_access_revert[1] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "revert"); + glamor_priv->finish_access_swap_rb[1] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "swap_rb"); + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "sampler"); + dispatch->glUseProgram(glamor_priv->finish_access_prog[1]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[1], 0); + dispatch->glUniform1i(sampler_uniform_location, 0); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); } void glamor_fini_finish_access_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->finish_access_prog[0]); - dispatch->glDeleteProgram(glamor_priv->finish_access_prog[1]); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->finish_access_prog[0]); + dispatch->glDeleteProgram(glamor_priv->finish_access_prog[1]); + glamor_put_dispatch(glamor_priv); } void glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(drawable->pScreen); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(drawable->pScreen); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv)) - return; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv)) + return; - if (access_mode != GLAMOR_ACCESS_RO) { - glamor_restore_pixmap_to_texture(pixmap); - } + if (access_mode != GLAMOR_ACCESS_RO) { + glamor_restore_pixmap_to_texture(pixmap); + } - if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) { - glamor_gl_dispatch *dispatch; + if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) { + glamor_gl_dispatch *dispatch; - assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - dispatch->glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo); - glamor_put_dispatch(glamor_priv); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + dispatch->glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo); + glamor_put_dispatch(glamor_priv); - pixmap_priv->base.fbo->pbo_valid = FALSE; - pixmap_priv->base.fbo->pbo = 0; - } else { - free(pixmap->devPrivate.ptr); - } + pixmap_priv->base.fbo->pbo_valid = FALSE; + pixmap_priv->base.fbo->pbo = 0; + } + else { + free(pixmap->devPrivate.ptr); + } - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) - pixmap->devKind = pixmap_priv->base.drm_stride; + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) + pixmap->devKind = pixmap_priv->base.drm_stride; - if (pixmap_priv->base.gl_fbo == GLAMOR_FBO_DOWNLOADED) - pixmap_priv->base.gl_fbo = GLAMOR_FBO_NORMAL; + if (pixmap_priv->base.gl_fbo == GLAMOR_FBO_DOWNLOADED) + pixmap_priv->base.gl_fbo = GLAMOR_FBO_NORMAL; - pixmap->devPrivate.ptr = NULL; + pixmap->devPrivate.ptr = NULL; } - /** * Calls uxa_prepare_access with UXA_PREPARE_SRC for the tile, if that is the * current fill style. @@ -368,22 +352,19 @@ glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) Bool glamor_prepare_access_gc(GCPtr gc) { - if (gc->stipple) { - if (!glamor_prepare_access - (&gc->stipple->drawable, GLAMOR_ACCESS_RO)) - return FALSE; - } - if (gc->fillStyle == FillTiled) { - if (!glamor_prepare_access(&gc->tile.pixmap->drawable, - GLAMOR_ACCESS_RO)) { - if (gc->stipple) - glamor_finish_access(&gc-> - stipple->drawable, - GLAMOR_ACCESS_RO); - return FALSE; - } - } - return TRUE; + if (gc->stipple) { + if (!glamor_prepare_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO)) + return FALSE; + } + if (gc->fillStyle == FillTiled) { + if (!glamor_prepare_access(&gc->tile.pixmap->drawable, + GLAMOR_ACCESS_RO)) { + if (gc->stipple) + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); + return FALSE; + } + } + return TRUE; } /** @@ -392,45 +373,44 @@ glamor_prepare_access_gc(GCPtr gc) void glamor_finish_access_gc(GCPtr gc) { - if (gc->fillStyle == FillTiled) - glamor_finish_access(&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RO); - if (gc->stipple) - glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); + if (gc->fillStyle == FillTiled) + glamor_finish_access(&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RO); + if (gc->stipple) + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); } Bool glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel, unsigned long bg_pixel, - int stipple_x, int stipple_y) + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel, unsigned long bg_pixel, + int stipple_x, int stipple_y) { - glamor_fallback("stubbed out stipple depth %d\n", - pixmap->drawable.depth); - return FALSE; + glamor_fallback("stubbed out stipple depth %d\n", pixmap->drawable.depth); + return FALSE; } GCOps glamor_gc_ops = { - .FillSpans = glamor_fill_spans, - .SetSpans = glamor_set_spans, - .PutImage = glamor_put_image, - .CopyArea = glamor_copy_area, - .CopyPlane = glamor_copy_plane, - .PolyPoint = glamor_poly_point, - .Polylines = glamor_poly_lines, - .PolySegment = glamor_poly_segment, - .PolyRectangle = miPolyRectangle, - .PolyArc = miPolyArc, - .FillPolygon = miFillPolygon, - .PolyFillRect = glamor_poly_fill_rect, - .PolyFillArc = miPolyFillArc, - .PolyText8 = miPolyText8, - .PolyText16 = miPolyText16, - .ImageText8 = miImageText8, - .ImageText16 = miImageText16, - .ImageGlyphBlt = glamor_image_glyph_blt, //miImageGlyphBlt, - .PolyGlyphBlt = glamor_poly_glyph_blt, //miPolyGlyphBlt, - .PushPixels = glamor_push_pixels, //miPushPixels, + .FillSpans = glamor_fill_spans, + .SetSpans = glamor_set_spans, + .PutImage = glamor_put_image, + .CopyArea = glamor_copy_area, + .CopyPlane = glamor_copy_plane, + .PolyPoint = glamor_poly_point, + .Polylines = glamor_poly_lines, + .PolySegment = glamor_poly_segment, + .PolyRectangle = miPolyRectangle, + .PolyArc = miPolyArc, + .FillPolygon = miFillPolygon, + .PolyFillRect = glamor_poly_fill_rect, + .PolyFillArc = miPolyFillArc, + .PolyText8 = miPolyText8, + .PolyText16 = miPolyText16, + .ImageText8 = miImageText8, + .ImageText16 = miImageText16, + .ImageGlyphBlt = glamor_image_glyph_blt, //miImageGlyphBlt, + .PolyGlyphBlt = glamor_poly_glyph_blt, //miPolyGlyphBlt, + .PushPixels = glamor_push_pixels, //miPushPixels, }; /** @@ -440,104 +420,94 @@ GCOps glamor_gc_ops = { void glamor_validate_gc(GCPtr gc, unsigned long changes, DrawablePtr drawable) { - /* fbValidateGC will do direct access to pixmaps if the tiling has changed. - * Preempt fbValidateGC by doing its work and masking the change out, so - * that we can do the Prepare/finish_access. - */ + /* fbValidateGC will do direct access to pixmaps if the tiling has changed. + * Preempt fbValidateGC by doing its work and masking the change out, so + * that we can do the Prepare/finish_access. + */ #ifdef FB_24_32BIT - if ((changes & GCTile) && fbGetRotatedPixmap(gc)) { - gc->pScreen->DestroyPixmap(fbGetRotatedPixmap(gc)); - fbGetRotatedPixmap(gc) = 0; - } - - if (gc->fillStyle == FillTiled) { - PixmapPtr old_tile, new_tile; - - old_tile = gc->tile.pixmap; - if (old_tile->drawable.bitsPerPixel != - drawable->bitsPerPixel) { - new_tile = fbGetRotatedPixmap(gc); - if (!new_tile || - new_tile->drawable.bitsPerPixel != - drawable->bitsPerPixel) { - if (new_tile) - gc->pScreen->DestroyPixmap - (new_tile); - /* fb24_32ReformatTile will do direct access of a newly- - * allocated pixmap. - */ - glamor_fallback - ("GC %p tile FB_24_32 transformat %p.\n", - gc, old_tile); - - if (glamor_prepare_access - (&old_tile->drawable, - GLAMOR_ACCESS_RO)) { - new_tile = - fb24_32ReformatTile - (old_tile, - drawable->bitsPerPixel); - glamor_finish_access - (&old_tile->drawable, GLAMOR_ACCESS_RO); - } - } - if (new_tile) { - fbGetRotatedPixmap(gc) = old_tile; - gc->tile.pixmap = new_tile; - changes |= GCTile; - } - } - } + if ((changes & GCTile) && fbGetRotatedPixmap(gc)) { + gc->pScreen->DestroyPixmap(fbGetRotatedPixmap(gc)); + fbGetRotatedPixmap(gc) = 0; + } + + if (gc->fillStyle == FillTiled) { + PixmapPtr old_tile, new_tile; + + old_tile = gc->tile.pixmap; + if (old_tile->drawable.bitsPerPixel != drawable->bitsPerPixel) { + new_tile = fbGetRotatedPixmap(gc); + if (!new_tile || + new_tile->drawable.bitsPerPixel != drawable->bitsPerPixel) { + if (new_tile) + gc->pScreen->DestroyPixmap(new_tile); + /* fb24_32ReformatTile will do direct access of a newly- + * allocated pixmap. + */ + glamor_fallback + ("GC %p tile FB_24_32 transformat %p.\n", gc, old_tile); + + if (glamor_prepare_access + (&old_tile->drawable, GLAMOR_ACCESS_RO)) { + new_tile = + fb24_32ReformatTile(old_tile, drawable->bitsPerPixel); + glamor_finish_access(&old_tile->drawable, GLAMOR_ACCESS_RO); + } + } + if (new_tile) { + fbGetRotatedPixmap(gc) = old_tile; + gc->tile.pixmap = new_tile; + changes |= GCTile; + } + } + } #endif - if (changes & GCTile) { - if (!gc->tileIsPixel) { - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(gc->tile.pixmap); - if ((!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - && FbEvenTile(gc->tile.pixmap->drawable.width * - drawable->bitsPerPixel)) { - glamor_fallback - ("GC %p tile changed %p.\n", gc, - gc->tile.pixmap); - if (glamor_prepare_access - (&gc->tile.pixmap->drawable, - GLAMOR_ACCESS_RW)) { - fbPadPixmap(gc->tile.pixmap); - glamor_finish_access - (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW); - } - } - } - /* Mask out the GCTile change notification, now that we've done FB's - * job for it. - */ - changes &= ~GCTile; - } - - if (changes & GCStipple && gc->stipple) { - /* We can't inline stipple handling like we do for GCTile because - * it sets fbgc privates. - */ - if (glamor_prepare_access - (&gc->stipple->drawable, GLAMOR_ACCESS_RW)) { - fbValidateGC(gc, changes, drawable); - glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW); - } - } else { - fbValidateGC(gc, changes, drawable); - } - - gc->ops = &glamor_gc_ops; + if (changes & GCTile) { + if (!gc->tileIsPixel) { + glamor_pixmap_private *pixmap_priv = + glamor_get_pixmap_private(gc->tile.pixmap); + if ((!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + && FbEvenTile(gc->tile.pixmap->drawable.width * + drawable->bitsPerPixel)) { + glamor_fallback + ("GC %p tile changed %p.\n", gc, gc->tile.pixmap); + if (glamor_prepare_access + (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW)) { + fbPadPixmap(gc->tile.pixmap); + glamor_finish_access + (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW); + } + } + } + /* Mask out the GCTile change notification, now that we've done FB's + * job for it. + */ + changes &= ~GCTile; + } + + if (changes & GCStipple && gc->stipple) { + /* We can't inline stipple handling like we do for GCTile because + * it sets fbgc privates. + */ + if (glamor_prepare_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW)) { + fbValidateGC(gc, changes, drawable); + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW); + } + } + else { + fbValidateGC(gc, changes, drawable); + } + + gc->ops = &glamor_gc_ops; } static GCFuncs glamor_gc_funcs = { - glamor_validate_gc, - miChangeGC, - miCopyGC, - miDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip + glamor_validate_gc, + miChangeGC, + miCopyGC, + miDestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip }; /** @@ -547,66 +517,69 @@ static GCFuncs glamor_gc_funcs = { int glamor_create_gc(GCPtr gc) { - if (!fbCreateGC(gc)) - return FALSE; + if (!fbCreateGC(gc)) + return FALSE; - gc->funcs = &glamor_gc_funcs; + gc->funcs = &glamor_gc_funcs; - return TRUE; + return TRUE; } RegionPtr glamor_bitmap_to_region(PixmapPtr pixmap) { - RegionPtr ret; - glamor_fallback("pixmap %p \n", pixmap); - if (!glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO)) - return NULL; - ret = fbPixmapToRegion(pixmap); - glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); - return ret; + RegionPtr ret; + + glamor_fallback("pixmap %p \n", pixmap); + if (!glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO)) + return NULL; + ret = fbPixmapToRegion(pixmap); + glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + return ret; } /* Borrow from cairo. */ Bool glamor_gl_has_extension(const char *extension) { - const char *pext; - int ext_len; - ext_len = strlen(extension); + const char *pext; + int ext_len; + + ext_len = strlen(extension); - pext = (const char*)glGetString(GL_EXTENSIONS); + pext = (const char *) glGetString(GL_EXTENSIONS); - if (pext == NULL || extension == NULL) - return FALSE; + if (pext == NULL || extension == NULL) + return FALSE; - while ((pext = strstr(pext, extension)) != NULL) { - if (pext[ext_len] == ' ' || pext[ext_len] == '\0') - return TRUE; - pext += ext_len; - } - return FALSE; + while ((pext = strstr(pext, extension)) != NULL) { + if (pext[ext_len] == ' ' || pext[ext_len] == '\0') + return TRUE; + pext += ext_len; + } + return FALSE; } int glamor_gl_get_version(void) { - int major, minor; - const char *version = (const char *) glGetString(GL_VERSION); - const char *dot = version == NULL ? NULL : strchr(version, '.'); - const char *major_start = dot; - - /* Sanity check */ - if (dot == NULL || dot == version || *(dot + 1) == '\0') { - major = 0; - minor = 0; - } else { - /* Find the start of the major version in the string */ - while (major_start > version && *major_start != ' ') - --major_start; - major = strtol(major_start, NULL, 10); - minor = strtol(dot + 1, NULL, 10); - } - - return GLAMOR_GL_VERSION_ENCODE(major, minor); + int major, minor; + const char *version = (const char *) glGetString(GL_VERSION); + const char *dot = version == NULL ? NULL : strchr(version, '.'); + const char *major_start = dot; + + /* Sanity check */ + if (dot == NULL || dot == version || *(dot + 1) == '\0') { + major = 0; + minor = 0; + } + else { + /* Find the start of the major version in the string */ + while (major_start > version && *major_start != ' ') + --major_start; + major = strtol(major_start, NULL, 10); + minor = strtol(dot + 1, NULL, 10); + } + + return GLAMOR_GL_VERSION_ENCODE(major, minor); } diff --git a/xorg-server/glamor/glamor_debug.h b/xorg-server/glamor/glamor_debug.h index f0c969b11..638bee20c 100644 --- a/xorg-server/glamor/glamor_debug.h +++ b/xorg-server/glamor/glamor_debug.h @@ -29,7 +29,6 @@ #ifndef __GLAMOR_DEBUG_H__ #define __GLAMOR_DEBUG_H__ - #define GLAMOR_DELAYED_STRING_MAX 64 #define GLAMOR_DEBUG_NONE 0 @@ -51,9 +50,6 @@ AbortServer(void) exit(1); \ } while(0) - - - #define __debug_output_message(_format_, _prefix_, ...) \ LogMessageVerb(X_NONE, 0, \ "%32s:\t" _format_ , \ @@ -69,7 +65,6 @@ AbortServer(void) ##__VA_ARGS__); \ } while(0) - #define glamor_fallback(_format_,...) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) \ @@ -77,8 +72,6 @@ AbortServer(void) "Glamor fallback", \ ##__VA_ARGS__);} while(0) - - #define glamor_delayed_fallback(_screen_, _format_,...) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \ @@ -90,7 +83,6 @@ AbortServer(void) "glamor delayed fallback: \t%s " _format_ , \ __FUNCTION__, ##__VA_ARGS__); } } while(0) - #define glamor_clear_delayed_fallbacks(_screen_) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \ @@ -112,5 +104,4 @@ AbortServer(void) #define DEBUGRegionPrint(x) do {} while (0) //#define DEBUGRegionPrint RegionPrint - #endif diff --git a/xorg-server/glamor/glamor_egl.c b/xorg-server/glamor/glamor_egl.c index ff4c0bdd9..2f97a839b 100644 --- a/xorg-server/glamor/glamor_egl.c +++ b/xorg-server/glamor/glamor_egl.c @@ -27,9 +27,7 @@ * */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "dix-config.h" #define GLAMOR_FOR_XORG #include @@ -60,50 +58,45 @@ #include #include "glamor.h" -#include "compat-api.h" #include "glamor_gl_dispatch.h" -#ifdef GLX_USE_SHARED_DISPATCH -#include "glapi.h" -#endif static const char glamor_name[] = "glamor"; static DevPrivateKeyRec glamor_egl_pixmap_private_key_index; -DevPrivateKey glamor_egl_pixmap_private_key = &glamor_egl_pixmap_private_key_index; +DevPrivateKey glamor_egl_pixmap_private_key = + &glamor_egl_pixmap_private_key_index; static void glamor_identify(int flags) { - xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n", - glamor_name); + xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n", + glamor_name); } struct glamor_egl_screen_private { - EGLDisplay display; - EGLContext context; - EGLint major, minor; - - CreateScreenResourcesProcPtr CreateScreenResources; - CloseScreenProcPtr CloseScreen; - int fd; - EGLImageKHR front_image; - PixmapPtr *back_pixmap; - int cpp; + EGLDisplay display; + EGLContext context; + EGLint major, minor; + + CreateScreenResourcesProcPtr CreateScreenResources; + CloseScreenProcPtr CloseScreen; + int fd; + EGLImageKHR front_image; + PixmapPtr *back_pixmap; + int cpp; #ifdef GLAMOR_HAS_GBM - struct gbm_device *gbm; + struct gbm_device *gbm; #endif - int has_gem; - void *glamor_context; - void *current_context; - int gl_context_depth; - int dri3_capable; - - PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr; - PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image_khr; - PFNGLEGLIMAGETARGETTEXTURE2DOESPROC egl_image_target_texture2d_oes; - struct glamor_gl_dispatch *dispatch; - CloseScreenProcPtr saved_close_screen; - xf86FreeScreenProc *saved_free_screen; + int has_gem; + int gl_context_depth; + int dri3_capable; + + PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr; + PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image_khr; + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC egl_image_target_texture2d_oes; + struct glamor_gl_dispatch *dispatch; + CloseScreenProcPtr saved_close_screen; + xf86FreeScreenProc *saved_free_screen; }; int xf86GlamorEGLPrivateIndex = -1; @@ -111,646 +104,625 @@ int xf86GlamorEGLPrivateIndex = -1; static struct glamor_egl_screen_private * glamor_egl_get_screen_private(ScrnInfoPtr scrn) { - return (struct glamor_egl_screen_private *) - scrn->privates[xf86GlamorEGLPrivateIndex].ptr; + return (struct glamor_egl_screen_private *) + scrn->privates[xf86GlamorEGLPrivateIndex].ptr; } -#ifdef GLX_USE_SHARED_DISPATCH + _X_EXPORT void glamor_egl_make_current(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - - if (glamor_egl->gl_context_depth++) - return; - - GET_CURRENT_CONTEXT(glamor_egl->current_context); - - if (glamor_egl->glamor_context != glamor_egl->current_context) { - eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, - EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (!eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - glamor_egl->context)) { - FatalError("Failed to make EGL context current\n"); - } - } + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + + if (glamor_egl->gl_context_depth++) + return; + + if (glamor_egl->context != eglGetCurrentContext()) { + eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (!eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, + glamor_egl->context)) { + FatalError("Failed to make EGL context current\n"); + } + } } _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); - if (--glamor_egl->gl_context_depth) - return; + if (--glamor_egl->gl_context_depth) + return; - if (glamor_egl->current_context && - glamor_egl->glamor_context != glamor_egl->current_context) - SET_CURRENT_CONTEXT(glamor_egl->current_context); + eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); } -#else -#define glamor_egl_make_current(x) -#define glamor_egl_restore_context(s) -#endif static EGLImageKHR _glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl, - int width, int height, int stride, int name, int depth) + int width, int height, int stride, int name, int depth) { - EGLImageKHR image; - EGLint attribs[] = { - EGL_WIDTH, 0, - EGL_HEIGHT, 0, - EGL_DRM_BUFFER_STRIDE_MESA, 0, - EGL_DRM_BUFFER_FORMAT_MESA, - EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, - EGL_DRM_BUFFER_USE_MESA, - EGL_DRM_BUFFER_USE_SHARE_MESA | - EGL_DRM_BUFFER_USE_SCANOUT_MESA, - EGL_NONE - }; - attribs[1] = width; - attribs[3] = height; - attribs[5] = stride; - if (depth != 32 && depth != 24) - return EGL_NO_IMAGE_KHR; - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_DRM_BUFFER_MESA, - (void *) (uintptr_t)name, attribs); - if (image == EGL_NO_IMAGE_KHR) - return EGL_NO_IMAGE_KHR; - - - return image; + EGLImageKHR image; + + EGLint attribs[] = { + EGL_WIDTH, 0, + EGL_HEIGHT, 0, + EGL_DRM_BUFFER_STRIDE_MESA, 0, + EGL_DRM_BUFFER_FORMAT_MESA, + EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, + EGL_DRM_BUFFER_USE_MESA, + EGL_DRM_BUFFER_USE_SHARE_MESA | EGL_DRM_BUFFER_USE_SCANOUT_MESA, + EGL_NONE + }; + attribs[1] = width; + attribs[3] = height; + attribs[5] = stride; + if (depth != 32 && depth != 24) + return EGL_NO_IMAGE_KHR; + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_DRM_BUFFER_MESA, + (void *) (uintptr_t) name, + attribs); + if (image == EGL_NO_IMAGE_KHR) + return EGL_NO_IMAGE_KHR; + + return image; } static int glamor_get_flink_name(int fd, int handle, int *name) { - struct drm_gem_flink flink; - flink.handle = handle; - if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) - return FALSE; - *name = flink.name; - return TRUE; + struct drm_gem_flink flink; + + flink.handle = handle; + if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) + return FALSE; + *name = flink.name; + return TRUE; } static Bool glamor_create_texture_from_image(struct glamor_egl_screen_private - *glamor_egl, - EGLImageKHR image, GLuint * texture) + *glamor_egl, + EGLImageKHR image, GLuint * texture) { - glamor_egl->dispatch->glGenTextures(1, texture); - glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, *texture); - glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - (glamor_egl->egl_image_target_texture2d_oes) (GL_TEXTURE_2D, - image); - glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, 0); - return TRUE; + glamor_egl->dispatch->glGenTextures(1, texture); + glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, *texture); + glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + (glamor_egl->egl_image_target_texture2d_oes) (GL_TEXTURE_2D, image); + glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, 0); + return TRUE; } unsigned int -glamor_egl_create_argb8888_based_texture(ScreenPtr screen, - int w, - int h) +glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + #ifdef GLAMOR_HAS_DRI3_SUPPORT - struct gbm_bo *bo; - EGLNativePixmapType native_pixmap; - glamor_egl = glamor_egl_get_screen_private(scrn); - bo = gbm_bo_create (glamor_egl->gbm, w, h, GBM_FORMAT_ARGB8888, - GBM_BO_USE_RENDERING | - GBM_BO_USE_SCANOUT); - if (!bo) - return 0; - - /* If the following assignment raises an error or a warning - * then that means EGLNativePixmapType is not struct gbm_bo * - * on your platform: This code won't work and you should not - * compile with dri3 support enabled */ - native_pixmap = bo; - - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - EGL_NO_CONTEXT, - EGL_NATIVE_PIXMAP_KHR, - native_pixmap, NULL); - gbm_bo_destroy(bo); - if (image == EGL_NO_IMAGE_KHR) - return 0; - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - - return texture; + struct gbm_bo *bo; + EGLNativePixmapType native_pixmap; + + glamor_egl = glamor_egl_get_screen_private(scrn); + bo = gbm_bo_create(glamor_egl->gbm, w, h, GBM_FORMAT_ARGB8888, + GBM_BO_USE_RENDERING | GBM_BO_USE_SCANOUT); + if (!bo) + return 0; + + /* If the following assignment raises an error or a warning + * then that means EGLNativePixmapType is not struct gbm_bo * + * on your platform: This code won't work and you should not + * compile with dri3 support enabled */ + native_pixmap = bo; + + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + EGL_NO_CONTEXT, + EGL_NATIVE_PIXMAP_KHR, + native_pixmap, NULL); + gbm_bo_destroy(bo); + if (image == EGL_NO_IMAGE_KHR) + return 0; + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + + return texture; #else - return 0; /* this path should never happen */ + return 0; /* this path should never happen */ #endif } Bool glamor_egl_create_textured_screen(ScreenPtr screen, int handle, int stride) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - PixmapPtr screen_pixmap; - - glamor_egl = glamor_egl_get_screen_private(scrn); - screen_pixmap = screen->GetScreenPixmap(screen); - - if (!glamor_egl_create_textured_pixmap(screen_pixmap, handle, stride)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, "Failed to create textured screen."); - return FALSE; - } - - glamor_egl->front_image = dixLookupPrivate(&screen_pixmap->devPrivates, - glamor_egl_pixmap_private_key); - glamor_set_screen_pixmap(screen_pixmap, glamor_egl->back_pixmap); - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + PixmapPtr screen_pixmap; + + glamor_egl = glamor_egl_get_screen_private(scrn); + screen_pixmap = screen->GetScreenPixmap(screen); + + if (!glamor_egl_create_textured_pixmap(screen_pixmap, handle, stride)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Failed to create textured screen."); + return FALSE; + } + + glamor_egl->front_image = dixLookupPrivate(&screen_pixmap->devPrivates, + glamor_egl_pixmap_private_key); + glamor_set_screen_pixmap(screen_pixmap, glamor_egl->back_pixmap); + return TRUE; } Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, - int handle, - int stride, - PixmapPtr *back_pixmap) + int handle, + int stride, PixmapPtr *back_pixmap) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; - glamor_egl = glamor_egl_get_screen_private(scrn); + glamor_egl = glamor_egl_get_screen_private(scrn); - glamor_egl->back_pixmap = back_pixmap; - if (!glamor_egl_create_textured_screen(screen, handle, stride)) - return FALSE; - return TRUE; + glamor_egl->back_pixmap = back_pixmap; + if (!glamor_egl_create_textured_screen(screen, handle, stride)) + return FALSE; + return TRUE; } static Bool glamor_egl_check_has_gem(int fd) { - struct drm_gem_flink flink; - flink.handle = 0; + struct drm_gem_flink flink; - ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink); - if (errno == ENOENT || errno == EINVAL) - return TRUE; - return FALSE; + flink.handle = 0; + + ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink); + if (errno == ENOENT || errno == EINVAL) + return TRUE; + return FALSE; } Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride) { - ScreenPtr screen = pixmap->drawable.pScreen; - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; - int name; - Bool ret = FALSE; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - if (glamor_egl->has_gem) { - if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Couldn't flink pixmap handle\n"); - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - assert(0); - return FALSE; - } - } else - name = handle; - - image = _glamor_egl_create_image(glamor_egl, - pixmap->drawable.width, - pixmap->drawable.height, - ((stride * 8 + 7) / pixmap->drawable.bitsPerPixel), - name, - pixmap->drawable.depth); - if (image == EGL_NO_IMAGE_KHR) { - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - goto done; - } - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_texture(pixmap, texture); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, - image); - ret = TRUE; - -done: - glamor_egl_restore_context(screen); - return ret; + ScreenPtr screen = pixmap->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + int name; + Bool ret = FALSE; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + if (glamor_egl->has_gem) { + if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't flink pixmap handle\n"); + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + assert(0); + return FALSE; + } + } + else + name = handle; + + image = _glamor_egl_create_image(glamor_egl, + pixmap->drawable.width, + pixmap->drawable.height, + ((stride * 8 + + 7) / pixmap->drawable.bitsPerPixel), + name, pixmap->drawable.depth); + if (image == EGL_NO_IMAGE_KHR) { + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + goto done; + } + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_texture(pixmap, texture); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, image); + ret = TRUE; + + done: + glamor_egl_restore_context(screen); + return ret; } Bool glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo) { - ScreenPtr screen = pixmap->drawable.pScreen; - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; - Bool ret = FALSE; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_NATIVE_PIXMAP_KHR, - bo, NULL); - if (image == EGL_NO_IMAGE_KHR) { - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - goto done; - } - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_texture(pixmap, texture); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, - image); - ret = TRUE; - -done: - glamor_egl_restore_context(screen); - return ret; + ScreenPtr screen = pixmap->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + Bool ret = FALSE; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_NATIVE_PIXMAP_KHR, bo, NULL); + if (image == EGL_NO_IMAGE_KHR) { + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + goto done; + } + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_texture(pixmap, texture); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, image); + ret = TRUE; + + done: + glamor_egl_restore_context(screen); + return ret; } #ifdef GLAMOR_HAS_DRI3_SUPPORT -int glamor_get_fd_from_bo (int gbm_fd, struct gbm_bo *bo, int *fd); -void glamor_get_name_from_bo (int gbm_fd, struct gbm_bo *bo, int *name); +int glamor_get_fd_from_bo(int gbm_fd, struct gbm_bo *bo, int *fd); +void glamor_get_name_from_bo(int gbm_fd, struct gbm_bo *bo, int *name); int -glamor_get_fd_from_bo (int gbm_fd, struct gbm_bo *bo, int *fd) +glamor_get_fd_from_bo(int gbm_fd, struct gbm_bo *bo, int *fd) { - union gbm_bo_handle handle; - struct drm_prime_handle args; - - handle = gbm_bo_get_handle(bo); - args.handle = handle.u32; - args.flags = DRM_CLOEXEC; - if (ioctl (gbm_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args)) - return FALSE; - *fd = args.fd; - return TRUE; + union gbm_bo_handle handle; + struct drm_prime_handle args; + + handle = gbm_bo_get_handle(bo); + args.handle = handle.u32; + args.flags = DRM_CLOEXEC; + if (ioctl(gbm_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args)) + return FALSE; + *fd = args.fd; + return TRUE; } void -glamor_get_name_from_bo (int gbm_fd, struct gbm_bo *bo, int *name) +glamor_get_name_from_bo(int gbm_fd, struct gbm_bo *bo, int *name) { - union gbm_bo_handle handle; + union gbm_bo_handle handle; - handle = gbm_bo_get_handle(bo); - if (!glamor_get_flink_name(gbm_fd, handle.u32, name)) - *name = -1; + handle = gbm_bo_get_handle(bo); + if (!glamor_get_flink_name(gbm_fd, handle.u32, name)) + *name = -1; } #endif -int glamor_egl_dri3_fd_name_from_tex (ScreenPtr screen, - PixmapPtr pixmap, - unsigned int tex, - Bool want_name, - CARD16 *stride, - CARD32 *size) +int +glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen, + PixmapPtr pixmap, + unsigned int tex, + Bool want_name, CARD16 *stride, CARD32 *size) { #ifdef GLAMOR_HAS_DRI3_SUPPORT - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - struct gbm_bo* bo; - int fd = -1; - - EGLint attribs[] = { - EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, - EGL_GL_TEXTURE_LEVEL_KHR, 0, - EGL_NONE - }; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - - image = dixLookupPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key); - - if (image == EGL_NO_IMAGE_KHR || image == NULL) - { - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_GL_TEXTURE_2D_KHR, - (EGLClientBuffer)(uintptr_t)tex, attribs); - if (image == EGL_NO_IMAGE_KHR) - goto failure; - - dixSetPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key, - image); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - } - - bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); - if (!bo) - goto failure; - - pixmap->devKind = gbm_bo_get_stride(bo); - - if (want_name) - { - if (glamor_egl->has_gem) - glamor_get_name_from_bo(glamor_egl->fd, bo, &fd); - } - else - { - if (glamor_get_fd_from_bo(glamor_egl->fd, bo, &fd)) - { - *stride = pixmap->devKind; - *size = pixmap->devKind * gbm_bo_get_height(bo); - } - } - - gbm_bo_destroy(bo); -failure: - glamor_egl_restore_context(screen); - return fd; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + struct gbm_bo *bo; + int fd = -1; + + EGLint attribs[] = { + EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, + EGL_GL_TEXTURE_LEVEL_KHR, 0, + EGL_NONE + }; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + + image = dixLookupPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key); + + if (image == EGL_NO_IMAGE_KHR || image == NULL) { + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_GL_TEXTURE_2D_KHR, + (EGLClientBuffer) (uintptr_t) + tex, attribs); + if (image == EGL_NO_IMAGE_KHR) + goto failure; + + dixSetPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key, image); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + } + + bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); + if (!bo) + goto failure; + + pixmap->devKind = gbm_bo_get_stride(bo); + + if (want_name) { + if (glamor_egl->has_gem) + glamor_get_name_from_bo(glamor_egl->fd, bo, &fd); + } + else { + if (glamor_get_fd_from_bo(glamor_egl->fd, bo, &fd)) { + *stride = pixmap->devKind; + *size = pixmap->devKind * gbm_bo_get_height(bo); + } + } + + gbm_bo_destroy(bo); + failure: + glamor_egl_restore_context(screen); + return fd; #else - return -1; + return -1; #endif } -PixmapPtr glamor_egl_dri3_pixmap_from_fd (ScreenPtr screen, - int fd, - CARD16 width, - CARD16 height, - CARD16 stride, - CARD8 depth, - CARD8 bpp) +PixmapPtr +glamor_egl_dri3_pixmap_from_fd(ScreenPtr screen, + int fd, + CARD16 width, + CARD16 height, + CARD16 stride, CARD8 depth, CARD8 bpp) { #ifdef GLAMOR_HAS_DRI3_SUPPORT - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - struct gbm_bo* bo; - EGLImageKHR image; - PixmapPtr pixmap; - Bool ret = FALSE; - EGLint attribs[] = { - EGL_WIDTH, 0, - EGL_HEIGHT, 0, - EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888, - EGL_DMA_BUF_PLANE0_FD_EXT, 0, - EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, - EGL_DMA_BUF_PLANE0_PITCH_EXT, 0, - EGL_NONE - }; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - if (!glamor_egl->dri3_capable) - return NULL; - - if (bpp != 32 || !(depth == 24 || depth == 32) || width == 0 || height == 0) - return NULL; - - attribs[1] = width; - attribs[3] = height; - attribs[7] = fd; - attribs[11] = stride; - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - EGL_NO_CONTEXT, - EGL_LINUX_DMA_BUF_EXT, - NULL, attribs); - - if (image == EGL_NO_IMAGE_KHR) - return NULL; - - /* EGL_EXT_image_dma_buf_import can impose restrictions on the - * usage of the image. Use gbm_bo to bypass the limitations. */ - - bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - - if (!bo) - return NULL; - - pixmap = screen->CreatePixmap(screen, 0, 0, depth, 0); - screen->ModifyPixmapHeader (pixmap, width, height, 0, 0, stride, NULL); - - ret = glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, bo); - gbm_bo_destroy(bo); - - if (ret) - return pixmap; - else - { - screen->DestroyPixmap(pixmap); - return NULL; - } + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + struct gbm_bo *bo; + EGLImageKHR image; + PixmapPtr pixmap; + Bool ret = FALSE; + + EGLint attribs[] = { + EGL_WIDTH, 0, + EGL_HEIGHT, 0, + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888, + EGL_DMA_BUF_PLANE0_FD_EXT, 0, + EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, + EGL_DMA_BUF_PLANE0_PITCH_EXT, 0, + EGL_NONE + }; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + if (!glamor_egl->dri3_capable) + return NULL; + + if (bpp != 32 || !(depth == 24 || depth == 32) || width == 0 || height == 0) + return NULL; + + attribs[1] = width; + attribs[3] = height; + attribs[7] = fd; + attribs[11] = stride; + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + EGL_NO_CONTEXT, + EGL_LINUX_DMA_BUF_EXT, + NULL, attribs); + + if (image == EGL_NO_IMAGE_KHR) + return NULL; + + /* EGL_EXT_image_dma_buf_import can impose restrictions on the + * usage of the image. Use gbm_bo to bypass the limitations. */ + + bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + + if (!bo) + return NULL; + + pixmap = screen->CreatePixmap(screen, 0, 0, depth, 0); + screen->ModifyPixmapHeader(pixmap, width, height, 0, 0, stride, NULL); + + ret = glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, bo); + gbm_bo_destroy(bo); + + if (ret) + return pixmap; + else { + screen->DestroyPixmap(pixmap); + return NULL; + } #else - return NULL; + return NULL; #endif } static void _glamor_egl_destroy_pixmap_image(PixmapPtr pixmap) { - ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); - EGLImageKHR image; - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - - image = dixLookupPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key); - if (image != EGL_NO_IMAGE_KHR && image != NULL) { - /* Before destroy an image which was attached to - * a texture. we must call glFlush to make sure the - * operation on that texture has been done.*/ - glamor_block_handler(pixmap->drawable.pScreen); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, NULL); - } + ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); + EGLImageKHR image; + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + + image = dixLookupPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key); + if (image != EGL_NO_IMAGE_KHR && image != NULL) { + /* Before destroy an image which was attached to + * a texture. we must call glFlush to make sure the + * operation on that texture has been done.*/ + glamor_block_handler(pixmap->drawable.pScreen); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, + NULL); + } } _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back) { - ScrnInfoPtr scrn = xf86ScreenToScrn(front->drawable.pScreen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - EGLImageKHR old_front_image; - EGLImageKHR new_front_image; - - glamor_pixmap_exchange_fbos(front, back); - new_front_image = dixLookupPrivate(&back->devPrivates, glamor_egl_pixmap_private_key); - old_front_image = dixLookupPrivate(&front->devPrivates, glamor_egl_pixmap_private_key); - dixSetPrivate(&front->devPrivates, glamor_egl_pixmap_private_key, new_front_image); - dixSetPrivate(&back->devPrivates, glamor_egl_pixmap_private_key, old_front_image); - glamor_set_pixmap_type(front, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_type(back, GLAMOR_TEXTURE_DRM); - glamor_egl->front_image = new_front_image; + ScrnInfoPtr scrn = xf86ScreenToScrn(front->drawable.pScreen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + EGLImageKHR old_front_image; + EGLImageKHR new_front_image; + + glamor_pixmap_exchange_fbos(front, back); + new_front_image = + dixLookupPrivate(&back->devPrivates, glamor_egl_pixmap_private_key); + old_front_image = + dixLookupPrivate(&front->devPrivates, glamor_egl_pixmap_private_key); + dixSetPrivate(&front->devPrivates, glamor_egl_pixmap_private_key, + new_front_image); + dixSetPrivate(&back->devPrivates, glamor_egl_pixmap_private_key, + old_front_image); + glamor_set_pixmap_type(front, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_type(back, GLAMOR_TEXTURE_DRM); + glamor_egl->front_image = new_front_image; } void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap) { - if (pixmap->refcnt == 1) - _glamor_egl_destroy_pixmap_image(pixmap); - glamor_destroy_textured_pixmap(pixmap); + if (pixmap->refcnt == 1) + _glamor_egl_destroy_pixmap_image(pixmap); + glamor_destroy_textured_pixmap(pixmap); } static Bool -glamor_egl_close_screen(CLOSE_SCREEN_ARGS_DECL) +glamor_egl_close_screen(ScreenPtr screen) { - ScrnInfoPtr scrn; - struct glamor_egl_screen_private *glamor_egl; - PixmapPtr screen_pixmap; - EGLImageKHR back_image; - - scrn = xf86ScreenToScrn(screen); - glamor_egl = glamor_egl_get_screen_private(scrn); - screen_pixmap = screen->GetScreenPixmap(screen); - - glamor_egl->egl_destroy_image_khr(glamor_egl->display, glamor_egl->front_image); - dixSetPrivate(&screen_pixmap->devPrivates, glamor_egl_pixmap_private_key, NULL); - glamor_egl->front_image = NULL; - if (glamor_egl->back_pixmap && *glamor_egl->back_pixmap) { - back_image = dixLookupPrivate(&(*glamor_egl->back_pixmap)->devPrivates, - glamor_egl_pixmap_private_key); - if (back_image != NULL && back_image != EGL_NO_IMAGE_KHR) { - glamor_egl->egl_destroy_image_khr(glamor_egl->display, back_image); - dixSetPrivate(&(*glamor_egl->back_pixmap)->devPrivates, - glamor_egl_pixmap_private_key, NULL); - } - } - - screen->CloseScreen = glamor_egl->saved_close_screen; - - return screen->CloseScreen(CLOSE_SCREEN_ARGS); + ScrnInfoPtr scrn; + struct glamor_egl_screen_private *glamor_egl; + PixmapPtr screen_pixmap; + EGLImageKHR back_image; + + scrn = xf86ScreenToScrn(screen); + glamor_egl = glamor_egl_get_screen_private(scrn); + screen_pixmap = screen->GetScreenPixmap(screen); + + glamor_egl->egl_destroy_image_khr(glamor_egl->display, + glamor_egl->front_image); + dixSetPrivate(&screen_pixmap->devPrivates, glamor_egl_pixmap_private_key, + NULL); + glamor_egl->front_image = NULL; + if (glamor_egl->back_pixmap && *glamor_egl->back_pixmap) { + back_image = dixLookupPrivate(&(*glamor_egl->back_pixmap)->devPrivates, + glamor_egl_pixmap_private_key); + if (back_image != NULL && back_image != EGL_NO_IMAGE_KHR) { + glamor_egl->egl_destroy_image_khr(glamor_egl->display, back_image); + dixSetPrivate(&(*glamor_egl->back_pixmap)->devPrivates, + glamor_egl_pixmap_private_key, NULL); + } + } + + screen->CloseScreen = glamor_egl->saved_close_screen; + + return screen->CloseScreen(screen); } static Bool glamor_egl_has_extension(struct glamor_egl_screen_private *glamor_egl, - const char *extension) + const char *extension) { - const char *pext; - int ext_len; - - ext_len = strlen(extension); - pext = - (const char *) eglQueryString(glamor_egl->display, - EGL_EXTENSIONS); - if (pext == NULL || extension == NULL) - return FALSE; - while ((pext = strstr(pext, extension)) != NULL) { - if (pext[ext_len] == ' ' || pext[ext_len] == '\0') - return TRUE; - pext += ext_len; - } - return FALSE; + const char *pext; + int ext_len; + + ext_len = strlen(extension); + pext = (const char *) eglQueryString(glamor_egl->display, EGL_EXTENSIONS); + if (pext == NULL || extension == NULL) + return FALSE; + while ((pext = strstr(pext, extension)) != NULL) { + if (pext[ext_len] == ' ' || pext[ext_len] == '\0') + return TRUE; + pext += ext_len; + } + return FALSE; } void glamor_egl_screen_init(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); - glamor_egl->saved_close_screen = screen->CloseScreen; - screen->CloseScreen = glamor_egl_close_screen; + glamor_egl->saved_close_screen = screen->CloseScreen; + screen->CloseScreen = glamor_egl_close_screen; } static void -glamor_egl_free_screen(FREE_SCREEN_ARGS_DECL) +glamor_egl_free_screen(ScrnInfoPtr scrn) { - ScrnInfoPtr scrn; - struct glamor_egl_screen_private *glamor_egl; -#ifndef XF86_SCRN_INTERFACE - scrn = xf86Screens[arg]; -#else - scrn = arg; -#endif + struct glamor_egl_screen_private *glamor_egl; - glamor_egl = glamor_egl_get_screen_private(scrn); - if (glamor_egl != NULL) { + glamor_egl = glamor_egl_get_screen_private(scrn); + if (glamor_egl != NULL) { - eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - EGL_NO_CONTEXT); + eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); #ifdef GLAMOR_HAS_GBM - if (glamor_egl->gbm) - gbm_device_destroy(glamor_egl->gbm); + if (glamor_egl->gbm) + gbm_device_destroy(glamor_egl->gbm); #endif - scrn->FreeScreen = glamor_egl->saved_free_screen; - free(glamor_egl); - scrn->FreeScreen(FREE_SCREEN_ARGS); - } + scrn->FreeScreen = glamor_egl->saved_free_screen; + free(glamor_egl); + scrn->FreeScreen(scrn); + } } Bool glamor_egl_init(ScrnInfoPtr scrn, int fd) { - struct glamor_egl_screen_private *glamor_egl; - const char *version; - EGLint config_attribs[] = { + struct glamor_egl_screen_private *glamor_egl; + const char *version; + + EGLint config_attribs[] = { #ifdef GLAMOR_GLES2 - EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_CONTEXT_CLIENT_VERSION, 2, #endif - EGL_NONE - }; - - glamor_identify(0); - glamor_egl = calloc(sizeof(*glamor_egl), 1); - if (glamor_egl == NULL) - return FALSE; - if (xf86GlamorEGLPrivateIndex == -1) - xf86GlamorEGLPrivateIndex = - xf86AllocateScrnInfoPrivateIndex(); - - scrn->privates[xf86GlamorEGLPrivateIndex].ptr = glamor_egl; - glamor_egl->fd = fd; + EGL_NONE + }; + + glamor_identify(0); + glamor_egl = calloc(sizeof(*glamor_egl), 1); + if (glamor_egl == NULL) + return FALSE; + if (xf86GlamorEGLPrivateIndex == -1) + xf86GlamorEGLPrivateIndex = xf86AllocateScrnInfoPrivateIndex(); + + scrn->privates[xf86GlamorEGLPrivateIndex].ptr = glamor_egl; + glamor_egl->fd = fd; #ifdef GLAMOR_HAS_GBM - glamor_egl->gbm = gbm_create_device(glamor_egl->fd); - if (glamor_egl->gbm == NULL) { - ErrorF("couldn't get display device\n"); - return FALSE; - } - glamor_egl->display = eglGetDisplay(glamor_egl->gbm); + glamor_egl->gbm = gbm_create_device(glamor_egl->fd); + if (glamor_egl->gbm == NULL) { + ErrorF("couldn't get display device\n"); + return FALSE; + } + glamor_egl->display = eglGetDisplay(glamor_egl->gbm); #else - glamor_egl->display = eglGetDisplay((EGLNativeDisplayType)(intptr_t)fd); + glamor_egl->display = eglGetDisplay((EGLNativeDisplayType) (intptr_t) fd); #endif - glamor_egl->has_gem = glamor_egl_check_has_gem(fd); + glamor_egl->has_gem = glamor_egl_check_has_gem(fd); #ifndef GLAMOR_GLES2 - eglBindAPI(EGL_OPENGL_API); + eglBindAPI(EGL_OPENGL_API); #else - eglBindAPI(EGL_OPENGL_ES_API); + eglBindAPI(EGL_OPENGL_ES_API); #endif - if (!eglInitialize - (glamor_egl->display, &glamor_egl->major, &glamor_egl->minor)) - { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "eglInitialize() failed\n"); - return FALSE; - } + if (!eglInitialize + (glamor_egl->display, &glamor_egl->major, &glamor_egl->minor)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglInitialize() failed\n"); + return FALSE; + } - version = eglQueryString(glamor_egl->display, EGL_VERSION); - xf86Msg(X_INFO, "%s: EGL version %s:\n", glamor_name, version); + version = eglQueryString(glamor_egl->display, EGL_VERSION); + xf86Msg(X_INFO, "%s: EGL version %s:\n", glamor_name, version); #define GLAMOR_CHECK_EGL_EXTENSION(EXT) \ if (!glamor_egl_has_extension(glamor_egl, "EGL_" #EXT)) { \ @@ -765,96 +737,89 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) return FALSE; \ } - GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image); - GLAMOR_CHECK_EGL_EXTENSION(KHR_gl_renderbuffer_image); + GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image); + GLAMOR_CHECK_EGL_EXTENSION(KHR_gl_renderbuffer_image); #ifdef GLAMOR_GLES2 - GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_gles2); + GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_gles2); #else - GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_opengl); + GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, + KHR_surfaceless_opengl); #endif #ifdef GLAMOR_HAS_DRI3_SUPPORT - if (glamor_egl_has_extension(glamor_egl, "EGL_KHR_gl_texture_2D_image") && - glamor_egl_has_extension(glamor_egl, "EGL_EXT_image_dma_buf_import") ) - glamor_egl->dri3_capable = TRUE; + if (glamor_egl_has_extension(glamor_egl, "EGL_KHR_gl_texture_2D_image") && + glamor_egl_has_extension(glamor_egl, "EGL_EXT_image_dma_buf_import")) + glamor_egl->dri3_capable = TRUE; #endif - glamor_egl->egl_create_image_khr = (PFNEGLCREATEIMAGEKHRPROC) - eglGetProcAddress("eglCreateImageKHR"); - - glamor_egl->egl_destroy_image_khr = (PFNEGLDESTROYIMAGEKHRPROC) - eglGetProcAddress("eglDestroyImageKHR"); - - glamor_egl->egl_image_target_texture2d_oes = - (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) - eglGetProcAddress("glEGLImageTargetTexture2DOES"); - - if (!glamor_egl->egl_create_image_khr - || !glamor_egl->egl_image_target_texture2d_oes) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "eglGetProcAddress() failed\n"); - return FALSE; - } - - glamor_egl->context = eglCreateContext(glamor_egl->display, - NULL, EGL_NO_CONTEXT, - config_attribs); - if (glamor_egl->context == EGL_NO_CONTEXT) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Failed to create EGL context\n"); - return FALSE; - } - - if (!eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - glamor_egl->context)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Failed to make EGL context current\n"); - return FALSE; - } -#ifdef GLX_USE_SHARED_DISPATCH - GET_CURRENT_CONTEXT(glamor_egl->glamor_context); -#endif - glamor_egl->saved_free_screen = scrn->FreeScreen; - scrn->FreeScreen = glamor_egl_free_screen; + glamor_egl->egl_create_image_khr = (PFNEGLCREATEIMAGEKHRPROC) + eglGetProcAddress("eglCreateImageKHR"); + + glamor_egl->egl_destroy_image_khr = (PFNEGLDESTROYIMAGEKHRPROC) + eglGetProcAddress("eglDestroyImageKHR"); + + glamor_egl->egl_image_target_texture2d_oes = + (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) + eglGetProcAddress("glEGLImageTargetTexture2DOES"); + + if (!glamor_egl->egl_create_image_khr + || !glamor_egl->egl_image_target_texture2d_oes) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglGetProcAddress() failed\n"); + return FALSE; + } + + glamor_egl->context = eglCreateContext(glamor_egl->display, + NULL, EGL_NO_CONTEXT, + config_attribs); + if (glamor_egl->context == EGL_NO_CONTEXT) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "Failed to create EGL context\n"); + return FALSE; + } + + if (!eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, glamor_egl->context)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Failed to make EGL context current\n"); + return FALSE; + } + glamor_egl->saved_free_screen = scrn->FreeScreen; + scrn->FreeScreen = glamor_egl_free_screen; #ifdef GLAMOR_GLES2 - xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n"); -#ifdef GLX_USE_SHARED_DISPATCH - xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Glamor is using GLES2 but GLX needs GL. " - "Indirect GLX may not work correctly.\n"); + xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n"); + xf86DrvMsg(scrn->scrnIndex, X_WARNING, + "Glamor is using GLES2 but GLX needs GL. " + "Indirect GLX may not work correctly.\n"); #endif -#endif - return TRUE; + return TRUE; } Bool glamor_egl_init_textured_pixmap(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - if (!dixRegisterPrivateKey - (glamor_egl_pixmap_private_key, PRIVATE_PIXMAP, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate egl pixmap private\n", - screen->myNum); - return FALSE; - } - if (glamor_egl->dri3_capable) - glamor_enable_dri3(screen); - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + if (!dixRegisterPrivateKey + (glamor_egl_pixmap_private_key, PRIVATE_PIXMAP, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate egl pixmap private\n", + screen->myNum); + return FALSE; + } + if (glamor_egl->dri3_capable) + glamor_enable_dri3(screen); + return TRUE; } Bool glamor_gl_dispatch_init(ScreenPtr screen, - struct glamor_gl_dispatch *dispatch, - int gl_version) + struct glamor_gl_dispatch *dispatch, int gl_version) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - if (!glamor_gl_dispatch_init_impl - (dispatch, gl_version, (get_proc_address_t)eglGetProcAddress)) - return FALSE; - glamor_egl->dispatch = dispatch; - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + if (!glamor_gl_dispatch_init_impl + (dispatch, gl_version, (get_proc_address_t) eglGetProcAddress)) + return FALSE; + glamor_egl->dispatch = dispatch; + return TRUE; } diff --git a/xorg-server/glamor/glamor_egl_stubs.c b/xorg-server/glamor/glamor_egl_stubs.c new file mode 100644 index 000000000..1449d0874 --- /dev/null +++ b/xorg-server/glamor/glamor_egl_stubs.c @@ -0,0 +1,64 @@ +/* + * 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 glamor_egl_stubs.c + * + * Stubbed out glamor_egl.c functions for servers other than Xorg. + */ + +#include "glamor_priv.h" + +void +glamor_egl_screen_init(ScreenPtr screen) +{ +} + +void +glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap) +{ +} + +void +glamor_egl_make_current(ScreenPtr screen) +{ +} + +void +glamor_egl_restore_context(ScreenPtr screen) +{ +} + +int +glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen, + PixmapPtr pixmap, + unsigned int tex, + Bool want_name, CARD16 *stride, CARD32 *size) +{ + return 0; +} + +unsigned int +glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h) +{ + return 0; +} diff --git a/xorg-server/glamor/glamor_eglmodule.c b/xorg-server/glamor/glamor_eglmodule.c index 9a0dec9f2..5ddd60235 100644 --- a/xorg-server/glamor/glamor_eglmodule.c +++ b/xorg-server/glamor/glamor_eglmodule.c @@ -27,9 +27,7 @@ * Zhigang Gong */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "dix-config.h" #include #define GLAMOR_FOR_XORG @@ -37,16 +35,16 @@ #include "glamor.h" static XF86ModuleVersionInfo VersRec = { - GLAMOR_EGL_MODULE_NAME, - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XORG_VERSION_CURRENT, - PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL, - ABI_CLASS_ANSIC, /* Only need the ansic layer */ - ABI_ANSIC_VERSION, - MOD_CLASS_NONE, - {0, 0, 0, 0} /* signature, to be patched into the file by a tool */ + GLAMOR_EGL_MODULE_NAME, + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL, + ABI_CLASS_ANSIC, /* Only need the ansic layer */ + ABI_ANSIC_VERSION, + MOD_CLASS_NONE, + {0, 0, 0, 0} /* signature, to be patched into the file by a tool */ }; _X_EXPORT XF86ModuleData glamoreglModuleData = { &VersRec, NULL, NULL }; diff --git a/xorg-server/glamor/glamor_fbo.c b/xorg-server/glamor/glamor_fbo.c index d1b087ebe..d94e53071 100644 --- a/xorg-server/glamor/glamor_fbo.c +++ b/xorg-server/glamor/glamor_fbo.c @@ -44,547 +44,552 @@ &pos->member != (head); \ pos = __container_of(pos->member.prev, pos, member)) - #define xorg_list_for_each_entry_safe_reverse(pos, tmp, head, member) \ for (pos = __container_of((head)->prev, pos, member), \ tmp = __container_of(pos->member.prev, pos, member); \ &pos->member != (head); \ pos = tmp, tmp = __container_of(pos->member.prev, tmp, member)) -inline static int cache_wbucket(int size) +inline static int +cache_wbucket(int size) { - int order = __fls(size / 32); - if (order >= CACHE_BUCKET_WCOUNT) - order = CACHE_BUCKET_WCOUNT - 1; - return order; + int order = __fls(size / 32); + + if (order >= CACHE_BUCKET_WCOUNT) + order = CACHE_BUCKET_WCOUNT - 1; + return order; } -inline static int cache_hbucket(int size) +inline static int +cache_hbucket(int size) { - int order = __fls(size / 32); - if (order >= CACHE_BUCKET_HCOUNT) - order = CACHE_BUCKET_HCOUNT - 1; - return order; + int order = __fls(size / 32); + + if (order >= CACHE_BUCKET_HCOUNT) + order = CACHE_BUCKET_HCOUNT - 1; + return order; } static glamor_pixmap_fbo * glamor_pixmap_fbo_cache_get(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag) + int w, int h, GLenum format, int flag) { - struct xorg_list *cache; - glamor_pixmap_fbo *fbo_entry, *ret_fbo = NULL; - int n_format; + struct xorg_list *cache; + glamor_pixmap_fbo *fbo_entry, *ret_fbo = NULL; + int n_format; + #ifdef NO_FBO_CACHE - return NULL; + return NULL; #else - n_format = cache_format(format); - if (n_format == -1) - return NULL; - cache = &glamor_priv->fbo_cache[n_format] - [cache_wbucket(w)] - [cache_hbucket(h)]; - if (!(flag & GLAMOR_CACHE_EXACT_SIZE)) { - xorg_list_for_each_entry(fbo_entry, cache, list) { - if (fbo_entry->width >= w && fbo_entry->height >= h) { - - DEBUGF("Request w %d h %d format %x \n", w, h, format); - DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", - fbo_entry, fbo_entry->width, fbo_entry->height, - fbo_entry->fb, fbo_entry->tex); - xorg_list_del(&fbo_entry->list); - ret_fbo = fbo_entry; - break; - } - } - } - else { - xorg_list_for_each_entry(fbo_entry, cache, list) { - if (fbo_entry->width == w && fbo_entry->height == h) { - - DEBUGF("Request w %d h %d format %x \n", w, h, format); - DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", - fbo_entry, fbo_entry->width, fbo_entry->height, - fbo_entry->fb, fbo_entry->tex, fbo_entry->format); - assert(format == fbo_entry->format); - xorg_list_del(&fbo_entry->list); - ret_fbo = fbo_entry; - break; - } - } - } - - if (ret_fbo) - glamor_priv->fbo_cache_watermark -= ret_fbo->width * ret_fbo->height; - - assert(glamor_priv->fbo_cache_watermark >= 0); - - return ret_fbo; + n_format = cache_format(format); + if (n_format == -1) + return NULL; + cache = &glamor_priv->fbo_cache[n_format] + [cache_wbucket(w)] + [cache_hbucket(h)]; + if (!(flag & GLAMOR_CACHE_EXACT_SIZE)) { + xorg_list_for_each_entry(fbo_entry, cache, list) { + if (fbo_entry->width >= w && fbo_entry->height >= h) { + + DEBUGF("Request w %d h %d format %x \n", w, h, format); + DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", + fbo_entry, fbo_entry->width, fbo_entry->height, + fbo_entry->fb, fbo_entry->tex); + xorg_list_del(&fbo_entry->list); + ret_fbo = fbo_entry; + break; + } + } + } + else { + xorg_list_for_each_entry(fbo_entry, cache, list) { + if (fbo_entry->width == w && fbo_entry->height == h) { + + DEBUGF("Request w %d h %d format %x \n", w, h, format); + DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", + fbo_entry, fbo_entry->width, fbo_entry->height, + fbo_entry->fb, fbo_entry->tex, fbo_entry->format); + assert(format == fbo_entry->format); + xorg_list_del(&fbo_entry->list); + ret_fbo = fbo_entry; + break; + } + } + } + + if (ret_fbo) + glamor_priv->fbo_cache_watermark -= ret_fbo->width * ret_fbo->height; + + assert(glamor_priv->fbo_cache_watermark >= 0); + + return ret_fbo; #endif } void glamor_purge_fbo(glamor_pixmap_fbo *fbo) { - glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); - if (fbo->fb) - dispatch->glDeleteFramebuffers(1, &fbo->fb); - if (fbo->tex) - dispatch->glDeleteTextures(1, &fbo->tex); - if (fbo->pbo) - dispatch->glDeleteBuffers(1, &fbo->pbo); - glamor_put_dispatch(fbo->glamor_priv); - - free(fbo); + glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); + + if (fbo->fb) + dispatch->glDeleteFramebuffers(1, &fbo->fb); + if (fbo->tex) + dispatch->glDeleteTextures(1, &fbo->tex); + if (fbo->pbo) + dispatch->glDeleteBuffers(1, &fbo->pbo); + glamor_put_dispatch(fbo->glamor_priv); + + free(fbo); } static void glamor_pixmap_fbo_cache_put(glamor_pixmap_fbo *fbo) { - struct xorg_list *cache; - int n_format; + struct xorg_list *cache; + int n_format; #ifdef NO_FBO_CACHE - glamor_purge_fbo(fbo); - return; + glamor_purge_fbo(fbo); + return; #else - n_format = cache_format(fbo->format); - - if (fbo->fb == 0 || n_format == -1 - || fbo->glamor_priv->fbo_cache_watermark >= FBO_CACHE_THRESHOLD) { - fbo->glamor_priv->tick += GLAMOR_CACHE_EXPIRE_MAX; - glamor_fbo_expire(fbo->glamor_priv); - glamor_purge_fbo(fbo); - return; - } - - cache = &fbo->glamor_priv->fbo_cache[n_format] - [cache_wbucket(fbo->width)] - [cache_hbucket(fbo->height)]; - DEBUGF("Put cache entry %p to cache %p w %d h %d format %x fbo %d tex %d \n", fbo, cache, - fbo->width, fbo->height, fbo->format, fbo->fb, fbo->tex); - - fbo->glamor_priv->fbo_cache_watermark += fbo->width * fbo->height; - xorg_list_add(&fbo->list, cache); - fbo->expire = fbo->glamor_priv->tick + GLAMOR_CACHE_EXPIRE_MAX; + n_format = cache_format(fbo->format); + + if (fbo->fb == 0 || n_format == -1 + || fbo->glamor_priv->fbo_cache_watermark >= FBO_CACHE_THRESHOLD) { + fbo->glamor_priv->tick += GLAMOR_CACHE_EXPIRE_MAX; + glamor_fbo_expire(fbo->glamor_priv); + glamor_purge_fbo(fbo); + return; + } + + cache = &fbo->glamor_priv->fbo_cache[n_format] + [cache_wbucket(fbo->width)] + [cache_hbucket(fbo->height)]; + DEBUGF + ("Put cache entry %p to cache %p w %d h %d format %x fbo %d tex %d \n", + fbo, cache, fbo->width, fbo->height, fbo->format, fbo->fb, fbo->tex); + + fbo->glamor_priv->fbo_cache_watermark += fbo->width * fbo->height; + xorg_list_add(&fbo->list, cache); + fbo->expire = fbo->glamor_priv->tick + GLAMOR_CACHE_EXPIRE_MAX; #endif } static void glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo) { - glamor_gl_dispatch *dispatch; - int status; - - dispatch = glamor_get_dispatch(fbo->glamor_priv); - - if (fbo->fb == 0) - dispatch->glGenFramebuffers(1, &fbo->fb); - assert(fbo->tex != 0); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); - dispatch->glFramebufferTexture2D(GL_FRAMEBUFFER, - GL_COLOR_ATTACHMENT0, - GL_TEXTURE_2D, fbo->tex, - 0); - status = dispatch->glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status != GL_FRAMEBUFFER_COMPLETE) { - const char *str; - switch (status) { - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: - str = "incomplete attachment"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: - str = "incomplete/missing attachment"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: - str = "incomplete draw buffer"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: - str = "incomplete read buffer"; - break; - case GL_FRAMEBUFFER_UNSUPPORTED: - str = "unsupported"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: - str = "incomplete multiple"; - break; - default: - str = "unknown error"; - break; - } - - FatalError("destination is framebuffer incomplete: %s [%x]\n", - str, status); - } - glamor_put_dispatch(fbo->glamor_priv); + glamor_gl_dispatch *dispatch; + int status; + + dispatch = glamor_get_dispatch(fbo->glamor_priv); + + if (fbo->fb == 0) + dispatch->glGenFramebuffers(1, &fbo->fb); + assert(fbo->tex != 0); + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); + dispatch->glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, fbo->tex, 0); + status = dispatch->glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + const char *str; + + switch (status) { + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + str = "incomplete attachment"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + str = "incomplete/missing attachment"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: + str = "incomplete draw buffer"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: + str = "incomplete read buffer"; + break; + case GL_FRAMEBUFFER_UNSUPPORTED: + str = "unsupported"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: + str = "incomplete multiple"; + break; + default: + str = "unknown error"; + break; + } + + FatalError("destination is framebuffer incomplete: %s [%x]\n", + str, status); + } + glamor_put_dispatch(fbo->glamor_priv); } glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, GLint tex, int flag) + int w, int h, GLenum format, GLint tex, int flag) { - glamor_pixmap_fbo *fbo; + glamor_pixmap_fbo *fbo; - fbo = calloc(1, sizeof(*fbo)); - if (fbo == NULL) - return NULL; + fbo = calloc(1, sizeof(*fbo)); + if (fbo == NULL) + return NULL; - xorg_list_init(&fbo->list); + xorg_list_init(&fbo->list); - fbo->tex = tex; - fbo->width = w; - fbo->height = h; - fbo->format = format; - fbo->glamor_priv = glamor_priv; + fbo->tex = tex; + fbo->width = w; + fbo->height = h; + fbo->format = format; + fbo->glamor_priv = glamor_priv; - if (flag == GLAMOR_CREATE_PIXMAP_MAP) { - glamor_gl_dispatch *dispatch; - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &fbo->pbo); - glamor_put_dispatch(glamor_priv); - goto done; - } + if (flag == GLAMOR_CREATE_PIXMAP_MAP) { + glamor_gl_dispatch *dispatch; - if (flag != GLAMOR_CREATE_FBO_NO_FBO) - glamor_pixmap_ensure_fb(fbo); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &fbo->pbo); + glamor_put_dispatch(glamor_priv); + goto done; + } -done: - return fbo; -} + if (flag != GLAMOR_CREATE_FBO_NO_FBO) + glamor_pixmap_ensure_fb(fbo); + done: + return fbo; +} void glamor_fbo_expire(glamor_screen_private *glamor_priv) { - struct xorg_list *cache; - glamor_pixmap_fbo *fbo_entry, *tmp; - int i,j,k; - - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) { - cache = &glamor_priv->fbo_cache[i][j][k]; - xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, list) { - if (GLAMOR_TICK_AFTER(fbo_entry->expire, glamor_priv->tick)) { - break; - } - - glamor_priv->fbo_cache_watermark -= fbo_entry->width * fbo_entry->height; - xorg_list_del(&fbo_entry->list); - DEBUGF("cache %p fbo %p expired %d current %d \n", cache, fbo_entry, - fbo_entry->expire, glamor_priv->tick); - glamor_purge_fbo(fbo_entry); - } - } + struct xorg_list *cache; + glamor_pixmap_fbo *fbo_entry, *tmp; + int i, j, k; + + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + cache = &glamor_priv->fbo_cache[i][j][k]; + xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, + list) { + if (GLAMOR_TICK_AFTER(fbo_entry->expire, glamor_priv->tick)) { + break; + } + + glamor_priv->fbo_cache_watermark -= + fbo_entry->width * fbo_entry->height; + xorg_list_del(&fbo_entry->list); + DEBUGF("cache %p fbo %p expired %d current %d \n", cache, + fbo_entry, fbo_entry->expire, glamor_priv->tick); + glamor_purge_fbo(fbo_entry); + } + } } void glamor_init_pixmap_fbo(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) - { - xorg_list_init(&glamor_priv->fbo_cache[i][j][k]); - } - glamor_priv->fbo_cache_watermark = 0; + glamor_screen_private *glamor_priv; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + xorg_list_init(&glamor_priv->fbo_cache[i][j][k]); + } + glamor_priv->fbo_cache_watermark = 0; } void glamor_fini_pixmap_fbo(ScreenPtr screen) { - struct xorg_list *cache; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo_entry, *tmp; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) - { - cache = &glamor_priv->fbo_cache[i][j][k]; - xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, list) { - xorg_list_del(&fbo_entry->list); - glamor_purge_fbo(fbo_entry); - } - } + struct xorg_list *cache; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo_entry, *tmp; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + cache = &glamor_priv->fbo_cache[i][j][k]; + xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, + list) { + xorg_list_del(&fbo_entry->list); + glamor_purge_fbo(fbo_entry); + } + } } void glamor_destroy_fbo(glamor_pixmap_fbo *fbo) { - xorg_list_del(&fbo->list); - glamor_pixmap_fbo_cache_put(fbo); + xorg_list_del(&fbo->list); + glamor_pixmap_fbo_cache_put(fbo); } static int _glamor_create_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format) + int w, int h, GLenum format) { - glamor_gl_dispatch *dispatch; - unsigned int tex = 0; - - /* With dri3, we want to allocate ARGB8888 pixmaps only. - * Depending on the implementation, GL_RGBA might not - * give us ARGB8888. We ask glamor_egl to use get - * an ARGB8888 based texture for us. */ - if (glamor_priv->dri3_enabled && format == GL_RGBA) - { - tex = glamor_egl_create_argb8888_based_texture(glamor_priv->screen, - w, h); - } - if (!tex) - { - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenTextures(1, &tex); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, - format, GL_UNSIGNED_BYTE, NULL); - glamor_put_dispatch(glamor_priv); - } - return tex; + glamor_gl_dispatch *dispatch; + unsigned int tex = 0; + + /* With dri3, we want to allocate ARGB8888 pixmaps only. + * Depending on the implementation, GL_RGBA might not + * give us ARGB8888. We ask glamor_egl to use get + * an ARGB8888 based texture for us. */ + if (glamor_priv->dri3_enabled && format == GL_RGBA) { + tex = glamor_egl_create_argb8888_based_texture(glamor_priv->screen, + w, h); + } + if (!tex) { + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenTextures(1, &tex); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, + GL_NEAREST); + dispatch->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, + format, GL_UNSIGNED_BYTE, NULL); + glamor_put_dispatch(glamor_priv); + } + return tex; } glamor_pixmap_fbo * glamor_create_fbo(glamor_screen_private *glamor_priv, - int w, int h, - GLenum format, - int flag) + int w, int h, GLenum format, int flag) { - glamor_pixmap_fbo *fbo; - GLint tex = 0; - int cache_flag; - - if (!glamor_check_fbo_size(glamor_priv, w, h)) - return NULL; - - if (flag == GLAMOR_CREATE_FBO_NO_FBO) - goto new_fbo; - - if (flag == GLAMOR_CREATE_PIXMAP_MAP) - goto no_tex; - - if (flag == GLAMOR_CREATE_PIXMAP_FIXUP) - cache_flag = GLAMOR_CACHE_EXACT_SIZE; - else - cache_flag = 0; - - fbo = glamor_pixmap_fbo_cache_get(glamor_priv, w, h, - format, cache_flag); - if (fbo) - return fbo; -new_fbo: - tex = _glamor_create_tex(glamor_priv, w, h, format); -no_tex: - fbo = glamor_create_fbo_from_tex(glamor_priv, w, h, format, tex, flag); - - return fbo; + glamor_pixmap_fbo *fbo; + GLint tex = 0; + int cache_flag; + + if (!glamor_check_fbo_size(glamor_priv, w, h)) + return NULL; + + if (flag == GLAMOR_CREATE_FBO_NO_FBO) + goto new_fbo; + + if (flag == GLAMOR_CREATE_PIXMAP_MAP) + goto no_tex; + + if (flag == GLAMOR_CREATE_PIXMAP_FIXUP) + cache_flag = GLAMOR_CACHE_EXACT_SIZE; + else + cache_flag = 0; + + fbo = glamor_pixmap_fbo_cache_get(glamor_priv, w, h, format, cache_flag); + if (fbo) + return fbo; + new_fbo: + tex = _glamor_create_tex(glamor_priv, w, h, format); + no_tex: + fbo = glamor_create_fbo_from_tex(glamor_priv, w, h, format, tex, flag); + + return fbo; } static glamor_pixmap_fbo * _glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, - glamor_pixmap_private *pixmap_priv, - int has_fbo) + int w, int h, GLenum format, int flag, + int block_w, int block_h, + glamor_pixmap_private *pixmap_priv, int has_fbo) { - int block_wcnt; - int block_hcnt; - glamor_pixmap_fbo **fbo_array; - BoxPtr box_array; - int i,j; - glamor_pixmap_private_large_t *priv; - - priv = &pixmap_priv->large; - - block_wcnt = (w + block_w - 1) / block_w; - block_hcnt = (h + block_h - 1) / block_h; - - box_array = calloc(block_wcnt * block_hcnt, sizeof(box_array[0])); - if (box_array == NULL) - return NULL; - - fbo_array = calloc(block_wcnt * block_hcnt, sizeof(glamor_pixmap_fbo*)); - if (fbo_array == NULL) { - free(box_array); - return FALSE; - } - for(i = 0; i < block_hcnt; i++) - { - int block_y1, block_y2; - int fbo_w, fbo_h; - - block_y1 = i * block_h; - block_y2 = (block_y1 + block_h) > h ? h : (block_y1 + block_h); - fbo_h = block_y2 - block_y1; - - for (j = 0; j < block_wcnt; j++) - { - box_array[i * block_wcnt + j].x1 = j * block_w; - box_array[i * block_wcnt + j].y1 = block_y1; - box_array[i * block_wcnt + j].x2 = (j + 1) * block_w > w ? w : (j + 1) * block_w; - box_array[i * block_wcnt + j].y2 = block_y2; - fbo_w = box_array[i * block_wcnt + j].x2 - box_array[i * block_wcnt + j].x1; - if (!has_fbo) - fbo_array[i * block_wcnt + j] = glamor_create_fbo(glamor_priv, - fbo_w, fbo_h, format, - GLAMOR_CREATE_PIXMAP_FIXUP); - else - fbo_array[i * block_wcnt + j] = priv->base.fbo; - if (fbo_array[i * block_wcnt + j] == NULL) - goto cleanup; - } - } - - priv->box = box_array[0]; - priv->box_array = box_array; - priv->fbo_array = fbo_array; - priv->block_wcnt = block_wcnt; - priv->block_hcnt = block_hcnt; - return fbo_array[0]; - -cleanup: - for(i = 0; i < block_wcnt * block_hcnt; i++) - if ((fbo_array)[i]) - glamor_destroy_fbo((fbo_array)[i]); - free(box_array); - free(fbo_array); - return NULL; + int block_wcnt; + int block_hcnt; + glamor_pixmap_fbo **fbo_array; + BoxPtr box_array; + int i, j; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + block_wcnt = (w + block_w - 1) / block_w; + block_hcnt = (h + block_h - 1) / block_h; + + box_array = calloc(block_wcnt * block_hcnt, sizeof(box_array[0])); + if (box_array == NULL) + return NULL; + + fbo_array = calloc(block_wcnt * block_hcnt, sizeof(glamor_pixmap_fbo *)); + if (fbo_array == NULL) { + free(box_array); + return FALSE; + } + for (i = 0; i < block_hcnt; i++) { + int block_y1, block_y2; + int fbo_w, fbo_h; + + block_y1 = i * block_h; + block_y2 = (block_y1 + block_h) > h ? h : (block_y1 + block_h); + fbo_h = block_y2 - block_y1; + + for (j = 0; j < block_wcnt; j++) { + box_array[i * block_wcnt + j].x1 = j * block_w; + box_array[i * block_wcnt + j].y1 = block_y1; + box_array[i * block_wcnt + j].x2 = + (j + 1) * block_w > w ? w : (j + 1) * block_w; + box_array[i * block_wcnt + j].y2 = block_y2; + fbo_w = + box_array[i * block_wcnt + j].x2 - box_array[i * block_wcnt + + j].x1; + if (!has_fbo) + fbo_array[i * block_wcnt + j] = glamor_create_fbo(glamor_priv, + fbo_w, fbo_h, + format, + GLAMOR_CREATE_PIXMAP_FIXUP); + else + fbo_array[i * block_wcnt + j] = priv->base.fbo; + if (fbo_array[i * block_wcnt + j] == NULL) + goto cleanup; + } + } + + priv->box = box_array[0]; + priv->box_array = box_array; + priv->fbo_array = fbo_array; + priv->block_wcnt = block_wcnt; + priv->block_hcnt = block_hcnt; + return fbo_array[0]; + + cleanup: + for (i = 0; i < block_wcnt * block_hcnt; i++) + if ((fbo_array)[i]) + glamor_destroy_fbo((fbo_array)[i]); + free(box_array); + free(fbo_array); + return NULL; } - /* Create a fbo array to cover the w*h region, by using block_w*block_h * block.*/ glamor_pixmap_fbo * glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, - glamor_pixmap_private *pixmap_priv) + int w, int h, GLenum format, int flag, + int block_w, int block_h, + glamor_pixmap_private *pixmap_priv) { - pixmap_priv->large.block_w = block_w; - pixmap_priv->large.block_h = block_h; - return _glamor_create_fbo_array(glamor_priv, w, h, format, flag, - block_w, block_h, pixmap_priv, 0); + pixmap_priv->large.block_w = block_w; + pixmap_priv->large.block_h = block_h; + return _glamor_create_fbo_array(glamor_priv, w, h, format, flag, + block_w, block_h, pixmap_priv, 0); } glamor_pixmap_fbo * glamor_pixmap_detach_fbo(glamor_pixmap_private *pixmap_priv) { - glamor_pixmap_fbo *fbo; + glamor_pixmap_fbo *fbo; - if (pixmap_priv == NULL) - return NULL; + if (pixmap_priv == NULL) + return NULL; - fbo = pixmap_priv->base.fbo; - if (fbo == NULL) - return NULL; + fbo = pixmap_priv->base.fbo; + if (fbo == NULL) + return NULL; - pixmap_priv->base.fbo = NULL; - return fbo; + pixmap_priv->base.fbo = NULL; + return fbo; } /* The pixmap must not be attached to another fbo. */ void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo) { - glamor_pixmap_private *pixmap_priv; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (pixmap_priv->base.fbo) - return; - - pixmap_priv->base.fbo = fbo; - - switch (pixmap_priv->type) { - case GLAMOR_TEXTURE_LARGE: - case GLAMOR_TEXTURE_ONLY: - case GLAMOR_TEXTURE_DRM: - pixmap_priv->base.gl_fbo = 1; - if (fbo->tex != 0) - pixmap_priv->base.gl_tex = 1; - else { - /* XXX For the Xephyr only, may be broken now.*/ - pixmap_priv->base.gl_tex = 0; - } - case GLAMOR_MEMORY_MAP: - pixmap->devPrivate.ptr = NULL; - break; - default: - break; - } + glamor_pixmap_private *pixmap_priv; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (pixmap_priv->base.fbo) + return; + + pixmap_priv->base.fbo = fbo; + + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_LARGE: + case GLAMOR_TEXTURE_ONLY: + case GLAMOR_TEXTURE_DRM: + pixmap_priv->base.gl_fbo = 1; + if (fbo->tex != 0) + pixmap_priv->base.gl_tex = 1; + else { + /* XXX For the Xephyr only, may be broken now. */ + pixmap_priv->base.gl_tex = 0; + } + case GLAMOR_MEMORY_MAP: + pixmap->devPrivate.ptr = NULL; + break; + default: + break; + } } void glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv) { - glamor_pixmap_fbo *fbo; - if (priv->type == GLAMOR_TEXTURE_LARGE) { - int i; - glamor_pixmap_private_large_t *large = &priv->large; - for(i = 0; i < large->block_wcnt * large->block_hcnt; i++) - glamor_destroy_fbo(large->fbo_array[i]); - free(large->fbo_array); - } else { - fbo = glamor_pixmap_detach_fbo(priv); - if (fbo) - glamor_destroy_fbo(fbo); - } - - free(priv); + glamor_pixmap_fbo *fbo; + + if (priv->type == GLAMOR_TEXTURE_LARGE) { + int i; + glamor_pixmap_private_large_t *large = &priv->large; + + for (i = 0; i < large->block_wcnt * large->block_hcnt; i++) + glamor_destroy_fbo(large->fbo_array[i]); + free(large->fbo_array); + } + else { + fbo = glamor_pixmap_detach_fbo(priv); + if (fbo) + glamor_destroy_fbo(fbo); + } + + free(priv); } Bool glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag) { - glamor_screen_private *glamor_priv; - glamor_pixmap_private *pixmap_priv; - glamor_pixmap_fbo *fbo; - - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv->base.fbo == NULL) { - - fbo = glamor_create_fbo(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, - format, - flag); - if (fbo == NULL) - return FALSE; - - glamor_pixmap_attach_fbo(pixmap, fbo); - } else { - /* We do have a fbo, but it may lack of fb or tex. */ - if (!pixmap_priv->base.fbo->tex) - pixmap_priv->base.fbo->tex = _glamor_create_tex(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, format); - - if (flag != GLAMOR_CREATE_FBO_NO_FBO && pixmap_priv->base.fbo->fb == 0) - glamor_pixmap_ensure_fb(pixmap_priv->base.fbo); - } - - return TRUE; + glamor_screen_private *glamor_priv; + glamor_pixmap_private *pixmap_priv; + glamor_pixmap_fbo *fbo; + + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv->base.fbo == NULL) { + + fbo = glamor_create_fbo(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format, flag); + if (fbo == NULL) + return FALSE; + + glamor_pixmap_attach_fbo(pixmap, fbo); + } + else { + /* We do have a fbo, but it may lack of fb or tex. */ + if (!pixmap_priv->base.fbo->tex) + pixmap_priv->base.fbo->tex = + _glamor_create_tex(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format); + + if (flag != GLAMOR_CREATE_FBO_NO_FBO && pixmap_priv->base.fbo->fb == 0) + glamor_pixmap_ensure_fb(pixmap_priv->base.fbo); + } + + return TRUE; } _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, PixmapPtr back) { - glamor_pixmap_private *front_priv, *back_priv; - glamor_pixmap_fbo *temp_fbo; - - front_priv = glamor_get_pixmap_private(front); - back_priv = glamor_get_pixmap_private(back); - temp_fbo = front_priv->base.fbo; - front_priv->base.fbo = back_priv->base.fbo; - back_priv->base.fbo = temp_fbo; + glamor_pixmap_private *front_priv, *back_priv; + glamor_pixmap_fbo *temp_fbo; + + front_priv = glamor_get_pixmap_private(front); + back_priv = glamor_get_pixmap_private(back); + temp_fbo = front_priv->base.fbo; + front_priv->base.fbo = back_priv->base.fbo; + back_priv->base.fbo = temp_fbo; } diff --git a/xorg-server/glamor/glamor_fill.c b/xorg-server/glamor/glamor_fill.c index fbc87392e..d59e6204f 100644 --- a/xorg-server/glamor/glamor_fill.c +++ b/xorg-server/glamor/glamor_fill.c @@ -33,332 +33,325 @@ */ Bool glamor_fill(DrawablePtr drawable, - GCPtr gc, int x, int y, int width, int height, Bool fallback) + GCPtr gc, int x, int y, int width, int height, Bool fallback) { - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); - int off_x, off_y; - PixmapPtr sub_pixmap = NULL; - glamor_access_t sub_pixmap_access; - DrawablePtr saved_drawable = NULL; - int saved_x = x, saved_y = y; - - glamor_get_drawable_deltas(drawable, dst_pixmap, &off_x, &off_y); - - switch (gc->fillStyle) { - case FillSolid: - if (!glamor_solid(dst_pixmap, - x + off_x, - y + off_y, - width, height, gc->alu, gc->planemask, - gc->fgPixel)) - goto fail; - break; - case FillStippled: - case FillOpaqueStippled: - if (!glamor_stipple(dst_pixmap, - gc->stipple, - x + off_x, - y + off_y, - width, - height, - gc->alu, - gc->planemask, - gc->fgPixel, - gc->bgPixel, gc->patOrg.x, - gc->patOrg.y)) - goto fail; - break; - case FillTiled: - if (!glamor_tile(dst_pixmap, - gc->tile.pixmap, - x + off_x, - y + off_y, - width, - height, - gc->alu, - gc->planemask, - x - drawable->x - gc->patOrg.x, - y - drawable->y - gc->patOrg.y)) - goto fail; - break; - } - return TRUE; - - fail: - if (!fallback) { - if (glamor_ddx_fallback_check_pixmap(&dst_pixmap->drawable) - && glamor_ddx_fallback_check_gc(gc)) - return FALSE; - } - /* Is it possible to set the access as WO? */ - - sub_pixmap_access = GLAMOR_ACCESS_RW; - - sub_pixmap = glamor_get_sub_pixmap(dst_pixmap, x + off_x, - y + off_y, width, height, - sub_pixmap_access); - - if (sub_pixmap != NULL) { - if (gc->fillStyle != FillSolid) { - gc->patOrg.x += (drawable->x - x); - gc->patOrg.y += (drawable->y - y); - } - saved_drawable = drawable; - drawable = &sub_pixmap->drawable; - saved_x = x; - saved_y = y; - x = 0; - y = 0; - } - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbFill(drawable, gc, x, y, width, height); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - - if (sub_pixmap != NULL) { - if (gc->fillStyle != FillSolid) { - gc->patOrg.x -= (saved_drawable->x - saved_x); - gc->patOrg.y -= (saved_drawable->y - saved_y); - } - - x = saved_x; - y = saved_y; - - glamor_put_sub_pixmap(sub_pixmap, dst_pixmap, - x + off_x, y + off_y, - width, height, sub_pixmap_access); - } - - return TRUE; + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); + int off_x, off_y; + PixmapPtr sub_pixmap = NULL; + glamor_access_t sub_pixmap_access; + DrawablePtr saved_drawable = NULL; + int saved_x = x, saved_y = y; + + glamor_get_drawable_deltas(drawable, dst_pixmap, &off_x, &off_y); + + switch (gc->fillStyle) { + case FillSolid: + if (!glamor_solid(dst_pixmap, + x + off_x, + y + off_y, + width, height, gc->alu, gc->planemask, gc->fgPixel)) + goto fail; + break; + case FillStippled: + case FillOpaqueStippled: + if (!glamor_stipple(dst_pixmap, + gc->stipple, + x + off_x, + y + off_y, + width, + height, + gc->alu, + gc->planemask, + gc->fgPixel, + gc->bgPixel, gc->patOrg.x, gc->patOrg.y)) + goto fail; + break; + case FillTiled: + if (!glamor_tile(dst_pixmap, + gc->tile.pixmap, + x + off_x, + y + off_y, + width, + height, + gc->alu, + gc->planemask, + x - drawable->x - gc->patOrg.x, + y - drawable->y - gc->patOrg.y)) + goto fail; + break; + } + return TRUE; + + fail: + if (!fallback) { + if (glamor_ddx_fallback_check_pixmap(&dst_pixmap->drawable) + && glamor_ddx_fallback_check_gc(gc)) + return FALSE; + } + /* Is it possible to set the access as WO? */ + + sub_pixmap_access = GLAMOR_ACCESS_RW; + + sub_pixmap = glamor_get_sub_pixmap(dst_pixmap, x + off_x, + y + off_y, width, height, + sub_pixmap_access); + + if (sub_pixmap != NULL) { + if (gc->fillStyle != FillSolid) { + gc->patOrg.x += (drawable->x - x); + gc->patOrg.y += (drawable->y - y); + } + saved_drawable = drawable; + drawable = &sub_pixmap->drawable; + saved_x = x; + saved_y = y; + x = 0; + y = 0; + } + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbFill(drawable, gc, x, y, width, height); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + + if (sub_pixmap != NULL) { + if (gc->fillStyle != FillSolid) { + gc->patOrg.x -= (saved_drawable->x - saved_x); + gc->patOrg.y -= (saved_drawable->y - saved_y); + } + + x = saved_x; + y = saved_y; + + glamor_put_sub_pixmap(sub_pixmap, dst_pixmap, + x + off_x, y + off_y, + width, height, sub_pixmap_access); + } + + return TRUE; } void glamor_init_solid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *solid_vs = - "attribute vec4 v_position;" - "void main()\n" "{\n" " gl_Position = v_position;\n" - "}\n"; - const char *solid_fs = - GLAMOR_DEFAULT_PRECISION "uniform vec4 color;\n" - "void main()\n" "{\n" " gl_FragColor = color;\n" "}\n"; - GLint fs_prog, vs_prog; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->solid_prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, solid_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - solid_fs); - dispatch->glAttachShader(glamor_priv->solid_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->solid_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->solid_prog, - GLAMOR_VERTEX_POS, "v_position"); - glamor_link_glsl_prog(dispatch, glamor_priv->solid_prog); - - glamor_priv->solid_color_uniform_location = - dispatch->glGetUniformLocation(glamor_priv->solid_prog, - "color"); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *solid_vs = + "attribute vec4 v_position;" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + "}\n"; + const char *solid_fs = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 color;\n" + "void main()\n" + "{\n" + " gl_FragColor = color;\n" + "}\n"; + GLint fs_prog, vs_prog; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->solid_prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, solid_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, solid_fs); + dispatch->glAttachShader(glamor_priv->solid_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->solid_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->solid_prog, + GLAMOR_VERTEX_POS, "v_position"); + glamor_link_glsl_prog(dispatch, glamor_priv->solid_prog); + + glamor_priv->solid_color_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->solid_prog, "color"); + glamor_put_dispatch(glamor_priv); } void glamor_fini_solid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->solid_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->solid_prog); + glamor_put_dispatch(glamor_priv); } static void _glamor_solid_boxes(PixmapPtr pixmap, BoxPtr box, int nbox, float *color) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_gl_dispatch *dispatch; - GLfloat xscale, yscale; - float vertices[32]; - float *pvertices = vertices; - int valid_nbox = ARRAY_SIZE(vertices); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(glamor_priv->solid_prog); - - dispatch->glUniform4fv(glamor_priv->solid_color_uniform_location, - 1, color); - - pixmap_priv_get_dest_scale(pixmap_priv, &xscale, &yscale); - - if (unlikely(nbox*4*2 > ARRAY_SIZE(vertices))) { - int allocated_box; - - if (nbox * 6 > GLAMOR_COMPOSITE_VBO_VERT_CNT) { - allocated_box = GLAMOR_COMPOSITE_VBO_VERT_CNT / 6; - } else - allocated_box = nbox; - pvertices = malloc(allocated_box * 4 * 2 * sizeof(float)); - if (pvertices) - valid_nbox = allocated_box; - else { - pvertices = vertices; - valid_nbox = ARRAY_SIZE(vertices) / (4*2); - } - } - - if (unlikely(nbox > 1)) - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - pvertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - while(nbox) { - int box_cnt, i; - float *valid_vertices; - valid_vertices = pvertices; - box_cnt = nbox > valid_nbox ? valid_nbox : nbox; - for (i = 0; i < box_cnt; i++) { - glamor_set_normalize_vcoords(pixmap_priv, xscale, yscale, - box[i].x1, box[i].y1, - box[i].x2, box[i].y2, - glamor_priv->yInverted, - valid_vertices); - valid_vertices += 4*2; - } - if (box_cnt == 1) - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, box_cnt * 4); - else + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_gl_dispatch *dispatch; + GLfloat xscale, yscale; + float vertices[32]; + float *pvertices = vertices; + int valid_nbox = ARRAY_SIZE(vertices); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->solid_prog); + + dispatch->glUniform4fv(glamor_priv->solid_color_uniform_location, 1, color); + + pixmap_priv_get_dest_scale(pixmap_priv, &xscale, &yscale); + + if (_X_UNLIKELY(nbox * 4 * 2 > ARRAY_SIZE(vertices))) { + int allocated_box; + + if (nbox * 6 > GLAMOR_COMPOSITE_VBO_VERT_CNT) { + allocated_box = GLAMOR_COMPOSITE_VBO_VERT_CNT / 6; + } + else + allocated_box = nbox; + pvertices = malloc(allocated_box * 4 * 2 * sizeof(float)); + if (pvertices) + valid_nbox = allocated_box; + else { + pvertices = vertices; + valid_nbox = ARRAY_SIZE(vertices) / (4 * 2); + } + } + + if (_X_UNLIKELY(nbox > 1)) + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), pvertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + while (nbox) { + int box_cnt, i; + float *valid_vertices; + + valid_vertices = pvertices; + box_cnt = nbox > valid_nbox ? valid_nbox : nbox; + for (i = 0; i < box_cnt; i++) { + glamor_set_normalize_vcoords(pixmap_priv, xscale, yscale, + box[i].x1, box[i].y1, + box[i].x2, box[i].y2, + glamor_priv->yInverted, + valid_vertices); + valid_vertices += 4 * 2; + } + if (box_cnt == 1) + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, box_cnt * 4); + else #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, - 0, - box_cnt * 4, - box_cnt * 6, - GL_UNSIGNED_SHORT, - NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, + 0, + box_cnt * 4, + box_cnt * 6, GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, - box_cnt * 6, - GL_UNSIGNED_SHORT, - NULL); + dispatch->glDrawElements(GL_TRIANGLES, + box_cnt * 6, GL_UNSIGNED_SHORT, NULL); #endif - nbox -= box_cnt; - box += box_cnt; - } - - if (pvertices != vertices) - free(pvertices); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; + nbox -= box_cnt; + box += box_cnt; + } + + if (pvertices != vertices) + free(pvertices); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; } Bool glamor_solid_boxes(PixmapPtr pixmap, - BoxPtr box, int nbox, - unsigned long fg_pixel) + BoxPtr box, int nbox, unsigned long fg_pixel) { - glamor_pixmap_private *pixmap_priv; - GLfloat color[4]; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return FALSE; - - glamor_get_rgba_from_pixel(fg_pixel, - &color[0], - &color[1], - &color[2], - &color[3], format_for_pixmap(pixmap)); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionRec region; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - int i; - - RegionInitBoxes(®ion, box, nbox); - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - for(i = 0; i < n_region; i++) - { - BoxPtr inner_box; - int inner_nbox; - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - inner_box = RegionRects(clipped_regions[i].region); - inner_nbox = RegionNumRects(clipped_regions[i].region); - _glamor_solid_boxes(pixmap, inner_box, inner_nbox, color); - RegionDestroy(clipped_regions[i].region); - } - free(clipped_regions); - RegionUninit(®ion); - } else - _glamor_solid_boxes(pixmap, box, nbox, color); - - return TRUE; + glamor_pixmap_private *pixmap_priv; + GLfloat color[4]; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return FALSE; + + glamor_get_rgba_from_pixel(fg_pixel, + &color[0], + &color[1], + &color[2], &color[3], format_for_pixmap(pixmap)); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionRec region; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + int i; + + RegionInitBoxes(®ion, box, nbox); + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, + 0, 0); + for (i = 0; i < n_region; i++) { + BoxPtr inner_box; + int inner_nbox; + + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + inner_box = RegionRects(clipped_regions[i].region); + inner_nbox = RegionNumRects(clipped_regions[i].region); + _glamor_solid_boxes(pixmap, inner_box, inner_nbox, color); + RegionDestroy(clipped_regions[i].region); + } + free(clipped_regions); + RegionUninit(®ion); + } + else + _glamor_solid_boxes(pixmap, box, nbox, color); + + return TRUE; } Bool glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel) + unsigned char alu, unsigned long planemask, unsigned long fg_pixel) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *pixmap_priv; - glamor_gl_dispatch *dispatch; - BoxRec box; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return FALSE; - - if (!glamor_set_planemask(pixmap, planemask)) { - glamor_fallback - ("Failedto set planemask in glamor_solid.\n"); - return FALSE; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, alu)) { - if (alu == GXclear) - fg_pixel = 0; - else { - glamor_fallback("unsupported alu %x\n", alu); - glamor_put_dispatch(glamor_priv); - return FALSE; - } - } - box.x1 = x; - box.y1 = y; - box.x2 = x + width; - box.y2 = y + height; - glamor_solid_boxes(pixmap, &box, 1, fg_pixel); - - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - - return TRUE; + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv; + glamor_gl_dispatch *dispatch; + BoxRec box; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return FALSE; + + if (!glamor_set_planemask(pixmap, planemask)) { + glamor_fallback("Failedto set planemask in glamor_solid.\n"); + return FALSE; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, alu)) { + if (alu == GXclear) + fg_pixel = 0; + else { + glamor_fallback("unsupported alu %x\n", alu); + glamor_put_dispatch(glamor_priv); + return FALSE; + } + } + box.x1 = x; + box.y1 = y; + box.x2 = x + width; + box.y2 = y + height; + glamor_solid_boxes(pixmap, &box, 1, fg_pixel); + + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + + return TRUE; } - diff --git a/xorg-server/glamor/glamor_fillspans.c b/xorg-server/glamor/glamor_fillspans.c index 35e881f61..7261d2842 100644 --- a/xorg-server/glamor/glamor_fillspans.c +++ b/xorg-server/glamor/glamor_fillspans.c @@ -28,86 +28,81 @@ static Bool _glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted, Bool fallback) + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted, + Bool fallback) { - DDXPointPtr ppt; - int nbox; - BoxPtr pbox; - int x1, x2, y; - RegionPtr pClip = fbGetCompositeClip(gc); - Bool ret = FALSE; + DDXPointPtr ppt; + int nbox; + BoxPtr pbox; + int x1, x2, y; + RegionPtr pClip = fbGetCompositeClip(gc); + Bool ret = FALSE; - if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) - goto fail; + if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) + goto fail; - ppt = points; - while (n--) { - x1 = ppt->x; - y = ppt->y; - x2 = x1 + (int) *widths; - ppt++; - widths++; + ppt = points; + while (n--) { + x1 = ppt->x; + y = ppt->y; + x2 = x1 + (int) *widths; + ppt++; + widths++; - nbox = REGION_NUM_RECTS(pClip); - pbox = REGION_RECTS(pClip); - while (nbox--) { - int real_x1 = x1, real_x2 = x2; + nbox = REGION_NUM_RECTS(pClip); + pbox = REGION_RECTS(pClip); + while (nbox--) { + int real_x1 = x1, real_x2 = x2; - if (real_x1 < pbox->x1) - real_x1 = pbox->x1; + if (real_x1 < pbox->x1) + real_x1 = pbox->x1; - if (real_x2 > pbox->x2) - real_x2 = pbox->x2; + if (real_x2 > pbox->x2) + real_x2 = pbox->x2; - if (real_x2 > real_x1 && pbox->y1 <= y && pbox->y2 > y) { - if (!glamor_fill(drawable, gc, real_x1, y, - real_x2 - real_x1, 1, fallback)) - goto fail; - } - pbox++; - } - } - ret = TRUE; - goto done; + if (real_x2 > real_x1 && pbox->y1 <= y && pbox->y2 > y) { + if (!glamor_fill(drawable, gc, real_x1, y, + real_x2 - real_x1, 1, fallback)) + goto fail; + } + pbox++; + } + } + ret = TRUE; + goto done; -fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) { - goto done; - } - glamor_fallback("to %p (%c)\n", drawable, - glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbFillSpans(drawable, gc, n, points, widths, - sorted); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) { + goto done; + } + glamor_fallback("to %p (%c)\n", drawable, + glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbFillSpans(drawable, gc, n, points, widths, sorted); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; -done: - return ret; + done: + return ret; } - void glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted) + GCPtr gc, int n, DDXPointPtr points, int *widths, int sorted) { - _glamor_fill_spans(drawable, gc, n, points, widths, sorted, TRUE); + _glamor_fill_spans(drawable, gc, n, points, widths, sorted, TRUE); } Bool glamor_fill_spans_nf(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted) + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted) { - return _glamor_fill_spans(drawable, gc, n, points, widths, sorted, FALSE); + return _glamor_fill_spans(drawable, gc, n, points, widths, sorted, FALSE); } - - diff --git a/xorg-server/glamor/glamor_getimage.c b/xorg-server/glamor/glamor_getimage.c index 5df576c45..5609e707f 100644 --- a/xorg-server/glamor/glamor_getimage.c +++ b/xorg-server/glamor/glamor_getimage.c @@ -28,74 +28,71 @@ #include "glamor_priv.h" - static Bool _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d, - Bool fallback) + unsigned int format, unsigned long planeMask, char *d, + Bool fallback) { - PixmapPtr pixmap, sub_pixmap; - struct glamor_pixmap_private *pixmap_priv; - int x_off, y_off; - int stride; - void *data; - - pixmap = glamor_get_drawable_pixmap(drawable); - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + PixmapPtr pixmap, sub_pixmap; + struct glamor_pixmap_private *pixmap_priv; + int x_off, y_off; + int stride; + void *data; - if (format != ZPixmap) - goto fall_back; - pixmap = glamor_get_drawable_pixmap(drawable); - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + pixmap = glamor_get_drawable_pixmap(drawable); + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - if (!glamor_set_planemask(pixmap, planeMask)) { - glamor_fallback - ("Failedto set planemask in glamor_solid.\n"); - goto fall_back; - } - pixmap_priv = glamor_get_pixmap_private(pixmap); + if (format != ZPixmap) + goto fall_back; + pixmap = glamor_get_drawable_pixmap(drawable); + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + if (!glamor_set_planemask(pixmap, planeMask)) { + glamor_fallback("Failedto set planemask in glamor_solid.\n"); + goto fall_back; + } + pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - goto fall_back; - stride = PixmapBytePad(w, drawable->depth); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + goto fall_back; + stride = PixmapBytePad(w, drawable->depth); - x += drawable->x + x_off; - y += drawable->y + y_off; + x += drawable->x + x_off; + y += drawable->y + y_off; - data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, stride, - d, 0, GLAMOR_ACCESS_RO); - if (data != NULL) { - assert(data == d); - return TRUE; - } -fall_back: - sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, - y + y_off + drawable->y, w, h, - GLAMOR_ACCESS_RO); - if (sub_pixmap) { - fbGetImage(&sub_pixmap->drawable, 0, 0, w, h, format, planeMask, d); - glamor_put_sub_pixmap(sub_pixmap, pixmap, - x + x_off + drawable->x, - y + y_off + drawable->y, - w, h, GLAMOR_ACCESS_RO); - } else - miGetImage(drawable, x, y, w, h, format, planeMask, d); + data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, stride, + d, 0, GLAMOR_ACCESS_RO); + if (data != NULL) { + assert(data == d); + return TRUE; + } + fall_back: + sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, + y + y_off + drawable->y, w, h, + GLAMOR_ACCESS_RO); + if (sub_pixmap) { + fbGetImage(&sub_pixmap->drawable, 0, 0, w, h, format, planeMask, d); + glamor_put_sub_pixmap(sub_pixmap, pixmap, + x + x_off + drawable->x, + y + y_off + drawable->y, w, h, GLAMOR_ACCESS_RO); + } + else + miGetImage(drawable, x, y, w, h, format, planeMask, d); - return TRUE; + return TRUE; } void glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d) + unsigned int format, unsigned long planeMask, char *d) { - _glamor_get_image(pDrawable, x, y, w, h, format, planeMask, d, TRUE); + _glamor_get_image(pDrawable, x, y, w, h, format, planeMask, d, TRUE); } Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d) + unsigned int format, unsigned long planeMask, char *d) { - return _glamor_get_image(pDrawable, x, y, w, - h, format, planeMask, d, FALSE); + return _glamor_get_image(pDrawable, x, y, w, + h, format, planeMask, d, FALSE); } diff --git a/xorg-server/glamor/glamor_getspans.c b/xorg-server/glamor/glamor_getspans.c index 6d6c8e9a4..ff58725d6 100644 --- a/xorg-server/glamor/glamor_getspans.c +++ b/xorg-server/glamor/glamor_getspans.c @@ -28,68 +28,65 @@ #include "glamor_priv.h" -static Bool +static Bool _glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst, - Bool fallback) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst, + Bool fallback) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - int i; - uint8_t *readpixels_dst = (uint8_t *) dst; - void *data; - int x_off, y_off; - Bool ret = FALSE; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + int i; + uint8_t *readpixels_dst = (uint8_t *) dst; + void *data; + int x_off, y_off; + Bool ret = FALSE; - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - goto fail; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + goto fail; - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - for (i = 0; i < count; i++) { - data = glamor_download_sub_pixmap_to_cpu(pixmap, points[i].x + x_off, - points[i].y + y_off, widths[i], 1, - PixmapBytePad(widths[i], drawable->depth), - readpixels_dst, 0, GLAMOR_ACCESS_RO); - assert(data == readpixels_dst); - readpixels_dst += PixmapBytePad(widths[i], drawable->depth); - } + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + for (i = 0; i < count; i++) { + data = glamor_download_sub_pixmap_to_cpu(pixmap, points[i].x + x_off, + points[i].y + y_off, widths[i], + 1, PixmapBytePad(widths[i], + drawable-> + depth), + readpixels_dst, 0, + GLAMOR_ACCESS_RO); + (void)data; + assert(data == readpixels_dst); + readpixels_dst += PixmapBytePad(widths[i], drawable->depth); + } - ret = TRUE; - goto done; -fail: + ret = TRUE; + goto done; + fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable)) - goto done; + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable)) + goto done; - ret = TRUE; - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { - fbGetSpans(drawable, wmax, points, widths, count, dst); - glamor_finish_access(drawable, GLAMOR_ACCESS_RO); - } -done: - return ret; + ret = TRUE; + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { + fbGetSpans(drawable, wmax, points, widths, count, dst); + glamor_finish_access(drawable, GLAMOR_ACCESS_RO); + } + done: + return ret; } void glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst) { - _glamor_get_spans(drawable, wmax, points, - widths, count, dst, TRUE); + _glamor_get_spans(drawable, wmax, points, widths, count, dst, TRUE); } Bool glamor_get_spans_nf(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst) { - return _glamor_get_spans(drawable, wmax, points, - widths, count, dst, FALSE); + return _glamor_get_spans(drawable, wmax, points, widths, count, dst, FALSE); } - - - diff --git a/xorg-server/glamor/glamor_gl_dispatch.c b/xorg-server/glamor/glamor_gl_dispatch.c index da99e2627..0bdda9c34 100644 --- a/xorg-server/glamor/glamor_gl_dispatch.c +++ b/xorg-server/glamor/glamor_gl_dispatch.c @@ -41,78 +41,78 @@ _X_EXPORT Bool glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, - int gl_version, - void *(*get_proc_address) (const char *)) + int gl_version, + void *(*get_proc_address) (const char *)) { #ifndef GLAMOR_GLES2 - INIT_FUNC(dispatch, glMatrixMode, get_proc_address); - INIT_FUNC(dispatch, glLoadIdentity, get_proc_address); - INIT_FUNC(dispatch, glRasterPos2i, get_proc_address); - INIT_FUNC(dispatch, glDrawPixels, get_proc_address); - INIT_FUNC(dispatch, glLogicOp, get_proc_address); - INIT_FUNC(dispatch, glMapBuffer, get_proc_address); - INIT_FUNC(dispatch, glMapBufferRange, get_proc_address); - INIT_FUNC(dispatch, glUnmapBuffer, get_proc_address); - INIT_FUNC(dispatch, glBlitFramebuffer, get_proc_address); - INIT_FUNC(dispatch, glDrawRangeElements, get_proc_address); + INIT_FUNC(dispatch, glMatrixMode, get_proc_address); + INIT_FUNC(dispatch, glLoadIdentity, get_proc_address); + INIT_FUNC(dispatch, glRasterPos2i, get_proc_address); + INIT_FUNC(dispatch, glDrawPixels, get_proc_address); + INIT_FUNC(dispatch, glLogicOp, get_proc_address); + INIT_FUNC(dispatch, glMapBuffer, get_proc_address); + INIT_FUNC(dispatch, glMapBufferRange, get_proc_address); + INIT_FUNC(dispatch, glUnmapBuffer, get_proc_address); + INIT_FUNC(dispatch, glBlitFramebuffer, get_proc_address); + INIT_FUNC(dispatch, glDrawRangeElements, get_proc_address); #endif - INIT_FUNC(dispatch, glViewport, get_proc_address); - INIT_FUNC(dispatch, glDrawArrays, get_proc_address); - INIT_FUNC(dispatch, glDrawElements, get_proc_address); - INIT_FUNC(dispatch, glReadPixels, get_proc_address); - INIT_FUNC(dispatch, glPixelStorei, get_proc_address); - INIT_FUNC(dispatch, glTexParameteri, get_proc_address); - INIT_FUNC(dispatch, glTexImage2D, get_proc_address); - INIT_FUNC(dispatch, glGenTextures, get_proc_address); - INIT_FUNC(dispatch, glDeleteTextures, get_proc_address); - INIT_FUNC(dispatch, glBindTexture, get_proc_address); - INIT_FUNC(dispatch, glTexSubImage2D, get_proc_address); - INIT_FUNC(dispatch, glFlush, get_proc_address); - INIT_FUNC(dispatch, glFinish, get_proc_address); - INIT_FUNC(dispatch, glGetIntegerv, get_proc_address); - INIT_FUNC(dispatch, glGetString, get_proc_address); - INIT_FUNC(dispatch, glScissor, get_proc_address); - INIT_FUNC(dispatch, glEnable, get_proc_address); - INIT_FUNC(dispatch, glDisable, get_proc_address); - INIT_FUNC(dispatch, glBlendFunc, get_proc_address); - INIT_FUNC(dispatch, glActiveTexture, get_proc_address); - INIT_FUNC(dispatch, glGenBuffers, get_proc_address); - INIT_FUNC(dispatch, glBufferData, get_proc_address); - INIT_FUNC(dispatch, glBindBuffer, get_proc_address); - INIT_FUNC(dispatch, glDeleteBuffers, get_proc_address); - INIT_FUNC(dispatch, glFramebufferTexture2D, get_proc_address); - INIT_FUNC(dispatch, glBindFramebuffer, get_proc_address); - INIT_FUNC(dispatch, glDeleteFramebuffers, get_proc_address); - INIT_FUNC(dispatch, glGenFramebuffers, get_proc_address); - INIT_FUNC(dispatch, glCheckFramebufferStatus, get_proc_address); - INIT_FUNC(dispatch, glVertexAttribPointer, get_proc_address); - INIT_FUNC(dispatch, glDisableVertexAttribArray, get_proc_address); - INIT_FUNC(dispatch, glEnableVertexAttribArray, get_proc_address); - INIT_FUNC(dispatch, glBindAttribLocation, get_proc_address); - INIT_FUNC(dispatch, glLinkProgram, get_proc_address); - INIT_FUNC(dispatch, glShaderSource, get_proc_address); + INIT_FUNC(dispatch, glViewport, get_proc_address); + INIT_FUNC(dispatch, glDrawArrays, get_proc_address); + INIT_FUNC(dispatch, glDrawElements, get_proc_address); + INIT_FUNC(dispatch, glReadPixels, get_proc_address); + INIT_FUNC(dispatch, glPixelStorei, get_proc_address); + INIT_FUNC(dispatch, glTexParameteri, get_proc_address); + INIT_FUNC(dispatch, glTexImage2D, get_proc_address); + INIT_FUNC(dispatch, glGenTextures, get_proc_address); + INIT_FUNC(dispatch, glDeleteTextures, get_proc_address); + INIT_FUNC(dispatch, glBindTexture, get_proc_address); + INIT_FUNC(dispatch, glTexSubImage2D, get_proc_address); + INIT_FUNC(dispatch, glFlush, get_proc_address); + INIT_FUNC(dispatch, glFinish, get_proc_address); + INIT_FUNC(dispatch, glGetIntegerv, get_proc_address); + INIT_FUNC(dispatch, glGetString, get_proc_address); + INIT_FUNC(dispatch, glScissor, get_proc_address); + INIT_FUNC(dispatch, glEnable, get_proc_address); + INIT_FUNC(dispatch, glDisable, get_proc_address); + INIT_FUNC(dispatch, glBlendFunc, get_proc_address); + INIT_FUNC(dispatch, glActiveTexture, get_proc_address); + INIT_FUNC(dispatch, glGenBuffers, get_proc_address); + INIT_FUNC(dispatch, glBufferData, get_proc_address); + INIT_FUNC(dispatch, glBindBuffer, get_proc_address); + INIT_FUNC(dispatch, glDeleteBuffers, get_proc_address); + INIT_FUNC(dispatch, glFramebufferTexture2D, get_proc_address); + INIT_FUNC(dispatch, glBindFramebuffer, get_proc_address); + INIT_FUNC(dispatch, glDeleteFramebuffers, get_proc_address); + INIT_FUNC(dispatch, glGenFramebuffers, get_proc_address); + INIT_FUNC(dispatch, glCheckFramebufferStatus, get_proc_address); + INIT_FUNC(dispatch, glVertexAttribPointer, get_proc_address); + INIT_FUNC(dispatch, glDisableVertexAttribArray, get_proc_address); + INIT_FUNC(dispatch, glEnableVertexAttribArray, get_proc_address); + INIT_FUNC(dispatch, glBindAttribLocation, get_proc_address); + INIT_FUNC(dispatch, glLinkProgram, get_proc_address); + INIT_FUNC(dispatch, glShaderSource, get_proc_address); - INIT_FUNC(dispatch, glUseProgram, get_proc_address); - INIT_FUNC(dispatch, glUniform1i, get_proc_address); - INIT_FUNC(dispatch, glUniform1f, get_proc_address); - INIT_FUNC(dispatch, glUniform4f, get_proc_address); - INIT_FUNC(dispatch, glUniform4fv, get_proc_address); - INIT_FUNC(dispatch, glUniform1fv, get_proc_address); - INIT_FUNC(dispatch, glUniform2fv, get_proc_address); - INIT_FUNC(dispatch, glUniformMatrix3fv, get_proc_address); - INIT_FUNC(dispatch, glCreateProgram, get_proc_address); - INIT_FUNC(dispatch, glDeleteProgram, get_proc_address); - INIT_FUNC(dispatch, glCreateShader, get_proc_address); - INIT_FUNC(dispatch, glCompileShader, get_proc_address); - INIT_FUNC(dispatch, glAttachShader, get_proc_address); - INIT_FUNC(dispatch, glDeleteShader, get_proc_address); - INIT_FUNC(dispatch, glGetShaderiv, get_proc_address); - INIT_FUNC(dispatch, glGetShaderInfoLog, get_proc_address); - INIT_FUNC(dispatch, glGetProgramiv, get_proc_address); - INIT_FUNC(dispatch, glGetProgramInfoLog, get_proc_address); - INIT_FUNC(dispatch, glGetUniformLocation, get_proc_address); + INIT_FUNC(dispatch, glUseProgram, get_proc_address); + INIT_FUNC(dispatch, glUniform1i, get_proc_address); + INIT_FUNC(dispatch, glUniform1f, get_proc_address); + INIT_FUNC(dispatch, glUniform4f, get_proc_address); + INIT_FUNC(dispatch, glUniform4fv, get_proc_address); + INIT_FUNC(dispatch, glUniform1fv, get_proc_address); + INIT_FUNC(dispatch, glUniform2fv, get_proc_address); + INIT_FUNC(dispatch, glUniformMatrix3fv, get_proc_address); + INIT_FUNC(dispatch, glCreateProgram, get_proc_address); + INIT_FUNC(dispatch, glDeleteProgram, get_proc_address); + INIT_FUNC(dispatch, glCreateShader, get_proc_address); + INIT_FUNC(dispatch, glCompileShader, get_proc_address); + INIT_FUNC(dispatch, glAttachShader, get_proc_address); + INIT_FUNC(dispatch, glDeleteShader, get_proc_address); + INIT_FUNC(dispatch, glGetShaderiv, get_proc_address); + INIT_FUNC(dispatch, glGetShaderInfoLog, get_proc_address); + INIT_FUNC(dispatch, glGetProgramiv, get_proc_address); + INIT_FUNC(dispatch, glGetProgramInfoLog, get_proc_address); + INIT_FUNC(dispatch, glGetUniformLocation, get_proc_address); - return TRUE; - fail: - return FALSE; + return TRUE; + fail: + return FALSE; } diff --git a/xorg-server/glamor/glamor_gl_dispatch.h b/xorg-server/glamor/glamor_gl_dispatch.h index 76dadd49e..63790b41f 100644 --- a/xorg-server/glamor/glamor_gl_dispatch.h +++ b/xorg-server/glamor/glamor_gl_dispatch.h @@ -1,138 +1,128 @@ typedef struct glamor_gl_dispatch { - /* Transformation functions */ - void (*glMatrixMode) (GLenum mode); - void (*glLoadIdentity) (void); - void (*glViewport) (GLint x, GLint y, GLsizei width, - GLsizei height); - /* Drawing functions */ - void (*glRasterPos2i) (GLint x, GLint y); - - /* Vertex Array */ - void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count); - - /* Elements Array*/ - void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices); - void (*glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); - - /* Raster functions */ - void (*glReadPixels) (GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, GLvoid * pixels); - - void (*glDrawPixels) (GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid * pixels); - void (*glPixelStorei) (GLenum pname, GLint param); - /* Texture Mapping */ - - void (*glTexParameteri) (GLenum target, GLenum pname, GLint param); - void (*glTexImage2D) (GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLint border, GLenum format, GLenum type, - const GLvoid * pixels); - /* 1.1 */ - void (*glGenTextures) (GLsizei n, GLuint * textures); - void (*glDeleteTextures) (GLsizei n, const GLuint * textures); - void (*glBindTexture) (GLenum target, GLuint texture); - void (*glTexSubImage2D) (GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid * pixels); - /* MISC */ - void (*glFlush) (void); - void (*glFinish) (void); - void (*glGetIntegerv) (GLenum pname, GLint * params); - const GLubyte *(*glGetString) (GLenum name); - void (*glScissor) (GLint x, GLint y, GLsizei width, - GLsizei height); - void (*glEnable) (GLenum cap); - void (*glDisable) (GLenum cap); - void (*glBlendFunc) (GLenum sfactor, GLenum dfactor); - void (*glLogicOp) (GLenum opcode); - - /* 1.3 */ - void (*glActiveTexture) (GLenum texture); - - /* GL Extentions */ - void (*glGenBuffers) (GLsizei n, GLuint * buffers); - void (*glBufferData) (GLenum target, GLsizeiptr size, - const GLvoid * data, GLenum usage); - GLvoid *(*glMapBuffer) (GLenum target, GLenum access); - GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); - GLboolean (*glUnmapBuffer) (GLenum target); - void (*glBindBuffer) (GLenum target, GLuint buffer); - void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers); - - void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, - GLint level); - void (*glBindFramebuffer) (GLenum target, GLuint framebuffer); - void (*glDeleteFramebuffers) (GLsizei n, - const GLuint * framebuffers); - void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers); - GLenum (*glCheckFramebufferStatus) (GLenum target); - void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, - GLint srcY1, GLint dstX0, GLint dstY0, - GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); - - void (*glVertexAttribPointer) (GLuint index, GLint size, - GLenum type, GLboolean normalized, - GLsizei stride, - const GLvoid * pointer); - void (*glDisableVertexAttribArray) (GLuint index); - void (*glEnableVertexAttribArray) (GLuint index); - void (*glBindAttribLocation) (GLuint program, GLuint index, - const GLchar * name); - - void (*glLinkProgram) (GLuint program); - void (*glShaderSource) (GLuint shader, GLsizei count, - const GLchar * *string, - const GLint * length); - void (*glUseProgram) (GLuint program); - void (*glUniform1i) (GLint location, GLint v0); - void (*glUniform1f) (GLint location, GLfloat v0); - void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1, - GLfloat v2, GLfloat v3); - void (*glUniform1fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniform2fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniform4fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniformMatrix3fv) (GLint location, GLsizei count, - GLboolean transpose, const GLfloat* value); - GLuint (*glCreateProgram) (void); - GLuint (*glDeleteProgram) (GLuint); - GLuint (*glCreateShader) (GLenum type); - void (*glCompileShader) (GLuint shader); - void (*glAttachShader) (GLuint program, GLuint shader); - void (*glDeleteShader) (GLuint shader); - void (*glGetShaderiv) (GLuint shader, GLenum pname, - GLint * params); - void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize, - GLsizei * length, GLchar * infoLog); - void (*glGetProgramiv) (GLuint program, GLenum pname, - GLint * params); - void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize, - GLsizei * length, GLchar * infoLog); - GLint (*glGetUniformLocation) (GLuint program, - const GLchar * name); + /* Transformation functions */ + void (*glMatrixMode) (GLenum mode); + void (*glLoadIdentity) (void); + void (*glViewport) (GLint x, GLint y, GLsizei width, GLsizei height); + /* Drawing functions */ + void (*glRasterPos2i) (GLint x, GLint y); + + /* Vertex Array */ + void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count); + + /* Elements Array */ + void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, + const GLvoid * indices); + void (*glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid * indices); + + /* Raster functions */ + void (*glReadPixels) (GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid * pixels); + + void (*glDrawPixels) (GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels); + void (*glPixelStorei) (GLenum pname, GLint param); + /* Texture Mapping */ + + void (*glTexParameteri) (GLenum target, GLenum pname, GLint param); + void (*glTexImage2D) (GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid * pixels); + /* 1.1 */ + void (*glGenTextures) (GLsizei n, GLuint * textures); + void (*glDeleteTextures) (GLsizei n, const GLuint * textures); + void (*glBindTexture) (GLenum target, GLuint texture); + void (*glTexSubImage2D) (GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels); + /* MISC */ + void (*glFlush) (void); + void (*glFinish) (void); + void (*glGetIntegerv) (GLenum pname, GLint * params); + const GLubyte *(*glGetString) (GLenum name); + void (*glScissor) (GLint x, GLint y, GLsizei width, GLsizei height); + void (*glEnable) (GLenum cap); + void (*glDisable) (GLenum cap); + void (*glBlendFunc) (GLenum sfactor, GLenum dfactor); + void (*glLogicOp) (GLenum opcode); + + /* 1.3 */ + void (*glActiveTexture) (GLenum texture); + + /* GL Extentions */ + void (*glGenBuffers) (GLsizei n, GLuint * buffers); + void (*glBufferData) (GLenum target, GLsizeiptr size, + const GLvoid * data, GLenum usage); + GLvoid *(*glMapBuffer) (GLenum target, GLenum access); + GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, + GLsizeiptr length, GLbitfield access); + GLboolean(*glUnmapBuffer) (GLenum target); + void (*glBindBuffer) (GLenum target, GLuint buffer); + void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers); + + void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); + void (*glBindFramebuffer) (GLenum target, GLuint framebuffer); + void (*glDeleteFramebuffers) (GLsizei n, const GLuint * framebuffers); + void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers); + GLenum(*glCheckFramebufferStatus) (GLenum target); + void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + + void (*glVertexAttribPointer) (GLuint index, GLint size, + GLenum type, GLboolean normalized, + GLsizei stride, const GLvoid * pointer); + void (*glDisableVertexAttribArray) (GLuint index); + void (*glEnableVertexAttribArray) (GLuint index); + void (*glBindAttribLocation) (GLuint program, GLuint index, + const GLchar * name); + + void (*glLinkProgram) (GLuint program); + void (*glShaderSource) (GLuint shader, GLsizei count, + const GLchar * *string, const GLint * length); + void (*glUseProgram) (GLuint program); + void (*glUniform1i) (GLint location, GLint v0); + void (*glUniform1f) (GLint location, GLfloat v0); + void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1, + GLfloat v2, GLfloat v3); + void (*glUniform1fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniform2fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniform4fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniformMatrix3fv) (GLint location, GLsizei count, + GLboolean transpose, const GLfloat * value); + GLuint(*glCreateProgram) (void); + GLuint(*glDeleteProgram) (GLuint); + GLuint(*glCreateShader) (GLenum type); + void (*glCompileShader) (GLuint shader); + void (*glAttachShader) (GLuint program, GLuint shader); + void (*glDeleteShader) (GLuint shader); + void (*glGetShaderiv) (GLuint shader, GLenum pname, GLint * params); + void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize, + GLsizei * length, GLchar * infoLog); + void (*glGetProgramiv) (GLuint program, GLenum pname, GLint * params); + void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize, + GLsizei * length, GLchar * infoLog); + GLint(*glGetUniformLocation) (GLuint program, const GLchar * name); } glamor_gl_dispatch; - typedef void *(*get_proc_address_t) (const char *); _X_EXPORT Bool -glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, - int gl_version, - get_proc_address_t get_proc_address); +glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, + int gl_version, + get_proc_address_t get_proc_address); _X_EXPORT Bool + glamor_gl_dispatch_init(ScreenPtr screen, - struct glamor_gl_dispatch *dispatch, - int gl_version); + struct glamor_gl_dispatch *dispatch, int gl_version); diff --git a/xorg-server/glamor/glamor_glext.h b/xorg-server/glamor/glamor_glext.h index 1f7206b99..2a220c32f 100644 --- a/xorg-server/glamor/glamor_glext.h +++ b/xorg-server/glamor/glamor_glext.h @@ -26,7 +26,6 @@ * */ - #ifdef GLAMOR_GLES2 #define GL_BGRA GL_BGRA_EXT diff --git a/xorg-server/glamor/glamor_glyphblt.c b/xorg-server/glamor/glamor_glyphblt.c index b55327c4b..6f754ce2b 100644 --- a/xorg-server/glamor/glamor_glyphblt.c +++ b/xorg-server/glamor/glamor_glyphblt.c @@ -30,89 +30,90 @@ static Bool _glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - return TRUE; + miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return TRUE; } void glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, TRUE); + _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, + TRUE); } Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - return _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, FALSE); + return _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, + pglyphBase, FALSE); } static Bool _glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - return TRUE; + miPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return TRUE; } void glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, TRUE); + _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, + TRUE); } Bool glamor_poly_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - return _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, FALSE); + return _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, + pglyphBase, FALSE); } static Bool _glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y, Bool fallback) + DrawablePtr pDrawable, int w, int h, int x, int y, + Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_pixmap(&pBitmap->drawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_pixmap(&pBitmap->drawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miPushPixels(pGC, pBitmap, pDrawable, w, h, x, y); - return TRUE; + miPushPixels(pGC, pBitmap, pDrawable, w, h, x, y); + return TRUE; } void glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y) + DrawablePtr pDrawable, int w, int h, int x, int y) { - _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, TRUE); + _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, TRUE); } Bool glamor_push_pixels_nf(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y) + DrawablePtr pDrawable, int w, int h, int x, int y) { - return _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, FALSE); + return _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, FALSE); } - diff --git a/xorg-server/glamor/glamor_glyphs.c b/xorg-server/glamor/glamor_glyphs.c index fc361df42..3586b33da 100644 --- a/xorg-server/glamor/glamor_glyphs.c +++ b/xorg-server/glamor/glamor_glyphs.c @@ -71,25 +71,25 @@ #define MASK_CACHE_MASK ((1LL << (MASK_CACHE_WIDTH)) - 1) typedef struct { - PicturePtr source; - glamor_composite_rect_t rects[GLYPH_BUFFER_SIZE + 4]; - int count; + PicturePtr source; + glamor_composite_rect_t rects[GLYPH_BUFFER_SIZE + 4]; + int count; } glamor_glyph_buffer_t; struct glamor_glyph { - glamor_glyph_cache_t *cache; - uint16_t x, y; - uint16_t size, pos; - unsigned long long left_x1_map, left_x2_map; - unsigned long long right_x1_map, right_x2_map; /* Use to check real intersect or not. */ - Bool has_edge_map; - Bool cached; + glamor_glyph_cache_t *cache; + uint16_t x, y; + uint16_t size, pos; + unsigned long long left_x1_map, left_x2_map; + unsigned long long right_x1_map, right_x2_map; /* Use to check real intersect or not. */ + Bool has_edge_map; + Bool cached; }; typedef enum { - GLAMOR_GLYPH_SUCCESS, /* Glyph added to render buffer */ - GLAMOR_GLYPH_FAIL, /* out of memory, etc */ - GLAMOR_GLYPH_NEED_FLUSH, /* would evict a glyph already in the buffer */ + GLAMOR_GLYPH_SUCCESS, /* Glyph added to render buffer */ + GLAMOR_GLYPH_FAIL, /* out of memory, etc */ + GLAMOR_GLYPH_NEED_FLUSH, /* would evict a glyph already in the buffer */ } glamor_glyph_cache_result_t; #define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) @@ -98,7 +98,7 @@ static DevPrivateKeyRec glamor_glyph_key; static inline struct glamor_glyph * glamor_glyph_get_private(GlyphPtr glyph) { - return (struct glamor_glyph*)glyph->devPrivates; + return (struct glamor_glyph *) glyph->devPrivates; } /* @@ -122,170 +122,175 @@ glamor_glyph_get_private(GlyphPtr glyph) */ struct glamor_glyph_mask_cache_entry { - int idx; - int width; - int height; - int x; - int y; + int idx; + int width; + int height; + int x; + int y; }; static struct glamor_glyph_mask_cache { - PixmapPtr pixmap; - struct glamor_glyph_mask_cache_entry mcache[MASK_CACHE_WIDTH]; - unsigned int free_bitmap; - unsigned int cleared_bitmap; -}*mask_cache[GLAMOR_NUM_GLYPH_CACHE_FORMATS] = {NULL}; + PixmapPtr pixmap; + struct glamor_glyph_mask_cache_entry mcache[MASK_CACHE_WIDTH]; + unsigned int free_bitmap; + unsigned int cleared_bitmap; +} *mask_cache[GLAMOR_NUM_GLYPH_CACHE_FORMATS] = { +NULL}; static void clear_mask_cache_bitmap(struct glamor_glyph_mask_cache *maskcache, - unsigned int clear_mask_bits) + unsigned int clear_mask_bits) { - unsigned int i = 0; - BoxRec box[MASK_CACHE_WIDTH]; - int box_cnt = 0; - - assert((clear_mask_bits & ~MASK_CACHE_MASK) == 0); - for(i = 0; i < MASK_CACHE_WIDTH;i++) - { - if (clear_mask_bits & (1 << i)) { - box[box_cnt].x1 = maskcache->mcache[i].x; - box[box_cnt].x2 = maskcache->mcache[i].x + MASK_CACHE_MAX_SIZE; - box[box_cnt].y1 = maskcache->mcache[i].y; - box[box_cnt].y2 = maskcache->mcache[i].y + MASK_CACHE_MAX_SIZE; - box_cnt++; - } - } - glamor_solid_boxes(maskcache->pixmap, box, box_cnt, 0); - maskcache->cleared_bitmap |= clear_mask_bits; + unsigned int i = 0; + BoxRec box[MASK_CACHE_WIDTH]; + int box_cnt = 0; + + assert((clear_mask_bits & ~MASK_CACHE_MASK) == 0); + for (i = 0; i < MASK_CACHE_WIDTH; i++) { + if (clear_mask_bits & (1 << i)) { + box[box_cnt].x1 = maskcache->mcache[i].x; + box[box_cnt].x2 = maskcache->mcache[i].x + MASK_CACHE_MAX_SIZE; + box[box_cnt].y1 = maskcache->mcache[i].y; + box[box_cnt].y2 = maskcache->mcache[i].y + MASK_CACHE_MAX_SIZE; + box_cnt++; + } + } + glamor_solid_boxes(maskcache->pixmap, box, box_cnt, 0); + maskcache->cleared_bitmap |= clear_mask_bits; } static void clear_mask_cache(struct glamor_glyph_mask_cache *maskcache) { - int x = 0; - int cnt = MASK_CACHE_WIDTH; - unsigned int i = 0; - struct glamor_glyph_mask_cache_entry *mce; - glamor_solid(maskcache->pixmap, 0, CACHE_PICTURE_SIZE, CACHE_PICTURE_SIZE, - MASK_CACHE_MAX_SIZE, GXcopy, 0xFFFFFFFF, 0); - mce = &maskcache->mcache[0]; - while(cnt--) { - mce->width = 0; - mce->height = 0; - mce->x = x; - mce->y = CACHE_PICTURE_SIZE; - mce->idx = i++; - x += MASK_CACHE_MAX_SIZE; - mce++; - } - maskcache->free_bitmap = MASK_CACHE_MASK; - maskcache->cleared_bitmap = MASK_CACHE_MASK; + int x = 0; + int cnt = MASK_CACHE_WIDTH; + unsigned int i = 0; + struct glamor_glyph_mask_cache_entry *mce; + + glamor_solid(maskcache->pixmap, 0, CACHE_PICTURE_SIZE, CACHE_PICTURE_SIZE, + MASK_CACHE_MAX_SIZE, GXcopy, 0xFFFFFFFF, 0); + mce = &maskcache->mcache[0]; + while (cnt--) { + mce->width = 0; + mce->height = 0; + mce->x = x; + mce->y = CACHE_PICTURE_SIZE; + mce->idx = i++; + x += MASK_CACHE_MAX_SIZE; + mce++; + } + maskcache->free_bitmap = MASK_CACHE_MASK; + maskcache->cleared_bitmap = MASK_CACHE_MASK; } static int find_continuous_bits(unsigned int bits, int bits_cnt, unsigned int *pbits_mask) { - int idx = 0; - unsigned int bits_mask; - bits_mask = ((1LL << bits_cnt) - 1); - - if (unlikely(bits_cnt > 56)) { - while(bits) { - if ((bits & bits_mask) == bits_mask) { - *pbits_mask = bits_mask << idx; - return idx; - } - bits >>= 1; - idx++; - } - } else { - idx = __fls(bits); - while(bits) { - unsigned int temp_bits; - temp_bits = bits_mask << (idx - bits_cnt + 1); - if ((bits & temp_bits) == temp_bits) { - *pbits_mask = temp_bits; - return (idx - bits_cnt + 1); - } - /* Find first zero. And clear the tested bit.*/ - bits &= ~(1LL< 56)) { + while (bits) { + if ((bits & bits_mask) == bits_mask) { + *pbits_mask = bits_mask << idx; + return idx; + } + bits >>= 1; + idx++; + } + } + else { + idx = __fls(bits); + while (bits) { + unsigned int temp_bits; + + temp_bits = bits_mask << (idx - bits_cnt + 1); + if ((bits & temp_bits) == temp_bits) { + *pbits_mask = temp_bits; + return (idx - bits_cnt + 1); + } + /* Find first zero. And clear the tested bit. */ + bits &= ~(1LL << idx); + idx = __fls(~bits); + bits &= ~((1LL << idx) - 1); + idx--; + } + } + return -1; } static struct glamor_glyph_mask_cache_entry * get_mask_cache(struct glamor_glyph_mask_cache *maskcache, int blocks) { - int free_cleared_bit, idx = -1; - int retry_cnt = 0; - unsigned int bits_mask = 0; - - if (maskcache->free_bitmap == 0) - return NULL; -retry: - free_cleared_bit = maskcache->free_bitmap & maskcache->cleared_bitmap; - if (free_cleared_bit && blocks == 1) { - idx = __fls(free_cleared_bit); - bits_mask = 1 << idx; - } else if (free_cleared_bit && blocks > 1) { - idx = find_continuous_bits(free_cleared_bit, blocks, &bits_mask); - } - - if (idx < 0) { - clear_mask_cache_bitmap(maskcache, maskcache->free_bitmap); - if (retry_cnt++ > 2) - return NULL; - goto retry; - } - - maskcache->cleared_bitmap &= ~bits_mask; - maskcache->free_bitmap &= ~bits_mask; - DEBUGF("get idx %d free %x clear %x \n", - idx, maskcache->free_bitmap, maskcache->cleared_bitmap); - return &maskcache->mcache[idx]; + int free_cleared_bit, idx = -1; + int retry_cnt = 0; + unsigned int bits_mask = 0; + + if (maskcache->free_bitmap == 0) + return NULL; + retry: + free_cleared_bit = maskcache->free_bitmap & maskcache->cleared_bitmap; + if (free_cleared_bit && blocks == 1) { + idx = __fls(free_cleared_bit); + bits_mask = 1 << idx; + } + else if (free_cleared_bit && blocks > 1) { + idx = find_continuous_bits(free_cleared_bit, blocks, &bits_mask); + } + + if (idx < 0) { + clear_mask_cache_bitmap(maskcache, maskcache->free_bitmap); + if (retry_cnt++ > 2) + return NULL; + goto retry; + } + + maskcache->cleared_bitmap &= ~bits_mask; + maskcache->free_bitmap &= ~bits_mask; + DEBUGF("get idx %d free %x clear %x \n", + idx, maskcache->free_bitmap, maskcache->cleared_bitmap); + return &maskcache->mcache[idx]; } static void put_mask_cache_bitmap(struct glamor_glyph_mask_cache *maskcache, - unsigned int bitmap) + unsigned int bitmap) { - maskcache->free_bitmap |= bitmap; - DEBUGF("put bitmap %x free %x clear %x \n", - bitmap, maskcache->free_bitmap, maskcache->cleared_bitmap); + maskcache->free_bitmap |= bitmap; + DEBUGF("put bitmap %x free %x clear %x \n", + bitmap, maskcache->free_bitmap, maskcache->cleared_bitmap); } static void glamor_unrealize_glyph_caches(ScreenPtr pScreen) { - glamor_screen_private *glamor = glamor_get_screen_private(pScreen); - int i; + glamor_screen_private *glamor = glamor_get_screen_private(pScreen); + int i; - if (!glamor->glyph_cache_initialized) - return; + if (!glamor->glyph_cache_initialized) + return; - for (i = 0; i < GLAMOR_NUM_GLYPH_CACHE_FORMATS; i++) { - glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; + for (i = 0; i < GLAMOR_NUM_GLYPH_CACHE_FORMATS; i++) { + glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; - if (cache->picture) - FreePicture(cache->picture, 0); + if (cache->picture) + FreePicture(cache->picture, 0); - if (cache->glyphs) - free(cache->glyphs); + if (cache->glyphs) + free(cache->glyphs); - if (mask_cache[i]) - free(mask_cache[i]); - } - glamor->glyph_cache_initialized = FALSE; + if (mask_cache[i]) + free(mask_cache[i]); + } + glamor->glyph_cache_initialized = FALSE; } void glamor_glyphs_fini(ScreenPtr pScreen) { - glamor_unrealize_glyph_caches(pScreen); + glamor_unrealize_glyph_caches(pScreen); } /* All caches for a single format share a single pixmap for glyph storage, @@ -301,80 +306,80 @@ glamor_glyphs_fini(ScreenPtr pScreen) static Bool glamor_realize_glyph_caches(ScreenPtr pScreen) { - glamor_screen_private *glamor = glamor_get_screen_private(pScreen); - unsigned int formats[] = { - PIXMAN_a8, - PIXMAN_a8r8g8b8, - }; - int i; - - if (glamor->glyph_cache_initialized) - return TRUE; - - glamor->glyph_cache_initialized = TRUE; - memset(glamor->glyphCaches, 0, sizeof(glamor->glyphCaches)); - - for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) { - glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; - PixmapPtr pixmap; - PicturePtr picture; - XID component_alpha; - int depth = PIXMAN_FORMAT_DEPTH(formats[i]); - int error; - PictFormatPtr pPictFormat = - PictureMatchFormat(pScreen, depth, formats[i]); - if (!pPictFormat) - goto bail; - - /* Now allocate the pixmap and picture */ - pixmap = pScreen->CreatePixmap(pScreen, - CACHE_PICTURE_SIZE, - CACHE_PICTURE_SIZE + MASK_CACHE_MAX_SIZE, depth, - 0); - if (!pixmap) - goto bail; - - component_alpha = NeedsComponent(pPictFormat->format); - picture = CreatePicture(0, &pixmap->drawable, pPictFormat, - CPComponentAlpha, &component_alpha, - serverClient, &error); - - pScreen->DestroyPixmap(pixmap); - if (!picture) - goto bail; - - ValidatePicture(picture); - - cache->picture = picture; - cache->glyphs = calloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE); - if (!cache->glyphs) - goto bail; - - cache->evict = rand() % GLYPH_CACHE_SIZE; - mask_cache[i] = calloc(1, sizeof(*mask_cache[i])); - mask_cache[i]->pixmap = pixmap; - clear_mask_cache(mask_cache[i]); - } - assert(i == GLAMOR_NUM_GLYPH_CACHE_FORMATS); - - return TRUE; - - bail: - glamor_unrealize_glyph_caches(pScreen); - return FALSE; + glamor_screen_private *glamor = glamor_get_screen_private(pScreen); + + unsigned int formats[] = { + PIXMAN_a8, + PIXMAN_a8r8g8b8, + }; + int i; + + if (glamor->glyph_cache_initialized) + return TRUE; + + glamor->glyph_cache_initialized = TRUE; + memset(glamor->glyphCaches, 0, sizeof(glamor->glyphCaches)); + + for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) { + glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; + PixmapPtr pixmap; + PicturePtr picture; + XID component_alpha; + int depth = PIXMAN_FORMAT_DEPTH(formats[i]); + int error; + PictFormatPtr pPictFormat = + PictureMatchFormat(pScreen, depth, formats[i]); + if (!pPictFormat) + goto bail; + + /* Now allocate the pixmap and picture */ + pixmap = pScreen->CreatePixmap(pScreen, + CACHE_PICTURE_SIZE, + CACHE_PICTURE_SIZE + MASK_CACHE_MAX_SIZE, + depth, 0); + if (!pixmap) + goto bail; + + component_alpha = NeedsComponent(pPictFormat->format); + picture = CreatePicture(0, &pixmap->drawable, pPictFormat, + CPComponentAlpha, &component_alpha, + serverClient, &error); + + pScreen->DestroyPixmap(pixmap); + if (!picture) + goto bail; + + ValidatePicture(picture); + + cache->picture = picture; + cache->glyphs = calloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE); + if (!cache->glyphs) + goto bail; + + cache->evict = rand() % GLYPH_CACHE_SIZE; + mask_cache[i] = calloc(1, sizeof(*mask_cache[i])); + mask_cache[i]->pixmap = pixmap; + clear_mask_cache(mask_cache[i]); + } + assert(i == GLAMOR_NUM_GLYPH_CACHE_FORMATS); + + return TRUE; + + bail: + glamor_unrealize_glyph_caches(pScreen); + return FALSE; } - Bool glamor_glyphs_init(ScreenPtr pScreen) { - if (!dixRegisterPrivateKey(&glamor_glyph_key, - PRIVATE_GLYPH, sizeof(struct glamor_glyph))) - return FALSE; + if (!dixRegisterPrivateKey(&glamor_glyph_key, + PRIVATE_GLYPH, sizeof(struct glamor_glyph))) + return FALSE; - /* Skip pixmap creation if we don't intend to use it. */ + /* Skip pixmap creation if we don't intend to use it. */ - return glamor_realize_glyph_caches(pScreen); + return glamor_realize_glyph_caches(pScreen); } /* The most efficient thing to way to upload the glyph to the screen @@ -382,209 +387,209 @@ glamor_glyphs_init(ScreenPtr pScreen) */ static void glamor_glyph_cache_upload_glyph(ScreenPtr screen, - glamor_glyph_cache_t * cache, - GlyphPtr glyph, int x, int y) + glamor_glyph_cache_t *cache, + GlyphPtr glyph, int x, int y) { - PicturePtr pGlyphPicture = GlyphPicture(glyph)[screen->myNum]; - PixmapPtr pGlyphPixmap = (PixmapPtr) pGlyphPicture->pDrawable; - PixmapPtr pCachePixmap = (PixmapPtr) cache->picture->pDrawable; - PixmapPtr scratch; - BoxRec box; - GCPtr gc; - - gc = GetScratchGC(pCachePixmap->drawable.depth, screen); - if (!gc) - return; - - ValidateGC(&pCachePixmap->drawable, gc); - - scratch = pGlyphPixmap; - if (pGlyphPixmap->drawable.depth != pCachePixmap->drawable.depth) { - - scratch = glamor_create_pixmap(screen, - glyph->info.width, - glyph->info.height, - pCachePixmap-> - drawable.depth, 0); - if (scratch) { - PicturePtr picture; - int error; - - picture = - CreatePicture(0, - &scratch->drawable, - PictureMatchFormat - (screen, - pCachePixmap-> - drawable.depth, - cache->picture->format), - 0, NULL, serverClient, - &error); - if (picture) { - ValidatePicture(picture); - glamor_composite(PictOpSrc, - pGlyphPicture, - NULL, picture, - 0, 0, 0, 0, 0, - 0, - glyph->info.width, - glyph->info.height); - FreePicture(picture, 0); - } - } else { - scratch = pGlyphPixmap; - } - } - - box.x1 = x; - box.y1 = y; - box.x2 = x + glyph->info.width; - box.y2 = y + glyph->info.height; - glamor_copy_n_to_n_nf(&scratch->drawable, - &pCachePixmap->drawable, NULL, - &box, 1, - -x, -y, - FALSE, FALSE, 0, NULL); - if (scratch != pGlyphPixmap) - screen->DestroyPixmap(scratch); - - FreeScratchGC(gc); + PicturePtr pGlyphPicture = GlyphPicture(glyph)[screen->myNum]; + PixmapPtr pGlyphPixmap = (PixmapPtr) pGlyphPicture->pDrawable; + PixmapPtr pCachePixmap = (PixmapPtr) cache->picture->pDrawable; + PixmapPtr scratch; + BoxRec box; + GCPtr gc; + + gc = GetScratchGC(pCachePixmap->drawable.depth, screen); + if (!gc) + return; + + ValidateGC(&pCachePixmap->drawable, gc); + + scratch = pGlyphPixmap; + if (pGlyphPixmap->drawable.depth != pCachePixmap->drawable.depth) { + + scratch = glamor_create_pixmap(screen, + glyph->info.width, + glyph->info.height, + pCachePixmap->drawable.depth, 0); + if (scratch) { + PicturePtr picture; + int error; + + picture = + CreatePicture(0, + &scratch->drawable, + PictureMatchFormat + (screen, + pCachePixmap->drawable.depth, + cache->picture->format), + 0, NULL, serverClient, &error); + if (picture) { + ValidatePicture(picture); + glamor_composite(PictOpSrc, + pGlyphPicture, + NULL, picture, + 0, 0, 0, 0, 0, + 0, glyph->info.width, glyph->info.height); + FreePicture(picture, 0); + } + } + else { + scratch = pGlyphPixmap; + } + } + + box.x1 = x; + box.y1 = y; + box.x2 = x + glyph->info.width; + box.y2 = y + glyph->info.height; + glamor_copy_n_to_n_nf(&scratch->drawable, + &pCachePixmap->drawable, NULL, + &box, 1, -x, -y, FALSE, FALSE, 0, NULL); + if (scratch != pGlyphPixmap) + screen->DestroyPixmap(scratch); + + FreeScratchGC(gc); } - void glamor_glyph_unrealize(ScreenPtr screen, GlyphPtr glyph) { - struct glamor_glyph *priv; + struct glamor_glyph *priv; - /* Use Lookup in case we have not attached to this glyph. */ - priv = glamor_glyph_get_private(glyph); + /* Use Lookup in case we have not attached to this glyph. */ + priv = glamor_glyph_get_private(glyph); - if (priv->cached) - priv->cache->glyphs[priv->pos] = NULL; + if (priv->cached) + priv->cache->glyphs[priv->pos] = NULL; } /* Cut and paste from render/glyph.c - probably should export it instead */ static void glamor_glyph_extents(int nlist, - GlyphListPtr list, GlyphPtr * glyphs, BoxPtr extents) + GlyphListPtr list, GlyphPtr *glyphs, BoxPtr extents) { - int x1, x2, y1, y2; - int x, y, n; - - x1 = y1 = MAXSHORT; - x2 = y2 = MINSHORT; - x = y = 0; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - list++; - while (n--) { - GlyphPtr glyph = *glyphs++; - int v; - - v = x - glyph->info.x; - if (v < x1) - x1 = v; - v += glyph->info.width; - if (v > x2) - x2 = v; - - v = y - glyph->info.y; - if (v < y1) - y1 = v; - v += glyph->info.height; - if (v > y2) - y2 = v; - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - } - - extents->x1 = x1 < MINSHORT ? MINSHORT : x1; - extents->x2 = x2 > MAXSHORT ? MAXSHORT : x2; - extents->y1 = y1 < MINSHORT ? MINSHORT : y1; - extents->y2 = y2 > MAXSHORT ? MAXSHORT : y2; + int x1, x2, y1, y2; + int x, y, n; + + x1 = y1 = MAXSHORT; + x2 = y2 = MINSHORT; + x = y = 0; + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + list++; + while (n--) { + GlyphPtr glyph = *glyphs++; + int v; + + v = x - glyph->info.x; + if (v < x1) + x1 = v; + v += glyph->info.width; + if (v > x2) + x2 = v; + + v = y - glyph->info.y; + if (v < y1) + y1 = v; + v += glyph->info.height; + if (v > y2) + y2 = v; + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + } + + extents->x1 = x1 < MINSHORT ? MINSHORT : x1; + extents->x2 = x2 > MAXSHORT ? MAXSHORT : x2; + extents->y1 = y1 < MINSHORT ? MINSHORT : y1; + extents->y2 = y2 > MAXSHORT ? MAXSHORT : y2; } static void glamor_glyph_priv_get_edge_map(GlyphPtr glyph, struct glamor_glyph *priv, - PicturePtr glyph_picture) + PicturePtr glyph_picture) { - PixmapPtr glyph_pixmap = (PixmapPtr) glyph_picture->pDrawable; - int j; - unsigned long long left_x1_map = 0, left_x2_map = 0; - unsigned long long right_x1_map = 0, right_x2_map = 0; - int bitsPerPixel; - int stride; - void *bits; - int width; - unsigned int left_x1_data = 0, left_x2_data = 0; - unsigned int right_x1_data = 0, right_x2_data = 0; - - bitsPerPixel = glyph_pixmap->drawable.bitsPerPixel; - stride = glyph_pixmap->devKind; - bits = glyph_pixmap->devPrivate.ptr; - width = glyph->info.width; - - if (glyph_pixmap->drawable.width < 2 - || !(glyph_pixmap->drawable.depth == 8 - || glyph_pixmap->drawable.depth == 1 - || glyph_pixmap->drawable.depth == 32)) { - priv->has_edge_map = FALSE; - return; - } - - left_x1_map = left_x2_map = 0; - right_x1_map = right_x2_map = 0; - - for(j = 0; j < glyph_pixmap->drawable.height; j++) - { - if (bitsPerPixel == 8) { - unsigned char *data; - data = (unsigned char*)((unsigned char*)bits + stride * j); - left_x1_data = *data++; - left_x2_data = *data; - data = (unsigned char*)((unsigned char*)bits + stride * j + width - 2); - right_x1_data = *data++; - right_x2_data = *data; - } else if (bitsPerPixel == 32) { - left_x1_data = *((unsigned int*)bits + stride/4 * j); - left_x2_data = *((unsigned int*)bits + stride/4 * j + 1); - right_x1_data = *((unsigned int*)bits + stride/4 * j + width - 2); - right_x2_data = *((unsigned int*)bits + stride/4 * j + width - 1); - } else if (bitsPerPixel == 1) { - unsigned char temp; - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j) & 0x3; - left_x1_data = temp & 0x1; - left_x2_data = temp & 0x2; - - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j - + (glyph_pixmap->drawable.width - 2)/8); - right_x1_data = temp - & (1 << ((glyph_pixmap->drawable.width - 2) % 8)); - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j - + (glyph_pixmap->drawable.width - 1)/8); - right_x2_data = temp - & (1 << ((glyph_pixmap->drawable.width - 1) % 8)); - } - left_x1_map |= (left_x1_data !=0) << j; - left_x2_map |= (left_x2_data !=0) << j; - right_x1_map |= (right_x1_data !=0) << j; - right_x2_map |= (right_x2_data !=0) << j; - } - - priv->left_x1_map = left_x1_map; - priv->left_x2_map = left_x2_map; - priv->right_x1_map = right_x1_map; - priv->right_x2_map = right_x2_map; - priv->has_edge_map = TRUE; - return; + PixmapPtr glyph_pixmap = (PixmapPtr) glyph_picture->pDrawable; + int j; + unsigned long long left_x1_map = 0, left_x2_map = 0; + unsigned long long right_x1_map = 0, right_x2_map = 0; + int bitsPerPixel; + int stride; + void *bits; + int width; + unsigned int left_x1_data = 0, left_x2_data = 0; + unsigned int right_x1_data = 0, right_x2_data = 0; + + bitsPerPixel = glyph_pixmap->drawable.bitsPerPixel; + stride = glyph_pixmap->devKind; + bits = glyph_pixmap->devPrivate.ptr; + width = glyph->info.width; + + if (glyph_pixmap->drawable.width < 2 + || !(glyph_pixmap->drawable.depth == 8 + || glyph_pixmap->drawable.depth == 1 + || glyph_pixmap->drawable.depth == 32)) { + priv->has_edge_map = FALSE; + return; + } + + left_x1_map = left_x2_map = 0; + right_x1_map = right_x2_map = 0; + + for (j = 0; j < glyph_pixmap->drawable.height; j++) { + if (bitsPerPixel == 8) { + unsigned char *data; + + data = (unsigned char *) ((unsigned char *) bits + stride * j); + left_x1_data = *data++; + left_x2_data = *data; + data = + (unsigned char *) ((unsigned char *) bits + stride * j + width - + 2); + right_x1_data = *data++; + right_x2_data = *data; + } + else if (bitsPerPixel == 32) { + left_x1_data = *((unsigned int *) bits + stride / 4 * j); + left_x2_data = *((unsigned int *) bits + stride / 4 * j + 1); + right_x1_data = + *((unsigned int *) bits + stride / 4 * j + width - 2); + right_x2_data = + *((unsigned int *) bits + stride / 4 * j + width - 1); + } + else if (bitsPerPixel == 1) { + unsigned char temp; + + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j) & 0x3; + left_x1_data = temp & 0x1; + left_x2_data = temp & 0x2; + + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j + + (glyph_pixmap->drawable.width - 2) / 8); + right_x1_data = temp + & (1 << ((glyph_pixmap->drawable.width - 2) % 8)); + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j + + (glyph_pixmap->drawable.width - 1) / 8); + right_x2_data = temp + & (1 << ((glyph_pixmap->drawable.width - 1) % 8)); + } + left_x1_map |= (left_x1_data != 0) << j; + left_x2_map |= (left_x2_data != 0) << j; + right_x1_map |= (right_x1_data != 0) << j; + right_x2_map |= (right_x2_data != 0) << j; + } + + priv->left_x1_map = left_x1_map; + priv->left_x2_map = left_x2_map; + priv->right_x1_map = right_x1_map; + priv->right_x2_map = right_x2_map; + priv->has_edge_map = TRUE; + return; } /** @@ -597,82 +602,80 @@ glamor_glyph_priv_get_edge_map(GlyphPtr glyph, struct glamor_glyph *priv, #define INTERSECTED 1 struct glamor_glyph_list { - int nlist; - GlyphListPtr list; - GlyphPtr *glyphs; - int type; + int nlist; + GlyphListPtr list; + GlyphPtr *glyphs; + int type; }; static Bool glyph_new_fixed_list(struct glamor_glyph_list *fixed_list, - GlyphPtr *cur_glyphs, - GlyphPtr **head_glyphs, - GlyphListPtr cur_list, - int cur_pos, int cur_x, int cur_y, - int x1, int y1, int x2, int y2, - GlyphListPtr *head_list, - int *head_pos, - int *head_x, - int *head_y, - int *fixed_cnt, - int type, - BoxPtr prev_extents - ) + GlyphPtr *cur_glyphs, + GlyphPtr ** head_glyphs, + GlyphListPtr cur_list, + int cur_pos, int cur_x, int cur_y, + int x1, int y1, int x2, int y2, + GlyphListPtr *head_list, + int *head_pos, + int *head_x, + int *head_y, int *fixed_cnt, int type, BoxPtr prev_extents) { - int x_off = 0; - int y_off = 0; - int n_off = 0; - int list_cnt; - if (type == NON_INTERSECTED) { - if (x1 < prev_extents->x2 && x2 > prev_extents->x1 - && y1 < prev_extents->y2 && y2 > prev_extents->y1) - return FALSE; - x_off = (*(cur_glyphs-1))->info.xOff; - y_off = (*(cur_glyphs-1))->info.yOff; - n_off = 1; - } - - list_cnt = cur_list - *head_list + 1; - if (cur_pos <= n_off) { - DEBUGF("break at %d n_off %d\n", cur_pos, n_off); - list_cnt--; - if (cur_pos < n_off) { - /* we overlap with previous list's last glyph. */ - x_off += cur_list->xOff; - y_off += cur_list->yOff; - cur_list--; - cur_pos = cur_list->len; - if (cur_pos <= n_off) { - list_cnt--; - } - } - } - DEBUGF("got %d lists\n", list_cnt); - if (list_cnt != 0) { - fixed_list->list = malloc(list_cnt * sizeof(*cur_list)); - memcpy(fixed_list->list, *head_list, list_cnt * sizeof(*cur_list)); - fixed_list->list[0].xOff = *head_x; - fixed_list->list[0].yOff = *head_y; - fixed_list->glyphs = *head_glyphs; - fixed_list->type = type & INTERSECTED_TYPE_MASK; - fixed_list->nlist = list_cnt; - if (cur_list != *head_list) { - fixed_list->list[0].len = (*head_list)->len - *head_pos; - if (cur_pos != n_off) - fixed_list->list[list_cnt - 1].len = cur_pos - n_off; - } else - fixed_list->list[0].len = cur_pos - *head_pos - n_off; - (*fixed_cnt)++; - } - - if (type <= INTERSECTED) { - *head_list = cur_list; - *head_pos = cur_pos - n_off; - *head_x = cur_x - x_off; - *head_y = cur_y - y_off; - *head_glyphs = cur_glyphs - n_off; - } - return TRUE; + int x_off = 0; + int y_off = 0; + int n_off = 0; + int list_cnt; + + if (type == NON_INTERSECTED) { + if (x1 < prev_extents->x2 && x2 > prev_extents->x1 + && y1 < prev_extents->y2 && y2 > prev_extents->y1) + return FALSE; + x_off = (*(cur_glyphs - 1))->info.xOff; + y_off = (*(cur_glyphs - 1))->info.yOff; + n_off = 1; + } + + list_cnt = cur_list - *head_list + 1; + if (cur_pos <= n_off) { + DEBUGF("break at %d n_off %d\n", cur_pos, n_off); + list_cnt--; + if (cur_pos < n_off) { + /* we overlap with previous list's last glyph. */ + x_off += cur_list->xOff; + y_off += cur_list->yOff; + cur_list--; + cur_pos = cur_list->len; + if (cur_pos <= n_off) { + list_cnt--; + } + } + } + DEBUGF("got %d lists\n", list_cnt); + if (list_cnt != 0) { + fixed_list->list = malloc(list_cnt * sizeof(*cur_list)); + memcpy(fixed_list->list, *head_list, list_cnt * sizeof(*cur_list)); + fixed_list->list[0].xOff = *head_x; + fixed_list->list[0].yOff = *head_y; + fixed_list->glyphs = *head_glyphs; + fixed_list->type = type & INTERSECTED_TYPE_MASK; + fixed_list->nlist = list_cnt; + if (cur_list != *head_list) { + fixed_list->list[0].len = (*head_list)->len - *head_pos; + if (cur_pos != n_off) + fixed_list->list[list_cnt - 1].len = cur_pos - n_off; + } + else + fixed_list->list[0].len = cur_pos - *head_pos - n_off; + (*fixed_cnt)++; + } + + if (type <= INTERSECTED) { + *head_list = cur_list; + *head_pos = cur_pos - n_off; + *head_x = cur_x - x_off; + *head_y = cur_y - y_off; + *head_glyphs = cur_glyphs - n_off; + } + return TRUE; } /* @@ -692,463 +695,469 @@ glyph_new_fixed_list(struct glamor_glyph_list *fixed_list, **/ static int -glamor_glyphs_intersect(int nlist, GlyphListPtr list, GlyphPtr * glyphs, - PictFormatShort mask_format, - ScreenPtr screen, Bool check_fake_overlap, - struct glamor_glyph_list * fixed_list, - int fixed_size) +glamor_glyphs_intersect(int nlist, GlyphListPtr list, GlyphPtr *glyphs, + PictFormatShort mask_format, + ScreenPtr screen, Bool check_fake_overlap, + struct glamor_glyph_list *fixed_list, int fixed_size) { - int x1, x2, y1, y2; - int n; - int x, y; - BoxPtr extents; - BoxRec prev_extents; - Bool first = TRUE, first_list = TRUE; - Bool need_free_list_region = FALSE; - Bool need_free_fixed_list = FALSE; - struct glamor_glyph *priv = NULL; - Bool in_non_intersected_list = -1; - GlyphListPtr head_list; - int head_x, head_y, head_pos; - int fixed_cnt = 0; - GlyphPtr *head_glyphs; - GlyphListPtr cur_list = list; - RegionRec list_region; - RegionRec current_region; - BoxRec current_box; - - if (nlist > 1) { - pixman_region_init(&list_region); - need_free_list_region = TRUE; - } - - pixman_region_init(¤t_region); - - extents = pixman_region_extents(¤t_region); - - x = 0; - y = 0; - x1 = x2 = y1 = y2 = 0; - n = 0; - extents->x1 = 0; - extents->y1 = 0; - extents->x2 = 0; - extents->y2 = 0; - - head_list = list; - DEBUGF("has %d lists.\n", nlist); - while (nlist--) { - BoxRec left_box, right_box = {0}; - Bool has_left_edge_box = FALSE, has_right_edge_box = FALSE; - Bool left_to_right; - struct glamor_glyph *left_priv = NULL, *right_priv = NULL; - - x += list->xOff; - y += list->yOff; - n = list->len; - left_to_right = TRUE; - cur_list = list++; - - if (unlikely(!first_list)) { - pixman_region_init_with_extents(¤t_region, extents); - pixman_region_union(&list_region, &list_region, ¤t_region); - first = TRUE; - } else { - head_list = cur_list; - head_pos = cur_list->len - n; - head_x = x; - head_y = y; - head_glyphs = glyphs; - } - - DEBUGF("current list %p has %d glyphs\n", cur_list, n); - while (n--) { - GlyphPtr glyph = *glyphs++; - - DEBUGF("the %dth glyph\n", cur_list->len - n - 1); - if (glyph->info.width == 0 - || glyph->info.height == 0) { - x += glyph->info.xOff; - y += glyph->info.yOff; - continue; - } - if (mask_format - && mask_format != GlyphPicture(glyph)[screen->myNum]->format) { - need_free_fixed_list = TRUE; - goto done; - } - - x1 = x - glyph->info.x; - if (x1 < MINSHORT) - x1 = MINSHORT; - y1 = y - glyph->info.y; - if (y1 < MINSHORT) - y1 = MINSHORT; - if (check_fake_overlap) - priv = glamor_glyph_get_private(glyph); - - x2 = x1 + glyph->info.width; - y2 = y1 + glyph->info.height; - - if (x2 > MAXSHORT) - x2 = MAXSHORT; - if (y2 > MAXSHORT) - y2 = MAXSHORT; - - if (first) { - extents->x1 = x1; - extents->y1 = y1; - extents->x2 = x2; - extents->y2 = y2; - - prev_extents = *extents; - - first = FALSE; - if (check_fake_overlap && priv - && priv->has_edge_map && glyph->info.yOff == 0) { - left_box.x1 = x1; - left_box.x2 = x1 + 1; - left_box.y1 = y1; - - right_box.x1 = x2 - 2; - right_box.x2 = x2 - 1; - right_box.y1 = y1; - left_priv = right_priv = priv; - has_left_edge_box = TRUE; - has_right_edge_box = TRUE; - } - } else { - if (unlikely(!first_list)) { - current_box.x1 = x1; - current_box.y1 = y1; - current_box.x2 = x2; - current_box.y2 = y2; - if (pixman_region_contains_rectangle(&list_region, ¤t_box) != PIXMAN_REGION_OUT) { - need_free_fixed_list = TRUE; - goto done; - } - } - - if (x1 < extents->x2 && x2 > extents->x1 - && y1 < extents->y2 - && y2 > extents->y1) { - - if (check_fake_overlap && (has_left_edge_box || has_right_edge_box) - && priv->has_edge_map && glyph->info.yOff == 0) { - int left_dx, right_dx; - unsigned long long intersected; - - left_dx = has_left_edge_box ? 1 : 0; - right_dx = has_right_edge_box ? 1 : 0; - if (x1 + 1 < extents->x2 - right_dx && x2 - 1 > extents->x1 + left_dx) - goto real_intersected; - - if (left_to_right && has_right_edge_box) { - if (x1 == right_box.x1) { - intersected = ((priv->left_x1_map & right_priv->right_x1_map) - | (priv->left_x2_map & right_priv->right_x2_map)); - if (intersected) - goto real_intersected; - } else if (x1 == right_box.x2) { - intersected = (priv->left_x1_map & right_priv->right_x2_map); - if (intersected) { - #ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK - /* tolerate with two pixels overlap. */ - intersected &= ~(1<<__fls(intersected)); - if ((intersected & (intersected - 1))) - #endif - goto real_intersected; - } - } - } else if (!left_to_right && has_left_edge_box) { - if (x2 - 1 == left_box.x1) { - intersected = (priv->right_x2_map & left_priv->left_x1_map); - if (intersected) { - #ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK - /* tolerate with two pixels overlap. */ - intersected &= ~(1<<__fls(intersected)); - if ((intersected & (intersected - 1))) - #endif - goto real_intersected; - } - } else if (x2 - 1 == right_box.x2) { - if ((priv->right_x1_map & left_priv->left_x1_map) - || (priv->right_x2_map & left_priv->left_x2_map)) - goto real_intersected; - } - } else { - if (x1 < extents->x2 && x1 + 2 > extents->x1) - goto real_intersected; - } - goto non_intersected; - } else { -real_intersected: - DEBUGF("overlap with previous glyph.\n"); - if (in_non_intersected_list == 1) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - NON_INTERSECTED, - &prev_extents - )){ - need_free_fixed_list = TRUE; - goto done; - } - } - - in_non_intersected_list = 0; - - } - } else { -non_intersected: - DEBUGF("doesn't overlap with previous glyph.\n"); - if (in_non_intersected_list == 0) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - INTERSECTED, - &prev_extents - )) { - need_free_fixed_list = TRUE; - goto done; - } - } - in_non_intersected_list = 1; - } - prev_extents = *extents; - } - - if (check_fake_overlap && priv - && priv->has_edge_map && glyph->info.yOff == 0) { - if (!has_left_edge_box || x1 < extents->x1) { - left_box.x1 = x1; - left_box.x2 = x1 + 1; - left_box.y1 = y1; - has_left_edge_box = TRUE; - left_priv = priv; - } - - if (!has_right_edge_box || x2 > extents->x2) { - right_box.x1 = x2 - 2; - right_box.x2 = x2 - 1; - right_box.y1 = y1; - has_right_edge_box = TRUE; - right_priv = priv; - } - } - - if (x1 < extents->x1) - extents->x1 = x1; - if (x2 > extents->x2) - extents->x2 = x2; - - if (y1 < extents->y1) - extents->y1 = y1; - if (y2 > extents->y2) - extents->y2 = y2; - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - first_list = FALSE; - } - - if (in_non_intersected_list == 0 && fixed_cnt == 0) { - fixed_cnt = -1; - goto done; - } - - if ((in_non_intersected_list != -1 - || head_pos != n) && (fixed_cnt > 0)) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - (!in_non_intersected_list) | 0x80, - &prev_extents - )) { - need_free_fixed_list = TRUE; - goto done; - } - } - -done: - if (need_free_list_region) - pixman_region_fini(&list_region); - pixman_region_fini(¤t_region); - - if (need_free_fixed_list && fixed_cnt >= 0) { - while(fixed_cnt--) { - free(fixed_list[fixed_cnt].list); - } - } - - DEBUGF("Got %d fixed list \n", fixed_cnt); - return fixed_cnt; + int x1, x2, y1, y2; + int n; + int x, y; + BoxPtr extents; + BoxRec prev_extents; + Bool first = TRUE, first_list = TRUE; + Bool need_free_list_region = FALSE; + Bool need_free_fixed_list = FALSE; + struct glamor_glyph *priv = NULL; + Bool in_non_intersected_list = -1; + GlyphListPtr head_list; + int head_x, head_y, head_pos; + int fixed_cnt = 0; + GlyphPtr *head_glyphs; + GlyphListPtr cur_list = list; + RegionRec list_region; + RegionRec current_region; + BoxRec current_box; + + if (nlist > 1) { + pixman_region_init(&list_region); + need_free_list_region = TRUE; + } + + pixman_region_init(¤t_region); + + extents = pixman_region_extents(¤t_region); + + x = 0; + y = 0; + x1 = x2 = y1 = y2 = 0; + n = 0; + extents->x1 = 0; + extents->y1 = 0; + extents->x2 = 0; + extents->y2 = 0; + + head_list = list; + DEBUGF("has %d lists.\n", nlist); + while (nlist--) { + BoxRec left_box, right_box = { 0 }; + Bool has_left_edge_box = FALSE, has_right_edge_box = FALSE; + Bool left_to_right; + struct glamor_glyph *left_priv = NULL, *right_priv = NULL; + + x += list->xOff; + y += list->yOff; + n = list->len; + left_to_right = TRUE; + cur_list = list++; + + if (_X_UNLIKELY(!first_list)) { + pixman_region_init_with_extents(¤t_region, extents); + pixman_region_union(&list_region, &list_region, ¤t_region); + first = TRUE; + } + else { + head_list = cur_list; + head_pos = cur_list->len - n; + head_x = x; + head_y = y; + head_glyphs = glyphs; + } + + DEBUGF("current list %p has %d glyphs\n", cur_list, n); + while (n--) { + GlyphPtr glyph = *glyphs++; + + DEBUGF("the %dth glyph\n", cur_list->len - n - 1); + if (glyph->info.width == 0 || glyph->info.height == 0) { + x += glyph->info.xOff; + y += glyph->info.yOff; + continue; + } + if (mask_format + && mask_format != GlyphPicture(glyph)[screen->myNum]->format) { + need_free_fixed_list = TRUE; + goto done; + } + + x1 = x - glyph->info.x; + if (x1 < MINSHORT) + x1 = MINSHORT; + y1 = y - glyph->info.y; + if (y1 < MINSHORT) + y1 = MINSHORT; + if (check_fake_overlap) + priv = glamor_glyph_get_private(glyph); + + x2 = x1 + glyph->info.width; + y2 = y1 + glyph->info.height; + + if (x2 > MAXSHORT) + x2 = MAXSHORT; + if (y2 > MAXSHORT) + y2 = MAXSHORT; + + if (first) { + extents->x1 = x1; + extents->y1 = y1; + extents->x2 = x2; + extents->y2 = y2; + + prev_extents = *extents; + + first = FALSE; + if (check_fake_overlap && priv + && priv->has_edge_map && glyph->info.yOff == 0) { + left_box.x1 = x1; + left_box.x2 = x1 + 1; + left_box.y1 = y1; + + right_box.x1 = x2 - 2; + right_box.x2 = x2 - 1; + right_box.y1 = y1; + left_priv = right_priv = priv; + has_left_edge_box = TRUE; + has_right_edge_box = TRUE; + } + } + else { + if (_X_UNLIKELY(!first_list)) { + current_box.x1 = x1; + current_box.y1 = y1; + current_box.x2 = x2; + current_box.y2 = y2; + if (pixman_region_contains_rectangle + (&list_region, ¤t_box) != PIXMAN_REGION_OUT) { + need_free_fixed_list = TRUE; + goto done; + } + } + + if (x1 < extents->x2 && x2 > extents->x1 + && y1 < extents->y2 && y2 > extents->y1) { + + if (check_fake_overlap && + (has_left_edge_box || has_right_edge_box) + && priv->has_edge_map && glyph->info.yOff == 0) { + int left_dx, right_dx; + unsigned long long intersected; + + left_dx = has_left_edge_box ? 1 : 0; + right_dx = has_right_edge_box ? 1 : 0; + if (x1 + 1 < extents->x2 - right_dx && + x2 - 1 > extents->x1 + left_dx) + goto real_intersected; + + if (left_to_right && has_right_edge_box) { + if (x1 == right_box.x1) { + intersected = + ((priv->left_x1_map & right_priv-> + right_x1_map) + | (priv->left_x2_map & right_priv-> + right_x2_map)); + if (intersected) + goto real_intersected; + } + else if (x1 == right_box.x2) { + intersected = + (priv->left_x1_map & right_priv-> + right_x2_map); + if (intersected) { +#ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK + /* tolerate with two pixels overlap. */ + intersected &= ~(1 << __fls(intersected)); + if ((intersected & (intersected - 1))) +#endif + goto real_intersected; + } + } + } + else if (!left_to_right && has_left_edge_box) { + if (x2 - 1 == left_box.x1) { + intersected = + (priv->right_x2_map & left_priv-> + left_x1_map); + if (intersected) { +#ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK + /* tolerate with two pixels overlap. */ + intersected &= ~(1 << __fls(intersected)); + if ((intersected & (intersected - 1))) +#endif + goto real_intersected; + } + } + else if (x2 - 1 == right_box.x2) { + if ((priv->right_x1_map & left_priv-> + left_x1_map) + || (priv->right_x2_map & left_priv-> + left_x2_map)) + goto real_intersected; + } + } + else { + if (x1 < extents->x2 && x1 + 2 > extents->x1) + goto real_intersected; + } + goto non_intersected; + } + else { + real_intersected: + DEBUGF("overlap with previous glyph.\n"); + if (in_non_intersected_list == 1) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), + x, y, x1, y1, x2, y2, + &head_list, &head_pos, + &head_x, &head_y, + &fixed_cnt, + NON_INTERSECTED, + &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + + in_non_intersected_list = 0; + + } + } + else { + non_intersected: + DEBUGF("doesn't overlap with previous glyph.\n"); + if (in_non_intersected_list == 0) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), x, y, + x1, y1, x2, y2, + &head_list, + &head_pos, + &head_x, + &head_y, &fixed_cnt, + INTERSECTED, &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + in_non_intersected_list = 1; + } + prev_extents = *extents; + } + + if (check_fake_overlap && priv + && priv->has_edge_map && glyph->info.yOff == 0) { + if (!has_left_edge_box || x1 < extents->x1) { + left_box.x1 = x1; + left_box.x2 = x1 + 1; + left_box.y1 = y1; + has_left_edge_box = TRUE; + left_priv = priv; + } + + if (!has_right_edge_box || x2 > extents->x2) { + right_box.x1 = x2 - 2; + right_box.x2 = x2 - 1; + right_box.y1 = y1; + has_right_edge_box = TRUE; + right_priv = priv; + } + } + + if (x1 < extents->x1) + extents->x1 = x1; + if (x2 > extents->x2) + extents->x2 = x2; + + if (y1 < extents->y1) + extents->y1 = y1; + if (y2 > extents->y2) + extents->y2 = y2; + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + first_list = FALSE; + } + + if (in_non_intersected_list == 0 && fixed_cnt == 0) { + fixed_cnt = -1; + goto done; + } + + if ((in_non_intersected_list != -1 || head_pos != n) && (fixed_cnt > 0)) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), x, y, + x1, y1, x2, y2, + &head_list, + &head_pos, + &head_x, + &head_y, &fixed_cnt, + (!in_non_intersected_list) | 0x80, + &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + + done: + if (need_free_list_region) + pixman_region_fini(&list_region); + pixman_region_fini(¤t_region); + + if (need_free_fixed_list && fixed_cnt >= 0) { + while (fixed_cnt--) { + free(fixed_list[fixed_cnt].list); + } + } + + DEBUGF("Got %d fixed list \n", fixed_cnt); + return fixed_cnt; } static inline unsigned int glamor_glyph_size_to_count(int size) { - size /= GLYPH_MIN_SIZE; - return size * size; + size /= GLYPH_MIN_SIZE; + return size * size; } static inline unsigned int glamor_glyph_count_to_mask(int count) { - return ~(count - 1); + return ~(count - 1); } static inline unsigned int glamor_glyph_size_to_mask(int size) { - return - glamor_glyph_count_to_mask(glamor_glyph_size_to_count(size)); + return glamor_glyph_count_to_mask(glamor_glyph_size_to_count(size)); } static PicturePtr glamor_glyph_cache(glamor_screen_private *glamor, GlyphPtr glyph, int *out_x, - int *out_y) + int *out_y) { - ScreenPtr screen = glamor->screen; - PicturePtr glyph_picture = GlyphPicture(glyph)[screen->myNum]; - glamor_glyph_cache_t *cache = - &glamor->glyphCaches[PICT_FORMAT_RGB(glyph_picture->format) != - 0]; - struct glamor_glyph *priv = NULL, *evicted_priv = NULL; - int size, mask, pos, s; - - if (glyph->info.width > GLYPH_MAX_SIZE - || glyph->info.height > GLYPH_MAX_SIZE) - return NULL; - - for (size = GLYPH_MIN_SIZE; size <= GLYPH_MAX_SIZE; size *= 2) - if (glyph->info.width <= size - && glyph->info.height <= size) - break; - - s = glamor_glyph_size_to_count(size); - mask = glamor_glyph_count_to_mask(s); - pos = (cache->count + s - 1) & mask; - - priv = glamor_glyph_get_private(glyph); - if (pos < GLYPH_CACHE_SIZE) { - cache->count = pos + s; - } else { - for (s = size; s <= GLYPH_MAX_SIZE; s *= 2) { - int i = - cache->evict & glamor_glyph_size_to_mask(s); - GlyphPtr evicted = cache->glyphs[i]; - if (evicted == NULL) - continue; - - evicted_priv = glamor_glyph_get_private(evicted); - assert(evicted_priv->pos == i); - if (evicted_priv->size >= s) { - cache->glyphs[i] = NULL; - evicted_priv->cached = FALSE; - pos = cache->evict & - glamor_glyph_size_to_mask(size); - } else - evicted_priv = NULL; - break; - } - if (evicted_priv == NULL) { - int count = glamor_glyph_size_to_count(size); - mask = glamor_glyph_count_to_mask(count); - pos = cache->evict & mask; - for (s = 0; s < count; s++) { - GlyphPtr evicted = cache->glyphs[pos + s]; - if (evicted != NULL) { - - evicted_priv = - glamor_glyph_get_private - (evicted); - - assert(evicted_priv->pos == pos + s); - evicted_priv->cached = FALSE; - cache->glyphs[pos + s] = NULL; - } - } - - } - /* And pick a new eviction position */ - cache->evict = rand() % GLYPH_CACHE_SIZE; - } - - - cache->glyphs[pos] = glyph; - - priv->cache = cache; - priv->size = size; - priv->pos = pos; - s = pos / ((GLYPH_MAX_SIZE / GLYPH_MIN_SIZE) * - (GLYPH_MAX_SIZE / GLYPH_MIN_SIZE)); - priv->x = - s % (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE) * GLYPH_MAX_SIZE; - priv->y = - (s / (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE)) * GLYPH_MAX_SIZE; - for (s = GLYPH_MIN_SIZE; s < GLYPH_MAX_SIZE; s *= 2) { - if (pos & 1) - priv->x += s; - if (pos & 2) - priv->y += s; - pos >>= 2; - } - - glamor_glyph_cache_upload_glyph(screen, cache, glyph, priv->x, - priv->y); + ScreenPtr screen = glamor->screen; + PicturePtr glyph_picture = GlyphPicture(glyph)[screen->myNum]; + glamor_glyph_cache_t *cache = + &glamor->glyphCaches[PICT_FORMAT_RGB(glyph_picture->format) != 0]; + struct glamor_glyph *priv = NULL, *evicted_priv = NULL; + int size, mask, pos, s; + + if (glyph->info.width > GLYPH_MAX_SIZE + || glyph->info.height > GLYPH_MAX_SIZE) + return NULL; + + for (size = GLYPH_MIN_SIZE; size <= GLYPH_MAX_SIZE; size *= 2) + if (glyph->info.width <= size && glyph->info.height <= size) + break; + + s = glamor_glyph_size_to_count(size); + mask = glamor_glyph_count_to_mask(s); + pos = (cache->count + s - 1) & mask; + + priv = glamor_glyph_get_private(glyph); + if (pos < GLYPH_CACHE_SIZE) { + cache->count = pos + s; + } + else { + for (s = size; s <= GLYPH_MAX_SIZE; s *= 2) { + int i = cache->evict & glamor_glyph_size_to_mask(s); + GlyphPtr evicted = cache->glyphs[i]; + + if (evicted == NULL) + continue; + + evicted_priv = glamor_glyph_get_private(evicted); + assert(evicted_priv->pos == i); + if (evicted_priv->size >= s) { + cache->glyphs[i] = NULL; + evicted_priv->cached = FALSE; + pos = cache->evict & glamor_glyph_size_to_mask(size); + } + else + evicted_priv = NULL; + break; + } + if (evicted_priv == NULL) { + int count = glamor_glyph_size_to_count(size); + + mask = glamor_glyph_count_to_mask(count); + pos = cache->evict & mask; + for (s = 0; s < count; s++) { + GlyphPtr evicted = cache->glyphs[pos + s]; + + if (evicted != NULL) { + + evicted_priv = glamor_glyph_get_private(evicted); + + assert(evicted_priv->pos == pos + s); + evicted_priv->cached = FALSE; + cache->glyphs[pos + s] = NULL; + } + } + + } + /* And pick a new eviction position */ + cache->evict = rand() % GLYPH_CACHE_SIZE; + } + + cache->glyphs[pos] = glyph; + + priv->cache = cache; + priv->size = size; + priv->pos = pos; + s = pos / ((GLYPH_MAX_SIZE / GLYPH_MIN_SIZE) * + (GLYPH_MAX_SIZE / GLYPH_MIN_SIZE)); + priv->x = s % (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE) * GLYPH_MAX_SIZE; + priv->y = (s / (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE)) * GLYPH_MAX_SIZE; + for (s = GLYPH_MIN_SIZE; s < GLYPH_MAX_SIZE; s *= 2) { + if (pos & 1) + priv->x += s; + if (pos & 2) + priv->y += s; + pos >>= 2; + } + + glamor_glyph_cache_upload_glyph(screen, cache, glyph, priv->x, priv->y); #ifndef GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK - if (priv->has_edge_map == FALSE && glyph->info.width >= 2) - glamor_glyph_priv_get_edge_map(glyph, priv, glyph_picture); + if (priv->has_edge_map == FALSE && glyph->info.width >= 2) + glamor_glyph_priv_get_edge_map(glyph, priv, glyph_picture); #endif - priv->cached = TRUE; + priv->cached = TRUE; - *out_x = priv->x; - *out_y = priv->y; - return cache->picture; + *out_x = priv->x; + *out_y = priv->y; + return cache->picture; } -typedef void (*glyphs_flush_func)(void * arg); + +typedef void (*glyphs_flush_func) (void *arg); struct glyphs_flush_dst_arg { - CARD8 op; - PicturePtr src; - PicturePtr dst; - glamor_glyph_buffer_t * buffer; - int x_src,y_src; - int x_dst, y_dst; + CARD8 op; + PicturePtr src; + PicturePtr dst; + glamor_glyph_buffer_t *buffer; + int x_src, y_src; + int x_dst, y_dst; }; static struct glyphs_flush_dst_arg dst_arg; @@ -1157,650 +1166,638 @@ static glamor_glyph_buffer_t dst_buffer; static glamor_glyph_buffer_t mask_buffer; unsigned long long mask_glyphs_cnt = 0; unsigned long long dst_glyphs_cnt = 0; + #define GLYPHS_DST_MODE_VIA_MASK 0 #define GLYPHS_DST_MODE_VIA_MASK_CACHE 1 #define GLYPHS_DST_MODE_TO_DST 2 #define GLYPHS_DST_MODE_MASK_TO_DST 3 struct glyphs_flush_mask_arg { - PicturePtr mask; - glamor_glyph_buffer_t *buffer; - struct glamor_glyph_mask_cache *maskcache; - unsigned int used_bitmap; + PicturePtr mask; + glamor_glyph_buffer_t *buffer; + struct glamor_glyph_mask_cache *maskcache; + unsigned int used_bitmap; }; static void glamor_glyphs_flush_mask(struct glyphs_flush_mask_arg *arg) { - if (arg->buffer->count>0) { + if (arg->buffer->count > 0) { #ifdef RENDER - glamor_composite_glyph_rects(PictOpAdd, arg->buffer->source, - NULL, arg->mask, - arg->buffer->count, - arg->buffer->rects); + glamor_composite_glyph_rects(PictOpAdd, arg->buffer->source, + NULL, arg->mask, + arg->buffer->count, arg->buffer->rects); #endif - } - arg->buffer->count = 0; - arg->buffer->source = NULL; + } + arg->buffer->count = 0; + arg->buffer->source = NULL; } static void -glamor_glyphs_flush_dst(struct glyphs_flush_dst_arg * arg) +glamor_glyphs_flush_dst(struct glyphs_flush_dst_arg *arg) { - if (!arg->buffer) - return; - - if (mask_buffer.count > 0) { - glamor_glyphs_flush_mask(&mask_arg); - } - if (mask_arg.used_bitmap) { - put_mask_cache_bitmap(mask_arg.maskcache, mask_arg.used_bitmap); - mask_arg.used_bitmap = 0; - } - - if (arg->buffer->count > 0) { - glamor_composite_glyph_rects(arg->op, arg->src, - arg->buffer->source, arg->dst, - arg->buffer->count, - &arg->buffer->rects[0]); - arg->buffer->count = 0; - arg->buffer->source = NULL; - } + if (!arg->buffer) + return; + + if (mask_buffer.count > 0) { + glamor_glyphs_flush_mask(&mask_arg); + } + if (mask_arg.used_bitmap) { + put_mask_cache_bitmap(mask_arg.maskcache, mask_arg.used_bitmap); + mask_arg.used_bitmap = 0; + } + + if (arg->buffer->count > 0) { + glamor_composite_glyph_rects(arg->op, arg->src, + arg->buffer->source, arg->dst, + arg->buffer->count, + &arg->buffer->rects[0]); + arg->buffer->count = 0; + arg->buffer->source = NULL; + } } - static glamor_glyph_cache_result_t glamor_buffer_glyph(glamor_screen_private *glamor_priv, - glamor_glyph_buffer_t * buffer, - PictFormatShort format, - GlyphPtr glyph, struct glamor_glyph *priv, - int x_glyph, int y_glyph, - int dx, int dy, int w, int h, - int glyphs_dst_mode, - glyphs_flush_func glyphs_flush, void *flush_arg) + glamor_glyph_buffer_t *buffer, + PictFormatShort format, + GlyphPtr glyph, struct glamor_glyph *priv, + int x_glyph, int y_glyph, + int dx, int dy, int w, int h, + int glyphs_dst_mode, + glyphs_flush_func glyphs_flush, void *flush_arg) { - ScreenPtr screen = glamor_priv->screen; - glamor_composite_rect_t *rect; - PicturePtr source; - int x, y; - glamor_glyph_cache_t *cache; - - if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) - priv = glamor_glyph_get_private(glyph); - - if (PICT_FORMAT_BPP(format) == 1) - format = PICT_a8; - - cache = - &glamor_priv->glyphCaches[PICT_FORMAT_RGB(format) != 0]; - - if (buffer->source - && buffer->source != cache->picture - && glyphs_flush) { - (*glyphs_flush)(flush_arg); - glyphs_flush = NULL; - } - - if (buffer->count == GLYPH_BUFFER_SIZE - && glyphs_flush) { - (*glyphs_flush)(flush_arg); - glyphs_flush = NULL; - } - - if (priv && priv->cached) { - rect = &buffer->rects[buffer->count++]; - rect->x_src = priv->x + dx; - rect->y_src = priv->y + dy; - if (buffer->source == NULL) - buffer->source = priv->cache->picture; - if (glyphs_dst_mode <= GLYPHS_DST_MODE_VIA_MASK_CACHE) - assert(priv->cache->glyphs[priv->pos] == glyph); - } else { - assert(glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST); - if (glyphs_flush) - (*glyphs_flush)(flush_arg); - source = glamor_glyph_cache(glamor_priv, glyph, &x, &y); - - if (source != NULL) { - rect = &buffer->rects[buffer->count++]; - rect->x_src = x + dx; - rect->y_src = y + dy; - if (buffer->source == NULL) - buffer->source = source; - if (glyphs_dst_mode == GLYPHS_DST_MODE_VIA_MASK_CACHE) { - glamor_gl_dispatch *dispatch; - /* mode 1 means we are using global mask cache, - * thus we have to composite from the cache picture - * to the cache picture, we need a flush here to make - * sure latter we get the corret glyphs data.*/ - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glFlush(); - glamor_put_dispatch(glamor_priv); - } - } else { - /* Couldn't find the glyph in the cache, use the glyph picture directly */ - source = GlyphPicture(glyph)[screen->myNum]; - if (buffer->source - && buffer->source != source - && glyphs_flush) - (*glyphs_flush)(flush_arg); - buffer->source = source; - - rect = &buffer->rects[buffer->count++]; - rect->x_src = 0 + dx; - rect->y_src = 0 + dy; - } - priv = glamor_glyph_get_private(glyph); - } - - rect->x_dst = x_glyph; - rect->y_dst = y_glyph; - if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) { - rect->x_dst -= glyph->info.x; - rect->y_dst -= glyph->info.y; - } - rect->width = w; - rect->height = h; - if (glyphs_dst_mode > GLYPHS_DST_MODE_VIA_MASK_CACHE) { - rect->x_mask = rect->x_src; - rect->y_mask = rect->y_src; - rect->x_src = dst_arg.x_src + rect->x_dst - dst_arg.x_dst; - rect->y_src = dst_arg.y_src + rect->y_dst - dst_arg.y_dst; - } - - return GLAMOR_GLYPH_SUCCESS; + ScreenPtr screen = glamor_priv->screen; + glamor_composite_rect_t *rect; + PicturePtr source; + int x, y; + glamor_glyph_cache_t *cache; + + if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) + priv = glamor_glyph_get_private(glyph); + + if (PICT_FORMAT_BPP(format) == 1) + format = PICT_a8; + + cache = &glamor_priv->glyphCaches[PICT_FORMAT_RGB(format) != 0]; + + if (buffer->source && buffer->source != cache->picture && glyphs_flush) { + (*glyphs_flush) (flush_arg); + glyphs_flush = NULL; + } + + if (buffer->count == GLYPH_BUFFER_SIZE && glyphs_flush) { + (*glyphs_flush) (flush_arg); + glyphs_flush = NULL; + } + + if (priv && priv->cached) { + rect = &buffer->rects[buffer->count++]; + rect->x_src = priv->x + dx; + rect->y_src = priv->y + dy; + if (buffer->source == NULL) + buffer->source = priv->cache->picture; + if (glyphs_dst_mode <= GLYPHS_DST_MODE_VIA_MASK_CACHE) + assert(priv->cache->glyphs[priv->pos] == glyph); + } + else { + assert(glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST); + if (glyphs_flush) + (*glyphs_flush) (flush_arg); + source = glamor_glyph_cache(glamor_priv, glyph, &x, &y); + + if (source != NULL) { + rect = &buffer->rects[buffer->count++]; + rect->x_src = x + dx; + rect->y_src = y + dy; + if (buffer->source == NULL) + buffer->source = source; + if (glyphs_dst_mode == GLYPHS_DST_MODE_VIA_MASK_CACHE) { + glamor_gl_dispatch *dispatch; + + /* mode 1 means we are using global mask cache, + * thus we have to composite from the cache picture + * to the cache picture, we need a flush here to make + * sure latter we get the corret glyphs data.*/ + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glFlush(); + glamor_put_dispatch(glamor_priv); + } + } + else { + /* Couldn't find the glyph in the cache, use the glyph picture directly */ + source = GlyphPicture(glyph)[screen->myNum]; + if (buffer->source && buffer->source != source && glyphs_flush) + (*glyphs_flush) (flush_arg); + buffer->source = source; + + rect = &buffer->rects[buffer->count++]; + rect->x_src = 0 + dx; + rect->y_src = 0 + dy; + } + priv = glamor_glyph_get_private(glyph); + } + + rect->x_dst = x_glyph; + rect->y_dst = y_glyph; + if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) { + rect->x_dst -= glyph->info.x; + rect->y_dst -= glyph->info.y; + } + rect->width = w; + rect->height = h; + if (glyphs_dst_mode > GLYPHS_DST_MODE_VIA_MASK_CACHE) { + rect->x_mask = rect->x_src; + rect->y_mask = rect->y_src; + rect->x_src = dst_arg.x_src + rect->x_dst - dst_arg.x_dst; + rect->y_src = dst_arg.y_src + rect->y_dst - dst_arg.y_dst; + } + + return GLAMOR_GLYPH_SUCCESS; } - static void glamor_buffer_glyph_clip(glamor_screen_private *glamor_priv, - BoxPtr rects, - int nrect, PictFormatShort format, - GlyphPtr glyph, struct glamor_glyph *priv, - int glyph_x, int glyph_y, - int glyph_dx, int glyph_dy, - int width, int height, - int glyphs_mode, - glyphs_flush_func flush_func, - void *arg - ) + BoxPtr rects, + int nrect, PictFormatShort format, + GlyphPtr glyph, struct glamor_glyph *priv, + int glyph_x, int glyph_y, + int glyph_dx, int glyph_dy, + int width, int height, + int glyphs_mode, + glyphs_flush_func flush_func, void *arg) { - int i; - for (i = 0; i < nrect; i++) { - int dst_x, dst_y; - int dx, dy; - int x2, y2; - - dst_x = glyph_x - glyph_dx; - dst_y = glyph_y - glyph_dy; - x2 = dst_x + width; - y2 = dst_y + height; - dx = dy = 0; - if (rects[i].y1 >= y2) - break; - - if (dst_x < rects[i].x1) - dx = rects[i].x1 - dst_x, dst_x = rects[i].x1; - if (x2 > rects[i].x2) - x2 = rects[i].x2; - if (dst_y < rects[i].y1) - dy = rects[i].y1 - dst_y, dst_y = rects[i].y1; - if (y2 > rects[i].y2) - y2 = rects[i].y2; - if (dst_x < x2 && dst_y < y2) { - - glamor_buffer_glyph(glamor_priv, - &dst_buffer, - format, - glyph, priv, - dst_x + glyph_dx, - dst_y + glyph_dy, - dx, dy, - x2 - dst_x, y2 - dst_y, - glyphs_mode, - flush_func, - arg); - } - } + int i; + + for (i = 0; i < nrect; i++) { + int dst_x, dst_y; + int dx, dy; + int x2, y2; + + dst_x = glyph_x - glyph_dx; + dst_y = glyph_y - glyph_dy; + x2 = dst_x + width; + y2 = dst_y + height; + dx = dy = 0; + if (rects[i].y1 >= y2) + break; + + if (dst_x < rects[i].x1) + dx = rects[i].x1 - dst_x, dst_x = rects[i].x1; + if (x2 > rects[i].x2) + x2 = rects[i].x2; + if (dst_y < rects[i].y1) + dy = rects[i].y1 - dst_y, dst_y = rects[i].y1; + if (y2 > rects[i].y2) + y2 = rects[i].y2; + if (dst_x < x2 && dst_y < y2) { + + glamor_buffer_glyph(glamor_priv, + &dst_buffer, + format, + glyph, priv, + dst_x + glyph_dx, + dst_y + glyph_dy, + dx, dy, + x2 - dst_x, y2 - dst_y, + glyphs_mode, flush_func, arg); + } + } } - static void glamor_glyphs_via_mask(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, - int nlist, GlyphListPtr list, GlyphPtr * glyphs, - Bool use_mask_cache) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, + int nlist, GlyphListPtr list, GlyphPtr *glyphs, + Bool use_mask_cache) { - PixmapPtr mask_pixmap = 0; - PicturePtr mask; - ScreenPtr screen = dst->pDrawable->pScreen; - int width = 0, height = 0; - int x, y; - int x_dst = list->xOff, y_dst = list->yOff; - int n; - GlyphPtr glyph; - int error; - BoxRec extents = { 0, 0, 0, 0 }; - XID component_alpha; - glamor_screen_private *glamor_priv; - int need_free_mask = FALSE; - glamor_glyph_buffer_t buffer; - struct glyphs_flush_mask_arg arg; - glamor_glyph_buffer_t *pmask_buffer; - struct glyphs_flush_mask_arg *pmask_arg; - struct glamor_glyph_mask_cache_entry *mce = NULL; - struct glamor_glyph_mask_cache *maskcache; - glamor_glyph_cache_t *cache; - int glyphs_dst_mode; - - glamor_glyph_extents(nlist, list, glyphs, &extents); - - if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) - return; - glamor_priv = glamor_get_screen_private(screen); - width = extents.x2 - extents.x1; - height = extents.y2 - extents.y1; - - if (mask_format->depth == 1) { - PictFormatPtr a8Format = - PictureMatchFormat(screen, 8, PICT_a8); - - if (a8Format) - mask_format = a8Format; - } - - cache = &glamor_priv->glyphCaches - [PICT_FORMAT_RGB(mask_format->format) != 0]; - maskcache = mask_cache[PICT_FORMAT_RGB(mask_format->format) != 0]; - - x = -extents.x1; - y = -extents.y1; - if (!use_mask_cache - || width > (CACHE_PICTURE_SIZE/4) - || height > MASK_CACHE_MAX_SIZE) { -new_mask_pixmap: - mask_pixmap = glamor_create_pixmap(screen, width, height, - mask_format->depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!mask_pixmap) { - glamor_destroy_pixmap(mask_pixmap); - return; - } - glamor_solid(mask_pixmap, 0, 0, width, height, GXcopy, 0xFFFFFFFF, 0); - component_alpha = NeedsComponent(mask_format->format); - mask = CreatePicture(0, &mask_pixmap->drawable, - mask_format, CPComponentAlpha, - &component_alpha, serverClient, &error); - if (!mask) - return; - need_free_mask = TRUE; - pmask_arg = &arg; - pmask_buffer = &buffer; - pmask_buffer->count = 0; - pmask_buffer->source = NULL; - pmask_arg->used_bitmap = 0; - glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK; - } else { - int retry_cnt = 0; -retry: - mce = get_mask_cache(maskcache, - (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE); - - if (mce == NULL) { - glamor_glyphs_flush_dst(&dst_arg); - retry_cnt++; - if (retry_cnt > 2) { - assert(0); - goto new_mask_pixmap; - } - goto retry; - } - - mask = cache->picture; - x += mce->x; - y += mce->y; - mce->width = (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE; - mce->height = 1; - if (mask_arg.mask && mask_arg.mask != mask - && mask_buffer.count != 0) - glamor_glyphs_flush_dst(&dst_arg); - pmask_arg = &mask_arg; - pmask_buffer = &mask_buffer; - pmask_arg->maskcache = maskcache; - glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK_CACHE; - } - pmask_arg->mask = mask; - pmask_arg->buffer = pmask_buffer; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - mask_glyphs_cnt += n; - while (n--) { - glyph = *glyphs++; - if (glyph->info.width > 0 - && glyph->info.height > 0) { - glyphs_flush_func flush_func; - void *temp_arg; - if (need_free_mask) { - if (pmask_buffer->count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_mask; - else - flush_func = NULL; - temp_arg = pmask_arg; - } else { - /* If we are using global mask cache, then we need to - * flush dst instead of mask. As some dst depends on the - * previous mask result. Just flush mask can't get all previous's - * overlapped glyphs.*/ - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - temp_arg = &dst_arg; - } - glamor_buffer_glyph(glamor_priv, pmask_buffer, - mask_format->format, - glyph, NULL, x, y, - 0, 0, - glyph->info.width, glyph->info.height, - glyphs_dst_mode, - flush_func, - (void*)temp_arg); - } - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } - - x = extents.x1; - y = extents.y1; - if (need_free_mask) { - glamor_glyphs_flush_mask(pmask_arg); - CompositePicture(op, - src, - mask, - dst, - x_src + x - x_dst, - y_src + y - y_dst, 0, 0, x, y, width, height); - FreePicture(mask, 0); - glamor_destroy_pixmap(mask_pixmap); - } else { - struct glamor_glyph priv; - glyphs_flush_func flush_func; - BoxPtr rects; - int nrect; - - priv.cache = cache; - priv.x = mce->x; - priv.y = mce->y; - priv.cached = TRUE; - rects = REGION_RECTS(dst->pCompositeClip); - nrect = REGION_NUM_RECTS(dst->pCompositeClip); - - pmask_arg->used_bitmap |= ((1 << mce->width) - 1) << mce->idx; - dst_arg.op = op; - dst_arg.src = src; - dst_arg.dst = dst; - dst_arg.buffer = &dst_buffer; - dst_arg.x_src = x_src; - dst_arg.y_src = y_src; - dst_arg.x_dst = x_dst; - dst_arg.y_dst = y_dst; - - if (dst_buffer.source == NULL) { - dst_buffer.source = cache->picture; - } else if (dst_buffer.source != cache->picture) { - glamor_glyphs_flush_dst(&dst_arg); - dst_buffer.source = cache->picture; - } - - x += dst->pDrawable->x; - y += dst->pDrawable->y; - - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - - glamor_buffer_glyph_clip(glamor_priv, - rects, nrect, - mask_format->format, - NULL, &priv, - x, y, - 0, 0, - width, height, - GLYPHS_DST_MODE_MASK_TO_DST, - flush_func, - (void *)&dst_arg - ); - } + PixmapPtr mask_pixmap = 0; + PicturePtr mask; + ScreenPtr screen = dst->pDrawable->pScreen; + int width = 0, height = 0; + int x, y; + int x_dst = list->xOff, y_dst = list->yOff; + int n; + GlyphPtr glyph; + int error; + BoxRec extents = { 0, 0, 0, 0 }; + XID component_alpha; + glamor_screen_private *glamor_priv; + int need_free_mask = FALSE; + glamor_glyph_buffer_t buffer; + struct glyphs_flush_mask_arg arg; + glamor_glyph_buffer_t *pmask_buffer; + struct glyphs_flush_mask_arg *pmask_arg; + struct glamor_glyph_mask_cache_entry *mce = NULL; + struct glamor_glyph_mask_cache *maskcache; + glamor_glyph_cache_t *cache; + int glyphs_dst_mode; + + glamor_glyph_extents(nlist, list, glyphs, &extents); + + if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) + return; + glamor_priv = glamor_get_screen_private(screen); + width = extents.x2 - extents.x1; + height = extents.y2 - extents.y1; + + if (mask_format->depth == 1) { + PictFormatPtr a8Format = PictureMatchFormat(screen, 8, PICT_a8); + + if (a8Format) + mask_format = a8Format; + } + + cache = &glamor_priv->glyphCaches + [PICT_FORMAT_RGB(mask_format->format) != 0]; + maskcache = mask_cache[PICT_FORMAT_RGB(mask_format->format) != 0]; + + x = -extents.x1; + y = -extents.y1; + if (!use_mask_cache || width > (CACHE_PICTURE_SIZE / 4) + || height > MASK_CACHE_MAX_SIZE) { + new_mask_pixmap: + mask_pixmap = glamor_create_pixmap(screen, width, height, + mask_format->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!mask_pixmap) { + glamor_destroy_pixmap(mask_pixmap); + return; + } + glamor_solid(mask_pixmap, 0, 0, width, height, GXcopy, 0xFFFFFFFF, 0); + component_alpha = NeedsComponent(mask_format->format); + mask = CreatePicture(0, &mask_pixmap->drawable, + mask_format, CPComponentAlpha, + &component_alpha, serverClient, &error); + if (!mask) + return; + need_free_mask = TRUE; + pmask_arg = &arg; + pmask_buffer = &buffer; + pmask_buffer->count = 0; + pmask_buffer->source = NULL; + pmask_arg->used_bitmap = 0; + glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK; + } + else { + int retry_cnt = 0; + + retry: + mce = get_mask_cache(maskcache, + (width + MASK_CACHE_MAX_SIZE - + 1) / MASK_CACHE_MAX_SIZE); + + if (mce == NULL) { + glamor_glyphs_flush_dst(&dst_arg); + retry_cnt++; + if (retry_cnt > 2) { + assert(0); + goto new_mask_pixmap; + } + goto retry; + } + + mask = cache->picture; + x += mce->x; + y += mce->y; + mce->width = (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE; + mce->height = 1; + if (mask_arg.mask && mask_arg.mask != mask && mask_buffer.count != 0) + glamor_glyphs_flush_dst(&dst_arg); + pmask_arg = &mask_arg; + pmask_buffer = &mask_buffer; + pmask_arg->maskcache = maskcache; + glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK_CACHE; + } + pmask_arg->mask = mask; + pmask_arg->buffer = pmask_buffer; + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + mask_glyphs_cnt += n; + while (n--) { + glyph = *glyphs++; + if (glyph->info.width > 0 && glyph->info.height > 0) { + glyphs_flush_func flush_func; + void *temp_arg; + + if (need_free_mask) { + if (pmask_buffer->count) + flush_func = + (glyphs_flush_func) glamor_glyphs_flush_mask; + else + flush_func = NULL; + temp_arg = pmask_arg; + } + else { + /* If we are using global mask cache, then we need to + * flush dst instead of mask. As some dst depends on the + * previous mask result. Just flush mask can't get all previous's + * overlapped glyphs.*/ + if (dst_buffer.count || mask_buffer.count) + flush_func = + (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + temp_arg = &dst_arg; + } + glamor_buffer_glyph(glamor_priv, pmask_buffer, + mask_format->format, + glyph, NULL, x, y, + 0, 0, + glyph->info.width, glyph->info.height, + glyphs_dst_mode, + flush_func, (void *) temp_arg); + } + x += glyph->info.xOff; + y += glyph->info.yOff; + } + list++; + } + + x = extents.x1; + y = extents.y1; + if (need_free_mask) { + glamor_glyphs_flush_mask(pmask_arg); + CompositePicture(op, + src, + mask, + dst, + x_src + x - x_dst, + y_src + y - y_dst, 0, 0, x, y, width, height); + FreePicture(mask, 0); + glamor_destroy_pixmap(mask_pixmap); + } + else { + struct glamor_glyph priv; + glyphs_flush_func flush_func; + BoxPtr rects; + int nrect; + + priv.cache = cache; + priv.x = mce->x; + priv.y = mce->y; + priv.cached = TRUE; + rects = REGION_RECTS(dst->pCompositeClip); + nrect = REGION_NUM_RECTS(dst->pCompositeClip); + + pmask_arg->used_bitmap |= ((1 << mce->width) - 1) << mce->idx; + dst_arg.op = op; + dst_arg.src = src; + dst_arg.dst = dst; + dst_arg.buffer = &dst_buffer; + dst_arg.x_src = x_src; + dst_arg.y_src = y_src; + dst_arg.x_dst = x_dst; + dst_arg.y_dst = y_dst; + + if (dst_buffer.source == NULL) { + dst_buffer.source = cache->picture; + } + else if (dst_buffer.source != cache->picture) { + glamor_glyphs_flush_dst(&dst_arg); + dst_buffer.source = cache->picture; + } + + x += dst->pDrawable->x; + y += dst->pDrawable->y; + + if (dst_buffer.count || mask_buffer.count) + flush_func = (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + + glamor_buffer_glyph_clip(glamor_priv, + rects, nrect, + mask_format->format, + NULL, &priv, + x, y, + 0, 0, + width, height, + GLYPHS_DST_MODE_MASK_TO_DST, + flush_func, (void *) &dst_arg); + } } static void glamor_glyphs_to_dst(CARD8 op, - PicturePtr src, - PicturePtr dst, - INT16 x_src, - INT16 y_src, - int nlist, GlyphListPtr list, - GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + INT16 x_src, + INT16 y_src, + int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - ScreenPtr screen = dst->pDrawable->pScreen; - int x = 0, y = 0; - int x_dst = list->xOff, y_dst = list->yOff; - int n; - GlyphPtr glyph; - BoxPtr rects; - int nrect; - glamor_screen_private *glamor_priv; - - rects = REGION_RECTS(dst->pCompositeClip); - nrect = REGION_NUM_RECTS(dst->pCompositeClip); - - glamor_priv = glamor_get_screen_private(screen); - - dst_arg.op = op; - dst_arg.src = src; - dst_arg.dst = dst; - dst_arg.buffer = &dst_buffer; - dst_arg.x_src = x_src; - dst_arg.y_src = y_src; - dst_arg.x_dst = x_dst; - dst_arg.y_dst = y_dst; - - x = dst->pDrawable->x; - y = dst->pDrawable->y; - - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - dst_glyphs_cnt += n; - while (n--) { - glyph = *glyphs++; - - if (glyph->info.width > 0 - && glyph->info.height > 0) { - glyphs_flush_func flush_func; - - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - glamor_buffer_glyph_clip(glamor_priv, - rects, nrect, - (GlyphPicture(glyph)[screen->myNum])->format, - glyph, NULL, - x, y, - glyph->info.x, glyph->info.y, - glyph->info.width, glyph->info.height, - GLYPHS_DST_MODE_TO_DST, - flush_func, - (void *)&dst_arg - ); - } - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } + ScreenPtr screen = dst->pDrawable->pScreen; + int x = 0, y = 0; + int x_dst = list->xOff, y_dst = list->yOff; + int n; + GlyphPtr glyph; + BoxPtr rects; + int nrect; + glamor_screen_private *glamor_priv; + + rects = REGION_RECTS(dst->pCompositeClip); + nrect = REGION_NUM_RECTS(dst->pCompositeClip); + + glamor_priv = glamor_get_screen_private(screen); + + dst_arg.op = op; + dst_arg.src = src; + dst_arg.dst = dst; + dst_arg.buffer = &dst_buffer; + dst_arg.x_src = x_src; + dst_arg.y_src = y_src; + dst_arg.x_dst = x_dst; + dst_arg.y_dst = y_dst; + + x = dst->pDrawable->x; + y = dst->pDrawable->y; + + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + dst_glyphs_cnt += n; + while (n--) { + glyph = *glyphs++; + + if (glyph->info.width > 0 && glyph->info.height > 0) { + glyphs_flush_func flush_func; + + if (dst_buffer.count || mask_buffer.count) + flush_func = (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + glamor_buffer_glyph_clip(glamor_priv, + rects, nrect, + (GlyphPicture(glyph)[screen->myNum])-> + format, glyph, NULL, x, y, + glyph->info.x, glyph->info.y, + glyph->info.width, glyph->info.height, + GLYPHS_DST_MODE_TO_DST, flush_func, + (void *) &dst_arg); + } + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + list++; + } } + #define MAX_FIXED_SIZE static void glamor_glyphs_reset_buffer(glamor_glyph_buffer_t *buffer) { - buffer->count = 0; - buffer->source = NULL; + buffer->count = 0; + buffer->source = NULL; } static Bool _glamor_glyphs(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, GlyphListPtr list, - GlyphPtr * glyphs, Bool fallback) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, + GlyphPtr *glyphs, Bool fallback) { - PictFormatShort format; - int fixed_size, fixed_cnt = 0; - struct glamor_glyph_list *fixed_list = NULL; - Bool need_free_list = FALSE; + PictFormatShort format; + int fixed_size, fixed_cnt = 0; + struct glamor_glyph_list *fixed_list = NULL; + Bool need_free_list = FALSE; + #ifndef GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK - Bool check_fake_overlap = TRUE; - if (!(op == PictOpOver - || op == PictOpAdd - || op == PictOpXor)) { - /* C = (0,0,0,0) D = glyphs , SRC = A, DEST = B (faked overlapped glyphs, overlapped with (0,0,0,0)). - * For those op, (A IN (C ADD D)) OP B != (A IN D) OP ((A IN C) OP B) - * or (A IN (D ADD C)) OP B != (A IN C) OP ((A IN D) OP B) - * We need to split the faked regions to three or two, and composite the disoverlapped small - * boxes one by one. For other Ops, it's safe to composite the whole box. */ - check_fake_overlap = FALSE; - } + Bool check_fake_overlap = TRUE; + + if (!(op == PictOpOver || op == PictOpAdd || op == PictOpXor)) { + /* C = (0,0,0,0) D = glyphs , SRC = A, DEST = B (faked overlapped glyphs, overlapped with (0,0,0,0)). + * For those op, (A IN (C ADD D)) OP B != (A IN D) OP ((A IN C) OP B) + * or (A IN (D ADD C)) OP B != (A IN C) OP ((A IN D) OP B) + * We need to split the faked regions to three or two, and composite the disoverlapped small + * boxes one by one. For other Ops, it's safe to composite the whole box. */ + check_fake_overlap = FALSE; + } #else - Bool check_fake_overlap = FALSE; + Bool check_fake_overlap = FALSE; #endif - if (mask_format) - format = mask_format->depth << 24 | mask_format->format; - else - format = 0; - - fixed_size = 32; - glamor_glyphs_reset_buffer(&dst_buffer); - - if (!mask_format || (((nlist == 1 && list->len == 1) || op == PictOpAdd) - && (dst->format == ((mask_format->depth << 24) | mask_format->format)))) { - glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, - list, glyphs); - goto last_flush; - } - - glamor_glyphs_reset_buffer(&mask_buffer); - - /* We have mask_format. Need to check the real overlap or not.*/ - format = mask_format->depth << 24 | mask_format->format; - - fixed_list = calloc(fixed_size, sizeof(*fixed_list)); - if (unlikely(fixed_list == NULL)) - fixed_size = 0; - fixed_cnt = glamor_glyphs_intersect(nlist, list, glyphs, - format, dst->pDrawable->pScreen, - check_fake_overlap, - fixed_list, fixed_size); - if (fixed_cnt == 0) - mask_format = NULL; - need_free_list = TRUE; - - if (fixed_cnt <= 0) { - if (mask_format == NULL) { - glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, - list, glyphs); - goto last_flush; - } else { - glamor_glyphs_via_mask(op, src, dst, mask_format, - x_src, y_src, nlist, list, glyphs, - FALSE); - goto free_fixed_list; - } - } else { - - /* We have splitted the original list to serval list, some are overlapped - * and some are non-overlapped. For the non-overlapped, we render it to - * dst directly. For the overlapped, we render it to mask picture firstly, - * then render the mask to dst. If we can use mask cache which is in the - * glyphs cache's last row, we can accumulate the rendering of mask to dst - * with the other dst_buffer's rendering operations thus can reduce the call - * of glDrawElements. - * - * */ - struct glamor_glyph_list *saved_list; - - saved_list = fixed_list; - mask_arg.used_bitmap = 0; - while(fixed_cnt--) { - if (fixed_list->type == NON_INTERSECTED) { - glamor_glyphs_to_dst(op, src, dst, - x_src, y_src, - fixed_list->nlist, - fixed_list->list, - fixed_list->glyphs); - } - else - glamor_glyphs_via_mask(op, src, dst, - mask_format, x_src, y_src, - fixed_list->nlist, - fixed_list->list, - fixed_list->glyphs, TRUE); - - free(fixed_list->list); - fixed_list++; - } - free(saved_list); - need_free_list = FALSE; - } - -last_flush: - if (dst_buffer.count || mask_buffer.count) - glamor_glyphs_flush_dst(&dst_arg); -free_fixed_list: - if(need_free_list) { - assert(fixed_cnt <= 0); - free(fixed_list); - } - return TRUE; + if (mask_format) + format = mask_format->depth << 24 | mask_format->format; + else + format = 0; + + fixed_size = 32; + glamor_glyphs_reset_buffer(&dst_buffer); + + if (!mask_format || (((nlist == 1 && list->len == 1) || op == PictOpAdd) + && (dst->format == + ((mask_format->depth << 24) | mask_format-> + format)))) { + glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, list, glyphs); + goto last_flush; + } + + glamor_glyphs_reset_buffer(&mask_buffer); + + /* We have mask_format. Need to check the real overlap or not. */ + format = mask_format->depth << 24 | mask_format->format; + + fixed_list = calloc(fixed_size, sizeof(*fixed_list)); + if (_X_UNLIKELY(fixed_list == NULL)) + fixed_size = 0; + fixed_cnt = glamor_glyphs_intersect(nlist, list, glyphs, + format, dst->pDrawable->pScreen, + check_fake_overlap, + fixed_list, fixed_size); + if (fixed_cnt == 0) + mask_format = NULL; + need_free_list = TRUE; + + if (fixed_cnt <= 0) { + if (mask_format == NULL) { + glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, + list, glyphs); + goto last_flush; + } + else { + glamor_glyphs_via_mask(op, src, dst, mask_format, + x_src, y_src, nlist, list, glyphs, FALSE); + goto free_fixed_list; + } + } + else { + + /* We have splitted the original list to serval list, some are overlapped + * and some are non-overlapped. For the non-overlapped, we render it to + * dst directly. For the overlapped, we render it to mask picture firstly, + * then render the mask to dst. If we can use mask cache which is in the + * glyphs cache's last row, we can accumulate the rendering of mask to dst + * with the other dst_buffer's rendering operations thus can reduce the call + * of glDrawElements. + * + * */ + struct glamor_glyph_list *saved_list; + + saved_list = fixed_list; + mask_arg.used_bitmap = 0; + while (fixed_cnt--) { + if (fixed_list->type == NON_INTERSECTED) { + glamor_glyphs_to_dst(op, src, dst, + x_src, y_src, + fixed_list->nlist, + fixed_list->list, fixed_list->glyphs); + } + else + glamor_glyphs_via_mask(op, src, dst, + mask_format, x_src, y_src, + fixed_list->nlist, + fixed_list->list, + fixed_list->glyphs, TRUE); + + free(fixed_list->list); + fixed_list++; + } + free(saved_list); + need_free_list = FALSE; + } + + last_flush: + if (dst_buffer.count || mask_buffer.count) + glamor_glyphs_flush_dst(&dst_arg); + free_fixed_list: + if (need_free_list) { + assert(fixed_cnt <= 0); + free(fixed_list); + } + return TRUE; } void glamor_glyphs(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - _glamor_glyphs(op, src, dst, mask_format, x_src, - y_src, nlist, list, glyphs, TRUE); + _glamor_glyphs(op, src, dst, mask_format, x_src, + y_src, nlist, list, glyphs, TRUE); } Bool glamor_glyphs_nf(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, - GlyphListPtr list, GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - return _glamor_glyphs(op, src, dst, mask_format, x_src, - y_src, nlist, list, glyphs, FALSE); + return _glamor_glyphs(op, src, dst, mask_format, x_src, + y_src, nlist, list, glyphs, FALSE); } - diff --git a/xorg-server/glamor/glamor_gradient.c b/xorg-server/glamor/glamor_gradient.c index 4abc82d74..df2ccb8a0 100644 --- a/xorg-server/glamor/glamor_gradient.c +++ b/xorg-server/glamor/glamor_gradient.c @@ -43,15 +43,16 @@ #ifdef GLAMOR_GRADIENT_SHADER static GLint -_glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, int use_array) +_glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, + int use_array) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - char *gradient_fs = NULL; - GLint fs_getcolor_prog; + char *gradient_fs = NULL; + GLint fs_getcolor_prog; - #define gradient_fs_getcolor\ +#define gradient_fs_getcolor\ GLAMOR_DEFAULT_PRECISION\ "uniform int n_stop;\n"\ "uniform float stops[%d];\n"\ @@ -82,163 +83,166 @@ _glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, int use_ar " return gradient_color;\n"\ "}\n" - /* Because the array access for shader is very slow, the performance is very low - if use array. So use global uniform to replace for it if the number of n_stops is small.*/ - const char *gradient_fs_getcolor_no_array = - GLAMOR_DEFAULT_PRECISION - "uniform int n_stop;\n" - "uniform float stop0;\n" - "uniform float stop1;\n" - "uniform float stop2;\n" - "uniform float stop3;\n" - "uniform float stop4;\n" - "uniform float stop5;\n" - "uniform float stop6;\n" - "uniform float stop7;\n" - "uniform vec4 stop_color0;\n" - "uniform vec4 stop_color1;\n" - "uniform vec4 stop_color2;\n" - "uniform vec4 stop_color3;\n" - "uniform vec4 stop_color4;\n" - "uniform vec4 stop_color5;\n" - "uniform vec4 stop_color6;\n" - "uniform vec4 stop_color7;\n" - "\n" - "vec4 get_color(float stop_len)\n" - "{\n" - " float stop_after;\n" - " float stop_before;\n" - " vec4 stop_color_before;\n" - " vec4 stop_color_after;\n" - " float new_alpha; \n" - " vec4 gradient_color;\n" - " float percentage; \n" - " \n" - " if((stop_len < stop0) && (n_stop >= 1)) {\n" - " stop_color_before = stop_color0;\n" - " stop_color_after = stop_color0;\n" - " stop_after = stop0;\n" - " stop_before = stop0;\n" - " } else if((stop_len < stop1) && (n_stop >= 2)) {\n" - " stop_color_before = stop_color0;\n" - " stop_color_after = stop_color1;\n" - " stop_after = stop1;\n" - " stop_before = stop0;\n" - " } else if((stop_len < stop2) && (n_stop >= 3)) {\n" - " stop_color_before = stop_color1;\n" - " stop_color_after = stop_color2;\n" - " stop_after = stop2;\n" - " stop_before = stop1;\n" - " } else if((stop_len < stop3) && (n_stop >= 4)){\n" - " stop_color_before = stop_color2;\n" - " stop_color_after = stop_color3;\n" - " stop_after = stop3;\n" - " stop_before = stop2;\n" - " } else if((stop_len < stop4) && (n_stop >= 5)){\n" - " stop_color_before = stop_color3;\n" - " stop_color_after = stop_color4;\n" - " stop_after = stop4;\n" - " stop_before = stop3;\n" - " } else if((stop_len < stop5) && (n_stop >= 6)){\n" - " stop_color_before = stop_color4;\n" - " stop_color_after = stop_color5;\n" - " stop_after = stop5;\n" - " stop_before = stop4;\n" - " } else if((stop_len < stop6) && (n_stop >= 7)){\n" - " stop_color_before = stop_color5;\n" - " stop_color_after = stop_color6;\n" - " stop_after = stop6;\n" - " stop_before = stop5;\n" - " } else if((stop_len < stop7) && (n_stop >= 8)){\n" - " stop_color_before = stop_color6;\n" - " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" - " stop_before = stop6;\n" - " } else {\n" - " stop_color_before = stop_color7;\n" - " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" - " stop_before = stop7;\n" - " }\n" - " if(stop_after - stop_before > 2.0)\n" - " percentage = 0.0;\n"//For comply with pixman, walker->stepper overflow. - " else if(stop_after - stop_before < 0.000001)\n" - " percentage = 0.0;\n" - " else \n" - " percentage = (stop_len - stop_before)/(stop_after - stop_before);\n" - " new_alpha = percentage * stop_color_after.a + \n" - " (1.0-percentage) * stop_color_before.a; \n" - " gradient_color = vec4((percentage * stop_color_after.rgb \n" - " + (1.0-percentage) * stop_color_before.rgb)*new_alpha, \n" - " new_alpha);\n" - " \n" - " return gradient_color;\n" - "}\n"; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - if(use_array) { - XNFasprintf(&gradient_fs, - gradient_fs_getcolor, stops_count, stops_count); - fs_getcolor_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - gradient_fs); - free(gradient_fs); - } else { - fs_getcolor_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - gradient_fs_getcolor_no_array); - } - - return fs_getcolor_prog; + /* Because the array access for shader is very slow, the performance is very low + if use array. So use global uniform to replace for it if the number of n_stops is small. */ + const char *gradient_fs_getcolor_no_array = + GLAMOR_DEFAULT_PRECISION + "uniform int n_stop;\n" + "uniform float stop0;\n" + "uniform float stop1;\n" + "uniform float stop2;\n" + "uniform float stop3;\n" + "uniform float stop4;\n" + "uniform float stop5;\n" + "uniform float stop6;\n" + "uniform float stop7;\n" + "uniform vec4 stop_color0;\n" + "uniform vec4 stop_color1;\n" + "uniform vec4 stop_color2;\n" + "uniform vec4 stop_color3;\n" + "uniform vec4 stop_color4;\n" + "uniform vec4 stop_color5;\n" + "uniform vec4 stop_color6;\n" + "uniform vec4 stop_color7;\n" + "\n" + "vec4 get_color(float stop_len)\n" + "{\n" + " float stop_after;\n" + " float stop_before;\n" + " vec4 stop_color_before;\n" + " vec4 stop_color_after;\n" + " float new_alpha; \n" + " vec4 gradient_color;\n" + " float percentage; \n" + " \n" + " if((stop_len < stop0) && (n_stop >= 1)) {\n" + " stop_color_before = stop_color0;\n" + " stop_color_after = stop_color0;\n" + " stop_after = stop0;\n" + " stop_before = stop0;\n" + " } else if((stop_len < stop1) && (n_stop >= 2)) {\n" + " stop_color_before = stop_color0;\n" + " stop_color_after = stop_color1;\n" + " stop_after = stop1;\n" + " stop_before = stop0;\n" + " } else if((stop_len < stop2) && (n_stop >= 3)) {\n" + " stop_color_before = stop_color1;\n" + " stop_color_after = stop_color2;\n" + " stop_after = stop2;\n" + " stop_before = stop1;\n" + " } else if((stop_len < stop3) && (n_stop >= 4)){\n" + " stop_color_before = stop_color2;\n" + " stop_color_after = stop_color3;\n" + " stop_after = stop3;\n" + " stop_before = stop2;\n" + " } else if((stop_len < stop4) && (n_stop >= 5)){\n" + " stop_color_before = stop_color3;\n" + " stop_color_after = stop_color4;\n" + " stop_after = stop4;\n" + " stop_before = stop3;\n" + " } else if((stop_len < stop5) && (n_stop >= 6)){\n" + " stop_color_before = stop_color4;\n" + " stop_color_after = stop_color5;\n" + " stop_after = stop5;\n" + " stop_before = stop4;\n" + " } else if((stop_len < stop6) && (n_stop >= 7)){\n" + " stop_color_before = stop_color5;\n" + " stop_color_after = stop_color6;\n" + " stop_after = stop6;\n" + " stop_before = stop5;\n" + " } else if((stop_len < stop7) && (n_stop >= 8)){\n" + " stop_color_before = stop_color6;\n" + " stop_color_after = stop_color7;\n" + " stop_after = stop7;\n" + " stop_before = stop6;\n" + " } else {\n" + " stop_color_before = stop_color7;\n" + " stop_color_after = stop_color7;\n" + " stop_after = stop7;\n" + " stop_before = stop7;\n" + " }\n" + " if(stop_after - stop_before > 2.0)\n" + " percentage = 0.0;\n" //For comply with pixman, walker->stepper overflow. + " else if(stop_after - stop_before < 0.000001)\n" + " percentage = 0.0;\n" + " else \n" + " percentage = (stop_len - stop_before)/(stop_after - stop_before);\n" + " new_alpha = percentage * stop_color_after.a + \n" + " (1.0-percentage) * stop_color_before.a; \n" + " gradient_color = vec4((percentage * stop_color_after.rgb \n" + " + (1.0-percentage) * stop_color_before.rgb)*new_alpha, \n" + " new_alpha);\n" + " \n" + " return gradient_color;\n" + "}\n"; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + if (use_array) { + XNFasprintf(&gradient_fs, + gradient_fs_getcolor, stops_count, stops_count); + fs_getcolor_prog = + glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, gradient_fs); + free(gradient_fs); + } + else { + fs_getcolor_prog = + glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, + gradient_fs_getcolor_no_array); + } + + return fs_getcolor_prog; } static void -_glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dyn_gen) +_glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, + int dyn_gen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - int index; - - GLint gradient_prog = 0; - char *gradient_fs = NULL; - GLint fs_main_prog, fs_getcolor_prog, vs_prog; - - const char *gradient_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord;\n" - "varying vec2 source_texture;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - "}\n"; - - /* - * Refer to pixman radial gradient. - * - * The problem is given the two circles of c1 and c2 with the radius of r1 and - * r1, we need to caculate the t, which is used to do interpolate with stops, - * using the fomula: - * length((1-t)*c1 + t*c2 - p) = (1-t)*r1 + t*r2 - * expand the fomula with xy coond, get the following: - * sqrt(sqr((1-t)*c1.x + t*c2.x - p.x) + sqr((1-t)*c1.y + t*c2.y - p.y)) - * = (1-t)r1 + t*r2 - * <====> At*t- 2Bt + C = 0 - * where A = sqr(c2.x - c1.x) + sqr(c2.y - c1.y) - sqr(r2 -r1) - * B = (p.x - c1.x)*(c2.x - c1.x) + (p.y - c1.y)*(c2.y - c1.y) + r1*(r2 -r1) - * C = sqr(p.x - c1.x) + sqr(p.y - c1.y) - r1*r1 - * - * solve the fomula and we get the result of - * t = (B + sqrt(B*B - A*C)) / A or - * t = (B - sqrt(B*B - A*C)) / A (quadratic equation have two solutions) - * - * The solution we are going to prefer is the bigger one, unless the - * radius associated to it is negative (or it falls outside the valid t range) - */ - - #define gradient_radial_fs_template\ + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + int index; + + GLint gradient_prog = 0; + char *gradient_fs = NULL; + GLint fs_main_prog, fs_getcolor_prog, vs_prog; + + const char *gradient_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord;\n" + "varying vec2 source_texture;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + "}\n"; + + /* + * Refer to pixman radial gradient. + * + * The problem is given the two circles of c1 and c2 with the radius of r1 and + * r1, we need to caculate the t, which is used to do interpolate with stops, + * using the fomula: + * length((1-t)*c1 + t*c2 - p) = (1-t)*r1 + t*r2 + * expand the fomula with xy coond, get the following: + * sqrt(sqr((1-t)*c1.x + t*c2.x - p.x) + sqr((1-t)*c1.y + t*c2.y - p.y)) + * = (1-t)r1 + t*r2 + * <====> At*t- 2Bt + C = 0 + * where A = sqr(c2.x - c1.x) + sqr(c2.y - c1.y) - sqr(r2 -r1) + * B = (p.x - c1.x)*(c2.x - c1.x) + (p.y - c1.y)*(c2.y - c1.y) + r1*(r2 -r1) + * C = sqr(p.x - c1.x) + sqr(p.y - c1.y) - r1*r1 + * + * solve the fomula and we get the result of + * t = (B + sqrt(B*B - A*C)) / A or + * t = (B - sqrt(B*B - A*C)) / A (quadratic equation have two solutions) + * + * The solution we are going to prefer is the bigger one, unless the + * radius associated to it is negative (or it falls outside the valid t range) + */ + +#define gradient_radial_fs_template\ GLAMOR_DEFAULT_PRECISION\ "uniform mat3 transform_mat;\n"\ "uniform int repeat_type;\n"\ @@ -344,149 +348,165 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dy " }\n"\ "}\n" - glamor_priv = glamor_get_screen_private(screen); - - if ((glamor_priv->radial_max_nstops >= stops_count) && (dyn_gen)) { - /* Very Good, not to generate again. */ - return; - } - - dispatch = glamor_get_dispatch(glamor_priv); - - if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) { - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; - - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]); - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0; - } - - gradient_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, gradient_vs); - - XNFasprintf(&gradient_fs, - gradient_radial_fs_template, - PIXMAN_REPEAT_NONE, PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); - - fs_main_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, gradient_fs); - - free(gradient_fs); - - fs_getcolor_prog = - _glamor_create_getcolor_fs_program(screen, stops_count, (stops_count > 0)); - - dispatch->glAttachShader(gradient_prog, vs_prog); - dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); - dispatch->glAttachShader(gradient_prog, fs_main_prog); - - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_positionsition"); - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord"); - - glamor_link_glsl_prog(dispatch, gradient_prog); - - dispatch->glUseProgram(0); - - if (dyn_gen) { - index = 2; - glamor_priv->radial_max_nstops = stops_count; - } else if (stops_count) { - index = 1; - } else { - index = 0; - } - - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = vs_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = fs_main_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = fs_getcolor_prog; - - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + + if ((glamor_priv->radial_max_nstops >= stops_count) && (dyn_gen)) { + /* Very Good, not to generate again. */ + return; + } + + dispatch = glamor_get_dispatch(glamor_priv); + + if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) { + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_VS_PROG][2]); + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; + + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][2]); + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = + 0; + + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; + + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_RADIAL][2]); + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0; + } + + gradient_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, gradient_vs); + + XNFasprintf(&gradient_fs, + gradient_radial_fs_template, + PIXMAN_REPEAT_NONE, PIXMAN_REPEAT_NORMAL, + PIXMAN_REPEAT_REFLECT); + + fs_main_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, gradient_fs); + + free(gradient_fs); + + fs_getcolor_prog = + _glamor_create_getcolor_fs_program(screen, stops_count, + (stops_count > 0)); + + dispatch->glAttachShader(gradient_prog, vs_prog); + dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); + dispatch->glAttachShader(gradient_prog, fs_main_prog); + + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, + "v_positionsition"); + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, + "v_texcoord"); + + glamor_link_glsl_prog(dispatch, gradient_prog); + + dispatch->glUseProgram(0); + + if (dyn_gen) { + index = 2; + glamor_priv->radial_max_nstops = stops_count; + } + else if (stops_count) { + index = 1; + } + else { + index = 0; + } + + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = + vs_prog; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = + fs_main_prog; + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = + fs_getcolor_prog; + + glamor_put_dispatch(glamor_priv); } static void -_glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dyn_gen) +_glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, + int dyn_gen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - - int index = 0; - GLint gradient_prog = 0; - char *gradient_fs = NULL; - GLint fs_main_prog, fs_getcolor_prog, vs_prog; - - const char *gradient_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord;\n" - "varying vec2 source_texture;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - "}\n"; - - /* - * | - * |\ - * | \ - * | \ - * | \ - * |\ \ - * | \ \ - * cos_val = |\ p1d \ / - * sqrt(1/(slope*slope+1.0)) ------>\ \ \ / - * | \ \ \ - * | \ \ / \ - * | \ *Pt1\ - * *p1 | \ \ *P - * \ | / \ \ / - * \ | / \ \ / - * \ | pd \ - * \ | \ / \ - * p2* | \ / \ / - * slope = (p2.y - p1.y) / | / p2d / - * (p2.x - p1.x) | / \ / - * | / \ / - * | / / - * | / / - * | / *Pt2 - * | / - * | / - * | / - * | / - * | / - * -------+--------------------------------- - * O| - * | - * | - * - * step 1: compute the distance of p, pt1 and pt2 in the slope direction. - * Caculate the distance on Y axis first and multiply cos_val to - * get the value on slope direction(pd, p1d and p2d represent the - * distance of p, pt1, and pt2 respectively). - * - * step 2: caculate the percentage of (pd - p1d)/(p2d - p1d). - * If (pd - p1d) > (p2d - p1d) or < 0, then sub or add (p2d - p1d) - * to make it in the range of [0, (p2d - p1d)]. - * - * step 3: compare the percentage to every stop and find the stpos just - * before and after it. Use the interpolation fomula to compute RGBA. - */ - - #define gradient_fs_template \ + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + + int index = 0; + GLint gradient_prog = 0; + char *gradient_fs = NULL; + GLint fs_main_prog, fs_getcolor_prog, vs_prog; + + const char *gradient_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord;\n" + "varying vec2 source_texture;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + "}\n"; + + /* + * | + * |\ + * | \ + * | \ + * | \ + * |\ \ + * | \ \ + * cos_val = |\ p1d \ / + * sqrt(1/(slope*slope+1.0)) ------>\ \ \ / + * | \ \ \ + * | \ \ / \ + * | \ *Pt1\ + * *p1 | \ \ *P + * \ | / \ \ / + * \ | / \ \ / + * \ | pd \ + * \ | \ / \ + * p2* | \ / \ / + * slope = (p2.y - p1.y) / | / p2d / + * (p2.x - p1.x) | / \ / + * | / \ / + * | / / + * | / / + * | / *Pt2 + * | / + * | / + * | / + * | / + * | / + * -------+--------------------------------- + * O| + * | + * | + * + * step 1: compute the distance of p, pt1 and pt2 in the slope direction. + * Caculate the distance on Y axis first and multiply cos_val to + * get the value on slope direction(pd, p1d and p2d represent the + * distance of p, pt1, and pt2 respectively). + * + * step 2: caculate the percentage of (pd - p1d)/(p2d - p1d). + * If (pd - p1d) > (p2d - p1d) or < 0, then sub or add (p2d - p1d) + * to make it in the range of [0, (p2d - p1d)]. + * + * step 3: compare the percentage to every stop and find the stpos just + * before and after it. Use the interpolation fomula to compute RGBA. + */ + +#define gradient_fs_template \ GLAMOR_DEFAULT_PRECISION\ "uniform mat3 transform_mat;\n"\ "uniform int repeat_type;\n"\ @@ -569,209 +589,238 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dy " gl_FragColor = get_color(stop_len);\n"\ "}\n" - glamor_priv = glamor_get_screen_private(screen); - - if ((glamor_priv->linear_max_nstops >= stops_count) && (dyn_gen)) { - /* Very Good, not to generate again. */ - return; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) { - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; - - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]); - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0; - } - - gradient_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, gradient_vs); - - XNFasprintf(&gradient_fs, - gradient_fs_template, - PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); - - fs_main_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, gradient_fs); - free(gradient_fs); - - fs_getcolor_prog = - _glamor_create_getcolor_fs_program(screen, stops_count, (stops_count > 0)); - - dispatch->glAttachShader(gradient_prog, vs_prog); - dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); - dispatch->glAttachShader(gradient_prog, fs_main_prog); - - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord"); - - glamor_link_glsl_prog(dispatch, gradient_prog); - - dispatch->glUseProgram(0); - - if (dyn_gen) { - index = 2; - glamor_priv->linear_max_nstops = stops_count; - } else if (stops_count) { - index = 1; - } else { - index = 0; - } - - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = vs_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = fs_main_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = fs_getcolor_prog; - - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + + if ((glamor_priv->linear_max_nstops >= stops_count) && (dyn_gen)) { + /* Very Good, not to generate again. */ + return; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) { + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_VS_PROG][2]); + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; + + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][2]); + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = + 0; + + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; + + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_LINEAR][2]); + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0; + } + + gradient_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, gradient_vs); + + XNFasprintf(&gradient_fs, + gradient_fs_template, + PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); + + fs_main_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, gradient_fs); + free(gradient_fs); + + fs_getcolor_prog = + _glamor_create_getcolor_fs_program(screen, stops_count, + (stops_count > 0)); + + dispatch->glAttachShader(gradient_prog, vs_prog); + dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); + dispatch->glAttachShader(gradient_prog, fs_main_prog); + + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, + "v_position"); + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, + "v_texcoord"); + + glamor_link_glsl_prog(dispatch, gradient_prog); + + dispatch->glUseProgram(0); + + if (dyn_gen) { + index = 2; + glamor_priv->linear_max_nstops = stops_count; + } + else if (stops_count) { + index = 1; + } + else { + index = 0; + } + + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = + vs_prog; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = + fs_main_prog; + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = + fs_getcolor_prog; + + glamor_put_dispatch(glamor_priv); } void glamor_init_gradient_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - int i; - - glamor_priv = glamor_get_screen_private(screen); - - for (i = 0; i < 3; i++) { - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; - - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; - } - glamor_priv->linear_max_nstops = 0; - glamor_priv->radial_max_nstops = 0; - - _glamor_create_linear_gradient_program(screen, 0, 0); - _glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0); - - _glamor_create_radial_gradient_program(screen, 0, 0); - _glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0); + glamor_screen_private *glamor_priv; + int i; + + glamor_priv = glamor_get_screen_private(screen); + + for (i = 0; i < 3; i++) { + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i] = 0; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = + 0; + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; + + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i] = 0; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = + 0; + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; + } + glamor_priv->linear_max_nstops = 0; + glamor_priv->radial_max_nstops = 0; + + _glamor_create_linear_gradient_program(screen, 0, 0); + _glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0); + + _glamor_create_radial_gradient_program(screen, 0, 0); + _glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0); } void glamor_fini_gradient_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - int i = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - for (i = 0; i < 3; i++) { - /* Linear Gradient */ - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]); - - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]); - - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); - - if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]) - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]); - - /* Radial Gradient */ - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]); - - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]); - - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); - - if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]) - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]); - } - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + int i = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + for (i = 0; i < 3; i++) { + /* Linear Gradient */ + if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_VS_PROG][i]); + + if (glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][i]); + + if (glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); + + if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]) + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_LINEAR][i]); + + /* Radial Gradient */ + if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_VS_PROG][i]); + + if (glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][i]); + + if (glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); + + if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]) + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_RADIAL][i]); + } + + glamor_put_dispatch(glamor_priv); } static void _glamor_gradient_convert_trans_matrix(PictTransform *from, float to[3][3], - int width, int height, int normalize) + int width, int height, int normalize) { - /* - * Because in the shader program, we normalize all the pixel cood to [0, 1], - * so with the transform matrix, the correct logic should be: - * v_s = A*T*v - * v_s: point vector in shader after normalized. - * A: The transition matrix from width X height --> 1.0 X 1.0 - * T: The transform matrix. - * v: point vector in width X height space. - * - * result is OK if we use this fomula. But for every point in width X height space, - * we can just use their normalized point vector in shader, namely we can just - * use the result of A*v in shader. So we have no chance to insert T in A*v. - * We can just convert v_s = A*T*v to v_s = A*T*inv(A)*A*v, where inv(A) is the - * inverse matrix of A. Now, v_s = (A*T*inv(A)) * (A*v) - * So, to get the correct v_s, we need to cacula1 the matrix: (A*T*inv(A)), and - * we name this matrix T_s. - * - * Firstly, because A is for the scale convertion, we find - * -- -- - * |1/w 0 0 | - * A = | 0 1/h 0 | - * | 0 0 1.0| - * -- -- - * so T_s = A*T*inv(a) and result - * - * -- -- - * | t11 h*t12/w t13/w| - * T_s = | w*t21/h t22 t23/h| - * | w*t31 h*t32 t33 | - * -- -- - */ - - to[0][0] = (float)pixman_fixed_to_double(from->matrix[0][0]); - to[0][1] = (float)pixman_fixed_to_double(from->matrix[0][1]) - * (normalize ? (((float)height) / ((float)width)) : 1.0); - to[0][2] = (float)pixman_fixed_to_double(from->matrix[0][2]) - / (normalize ? ((float)width) : 1.0); - - to[1][0] = (float)pixman_fixed_to_double(from->matrix[1][0]) - * (normalize ? (((float)width) / ((float)height)) : 1.0); - to[1][1] = (float)pixman_fixed_to_double(from->matrix[1][1]); - to[1][2] = (float)pixman_fixed_to_double(from->matrix[1][2]) - / (normalize ? ((float)height) : 1.0); - - to[2][0] = (float)pixman_fixed_to_double(from->matrix[2][0]) - * (normalize ? ((float)width) : 1.0); - to[2][1] = (float)pixman_fixed_to_double(from->matrix[2][1]) - * (normalize ? ((float)height) : 1.0); - to[2][2] = (float)pixman_fixed_to_double(from->matrix[2][2]); - - DEBUGF("the transform matrix is:\n%f\t%f\t%f\n%f\t%f\t%f\n%f\t%f\t%f\n", - to[0][0], to[0][1], to[0][2], - to[1][0], to[1][1], to[1][2], - to[2][0], to[2][1], to[2][2]); + /* + * Because in the shader program, we normalize all the pixel cood to [0, 1], + * so with the transform matrix, the correct logic should be: + * v_s = A*T*v + * v_s: point vector in shader after normalized. + * A: The transition matrix from width X height --> 1.0 X 1.0 + * T: The transform matrix. + * v: point vector in width X height space. + * + * result is OK if we use this fomula. But for every point in width X height space, + * we can just use their normalized point vector in shader, namely we can just + * use the result of A*v in shader. So we have no chance to insert T in A*v. + * We can just convert v_s = A*T*v to v_s = A*T*inv(A)*A*v, where inv(A) is the + * inverse matrix of A. Now, v_s = (A*T*inv(A)) * (A*v) + * So, to get the correct v_s, we need to cacula1 the matrix: (A*T*inv(A)), and + * we name this matrix T_s. + * + * Firstly, because A is for the scale convertion, we find + * -- -- + * |1/w 0 0 | + * A = | 0 1/h 0 | + * | 0 0 1.0| + * -- -- + * so T_s = A*T*inv(a) and result + * + * -- -- + * | t11 h*t12/w t13/w| + * T_s = | w*t21/h t22 t23/h| + * | w*t31 h*t32 t33 | + * -- -- + */ + + to[0][0] = (float) pixman_fixed_to_double(from->matrix[0][0]); + to[0][1] = (float) pixman_fixed_to_double(from->matrix[0][1]) + * (normalize ? (((float) height) / ((float) width)) : 1.0); + to[0][2] = (float) pixman_fixed_to_double(from->matrix[0][2]) + / (normalize ? ((float) width) : 1.0); + + to[1][0] = (float) pixman_fixed_to_double(from->matrix[1][0]) + * (normalize ? (((float) width) / ((float) height)) : 1.0); + to[1][1] = (float) pixman_fixed_to_double(from->matrix[1][1]); + to[1][2] = (float) pixman_fixed_to_double(from->matrix[1][2]) + / (normalize ? ((float) height) : 1.0); + + to[2][0] = (float) pixman_fixed_to_double(from->matrix[2][0]) + * (normalize ? ((float) width) : 1.0); + to[2][1] = (float) pixman_fixed_to_double(from->matrix[2][1]) + * (normalize ? ((float) height) : 1.0); + to[2][2] = (float) pixman_fixed_to_double(from->matrix[2][2]); + + DEBUGF("the transform matrix is:\n%f\t%f\t%f\n%f\t%f\t%f\n%f\t%f\t%f\n", + to[0][0], to[0][1], to[0][2], + to[1][0], to[1][1], to[1][2], to[2][0], to[2][1], to[2][2]); } static int @@ -782,803 +831,844 @@ _glamor_gradient_set_pixmap_destination(ScreenPtr screen, int x_source, int y_source, float vertices[8], float tex_vertices[8], - int tex_normalize) + int tex_normalize) { - glamor_pixmap_private *pixmap_priv; - PixmapPtr pixmap = NULL; - glamor_gl_dispatch *dispatch = NULL; - - pixmap = glamor_get_drawable_pixmap(dst_picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { /* should always have here. */ - return 0; - } - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - pixmap_priv_get_dest_scale(pixmap_priv, xscale, yscale); - - DEBUGF("xscale = %f, yscale = %f," - " x_source = %d, y_source = %d, width = %d, height = %d\n", - *xscale, *yscale, x_source, y_source, - dst_picture->pDrawable->width, dst_picture->pDrawable->height); - - glamor_set_normalize_vcoords_tri_strip(*xscale, *yscale, - 0, 0, - (INT16)(dst_picture->pDrawable->width), - (INT16)(dst_picture->pDrawable->height), - glamor_priv->yInverted, vertices); - - if (tex_normalize) { - glamor_set_normalize_tcoords_tri_stripe(*xscale, *yscale, - x_source, y_source, - (INT16)(dst_picture->pDrawable->width + x_source), - (INT16)(dst_picture->pDrawable->height + y_source), - glamor_priv->yInverted, tex_vertices); - } else { - glamor_set_tcoords_tri_strip((INT16)(dst_picture->pDrawable->width), - (INT16)(dst_picture->pDrawable->height), - x_source, y_source, - (INT16)(dst_picture->pDrawable->width) + x_source, - (INT16)(dst_picture->pDrawable->height) + y_source, - glamor_priv->yInverted, tex_vertices); - } - - DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], vertices[2], vertices[3], - vertices[4], vertices[5], vertices[6], vertices[7]); - DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3], - tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]); - - dispatch = glamor_get_dispatch(glamor_priv); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 0, vertices); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 0, tex_vertices); - - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_put_dispatch(glamor_priv); - - return 1; + glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap = NULL; + glamor_gl_dispatch *dispatch = NULL; + + pixmap = glamor_get_drawable_pixmap(dst_picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { /* should always have here. */ + return 0; + } + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + pixmap_priv_get_dest_scale(pixmap_priv, xscale, yscale); + + DEBUGF("xscale = %f, yscale = %f," + " x_source = %d, y_source = %d, width = %d, height = %d\n", + *xscale, *yscale, x_source, y_source, + dst_picture->pDrawable->width, dst_picture->pDrawable->height); + + glamor_set_normalize_vcoords_tri_strip(*xscale, *yscale, + 0, 0, + (INT16) (dst_picture->pDrawable-> + width), + (INT16) (dst_picture->pDrawable-> + height), + glamor_priv->yInverted, vertices); + + if (tex_normalize) { + glamor_set_normalize_tcoords_tri_stripe(*xscale, *yscale, + x_source, y_source, + (INT16) (dst_picture-> + pDrawable->width + + x_source), + (INT16) (dst_picture-> + pDrawable->height + + y_source), + glamor_priv->yInverted, + tex_vertices); + } + else { + glamor_set_tcoords_tri_strip((INT16) (dst_picture->pDrawable->width), + (INT16) (dst_picture->pDrawable->height), + x_source, y_source, + (INT16) (dst_picture->pDrawable->width) + + x_source, + (INT16) (dst_picture->pDrawable->height) + + y_source, glamor_priv->yInverted, + tex_vertices); + } + + DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", + vertices[0], vertices[1], vertices[2], vertices[3], + vertices[4], vertices[5], vertices[6], vertices[7]); + DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", + tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3], + tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]); + + dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 0, vertices); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 0, tex_vertices); + + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_put_dispatch(glamor_priv); + + return 1; } static int -_glamor_gradient_set_stops(PicturePtr src_picture, PictGradient * pgradient, - GLfloat *stop_colors, GLfloat *n_stops) +_glamor_gradient_set_stops(PicturePtr src_picture, PictGradient *pgradient, + GLfloat *stop_colors, GLfloat *n_stops) { - int i; - int count = 1; - - for (i = 0; i < pgradient->nstops; i++) { - stop_colors[count*4] = pixman_fixed_to_double( - pgradient->stops[i].color.red); - stop_colors[count*4+1] = pixman_fixed_to_double( - pgradient->stops[i].color.green); - stop_colors[count*4+2] = pixman_fixed_to_double( - pgradient->stops[i].color.blue); - stop_colors[count*4+3] = pixman_fixed_to_double( - pgradient->stops[i].color.alpha); - - n_stops[count] = (GLfloat)pixman_fixed_to_double( - pgradient->stops[i].x); - count++; - } - - /* for the end stop. */ - count++; - - switch (src_picture->repeatType) { + int i; + int count = 1; + + for (i = 0; i < pgradient->nstops; i++) { + stop_colors[count * 4] = + pixman_fixed_to_double(pgradient->stops[i].color.red); + stop_colors[count * 4 + 1] = + pixman_fixed_to_double(pgradient->stops[i].color.green); + stop_colors[count * 4 + 2] = + pixman_fixed_to_double(pgradient->stops[i].color.blue); + stop_colors[count * 4 + 3] = + pixman_fixed_to_double(pgradient->stops[i].color.alpha); + + n_stops[count] = + (GLfloat) pixman_fixed_to_double(pgradient->stops[i].x); + count++; + } + + /* for the end stop. */ + count++; + + switch (src_picture->repeatType) { #define REPEAT_FILL_STOPS(m, n) \ stop_colors[(m)*4 + 0] = stop_colors[(n)*4 + 0]; \ stop_colors[(m)*4 + 1] = stop_colors[(n)*4 + 1]; \ stop_colors[(m)*4 + 2] = stop_colors[(n)*4 + 2]; \ stop_colors[(m)*4 + 3] = stop_colors[(n)*4 + 3]; - default: - case PIXMAN_REPEAT_NONE: - stop_colors[0] = 0.0; //R - stop_colors[1] = 0.0; //G - stop_colors[2] = 0.0; //B - stop_colors[3] = 0.0; //Alpha - n_stops[0] = -(float)INT_MAX; //should be small enough. - - stop_colors[0 + (count-1)*4] = 0.0; //R - stop_colors[1 + (count-1)*4] = 0.0; //G - stop_colors[2 + (count-1)*4] = 0.0; //B - stop_colors[3 + (count-1)*4] = 0.0; //Alpha - n_stops[count-1] = (float)INT_MAX; //should be large enough. - break; - case PIXMAN_REPEAT_NORMAL: - REPEAT_FILL_STOPS(0, count - 2); - n_stops[0] = n_stops[count-2] - 1.0; - - REPEAT_FILL_STOPS(count - 1, 1); - n_stops[count-1] = n_stops[1] + 1.0; - break; - case PIXMAN_REPEAT_REFLECT: - REPEAT_FILL_STOPS(0, 1); - n_stops[0] = -n_stops[1]; - - REPEAT_FILL_STOPS(count - 1, count - 2); - n_stops[count-1] = 1.0 + 1.0 - n_stops[count-2]; - break; - case PIXMAN_REPEAT_PAD: - REPEAT_FILL_STOPS(0, 1); - n_stops[0] = -(float)INT_MAX; - - REPEAT_FILL_STOPS(count - 1, count - 2); - n_stops[count-1] = (float)INT_MAX; - break; + default: + case PIXMAN_REPEAT_NONE: + stop_colors[0] = 0.0; //R + stop_colors[1] = 0.0; //G + stop_colors[2] = 0.0; //B + stop_colors[3] = 0.0; //Alpha + n_stops[0] = -(float) INT_MAX; //should be small enough. + + stop_colors[0 + (count - 1) * 4] = 0.0; //R + stop_colors[1 + (count - 1) * 4] = 0.0; //G + stop_colors[2 + (count - 1) * 4] = 0.0; //B + stop_colors[3 + (count - 1) * 4] = 0.0; //Alpha + n_stops[count - 1] = (float) INT_MAX; //should be large enough. + break; + case PIXMAN_REPEAT_NORMAL: + REPEAT_FILL_STOPS(0, count - 2); + n_stops[0] = n_stops[count - 2] - 1.0; + + REPEAT_FILL_STOPS(count - 1, 1); + n_stops[count - 1] = n_stops[1] + 1.0; + break; + case PIXMAN_REPEAT_REFLECT: + REPEAT_FILL_STOPS(0, 1); + n_stops[0] = -n_stops[1]; + + REPEAT_FILL_STOPS(count - 1, count - 2); + n_stops[count - 1] = 1.0 + 1.0 - n_stops[count - 2]; + break; + case PIXMAN_REPEAT_PAD: + REPEAT_FILL_STOPS(0, 1); + n_stops[0] = -(float) INT_MAX; + + REPEAT_FILL_STOPS(count - 1, count - 2); + n_stops[count - 1] = (float) INT_MAX; + break; #undef REPEAT_FILL_STOPS - } + } - for (i = 0; i < count; i++) { - DEBUGF("n_stops[%d] = %f, color = r:%f g:%f b:%f a:%f\n", - i, n_stops[i], - stop_colors[i*4], stop_colors[i*4+1], - stop_colors[i*4+2], stop_colors[i*4+3]); - } + for (i = 0; i < count; i++) { + DEBUGF("n_stops[%d] = %f, color = r:%f g:%f b:%f a:%f\n", + i, n_stops[i], + stop_colors[i * 4], stop_colors[i * 4 + 1], + stop_colors[i * 4 + 2], stop_colors[i * 4 + 3]); + } - return count; + return count; } PicturePtr glamor_generate_radial_gradient_picture(ScreenPtr screen, - PicturePtr src_picture, - int x_source, int y_source, - int width, int height, - PictFormatShort format) + PicturePtr src_picture, + int x_source, int y_source, + int width, int height, + PictFormatShort format) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - PicturePtr dst_picture = NULL; - PixmapPtr pixmap = NULL; - GLint gradient_prog = 0; - int error; - float tex_vertices[8]; - int stops_count = 0; - int count = 0; - GLfloat *stop_colors = NULL; - GLfloat *n_stops = NULL; - GLfloat xscale, yscale; - float vertices[8]; - float transform_mat[3][3]; - static const float identity_mat[3][3] = {{1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0}}; - GLfloat stop_colors_st[RADIAL_SMALL_STOPS*4]; - GLfloat n_stops_st[RADIAL_SMALL_STOPS]; - GLfloat A_value; - GLfloat cxy[4]; - float c1x, c1y, c2x, c2y, r1, r2; - - GLint transform_mat_uniform_location = 0; - GLint repeat_type_uniform_location = 0; - GLint n_stop_uniform_location = 0; - GLint stops_uniform_location = 0; - GLint stop_colors_uniform_location = 0; - GLint stop0_uniform_location = 0; - GLint stop1_uniform_location = 0; - GLint stop2_uniform_location = 0; - GLint stop3_uniform_location = 0; - GLint stop4_uniform_location = 0; - GLint stop5_uniform_location = 0; - GLint stop6_uniform_location = 0; - GLint stop7_uniform_location = 0; - GLint stop_color0_uniform_location = 0; - GLint stop_color1_uniform_location = 0; - GLint stop_color2_uniform_location = 0; - GLint stop_color3_uniform_location = 0; - GLint stop_color4_uniform_location = 0; - GLint stop_color5_uniform_location = 0; - GLint stop_color6_uniform_location = 0; - GLint stop_color7_uniform_location = 0; - GLint A_value_uniform_location = 0; - GLint c1_uniform_location = 0; - GLint r1_uniform_location = 0; - GLint c2_uniform_location = 0; - GLint r2_uniform_location = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - /* Create a pixmap with VBO. */ - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - 0); - if (!pixmap) - goto GRADIENT_FAIL; - - dst_picture = CreatePicture(0, &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - /* Release the reference, picture will hold the last one. */ - glamor_destroy_pixmap(pixmap); - - if (!dst_picture) - goto GRADIENT_FAIL; - - ValidatePicture(dst_picture); - - stops_count = src_picture->pSourcePict->radial.nstops + 2; - - /* Because the max value of nstops is unkown, so create a program - when nstops > LINEAR_LARGE_STOPS.*/ - if (stops_count <= RADIAL_SMALL_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][0]; - } else if (stops_count <= RADIAL_LARGE_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][1]; - } else { - _glamor_create_radial_gradient_program(screen, - src_picture->pSourcePict->linear.nstops + 2, - 1); - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]; - } - - /* Bind all the uniform vars .*/ - transform_mat_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - n_stop_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "n_stop"); - A_value_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "A_value"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - c1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "c1"); - r1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "r1"); - c2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "c2"); - r2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "r2"); - - if (src_picture->pSourcePict->radial.nstops + 2 <= RADIAL_SMALL_STOPS) { - stop0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop0"); - stop1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop1"); - stop2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop2"); - stop3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop3"); - stop4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop4"); - stop5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop5"); - stop6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop6"); - stop7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop7"); - - stop_color0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); - stop_color1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); - stop_color2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); - stop_color3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); - stop_color4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); - stop_color5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); - stop_color6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); - stop_color7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); - } else { - stops_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stops"); - stop_colors_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); - } - - dispatch->glUseProgram(gradient_prog); - - dispatch->glUniform1i(repeat_type_uniform_location, src_picture->repeatType); - - - if (src_picture->transform) { - _glamor_gradient_convert_trans_matrix(src_picture->transform, - transform_mat, - width, height, 0); - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &transform_mat[0][0]); - } else { - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &identity_mat[0][0]); - } - - if (!_glamor_gradient_set_pixmap_destination(screen, glamor_priv, dst_picture, - &xscale, &yscale, x_source, y_source, - vertices, tex_vertices, 0)) - goto GRADIENT_FAIL; - - /* Set all the stops and colors to shader. */ - if (stops_count > RADIAL_SMALL_STOPS) { - stop_colors = malloc(4 * stops_count * sizeof(float)); - if (stop_colors == NULL) { - ErrorF("Failed to allocate stop_colors memory.\n"); - goto GRADIENT_FAIL; - } - - n_stops = malloc(stops_count * sizeof(float)); - if (n_stops == NULL) { - ErrorF("Failed to allocate n_stops memory.\n"); - goto GRADIENT_FAIL; - } - } else { - stop_colors = stop_colors_st; - n_stops = n_stops_st; - } - - count = _glamor_gradient_set_stops(src_picture, &src_picture->pSourcePict->gradient, - stop_colors, n_stops); - - if (src_picture->pSourcePict->linear.nstops + 2 <= RADIAL_SMALL_STOPS) { - int j = 0; - dispatch->glUniform4f(stop_color0_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color1_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color2_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color3_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color4_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color5_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color6_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color7_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - - j = 0; - dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); - dispatch->glUniform1i(n_stop_uniform_location, count); - } else { - dispatch->glUniform4fv(stop_colors_uniform_location, count, stop_colors); - dispatch->glUniform1fv(stops_uniform_location, count, n_stops); - dispatch->glUniform1i(n_stop_uniform_location, count); - } - - c1x = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.x); - c1y = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.y); - c2x = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.x); - c2y = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.y); - - r1 = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.radius); - r2 = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.radius); - - glamor_set_circle_centre(width, height, c1x, c1y, glamor_priv->yInverted, cxy); - dispatch->glUniform2fv(c1_uniform_location, 1, cxy); - dispatch->glUniform1f(r1_uniform_location, r1); - - glamor_set_circle_centre(width, height, c2x, c2y, glamor_priv->yInverted, cxy); - dispatch->glUniform2fv(c2_uniform_location, 1, cxy); - dispatch->glUniform1f(r2_uniform_location, r2); - - A_value = (c2x - c1x) * (c2x - c1x) + (c2y - c1y) * (c2y - c1y) - (r2 - r1) * (r2 - r1); - dispatch->glUniform1f(A_value_uniform_location, A_value); - - DEBUGF("C1:(%f, %f) R1:%f\nC2:(%f, %f) R2:%f\nA = %f\n", - c1x, c1y, r1, c2x, c2y, r2, A_value); - - /* Now rendering. */ - dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Do the clear logic.*/ - if (stops_count > RADIAL_SMALL_STOPS) { - free(n_stops); - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); - return dst_picture; - -GRADIENT_FAIL: - if (dst_picture) { - FreePicture(dst_picture, 0); - } - - if (stops_count > RADIAL_SMALL_STOPS) { - if (n_stops) - free(n_stops); - if (stop_colors) - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return NULL; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + PicturePtr dst_picture = NULL; + PixmapPtr pixmap = NULL; + GLint gradient_prog = 0; + int error; + float tex_vertices[8]; + int stops_count = 0; + int count = 0; + GLfloat *stop_colors = NULL; + GLfloat *n_stops = NULL; + GLfloat xscale, yscale; + float vertices[8]; + float transform_mat[3][3]; + static const float identity_mat[3][3] = { {1.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + GLfloat stop_colors_st[RADIAL_SMALL_STOPS * 4]; + GLfloat n_stops_st[RADIAL_SMALL_STOPS]; + GLfloat A_value; + GLfloat cxy[4]; + float c1x, c1y, c2x, c2y, r1, r2; + + GLint transform_mat_uniform_location = 0; + GLint repeat_type_uniform_location = 0; + GLint n_stop_uniform_location = 0; + GLint stops_uniform_location = 0; + GLint stop_colors_uniform_location = 0; + GLint stop0_uniform_location = 0; + GLint stop1_uniform_location = 0; + GLint stop2_uniform_location = 0; + GLint stop3_uniform_location = 0; + GLint stop4_uniform_location = 0; + GLint stop5_uniform_location = 0; + GLint stop6_uniform_location = 0; + GLint stop7_uniform_location = 0; + GLint stop_color0_uniform_location = 0; + GLint stop_color1_uniform_location = 0; + GLint stop_color2_uniform_location = 0; + GLint stop_color3_uniform_location = 0; + GLint stop_color4_uniform_location = 0; + GLint stop_color5_uniform_location = 0; + GLint stop_color6_uniform_location = 0; + GLint stop_color7_uniform_location = 0; + GLint A_value_uniform_location = 0; + GLint c1_uniform_location = 0; + GLint r1_uniform_location = 0; + GLint c2_uniform_location = 0; + GLint r2_uniform_location = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + /* Create a pixmap with VBO. */ + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), 0); + if (!pixmap) + goto GRADIENT_FAIL; + + dst_picture = CreatePicture(0, &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, + &error); + + /* Release the reference, picture will hold the last one. */ + glamor_destroy_pixmap(pixmap); + + if (!dst_picture) + goto GRADIENT_FAIL; + + ValidatePicture(dst_picture); + + stops_count = src_picture->pSourcePict->radial.nstops + 2; + + /* Because the max value of nstops is unkown, so create a program + when nstops > LINEAR_LARGE_STOPS. */ + if (stops_count <= RADIAL_SMALL_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][0]; + } + else if (stops_count <= RADIAL_LARGE_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][1]; + } + else { + _glamor_create_radial_gradient_program(screen, + src_picture->pSourcePict->linear. + nstops + 2, 1); + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]; + } + + /* Bind all the uniform vars . */ + transform_mat_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + n_stop_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "n_stop"); + A_value_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "A_value"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + c1_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "c1"); + r1_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "r1"); + c2_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "c2"); + r2_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "r2"); + + if (src_picture->pSourcePict->radial.nstops + 2 <= RADIAL_SMALL_STOPS) { + stop0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop0"); + stop1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop1"); + stop2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop2"); + stop3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop3"); + stop4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop4"); + stop5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop5"); + stop6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop6"); + stop7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop7"); + + stop_color0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); + stop_color1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); + stop_color2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); + stop_color3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); + stop_color4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); + stop_color5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); + stop_color6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); + stop_color7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); + } + else { + stops_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stops"); + stop_colors_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); + } + + dispatch->glUseProgram(gradient_prog); + + dispatch->glUniform1i(repeat_type_uniform_location, + src_picture->repeatType); + + if (src_picture->transform) { + _glamor_gradient_convert_trans_matrix(src_picture->transform, + transform_mat, width, height, 0); + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &transform_mat[0][0]); + } + else { + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &identity_mat[0][0]); + } + + if (!_glamor_gradient_set_pixmap_destination + (screen, glamor_priv, dst_picture, &xscale, &yscale, x_source, y_source, + vertices, tex_vertices, 0)) + goto GRADIENT_FAIL; + + /* Set all the stops and colors to shader. */ + if (stops_count > RADIAL_SMALL_STOPS) { + stop_colors = malloc(4 * stops_count * sizeof(float)); + if (stop_colors == NULL) { + ErrorF("Failed to allocate stop_colors memory.\n"); + goto GRADIENT_FAIL; + } + + n_stops = malloc(stops_count * sizeof(float)); + if (n_stops == NULL) { + ErrorF("Failed to allocate n_stops memory.\n"); + goto GRADIENT_FAIL; + } + } + else { + stop_colors = stop_colors_st; + n_stops = n_stops_st; + } + + count = + _glamor_gradient_set_stops(src_picture, + &src_picture->pSourcePict->gradient, + stop_colors, n_stops); + + if (src_picture->pSourcePict->linear.nstops + 2 <= RADIAL_SMALL_STOPS) { + int j = 0; + + dispatch->glUniform4f(stop_color0_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color1_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color2_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color3_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color4_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color5_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color6_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color7_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + + j = 0; + dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + else { + dispatch->glUniform4fv(stop_colors_uniform_location, count, + stop_colors); + dispatch->glUniform1fv(stops_uniform_location, count, n_stops); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + + c1x = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.x); + c1y = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.y); + c2x = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.x); + c2y = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.y); + + r1 = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1. + radius); + r2 = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2. + radius); + + glamor_set_circle_centre(width, height, c1x, c1y, glamor_priv->yInverted, + cxy); + dispatch->glUniform2fv(c1_uniform_location, 1, cxy); + dispatch->glUniform1f(r1_uniform_location, r1); + + glamor_set_circle_centre(width, height, c2x, c2y, glamor_priv->yInverted, + cxy); + dispatch->glUniform2fv(c2_uniform_location, 1, cxy); + dispatch->glUniform1f(r2_uniform_location, r2); + + A_value = + (c2x - c1x) * (c2x - c1x) + (c2y - c1y) * (c2y - c1y) - (r2 - + r1) * (r2 - + r1); + dispatch->glUniform1f(A_value_uniform_location, A_value); + + DEBUGF("C1:(%f, %f) R1:%f\nC2:(%f, %f) R2:%f\nA = %f\n", + c1x, c1y, r1, c2x, c2y, r2, A_value); + + /* Now rendering. */ + dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + /* Do the clear logic. */ + if (stops_count > RADIAL_SMALL_STOPS) { + free(n_stops); + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); + return dst_picture; + + GRADIENT_FAIL: + if (dst_picture) { + FreePicture(dst_picture, 0); + } + + if (stops_count > RADIAL_SMALL_STOPS) { + if (n_stops) + free(n_stops); + if (stop_colors) + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return NULL; } PicturePtr glamor_generate_linear_gradient_picture(ScreenPtr screen, - PicturePtr src_picture, - int x_source, int y_source, - int width, int height, - PictFormatShort format) + PicturePtr src_picture, + int x_source, int y_source, + int width, int height, + PictFormatShort format) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - PicturePtr dst_picture = NULL; - PixmapPtr pixmap = NULL; - GLint gradient_prog = 0; - int error; - float pt_distance; - float p1_distance; - GLfloat cos_val; - float tex_vertices[8]; - int stops_count = 0; - GLfloat *stop_colors = NULL; - GLfloat *n_stops = NULL; - int count = 0; - float slope; - GLfloat xscale, yscale; - GLfloat pt1[2], pt2[2]; - float vertices[8]; - float transform_mat[3][3]; - static const float identity_mat[3][3] = {{1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0}}; - GLfloat stop_colors_st[LINEAR_SMALL_STOPS*4]; - GLfloat n_stops_st[LINEAR_SMALL_STOPS]; - - GLint transform_mat_uniform_location = 0; - GLint n_stop_uniform_location = 0; - GLint stops_uniform_location = 0; - GLint stop0_uniform_location = 0; - GLint stop1_uniform_location = 0; - GLint stop2_uniform_location = 0; - GLint stop3_uniform_location = 0; - GLint stop4_uniform_location = 0; - GLint stop5_uniform_location = 0; - GLint stop6_uniform_location = 0; - GLint stop7_uniform_location = 0; - GLint stop_colors_uniform_location = 0; - GLint stop_color0_uniform_location = 0; - GLint stop_color1_uniform_location = 0; - GLint stop_color2_uniform_location = 0; - GLint stop_color3_uniform_location = 0; - GLint stop_color4_uniform_location = 0; - GLint stop_color5_uniform_location = 0; - GLint stop_color6_uniform_location = 0; - GLint stop_color7_uniform_location = 0; - GLint pt_slope_uniform_location = 0; - GLint repeat_type_uniform_location = 0; - GLint hor_ver_uniform_location = 0; - GLint cos_val_uniform_location = 0; - GLint p1_distance_uniform_location = 0; - GLint pt_distance_uniform_location = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - /* Create a pixmap with VBO. */ - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - 0); - - if (!pixmap) - goto GRADIENT_FAIL; - - dst_picture = CreatePicture(0, &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - /* Release the reference, picture will hold the last one. */ - glamor_destroy_pixmap(pixmap); - - if (!dst_picture) - goto GRADIENT_FAIL; - - ValidatePicture(dst_picture); - - stops_count = src_picture->pSourcePict->linear.nstops + 2; - - /* Because the max value of nstops is unkown, so create a program - when nstops > LINEAR_LARGE_STOPS.*/ - if (stops_count <= LINEAR_SMALL_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][0]; - } else if (stops_count <= LINEAR_LARGE_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][1]; - } else { - _glamor_create_linear_gradient_program(screen, - src_picture->pSourcePict->linear.nstops + 2, 1); - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]; - } - - /* Bind all the uniform vars .*/ - n_stop_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "n_stop"); - pt_slope_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "pt_slope"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - hor_ver_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "hor_ver"); - transform_mat_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); - cos_val_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "cos_val"); - p1_distance_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "p1_distance"); - pt_distance_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "pt_distance"); - - if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { - stop0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop0"); - stop1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop1"); - stop2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop2"); - stop3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop3"); - stop4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop4"); - stop5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop5"); - stop6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop6"); - stop7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop7"); - - stop_color0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); - stop_color1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); - stop_color2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); - stop_color3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); - stop_color4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); - stop_color5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); - stop_color6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); - stop_color7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); - } else { - stops_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stops"); - stop_colors_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); - } - - dispatch->glUseProgram(gradient_prog); - - dispatch->glUniform1i(repeat_type_uniform_location, src_picture->repeatType); - - /* set the transform matrix. */ - if (src_picture->transform) { - _glamor_gradient_convert_trans_matrix(src_picture->transform, - transform_mat, - width, height, 1); - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &transform_mat[0][0]); - } else { - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &identity_mat[0][0]); - } - - if (!_glamor_gradient_set_pixmap_destination(screen, glamor_priv, dst_picture, - &xscale, &yscale, x_source, y_source, - vertices, tex_vertices, 1)) - goto GRADIENT_FAIL; - - /* Normalize the PTs. */ - glamor_set_normalize_pt(xscale, yscale, - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), - glamor_priv->yInverted, - pt1); - DEBUGF("pt1:(%f, %f) ---> (%f %f)\n", pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), pt1[0], pt1[1]); - - glamor_set_normalize_pt(xscale, yscale, - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), - glamor_priv->yInverted, - pt2); - DEBUGF("pt2:(%f, %f) ---> (%f %f)\n", pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), pt2[0], pt2[1]); - - /* Set all the stops and colors to shader. */ - if (stops_count > LINEAR_SMALL_STOPS) { - stop_colors = malloc(4 * stops_count * sizeof(float)); - if (stop_colors == NULL) { - ErrorF("Failed to allocate stop_colors memory.\n"); - goto GRADIENT_FAIL; - } - - n_stops = malloc(stops_count * sizeof(float)); - if (n_stops == NULL) { - ErrorF("Failed to allocate n_stops memory.\n"); - goto GRADIENT_FAIL; - } - } else { - stop_colors = stop_colors_st; - n_stops = n_stops_st; - } - - count = _glamor_gradient_set_stops(src_picture, &src_picture->pSourcePict->gradient, - stop_colors, n_stops); - - if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { - int j = 0; - dispatch->glUniform4f(stop_color0_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color1_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color2_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color3_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color4_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color5_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color6_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color7_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - - j = 0; - dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); - - dispatch->glUniform1i(n_stop_uniform_location, count); - } else { - dispatch->glUniform4fv(stop_colors_uniform_location, count, stop_colors); - dispatch->glUniform1fv(stops_uniform_location, count, n_stops); - dispatch->glUniform1i(n_stop_uniform_location, count); - } - - if (src_picture->pSourcePict->linear.p2.y == - src_picture->pSourcePict->linear.p1.y) { // The horizontal case. - dispatch->glUniform1i(hor_ver_uniform_location, 1); - DEBUGF("p1.y: %f, p2.y: %f, enter the horizontal case\n", - pt1[1], pt2[1]); - - p1_distance = pt1[0]; - pt_distance = (pt2[0] - p1_distance); - dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); - dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); - } else { - /* The slope need to compute here. In shader, the viewport set will change - the orginal slope and the slope which is vertical to it will not be correct.*/ - slope = - (float)(src_picture->pSourcePict->linear.p2.x - - src_picture->pSourcePict->linear.p1.x) / - (float)(src_picture->pSourcePict->linear.p2.y - - src_picture->pSourcePict->linear.p1.y); - slope = slope * yscale / xscale; - dispatch->glUniform1f(pt_slope_uniform_location, slope); - dispatch->glUniform1i(hor_ver_uniform_location, 0); - - cos_val = sqrt(1.0 / (slope * slope + 1.0)); - dispatch->glUniform1f(cos_val_uniform_location, cos_val); - - p1_distance = (pt1[1] - pt1[0] * slope) * cos_val; - pt_distance = (pt2[1] - pt2[0] * slope) * cos_val - p1_distance; - dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); - dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); - } - - /* Now rendering. */ - dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Do the clear logic.*/ - if (stops_count > LINEAR_SMALL_STOPS) { - free(n_stops); - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); - return dst_picture; - -GRADIENT_FAIL: - if (dst_picture) { - FreePicture(dst_picture, 0); - } - - if (stops_count > LINEAR_SMALL_STOPS) { - if (n_stops) - free(n_stops); - if (stop_colors) - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return NULL; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + PicturePtr dst_picture = NULL; + PixmapPtr pixmap = NULL; + GLint gradient_prog = 0; + int error; + float pt_distance; + float p1_distance; + GLfloat cos_val; + float tex_vertices[8]; + int stops_count = 0; + GLfloat *stop_colors = NULL; + GLfloat *n_stops = NULL; + int count = 0; + float slope; + GLfloat xscale, yscale; + GLfloat pt1[2], pt2[2]; + float vertices[8]; + float transform_mat[3][3]; + static const float identity_mat[3][3] = { {1.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + GLfloat stop_colors_st[LINEAR_SMALL_STOPS * 4]; + GLfloat n_stops_st[LINEAR_SMALL_STOPS]; + + GLint transform_mat_uniform_location = 0; + GLint n_stop_uniform_location = 0; + GLint stops_uniform_location = 0; + GLint stop0_uniform_location = 0; + GLint stop1_uniform_location = 0; + GLint stop2_uniform_location = 0; + GLint stop3_uniform_location = 0; + GLint stop4_uniform_location = 0; + GLint stop5_uniform_location = 0; + GLint stop6_uniform_location = 0; + GLint stop7_uniform_location = 0; + GLint stop_colors_uniform_location = 0; + GLint stop_color0_uniform_location = 0; + GLint stop_color1_uniform_location = 0; + GLint stop_color2_uniform_location = 0; + GLint stop_color3_uniform_location = 0; + GLint stop_color4_uniform_location = 0; + GLint stop_color5_uniform_location = 0; + GLint stop_color6_uniform_location = 0; + GLint stop_color7_uniform_location = 0; + GLint pt_slope_uniform_location = 0; + GLint repeat_type_uniform_location = 0; + GLint hor_ver_uniform_location = 0; + GLint cos_val_uniform_location = 0; + GLint p1_distance_uniform_location = 0; + GLint pt_distance_uniform_location = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + /* Create a pixmap with VBO. */ + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), 0); + + if (!pixmap) + goto GRADIENT_FAIL; + + dst_picture = CreatePicture(0, &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, + &error); + + /* Release the reference, picture will hold the last one. */ + glamor_destroy_pixmap(pixmap); + + if (!dst_picture) + goto GRADIENT_FAIL; + + ValidatePicture(dst_picture); + + stops_count = src_picture->pSourcePict->linear.nstops + 2; + + /* Because the max value of nstops is unkown, so create a program + when nstops > LINEAR_LARGE_STOPS. */ + if (stops_count <= LINEAR_SMALL_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][0]; + } + else if (stops_count <= LINEAR_LARGE_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][1]; + } + else { + _glamor_create_linear_gradient_program(screen, + src_picture->pSourcePict->linear. + nstops + 2, 1); + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]; + } + + /* Bind all the uniform vars . */ + n_stop_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "n_stop"); + pt_slope_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "pt_slope"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + hor_ver_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "hor_ver"); + transform_mat_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); + cos_val_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "cos_val"); + p1_distance_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "p1_distance"); + pt_distance_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "pt_distance"); + + if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { + stop0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop0"); + stop1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop1"); + stop2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop2"); + stop3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop3"); + stop4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop4"); + stop5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop5"); + stop6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop6"); + stop7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop7"); + + stop_color0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); + stop_color1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); + stop_color2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); + stop_color3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); + stop_color4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); + stop_color5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); + stop_color6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); + stop_color7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); + } + else { + stops_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stops"); + stop_colors_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); + } + + dispatch->glUseProgram(gradient_prog); + + dispatch->glUniform1i(repeat_type_uniform_location, + src_picture->repeatType); + + /* set the transform matrix. */ + if (src_picture->transform) { + _glamor_gradient_convert_trans_matrix(src_picture->transform, + transform_mat, width, height, 1); + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &transform_mat[0][0]); + } + else { + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &identity_mat[0][0]); + } + + if (!_glamor_gradient_set_pixmap_destination + (screen, glamor_priv, dst_picture, &xscale, &yscale, x_source, y_source, + vertices, tex_vertices, 1)) + goto GRADIENT_FAIL; + + /* Normalize the PTs. */ + glamor_set_normalize_pt(xscale, yscale, + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p1.x), + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p1.y), + glamor_priv->yInverted, pt1); + DEBUGF("pt1:(%f, %f) ---> (%f %f)\n", + pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), + pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), + pt1[0], pt1[1]); + + glamor_set_normalize_pt(xscale, yscale, + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p2.x), + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p2.y), + glamor_priv->yInverted, pt2); + DEBUGF("pt2:(%f, %f) ---> (%f %f)\n", + pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), + pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), + pt2[0], pt2[1]); + + /* Set all the stops and colors to shader. */ + if (stops_count > LINEAR_SMALL_STOPS) { + stop_colors = malloc(4 * stops_count * sizeof(float)); + if (stop_colors == NULL) { + ErrorF("Failed to allocate stop_colors memory.\n"); + goto GRADIENT_FAIL; + } + + n_stops = malloc(stops_count * sizeof(float)); + if (n_stops == NULL) { + ErrorF("Failed to allocate n_stops memory.\n"); + goto GRADIENT_FAIL; + } + } + else { + stop_colors = stop_colors_st; + n_stops = n_stops_st; + } + + count = + _glamor_gradient_set_stops(src_picture, + &src_picture->pSourcePict->gradient, + stop_colors, n_stops); + + if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { + int j = 0; + + dispatch->glUniform4f(stop_color0_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color1_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color2_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color3_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color4_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color5_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color6_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color7_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + + j = 0; + dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); + + dispatch->glUniform1i(n_stop_uniform_location, count); + } + else { + dispatch->glUniform4fv(stop_colors_uniform_location, count, + stop_colors); + dispatch->glUniform1fv(stops_uniform_location, count, n_stops); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + + if (src_picture->pSourcePict->linear.p2.y == src_picture->pSourcePict->linear.p1.y) { // The horizontal case. + dispatch->glUniform1i(hor_ver_uniform_location, 1); + DEBUGF("p1.y: %f, p2.y: %f, enter the horizontal case\n", + pt1[1], pt2[1]); + + p1_distance = pt1[0]; + pt_distance = (pt2[0] - p1_distance); + dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); + dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); + } + else { + /* The slope need to compute here. In shader, the viewport set will change + the orginal slope and the slope which is vertical to it will not be correct. */ + slope = -(float) (src_picture->pSourcePict->linear.p2.x + - src_picture->pSourcePict->linear.p1.x) / + (float) (src_picture->pSourcePict->linear.p2.y + - src_picture->pSourcePict->linear.p1.y); + slope = slope * yscale / xscale; + dispatch->glUniform1f(pt_slope_uniform_location, slope); + dispatch->glUniform1i(hor_ver_uniform_location, 0); + + cos_val = sqrt(1.0 / (slope * slope + 1.0)); + dispatch->glUniform1f(cos_val_uniform_location, cos_val); + + p1_distance = (pt1[1] - pt1[0] * slope) * cos_val; + pt_distance = (pt2[1] - pt2[0] * slope) * cos_val - p1_distance; + dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); + dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); + } + + /* Now rendering. */ + dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + /* Do the clear logic. */ + if (stops_count > LINEAR_SMALL_STOPS) { + free(n_stops); + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); + return dst_picture; + + GRADIENT_FAIL: + if (dst_picture) { + FreePicture(dst_picture, 0); + } + + if (stops_count > LINEAR_SMALL_STOPS) { + if (n_stops) + free(n_stops); + if (stop_colors) + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return NULL; } -#endif /* End of GLAMOR_GRADIENT_SHADER */ +#endif /* End of GLAMOR_GRADIENT_SHADER */ -#endif /* End of RENDER */ +#endif /* End of RENDER */ diff --git a/xorg-server/glamor/glamor_largepixmap.c b/xorg-server/glamor/glamor_largepixmap.c index 91ee8f2df..b8c064038 100644 --- a/xorg-server/glamor/glamor_largepixmap.c +++ b/xorg-server/glamor/glamor_largepixmap.c @@ -17,117 +17,117 @@ static glamor_pixmap_clipped_regions * __glamor_compute_clipped_regions(int block_w, - int block_h, - int block_stride, - int x, int y, - int w, int h, - RegionPtr region, - int *n_region, - int reverse, - int upsidedown) + int block_h, + int block_stride, + int x, int y, + int w, int h, + RegionPtr region, + int *n_region, int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions; - BoxPtr extent; - int start_x, start_y, end_x, end_y; - int start_block_x, start_block_y; - int end_block_x, end_block_y; - int loop_start_block_x, loop_start_block_y; - int loop_end_block_x, loop_end_block_y; - int loop_block_stride; - int i, j, delta_i, delta_j; - RegionRec temp_region; - RegionPtr current_region; - int block_idx; - int k = 0; - int temp_block_idx; - - extent = RegionExtents(region); - start_x = MAX(x, extent->x1); - start_y = MAX(y, extent->y1); - end_x = MIN(x + w, extent->x2); - end_y = MIN(y + h, extent->y2); - - DEBUGF("start compute clipped regions:\n"); - DEBUGF("block w %d h %d x %d y %d w %d h %d, block_stride %d \n", - block_w, block_h, x, y, w, h, block_stride); - DEBUGRegionPrint(region); - - DEBUGF("start_x %d start_y %d end_x %d end_y %d \n", start_x, start_y, end_x, end_y); - - if (start_x >= end_x || start_y >= end_y) { - *n_region = 0; - return NULL; - } - - start_block_x = (start_x - x)/ block_w; - start_block_y = (start_y - y)/ block_h; - end_block_x = (end_x - x)/ block_w; - end_block_y = (end_y - y)/ block_h; - - clipped_regions = calloc((end_block_x - start_block_x + 1) - * (end_block_y - start_block_y + 1), - sizeof(*clipped_regions)); - - - DEBUGF("startx %d starty %d endx %d endy %d \n", - start_x, start_y, end_x, end_y); - DEBUGF("start_block_x %d end_block_x %d \n", start_block_x, end_block_x); - DEBUGF("start_block_y %d end_block_y %d \n", start_block_y, end_block_y); - - if (!reverse) { - loop_start_block_x = start_block_x; - loop_end_block_x = end_block_x + 1; - delta_i = 1; - } else { - loop_start_block_x = end_block_x; - loop_end_block_x = start_block_x - 1; - delta_i = -1; - } - - if (!upsidedown) { - loop_start_block_y = start_block_y; - loop_end_block_y = end_block_y + 1; - delta_j = 1; - } else { - loop_start_block_y = end_block_y; - loop_end_block_y = start_block_y - 1; - delta_j = -1; - } - - loop_block_stride = delta_j * block_stride; - block_idx = (loop_start_block_y - delta_j) * block_stride; - - for(j = loop_start_block_y; j != loop_end_block_y; j += delta_j) - { - block_idx += loop_block_stride; - temp_block_idx = block_idx + loop_start_block_x; - for(i = loop_start_block_x; - i != loop_end_block_x; i += delta_i, temp_block_idx += delta_i) - { - BoxRec temp_box; - temp_box.x1 = x + i * block_w; - temp_box.y1 = y + j * block_h; - temp_box.x2 = MIN(temp_box.x1 + block_w, end_x); - temp_box.y2 = MIN(temp_box.y1 + block_h, end_y); - RegionInitBoxes(&temp_region, &temp_box, 1); - DEBUGF("block idx %d \n",temp_block_idx); - DEBUGRegionPrint(&temp_region); - current_region = RegionCreate(NULL, 4); - RegionIntersect(current_region, &temp_region, region); - DEBUGF("i %d j %d region: \n",i ,j); - DEBUGRegionPrint(current_region); - if (RegionNumRects(current_region)) { - clipped_regions[k].region = current_region; - clipped_regions[k].block_idx = temp_block_idx; - k++; - } else - RegionDestroy(current_region); - RegionUninit(&temp_region); - } - } - - *n_region = k; - return clipped_regions; + glamor_pixmap_clipped_regions *clipped_regions; + BoxPtr extent; + int start_x, start_y, end_x, end_y; + int start_block_x, start_block_y; + int end_block_x, end_block_y; + int loop_start_block_x, loop_start_block_y; + int loop_end_block_x, loop_end_block_y; + int loop_block_stride; + int i, j, delta_i, delta_j; + RegionRec temp_region; + RegionPtr current_region; + int block_idx; + int k = 0; + int temp_block_idx; + + extent = RegionExtents(region); + start_x = MAX(x, extent->x1); + start_y = MAX(y, extent->y1); + end_x = MIN(x + w, extent->x2); + end_y = MIN(y + h, extent->y2); + + DEBUGF("start compute clipped regions:\n"); + DEBUGF("block w %d h %d x %d y %d w %d h %d, block_stride %d \n", + block_w, block_h, x, y, w, h, block_stride); + DEBUGRegionPrint(region); + + DEBUGF("start_x %d start_y %d end_x %d end_y %d \n", start_x, start_y, + end_x, end_y); + + if (start_x >= end_x || start_y >= end_y) { + *n_region = 0; + return NULL; + } + + start_block_x = (start_x - x) / block_w; + start_block_y = (start_y - y) / block_h; + end_block_x = (end_x - x) / block_w; + end_block_y = (end_y - y) / block_h; + + clipped_regions = calloc((end_block_x - start_block_x + 1) + * (end_block_y - start_block_y + 1), + sizeof(*clipped_regions)); + + DEBUGF("startx %d starty %d endx %d endy %d \n", + start_x, start_y, end_x, end_y); + DEBUGF("start_block_x %d end_block_x %d \n", start_block_x, end_block_x); + DEBUGF("start_block_y %d end_block_y %d \n", start_block_y, end_block_y); + + if (!reverse) { + loop_start_block_x = start_block_x; + loop_end_block_x = end_block_x + 1; + delta_i = 1; + } + else { + loop_start_block_x = end_block_x; + loop_end_block_x = start_block_x - 1; + delta_i = -1; + } + + if (!upsidedown) { + loop_start_block_y = start_block_y; + loop_end_block_y = end_block_y + 1; + delta_j = 1; + } + else { + loop_start_block_y = end_block_y; + loop_end_block_y = start_block_y - 1; + delta_j = -1; + } + + loop_block_stride = delta_j * block_stride; + block_idx = (loop_start_block_y - delta_j) * block_stride; + + for (j = loop_start_block_y; j != loop_end_block_y; j += delta_j) { + block_idx += loop_block_stride; + temp_block_idx = block_idx + loop_start_block_x; + for (i = loop_start_block_x; + i != loop_end_block_x; i += delta_i, temp_block_idx += delta_i) { + BoxRec temp_box; + + temp_box.x1 = x + i * block_w; + temp_box.y1 = y + j * block_h; + temp_box.x2 = MIN(temp_box.x1 + block_w, end_x); + temp_box.y2 = MIN(temp_box.y1 + block_h, end_y); + RegionInitBoxes(&temp_region, &temp_box, 1); + DEBUGF("block idx %d \n", temp_block_idx); + DEBUGRegionPrint(&temp_region); + current_region = RegionCreate(NULL, 4); + RegionIntersect(current_region, &temp_region, region); + DEBUGF("i %d j %d region: \n", i, j); + DEBUGRegionPrint(current_region); + if (RegionNumRects(current_region)) { + clipped_regions[k].region = current_region; + clipped_regions[k].block_idx = temp_block_idx; + k++; + } + else + RegionDestroy(current_region); + RegionUninit(&temp_region); + } + } + + *n_region = k; + return clipped_regions; } /** @@ -145,82 +145,87 @@ __glamor_compute_clipped_regions(int block_w, glamor_pixmap_clipped_regions * glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, - RegionPtr region, - int *n_region, - int inner_block_w, int inner_block_h, - int reverse, int upsidedown) + RegionPtr region, + int *n_region, + int inner_block_w, int inner_block_h, + int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions, *inner_regions, *result_regions; - int i, j, x, y, k, inner_n_regions; - int width, height; - glamor_pixmap_private_large_t *priv; - priv = &pixmap_priv->large; - - DEBUGF("ext called \n"); - - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - clipped_regions = calloc(1, sizeof(*clipped_regions)); - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - clipped_regions[0].region = RegionCreate(NULL, 1); - clipped_regions[0].block_idx = 0; - RegionCopy(clipped_regions[0].region, region); - *n_region = 1; - priv->block_w = priv->base.pixmap->drawable.width; - priv->block_h = priv->base.pixmap->drawable.height; - priv->box_array = &priv->box; - priv->box.x1 = priv->box.y1 = 0; - priv->box.x2 = priv->block_w; - priv->box.y2 = priv->block_h; - } else { - clipped_regions = __glamor_compute_clipped_regions(priv->block_w, - priv->block_h, - priv->block_wcnt, - 0, 0, - priv->base.pixmap->drawable.width, - priv->base.pixmap->drawable.height, - region, n_region, reverse, upsidedown - ); - - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - } - if (inner_block_w >= priv->block_w - && inner_block_h >= priv->block_h) - return clipped_regions; - result_regions = calloc(*n_region - * ((priv->block_w + inner_block_w - 1)/inner_block_w) - * ((priv->block_h + inner_block_h - 1)/ inner_block_h), - sizeof(*result_regions)); - k = 0; - for(i = 0; i < *n_region; i++) - { - x = priv->box_array[clipped_regions[i].block_idx].x1; - y = priv->box_array[clipped_regions[i].block_idx].y1; - width = priv->box_array[clipped_regions[i].block_idx].x2 - x; - height = priv->box_array[clipped_regions[i].block_idx].y2 - y; - inner_regions = __glamor_compute_clipped_regions(inner_block_w, - inner_block_h, - 0, x, y, - width, - height, - clipped_regions[i].region, - &inner_n_regions, reverse, upsidedown); - for(j = 0; j < inner_n_regions; j++) - { - result_regions[k].region = inner_regions[j].region; - result_regions[k].block_idx = clipped_regions[i].block_idx; - k++; - } - free(inner_regions); - } - *n_region = k; - free(clipped_regions); - return result_regions; + glamor_pixmap_clipped_regions *clipped_regions, *inner_regions, + *result_regions; + int i, j, x, y, k, inner_n_regions; + int width, height; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + DEBUGF("ext called \n"); + + if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + clipped_regions = calloc(1, sizeof(*clipped_regions)); + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + clipped_regions[0].region = RegionCreate(NULL, 1); + clipped_regions[0].block_idx = 0; + RegionCopy(clipped_regions[0].region, region); + *n_region = 1; + priv->block_w = priv->base.pixmap->drawable.width; + priv->block_h = priv->base.pixmap->drawable.height; + priv->box_array = &priv->box; + priv->box.x1 = priv->box.y1 = 0; + priv->box.x2 = priv->block_w; + priv->box.y2 = priv->block_h; + } + else { + clipped_regions = __glamor_compute_clipped_regions(priv->block_w, + priv->block_h, + priv->block_wcnt, + 0, 0, + priv->base.pixmap-> + drawable.width, + priv->base.pixmap-> + drawable.height, + region, n_region, + reverse, upsidedown); + + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + } + if (inner_block_w >= priv->block_w && inner_block_h >= priv->block_h) + return clipped_regions; + result_regions = calloc(*n_region + * ((priv->block_w + inner_block_w - 1) / + inner_block_w) + * ((priv->block_h + inner_block_h - 1) / + inner_block_h), sizeof(*result_regions)); + k = 0; + for (i = 0; i < *n_region; i++) { + x = priv->box_array[clipped_regions[i].block_idx].x1; + y = priv->box_array[clipped_regions[i].block_idx].y1; + width = priv->box_array[clipped_regions[i].block_idx].x2 - x; + height = priv->box_array[clipped_regions[i].block_idx].y2 - y; + inner_regions = __glamor_compute_clipped_regions(inner_block_w, + inner_block_h, + 0, x, y, + width, + height, + clipped_regions[i]. + region, + &inner_n_regions, + reverse, upsidedown); + for (j = 0; j < inner_n_regions; j++) { + result_regions[k].region = inner_regions[j].region; + result_regions[k].block_idx = clipped_regions[i].block_idx; + k++; + } + free(inner_regions); + } + *n_region = k; + free(clipped_regions); + return result_regions; } /* @@ -232,35 +237,36 @@ glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, static RegionPtr _glamor_convert_pad_region(RegionPtr region, int w, int h) { - RegionPtr pad_region; - int nrect; - BoxPtr box; - int overlap; - - nrect = RegionNumRects(region); - box = RegionRects(region); - pad_region = RegionCreate(NULL, 4); - if (pad_region == NULL) - return NULL; - while(nrect--) { - BoxRec pad_box; - RegionRec temp_region; - pad_box = *box; - if (pad_box.x1 < 0 && pad_box.x2 <= 0) - pad_box.x2 = 1; - else if (pad_box.x1 >= w && pad_box.x2 > w) - pad_box.x1 = w - 1; - if (pad_box.y1 < 0 && pad_box.y2 <=0) - pad_box.y2 = 1; - else if (pad_box.y1 >= h && pad_box.y2 > h) - pad_box.y1 = h - 1; - RegionInitBoxes(&temp_region, &pad_box, 1); - RegionAppend(pad_region, &temp_region); - RegionUninit(&temp_region); - box++; - } - RegionValidate(pad_region, &overlap); - return pad_region; + RegionPtr pad_region; + int nrect; + BoxPtr box; + int overlap; + + nrect = RegionNumRects(region); + box = RegionRects(region); + pad_region = RegionCreate(NULL, 4); + if (pad_region == NULL) + return NULL; + while (nrect--) { + BoxRec pad_box; + RegionRec temp_region; + + pad_box = *box; + if (pad_box.x1 < 0 && pad_box.x2 <= 0) + pad_box.x2 = 1; + else if (pad_box.x1 >= w && pad_box.x2 > w) + pad_box.x1 = w - 1; + if (pad_box.y1 < 0 && pad_box.y2 <= 0) + pad_box.y2 = 1; + else if (pad_box.y1 >= h && pad_box.y2 > h) + pad_box.y1 = h - 1; + RegionInitBoxes(&temp_region, &pad_box, 1); + RegionAppend(pad_region, &temp_region); + RegionUninit(&temp_region); + box++; + } + RegionValidate(pad_region, &overlap); + return pad_region; } /* @@ -278,32 +284,35 @@ _glamor_convert_pad_region(RegionPtr region, int w, int h) static void _glamor_largepixmap_reflect_fixup(short *xy1, short *xy2, int wh) { - int odd1, odd2; - int c1, c2; - - if (*xy2 - *xy1 > wh) { - *xy1 = 0; - *xy2 = wh; - return; - } - modulus(*xy1, wh, c1); - odd1 = ((*xy1 - c1) / wh) & 0x1; - modulus(*xy2, wh, c2); - odd2 = ((*xy2 - c2) / wh) & 0x1; - - if (odd1 && odd2) { - *xy1 = wh - c2; - *xy2 = wh - c1; - } else if (odd1 && !odd2) { - *xy1 = 0; - *xy2 = MAX(c2, wh - c1); - } else if (!odd1 && odd2) { - *xy2 = wh; - *xy1 = MIN(c1, wh - c2); - } else { - *xy1 = c1; - *xy2 = c2; - } + int odd1, odd2; + int c1, c2; + + if (*xy2 - *xy1 > wh) { + *xy1 = 0; + *xy2 = wh; + return; + } + modulus(*xy1, wh, c1); + odd1 = ((*xy1 - c1) / wh) & 0x1; + modulus(*xy2, wh, c2); + odd2 = ((*xy2 - c2) / wh) & 0x1; + + if (odd1 && odd2) { + *xy1 = wh - c2; + *xy2 = wh - c1; + } + else if (odd1 && !odd2) { + *xy1 = 0; + *xy2 = MAX(c2, wh - c1); + } + else if (!odd1 && odd2) { + *xy2 = wh; + *xy1 = MIN(c1, wh - c2); + } + else { + *xy1 = c1; + *xy2 = c2; + } } /** @@ -317,366 +326,404 @@ _glamor_largepixmap_reflect_fixup(short *xy1, short *xy2, int wh) */ static glamor_pixmap_clipped_regions * _glamor_compute_clipped_regions(glamor_pixmap_private *pixmap_priv, - RegionPtr region, int *n_region, - int repeat_type, int is_transform, - int reverse, int upsidedown) + RegionPtr region, int *n_region, + int repeat_type, int is_transform, + int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions; - BoxPtr extent; - int i, j; - RegionPtr current_region; - int pixmap_width, pixmap_height; - int m; - BoxRec repeat_box; - RegionRec repeat_region; - int right_shift = 0; - int down_shift = 0; - int x_center_shift = 0, y_center_shift = 0; - glamor_pixmap_private_large_t *priv; - priv = &pixmap_priv->large; - - DEBUGRegionPrint(region); - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - clipped_regions = calloc(1, sizeof(*clipped_regions)); - clipped_regions[0].region = RegionCreate(NULL, 1); - clipped_regions[0].block_idx = 0; - RegionCopy(clipped_regions[0].region, region); - *n_region = 1; - return clipped_regions; - } - - pixmap_width = priv->base.pixmap->drawable.width; - pixmap_height = priv->base.pixmap->drawable.height; - if (repeat_type == 0 || repeat_type == RepeatPad) { - RegionPtr saved_region = NULL; - if (repeat_type == RepeatPad) { - saved_region = region; - region = _glamor_convert_pad_region(saved_region, pixmap_width, pixmap_height); - if (region == NULL) { - *n_region = 0; - return NULL; - } - } - clipped_regions = __glamor_compute_clipped_regions(priv->block_w, - priv->block_h, - priv->block_wcnt, - 0, 0, - priv->base.pixmap->drawable.width, - priv->base.pixmap->drawable.height, - region, n_region, reverse, upsidedown - ); - if (saved_region) - RegionDestroy(region); - return clipped_regions; - } - extent = RegionExtents(region); - - x_center_shift = extent->x1 / pixmap_width; - if (x_center_shift < 0) - x_center_shift--; - if (abs(x_center_shift) & 1) - x_center_shift++; - y_center_shift = extent->y1 / pixmap_height; - if (y_center_shift < 0) - y_center_shift--; - if (abs(y_center_shift) & 1) - y_center_shift++; - - if (extent->x1 < 0) - right_shift = ((-extent->x1 + pixmap_width - 1) / pixmap_width ); - if (extent->y1 < 0) - down_shift = ((-extent->y1 + pixmap_height - 1) / pixmap_height ); - - if (right_shift != 0 || down_shift != 0) { - if (repeat_type == RepeatReflect) { - right_shift = (right_shift + 1)&~1; - down_shift = (down_shift + 1)&~1; - } - RegionTranslate(region, right_shift * pixmap_width, down_shift * pixmap_height); - } - - extent = RegionExtents(region); - /* Tile a large pixmap to another large pixmap. - * We can't use the target large pixmap as the - * loop variable, instead we need to loop for all - * the blocks in the tile pixmap. - * - * simulate repeat each single block to cover the - * target's blocks. Two special case: - * a block_wcnt == 1 or block_hcnt ==1, then we - * only need to loop one direction as the other - * direction is fully included in the first block. - * - * For the other cases, just need to start - * from a proper shiftx/shifty, and then increase - * y by tile_height each time to walk trhough the - * target block and then walk trhough the target - * at x direction by increate tile_width each time. - * - * This way, we can consolidate all the sub blocks - * of the target boxes into one tile source's block. - * - * */ - m = 0; - clipped_regions = calloc(priv->block_wcnt * priv->block_hcnt, - sizeof(*clipped_regions)); - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - if (right_shift != 0 || down_shift != 0) { - DEBUGF("region to be repeated shifted \n"); - DEBUGRegionPrint(region); - } - DEBUGF("repeat pixmap width %d height %d \n", pixmap_width, pixmap_height); - DEBUGF("extent x1 %d y1 %d x2 %d y2 %d \n", extent->x1, extent->y1, extent->x2, extent->y2); - for(j = 0; j < priv->block_hcnt; j++) - { - for(i = 0; i < priv->block_wcnt; i++) - { - int dx = pixmap_width; - int dy = pixmap_height; - int idx; - int shift_x; - int shift_y; - int saved_y1, saved_y2; - int x_idx = 0, y_idx = 0, saved_y_idx = 0; - RegionRec temp_region; - BoxRec reflect_repeat_box; - BoxPtr valid_repeat_box; - - shift_x = (extent->x1 / pixmap_width) * pixmap_width; - shift_y = (extent->y1 / pixmap_height) * pixmap_height; - idx = j * priv->block_wcnt + i; - if (repeat_type == RepeatReflect) { - x_idx = (extent->x1 / pixmap_width); - y_idx = (extent->y1 / pixmap_height); - } - - /* Construct a rect to clip the target region. */ - repeat_box.x1 = shift_x + priv->box_array[idx].x1; - repeat_box.y1 = shift_y + priv->box_array[idx].y1; - if (priv->block_wcnt == 1) { - repeat_box.x2 = extent->x2; - dx = extent->x2 - repeat_box.x1; - } else - repeat_box.x2 = shift_x + priv->box_array[idx].x2; - if (priv->block_hcnt == 1) { - repeat_box.y2 = extent->y2; - dy = extent->y2 - repeat_box.y1; - } else - repeat_box.y2 = shift_y + priv->box_array[idx].y2; - - current_region = RegionCreate(NULL, 4); - RegionInit(&temp_region, NULL, 4); - DEBUGF("init repeat box %d %d %d %d \n", - repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); - - if (repeat_type == RepeatNormal) { - saved_y1 = repeat_box.y1; - saved_y2 = repeat_box.y2; - for(; repeat_box.x1 < extent->x2; - repeat_box.x1 += dx, repeat_box.x2 += dx) - { - repeat_box.y1 = saved_y1; - repeat_box.y2 = saved_y2; - for( repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; - repeat_box.y1 < extent->y2; - repeat_box.y1 += dy, repeat_box.y2 += dy) - { - - RegionInitBoxes(&repeat_region, &repeat_box, 1); - DEBUGF("Start to clip repeat region: \n"); - DEBUGRegionPrint(&repeat_region); - RegionIntersect(&temp_region, &repeat_region, region); - DEBUGF("clip result:\n"); - DEBUGRegionPrint(&temp_region); - RegionAppend(current_region, &temp_region); - RegionUninit(&repeat_region); - } - } - } else if (repeat_type == RepeatReflect) { - saved_y1 = repeat_box.y1; - saved_y2 = repeat_box.y2; - saved_y_idx = y_idx; - for(; ; repeat_box.x1 += dx, repeat_box.x2 += dx) - { - repeat_box.y1 = saved_y1; - repeat_box.y2 = saved_y2; - y_idx = saved_y_idx; - reflect_repeat_box.x1 = (x_idx & 1) ? - ((2 * x_idx + 1) * dx - repeat_box.x2) : repeat_box.x1; - reflect_repeat_box.x2 = (x_idx & 1) ? - ((2 * x_idx + 1) * dx - repeat_box.x1) : repeat_box.x2; - valid_repeat_box = &reflect_repeat_box; - - if (valid_repeat_box->x1 >= extent->x2) - break; - for( repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; - ; - repeat_box.y1 += dy, repeat_box.y2 += dy) - { - - DEBUGF("x_idx %d y_idx %d dx %d dy %d\n", x_idx, y_idx, dx, dy); - DEBUGF("repeat box %d %d %d %d \n", - repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); - - if (priv->block_hcnt > 1) { - reflect_repeat_box.y1 = (y_idx & 1) ? - ((2 * y_idx + 1) * dy - repeat_box.y2) : repeat_box.y1; - reflect_repeat_box.y2 = (y_idx & 1) ? - ((2 * y_idx + 1) * dy - repeat_box.y1) : repeat_box.y2; - } else { - reflect_repeat_box.y1 = repeat_box.y1; - reflect_repeat_box.y2 = repeat_box.y2; - } - - DEBUGF("valid_repeat_box x1 %d y1 %d \n", - valid_repeat_box->x1, valid_repeat_box->y1); - if (valid_repeat_box->y1 >= extent->y2) - break; - RegionInitBoxes(&repeat_region, valid_repeat_box, 1); - DEBUGF("start to clip repeat[reflect] region: \n"); - DEBUGRegionPrint(&repeat_region); - RegionIntersect(&temp_region, &repeat_region, region); - DEBUGF("result:\n"); - DEBUGRegionPrint(&temp_region); - if (is_transform && RegionNumRects(&temp_region)) { - BoxRec temp_box; - BoxPtr temp_extent; - temp_extent = RegionExtents(&temp_region); - if (priv->block_wcnt > 1) { - if (x_idx & 1) { - temp_box.x1 = ((2 * x_idx + 1)*dx - temp_extent->x2); - temp_box.x2 = ((2 * x_idx + 1)*dx - temp_extent->x1); - } else { - temp_box.x1 = temp_extent->x1; - temp_box.x2 = temp_extent->x2; - } - modulus(temp_box.x1, pixmap_width, temp_box.x1); - modulus(temp_box.x2, pixmap_width, temp_box.x2); - if (temp_box.x2 == 0) temp_box.x2 = pixmap_width; - } else { - temp_box.x1 = temp_extent->x1; - temp_box.x2 = temp_extent->x2; - _glamor_largepixmap_reflect_fixup(&temp_box.x1, &temp_box.x2, pixmap_width); - } - - if (priv->block_hcnt > 1) { - if (y_idx & 1) { - temp_box.y1 = ((2 * y_idx + 1)*dy - temp_extent->y2); - temp_box.y2 = ((2 * y_idx + 1)*dy - temp_extent->y1); - } else { - temp_box.y1 = temp_extent->y1; - temp_box.y2 = temp_extent->y2; - } - - modulus(temp_box.y1, pixmap_height, temp_box.y1); - modulus(temp_box.y2, pixmap_height, temp_box.y2); - if (temp_box.y2 == 0) temp_box.y2 = pixmap_height; - } else { - temp_box.y1 = temp_extent->y1; - temp_box.y2 = temp_extent->y2; - _glamor_largepixmap_reflect_fixup(&temp_box.y1, &temp_box.y2, pixmap_height); - } - - RegionInitBoxes(&temp_region, &temp_box, 1); - RegionTranslate(&temp_region, x_center_shift * pixmap_width, y_center_shift * pixmap_height); - DEBUGF("for transform result:\n"); - DEBUGRegionPrint(&temp_region); - } - RegionAppend(current_region, &temp_region); - RegionUninit(&repeat_region); - y_idx++; - } - x_idx++; - } - } - DEBUGF("dx %d dy %d \n", dx, dy); - - if (RegionNumRects(current_region)) { - - if ((right_shift != 0 || down_shift != 0) && !(is_transform && repeat_type == RepeatReflect)) - RegionTranslate(current_region, - -right_shift * pixmap_width, - -down_shift * pixmap_height); - clipped_regions[m].region = current_region; - clipped_regions[m].block_idx = idx; - m++; - } else - RegionDestroy(current_region); - RegionUninit(&temp_region); - } - } - - if (right_shift != 0 || down_shift != 0) - RegionTranslate(region, -right_shift * pixmap_width, -down_shift * pixmap_height); - *n_region = m; - - return clipped_regions; + glamor_pixmap_clipped_regions *clipped_regions; + BoxPtr extent; + int i, j; + RegionPtr current_region; + int pixmap_width, pixmap_height; + int m; + BoxRec repeat_box; + RegionRec repeat_region; + int right_shift = 0; + int down_shift = 0; + int x_center_shift = 0, y_center_shift = 0; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + DEBUGRegionPrint(region); + if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + clipped_regions = calloc(1, sizeof(*clipped_regions)); + clipped_regions[0].region = RegionCreate(NULL, 1); + clipped_regions[0].block_idx = 0; + RegionCopy(clipped_regions[0].region, region); + *n_region = 1; + return clipped_regions; + } + + pixmap_width = priv->base.pixmap->drawable.width; + pixmap_height = priv->base.pixmap->drawable.height; + if (repeat_type == 0 || repeat_type == RepeatPad) { + RegionPtr saved_region = NULL; + + if (repeat_type == RepeatPad) { + saved_region = region; + region = + _glamor_convert_pad_region(saved_region, pixmap_width, + pixmap_height); + if (region == NULL) { + *n_region = 0; + return NULL; + } + } + clipped_regions = __glamor_compute_clipped_regions(priv->block_w, + priv->block_h, + priv->block_wcnt, + 0, 0, + priv->base.pixmap-> + drawable.width, + priv->base.pixmap-> + drawable.height, + region, n_region, + reverse, upsidedown); + if (saved_region) + RegionDestroy(region); + return clipped_regions; + } + extent = RegionExtents(region); + + x_center_shift = extent->x1 / pixmap_width; + if (x_center_shift < 0) + x_center_shift--; + if (abs(x_center_shift) & 1) + x_center_shift++; + y_center_shift = extent->y1 / pixmap_height; + if (y_center_shift < 0) + y_center_shift--; + if (abs(y_center_shift) & 1) + y_center_shift++; + + if (extent->x1 < 0) + right_shift = ((-extent->x1 + pixmap_width - 1) / pixmap_width); + if (extent->y1 < 0) + down_shift = ((-extent->y1 + pixmap_height - 1) / pixmap_height); + + if (right_shift != 0 || down_shift != 0) { + if (repeat_type == RepeatReflect) { + right_shift = (right_shift + 1) & ~1; + down_shift = (down_shift + 1) & ~1; + } + RegionTranslate(region, right_shift * pixmap_width, + down_shift * pixmap_height); + } + + extent = RegionExtents(region); + /* Tile a large pixmap to another large pixmap. + * We can't use the target large pixmap as the + * loop variable, instead we need to loop for all + * the blocks in the tile pixmap. + * + * simulate repeat each single block to cover the + * target's blocks. Two special case: + * a block_wcnt == 1 or block_hcnt ==1, then we + * only need to loop one direction as the other + * direction is fully included in the first block. + * + * For the other cases, just need to start + * from a proper shiftx/shifty, and then increase + * y by tile_height each time to walk trhough the + * target block and then walk trhough the target + * at x direction by increate tile_width each time. + * + * This way, we can consolidate all the sub blocks + * of the target boxes into one tile source's block. + * + * */ + m = 0; + clipped_regions = calloc(priv->block_wcnt * priv->block_hcnt, + sizeof(*clipped_regions)); + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + if (right_shift != 0 || down_shift != 0) { + DEBUGF("region to be repeated shifted \n"); + DEBUGRegionPrint(region); + } + DEBUGF("repeat pixmap width %d height %d \n", pixmap_width, pixmap_height); + DEBUGF("extent x1 %d y1 %d x2 %d y2 %d \n", extent->x1, extent->y1, + extent->x2, extent->y2); + for (j = 0; j < priv->block_hcnt; j++) { + for (i = 0; i < priv->block_wcnt; i++) { + int dx = pixmap_width; + int dy = pixmap_height; + int idx; + int shift_x; + int shift_y; + int saved_y1, saved_y2; + int x_idx = 0, y_idx = 0, saved_y_idx = 0; + RegionRec temp_region; + BoxRec reflect_repeat_box; + BoxPtr valid_repeat_box; + + shift_x = (extent->x1 / pixmap_width) * pixmap_width; + shift_y = (extent->y1 / pixmap_height) * pixmap_height; + idx = j * priv->block_wcnt + i; + if (repeat_type == RepeatReflect) { + x_idx = (extent->x1 / pixmap_width); + y_idx = (extent->y1 / pixmap_height); + } + + /* Construct a rect to clip the target region. */ + repeat_box.x1 = shift_x + priv->box_array[idx].x1; + repeat_box.y1 = shift_y + priv->box_array[idx].y1; + if (priv->block_wcnt == 1) { + repeat_box.x2 = extent->x2; + dx = extent->x2 - repeat_box.x1; + } + else + repeat_box.x2 = shift_x + priv->box_array[idx].x2; + if (priv->block_hcnt == 1) { + repeat_box.y2 = extent->y2; + dy = extent->y2 - repeat_box.y1; + } + else + repeat_box.y2 = shift_y + priv->box_array[idx].y2; + + current_region = RegionCreate(NULL, 4); + RegionInit(&temp_region, NULL, 4); + DEBUGF("init repeat box %d %d %d %d \n", + repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); + + if (repeat_type == RepeatNormal) { + saved_y1 = repeat_box.y1; + saved_y2 = repeat_box.y2; + for (; repeat_box.x1 < extent->x2; + repeat_box.x1 += dx, repeat_box.x2 += dx) { + repeat_box.y1 = saved_y1; + repeat_box.y2 = saved_y2; + for (repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; + repeat_box.y1 < extent->y2; + repeat_box.y1 += dy, repeat_box.y2 += dy) { + + RegionInitBoxes(&repeat_region, &repeat_box, 1); + DEBUGF("Start to clip repeat region: \n"); + DEBUGRegionPrint(&repeat_region); + RegionIntersect(&temp_region, &repeat_region, region); + DEBUGF("clip result:\n"); + DEBUGRegionPrint(&temp_region); + RegionAppend(current_region, &temp_region); + RegionUninit(&repeat_region); + } + } + } + else if (repeat_type == RepeatReflect) { + saved_y1 = repeat_box.y1; + saved_y2 = repeat_box.y2; + saved_y_idx = y_idx; + for (;; repeat_box.x1 += dx, repeat_box.x2 += dx) { + repeat_box.y1 = saved_y1; + repeat_box.y2 = saved_y2; + y_idx = saved_y_idx; + reflect_repeat_box.x1 = (x_idx & 1) ? + ((2 * x_idx + 1) * dx - repeat_box.x2) : repeat_box.x1; + reflect_repeat_box.x2 = (x_idx & 1) ? + ((2 * x_idx + 1) * dx - repeat_box.x1) : repeat_box.x2; + valid_repeat_box = &reflect_repeat_box; + + if (valid_repeat_box->x1 >= extent->x2) + break; + for (repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2;; + repeat_box.y1 += dy, repeat_box.y2 += dy) { + + DEBUGF("x_idx %d y_idx %d dx %d dy %d\n", x_idx, y_idx, + dx, dy); + DEBUGF("repeat box %d %d %d %d \n", repeat_box.x1, + repeat_box.y1, repeat_box.x2, repeat_box.y2); + + if (priv->block_hcnt > 1) { + reflect_repeat_box.y1 = (y_idx & 1) ? + ((2 * y_idx + 1) * dy - + repeat_box.y2) : repeat_box.y1; + reflect_repeat_box.y2 = + (y_idx & 1) ? ((2 * y_idx + 1) * dy - + repeat_box.y1) : repeat_box.y2; + } + else { + reflect_repeat_box.y1 = repeat_box.y1; + reflect_repeat_box.y2 = repeat_box.y2; + } + + DEBUGF("valid_repeat_box x1 %d y1 %d \n", + valid_repeat_box->x1, valid_repeat_box->y1); + if (valid_repeat_box->y1 >= extent->y2) + break; + RegionInitBoxes(&repeat_region, valid_repeat_box, 1); + DEBUGF("start to clip repeat[reflect] region: \n"); + DEBUGRegionPrint(&repeat_region); + RegionIntersect(&temp_region, &repeat_region, region); + DEBUGF("result:\n"); + DEBUGRegionPrint(&temp_region); + if (is_transform && RegionNumRects(&temp_region)) { + BoxRec temp_box; + BoxPtr temp_extent; + + temp_extent = RegionExtents(&temp_region); + if (priv->block_wcnt > 1) { + if (x_idx & 1) { + temp_box.x1 = + ((2 * x_idx + 1) * dx - + temp_extent->x2); + temp_box.x2 = + ((2 * x_idx + 1) * dx - + temp_extent->x1); + } + else { + temp_box.x1 = temp_extent->x1; + temp_box.x2 = temp_extent->x2; + } + modulus(temp_box.x1, pixmap_width, temp_box.x1); + modulus(temp_box.x2, pixmap_width, temp_box.x2); + if (temp_box.x2 == 0) + temp_box.x2 = pixmap_width; + } + else { + temp_box.x1 = temp_extent->x1; + temp_box.x2 = temp_extent->x2; + _glamor_largepixmap_reflect_fixup(&temp_box.x1, + &temp_box.x2, + pixmap_width); + } + + if (priv->block_hcnt > 1) { + if (y_idx & 1) { + temp_box.y1 = + ((2 * y_idx + 1) * dy - + temp_extent->y2); + temp_box.y2 = + ((2 * y_idx + 1) * dy - + temp_extent->y1); + } + else { + temp_box.y1 = temp_extent->y1; + temp_box.y2 = temp_extent->y2; + } + + modulus(temp_box.y1, pixmap_height, + temp_box.y1); + modulus(temp_box.y2, pixmap_height, + temp_box.y2); + if (temp_box.y2 == 0) + temp_box.y2 = pixmap_height; + } + else { + temp_box.y1 = temp_extent->y1; + temp_box.y2 = temp_extent->y2; + _glamor_largepixmap_reflect_fixup(&temp_box.y1, + &temp_box.y2, + pixmap_height); + } + + RegionInitBoxes(&temp_region, &temp_box, 1); + RegionTranslate(&temp_region, + x_center_shift * pixmap_width, + y_center_shift * pixmap_height); + DEBUGF("for transform result:\n"); + DEBUGRegionPrint(&temp_region); + } + RegionAppend(current_region, &temp_region); + RegionUninit(&repeat_region); + y_idx++; + } + x_idx++; + } + } + DEBUGF("dx %d dy %d \n", dx, dy); + + if (RegionNumRects(current_region)) { + + if ((right_shift != 0 || down_shift != 0) && + !(is_transform && repeat_type == RepeatReflect)) + RegionTranslate(current_region, -right_shift * pixmap_width, + -down_shift * pixmap_height); + clipped_regions[m].region = current_region; + clipped_regions[m].block_idx = idx; + m++; + } + else + RegionDestroy(current_region); + RegionUninit(&temp_region); + } + } + + if (right_shift != 0 || down_shift != 0) + RegionTranslate(region, -right_shift * pixmap_width, + -down_shift * pixmap_height); + *n_region = m; + + return clipped_regions; } glamor_pixmap_clipped_regions * glamor_compute_clipped_regions(glamor_pixmap_private *priv, RegionPtr region, - int *n_region, int repeat_type, - int reverse, int upsidedown) + int *n_region, int repeat_type, + int reverse, int upsidedown) { - return _glamor_compute_clipped_regions(priv, region, n_region, repeat_type, 0, reverse, upsidedown); + return _glamor_compute_clipped_regions(priv, region, n_region, repeat_type, + 0, reverse, upsidedown); } /* XXX overflow still exist. maybe we need to change to use region32. * by default. Or just use region32 for repeat cases? **/ glamor_pixmap_clipped_regions * -glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pixman_transform *transform, - RegionPtr region, int *n_region, int dx, int dy, int repeat_type, - int reverse, int upsidedown) +glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, + struct pixman_transform *transform, + RegionPtr region, int *n_region, + int dx, int dy, int repeat_type, + int reverse, int upsidedown) { - BoxPtr temp_extent; - struct pixman_box32 temp_box; - struct pixman_box16 short_box; - RegionPtr temp_region; - glamor_pixmap_clipped_regions *ret; - - temp_region = RegionCreate(NULL, 4); - temp_extent = RegionExtents(region); - DEBUGF("dest region \n"); - DEBUGRegionPrint(region); - /* dx/dy may exceed MAX SHORT. we have to use - * a box32 to represent it.*/ - temp_box.x1 = temp_extent->x1 + dx; - temp_box.x2 = temp_extent->x2 + dx; - temp_box.y1 = temp_extent->y1 + dy; - temp_box.y2 = temp_extent->y2 + dy; - - DEBUGF("source box %d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, temp_box.y2); - if (transform) - glamor_get_transform_extent_from_box(&temp_box, transform); - if (repeat_type == RepeatNone) { - if (temp_box.x1 < 0) temp_box.x1 = 0; - if (temp_box.y1 < 0) temp_box.y1 = 0; - temp_box.x2 = MIN(temp_box.x2, priv->base.pixmap->drawable.width); - temp_box.y2 = MIN(temp_box.y2, priv->base.pixmap->drawable.height); - } - /* Now copy back the box32 to a box16 box. */ - short_box.x1 = temp_box.x1; - short_box.y1 = temp_box.y1; - short_box.x2 = temp_box.x2; - short_box.y2 = temp_box.y2; - RegionInitBoxes(temp_region, &short_box, 1); - DEBUGF("copy to temp source region \n"); - DEBUGRegionPrint(temp_region); - ret = _glamor_compute_clipped_regions(priv, - temp_region, - n_region, - repeat_type, - 1, reverse, - upsidedown); - DEBUGF("n_regions = %d \n", *n_region); - RegionDestroy(temp_region); - - return ret; + BoxPtr temp_extent; + struct pixman_box32 temp_box; + struct pixman_box16 short_box; + RegionPtr temp_region; + glamor_pixmap_clipped_regions *ret; + + temp_region = RegionCreate(NULL, 4); + temp_extent = RegionExtents(region); + DEBUGF("dest region \n"); + DEBUGRegionPrint(region); + /* dx/dy may exceed MAX SHORT. we have to use + * a box32 to represent it.*/ + temp_box.x1 = temp_extent->x1 + dx; + temp_box.x2 = temp_extent->x2 + dx; + temp_box.y1 = temp_extent->y1 + dy; + temp_box.y2 = temp_extent->y2 + dy; + + DEBUGF("source box %d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, + temp_box.y2); + if (transform) + glamor_get_transform_extent_from_box(&temp_box, transform); + if (repeat_type == RepeatNone) { + if (temp_box.x1 < 0) + temp_box.x1 = 0; + if (temp_box.y1 < 0) + temp_box.y1 = 0; + temp_box.x2 = MIN(temp_box.x2, priv->base.pixmap->drawable.width); + temp_box.y2 = MIN(temp_box.y2, priv->base.pixmap->drawable.height); + } + /* Now copy back the box32 to a box16 box. */ + short_box.x1 = temp_box.x1; + short_box.y1 = temp_box.y1; + short_box.x2 = temp_box.x2; + short_box.y2 = temp_box.y2; + RegionInitBoxes(temp_region, &short_box, 1); + DEBUGF("copy to temp source region \n"); + DEBUGRegionPrint(temp_region); + ret = _glamor_compute_clipped_regions(priv, + temp_region, + n_region, + repeat_type, 1, reverse, upsidedown); + DEBUGF("n_regions = %d \n", *n_region); + RegionDestroy(temp_region); + + return ret; } + /* * As transform and repeatpad mode. * We may get a clipped result which in multipe regions. @@ -689,120 +736,121 @@ glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pix * if the clipped result cross the region boundary. */ static void -glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, int repeat_type, - glamor_pixmap_clipped_regions *clipped_regions, - int *n_regions, int *need_clean_fbo) +glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, + int repeat_type, + glamor_pixmap_clipped_regions *clipped_regions, + int *n_regions, int *need_clean_fbo) { - BoxPtr temp_extent; - BoxRec temp_box, copy_box; - RegionPtr temp_region; - glamor_pixmap_private *temp_priv; - PixmapPtr temp_pixmap; - int overlap; - int i; - int pixmap_width, pixmap_height; - glamor_pixmap_private_large_t *priv; - - priv = &pixmap_priv->large; - pixmap_width = priv->base.pixmap->drawable.width; - pixmap_height = priv->base.pixmap->drawable.height; - - temp_region = RegionCreate(NULL, 4); - for(i = 0; i < *n_regions; i++) - { - DEBUGF("Region %d:\n", i); - DEBUGRegionPrint(clipped_regions[i].region); - RegionAppend(temp_region, clipped_regions[i].region); - } - - RegionValidate(temp_region, &overlap); - DEBUGF("temp region: \n"); - DEBUGRegionPrint(temp_region); - temp_extent = RegionExtents(temp_region); - - temp_box = *temp_extent; - - DEBUGF("need copy region: \n"); - DEBUGF("%d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, temp_box.y2); - temp_pixmap = glamor_create_pixmap(priv->base.pixmap->drawable.pScreen, - temp_box.x2 - temp_box.x1, - temp_box.y2 - temp_box.y1, - priv->base.pixmap->drawable.depth, - GLAMOR_CREATE_PIXMAP_FIXUP); - if (temp_pixmap == NULL) { - assert(0); - return; - } - - temp_priv = glamor_get_pixmap_private(temp_pixmap); - assert(temp_priv->type != GLAMOR_TEXTURE_LARGE); - - priv->box = temp_box; - if (temp_extent->x1 >= 0 && temp_extent->x2 <= pixmap_width - && temp_extent->y1 >= 0 && temp_extent->y2 <= pixmap_height) { - int dx, dy; - copy_box.x1 = 0; - copy_box.y1 = 0; - copy_box.x2 = temp_extent->x2 - temp_extent->x1; - copy_box.y2 = temp_extent->y2 - temp_extent->y1; - dx = temp_extent->x1; - dy = temp_extent->y1; - glamor_copy_n_to_n(&priv->base.pixmap->drawable, - &temp_pixmap->drawable, - NULL, ©_box, 1, dx, - dy, 0, 0, 0, NULL); -// glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, -// temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff00); - } else { - for (i = 0; i < *n_regions; i++) - { - BoxPtr box; - int nbox; - box = REGION_RECTS(clipped_regions[i].region); - nbox = REGION_NUM_RECTS(clipped_regions[i].region); - while(nbox--) { - int dx, dy, c, d; - DEBUGF("box x1 %d y1 %d x2 %d y2 %d \n", - box->x1, box->y1, box->x2, box->y2); - modulus(box->x1, pixmap_width, c); - dx = c - (box->x1 - temp_box.x1); - copy_box.x1 = box->x1 - temp_box.x1; - copy_box.x2 = box->x2 - temp_box.x1; - - modulus(box->y1, pixmap_height, d); - dy = d - (box->y1 - temp_box.y1); - copy_box.y1 = box->y1 - temp_box.y1; - copy_box.y2 = box->y2 - temp_box.y1; - - DEBUGF("copying box %d %d %d %d, dx %d dy %d\n", - copy_box.x1, copy_box.y1, copy_box.x2, - copy_box.y2, dx, dy); - - glamor_copy_n_to_n(&priv->base.pixmap->drawable, - &temp_pixmap->drawable, - NULL, ©_box, 1, dx, - dy, 0, 0, 0, NULL); - box++; - } - } - //glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, - // temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff); - } - /* The first region will be released at caller side. */ - for(i = 1; i < *n_regions; i++) - RegionDestroy(clipped_regions[i].region); - RegionDestroy(temp_region); - priv->box = temp_box; - priv->base.fbo = glamor_pixmap_detach_fbo(temp_priv); - DEBUGF("priv box x1 %d y1 %d x2 %d y2 %d \n", - priv->box.x1, priv->box.y1, priv->box.x2, priv->box.y2); - glamor_destroy_pixmap(temp_pixmap); - *need_clean_fbo = 1; - *n_regions = 1; + BoxPtr temp_extent; + BoxRec temp_box, copy_box; + RegionPtr temp_region; + glamor_pixmap_private *temp_priv; + PixmapPtr temp_pixmap; + int overlap; + int i; + int pixmap_width, pixmap_height; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + pixmap_width = priv->base.pixmap->drawable.width; + pixmap_height = priv->base.pixmap->drawable.height; + + temp_region = RegionCreate(NULL, 4); + for (i = 0; i < *n_regions; i++) { + DEBUGF("Region %d:\n", i); + DEBUGRegionPrint(clipped_regions[i].region); + RegionAppend(temp_region, clipped_regions[i].region); + } + + RegionValidate(temp_region, &overlap); + DEBUGF("temp region: \n"); + DEBUGRegionPrint(temp_region); + temp_extent = RegionExtents(temp_region); + + temp_box = *temp_extent; + + DEBUGF("need copy region: \n"); + DEBUGF("%d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, + temp_box.y2); + temp_pixmap = + glamor_create_pixmap(priv->base.pixmap->drawable.pScreen, + temp_box.x2 - temp_box.x1, + temp_box.y2 - temp_box.y1, + priv->base.pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_FIXUP); + if (temp_pixmap == NULL) { + assert(0); + return; + } + + temp_priv = glamor_get_pixmap_private(temp_pixmap); + assert(temp_priv->type != GLAMOR_TEXTURE_LARGE); + + priv->box = temp_box; + if (temp_extent->x1 >= 0 && temp_extent->x2 <= pixmap_width + && temp_extent->y1 >= 0 && temp_extent->y2 <= pixmap_height) { + int dx, dy; + + copy_box.x1 = 0; + copy_box.y1 = 0; + copy_box.x2 = temp_extent->x2 - temp_extent->x1; + copy_box.y2 = temp_extent->y2 - temp_extent->y1; + dx = temp_extent->x1; + dy = temp_extent->y1; + glamor_copy_n_to_n(&priv->base.pixmap->drawable, + &temp_pixmap->drawable, + NULL, ©_box, 1, dx, dy, 0, 0, 0, NULL); +// glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, +// temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff00); + } + else { + for (i = 0; i < *n_regions; i++) { + BoxPtr box; + int nbox; + + box = REGION_RECTS(clipped_regions[i].region); + nbox = REGION_NUM_RECTS(clipped_regions[i].region); + while (nbox--) { + int dx, dy, c, d; + + DEBUGF("box x1 %d y1 %d x2 %d y2 %d \n", + box->x1, box->y1, box->x2, box->y2); + modulus(box->x1, pixmap_width, c); + dx = c - (box->x1 - temp_box.x1); + copy_box.x1 = box->x1 - temp_box.x1; + copy_box.x2 = box->x2 - temp_box.x1; + + modulus(box->y1, pixmap_height, d); + dy = d - (box->y1 - temp_box.y1); + copy_box.y1 = box->y1 - temp_box.y1; + copy_box.y2 = box->y2 - temp_box.y1; + + DEBUGF("copying box %d %d %d %d, dx %d dy %d\n", + copy_box.x1, copy_box.y1, copy_box.x2, + copy_box.y2, dx, dy); + + glamor_copy_n_to_n(&priv->base.pixmap->drawable, + &temp_pixmap->drawable, + NULL, ©_box, 1, dx, dy, 0, 0, 0, NULL); + box++; + } + } + //glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, + // temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff); + } + /* The first region will be released at caller side. */ + for (i = 1; i < *n_regions; i++) + RegionDestroy(clipped_regions[i].region); + RegionDestroy(temp_region); + priv->box = temp_box; + priv->base.fbo = glamor_pixmap_detach_fbo(temp_priv); + DEBUGF("priv box x1 %d y1 %d x2 %d y2 %d \n", + priv->box.x1, priv->box.y1, priv->box.x2, priv->box.y2); + glamor_destroy_pixmap(temp_pixmap); + *need_clean_fbo = 1; + *n_regions = 1; } - - /** * Given an expected transformed block width and block height, * @@ -817,45 +865,47 @@ glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, int repeat_type **/ Bool glamor_get_transform_block_size(struct pixman_transform *transform, - int block_w, int block_h, - int *transformed_block_w, - int *transformed_block_h) + int block_w, int block_h, + int *transformed_block_w, + int *transformed_block_h) { - double a,b,c,d,e,f,g,h; - double scale; - int width, height; - a = pixman_fixed_to_double(transform->matrix[0][0]); - b = pixman_fixed_to_double(transform->matrix[0][1]); - c = pixman_fixed_to_double(transform->matrix[1][0]); - d = pixman_fixed_to_double(transform->matrix[1][1]); - scale = pixman_fixed_to_double(transform->matrix[2][2]); - if (block_w > 2048) { - /* For large block size, we shrink it to smaller box, - * thus latter we may get less cross boundary regions and - * thus can avoid some extra copy. - * - **/ - width = block_w / 4; - height = block_h / 4; - } else { - width = block_w - 2; - height = block_h - 2; - } - e = a + b; - f = c + d; - - g = a - b; - h = c - d; - - e = MIN(block_w, floor(width * scale) / MAX(fabs(e), fabs(g))); - f = MIN(block_h, floor(height * scale) / MAX(fabs(f), fabs(h))); - *transformed_block_w = MIN(e, f) - 1; - *transformed_block_h = *transformed_block_w; - if (*transformed_block_w <= 0 || *transformed_block_h <= 0) - return FALSE; - DEBUGF("original block_w/h %d %d, fixed %d %d \n", block_w, block_h, - *transformed_block_w, *transformed_block_h); - return TRUE; + double a, b, c, d, e, f, g, h; + double scale; + int width, height; + + a = pixman_fixed_to_double(transform->matrix[0][0]); + b = pixman_fixed_to_double(transform->matrix[0][1]); + c = pixman_fixed_to_double(transform->matrix[1][0]); + d = pixman_fixed_to_double(transform->matrix[1][1]); + scale = pixman_fixed_to_double(transform->matrix[2][2]); + if (block_w > 2048) { + /* For large block size, we shrink it to smaller box, + * thus latter we may get less cross boundary regions and + * thus can avoid some extra copy. + * + **/ + width = block_w / 4; + height = block_h / 4; + } + else { + width = block_w - 2; + height = block_h - 2; + } + e = a + b; + f = c + d; + + g = a - b; + h = c - d; + + e = MIN(block_w, floor(width * scale) / MAX(fabs(e), fabs(g))); + f = MIN(block_h, floor(height * scale) / MAX(fabs(f), fabs(h))); + *transformed_block_w = MIN(e, f) - 1; + *transformed_block_h = *transformed_block_w; + if (*transformed_block_w <= 0 || *transformed_block_h <= 0) + return FALSE; + DEBUGF("original block_w/h %d %d, fixed %d %d \n", block_w, block_h, + *transformed_block_w, *transformed_block_h); + return TRUE; } #define VECTOR_FROM_POINT(p, x, y) \ @@ -864,314 +914,341 @@ glamor_get_transform_block_size(struct pixman_transform *transform, p.v[2] = 1.0; void glamor_get_transform_extent_from_box(struct pixman_box32 *box, - struct pixman_transform *transform) + struct pixman_transform *transform) { - struct pixman_f_vector p0, p1, p2, p3; - float min_x, min_y, max_x, max_y; - - struct pixman_f_transform ftransform; - - VECTOR_FROM_POINT(p0, box->x1, box->y1) - VECTOR_FROM_POINT(p1, box->x2, box->y1) - VECTOR_FROM_POINT(p2, box->x2, box->y2) - VECTOR_FROM_POINT(p3, box->x1, box->y2) - - pixman_f_transform_from_pixman_transform(&ftransform, transform); - pixman_f_transform_point(&ftransform, &p0); - pixman_f_transform_point(&ftransform, &p1); - pixman_f_transform_point(&ftransform, &p2); - pixman_f_transform_point(&ftransform, &p3); - - min_x = MIN(p0.v[0], p1.v[0]); - min_x = MIN(min_x, p2.v[0]); - min_x = MIN(min_x, p3.v[0]); - - min_y = MIN(p0.v[1], p1.v[1]); - min_y = MIN(min_y, p2.v[1]); - min_y = MIN(min_y, p3.v[1]); - - max_x = MAX(p0.v[0], p1.v[0]); - max_x = MAX(max_x, p2.v[0]); - max_x = MAX(max_x, p3.v[0]); - - max_y = MAX(p0.v[1], p1.v[1]); - max_y = MAX(max_y, p2.v[1]); - max_y = MAX(max_y, p3.v[1]); - box->x1 = floor(min_x) - 1; - box->y1 = floor(min_y) - 1; - box->x2 = ceil(max_x) + 1; - box->y2 = ceil(max_y) + 1; + struct pixman_f_vector p0, p1, p2, p3; + float min_x, min_y, max_x, max_y; + + struct pixman_f_transform ftransform; + + VECTOR_FROM_POINT(p0, box->x1, box->y1) + VECTOR_FROM_POINT(p1, box->x2, box->y1) + VECTOR_FROM_POINT(p2, box->x2, box->y2) + VECTOR_FROM_POINT(p3, box->x1, box->y2) + + pixman_f_transform_from_pixman_transform(&ftransform, transform); + pixman_f_transform_point(&ftransform, &p0); + pixman_f_transform_point(&ftransform, &p1); + pixman_f_transform_point(&ftransform, &p2); + pixman_f_transform_point(&ftransform, &p3); + + min_x = MIN(p0.v[0], p1.v[0]); + min_x = MIN(min_x, p2.v[0]); + min_x = MIN(min_x, p3.v[0]); + + min_y = MIN(p0.v[1], p1.v[1]); + min_y = MIN(min_y, p2.v[1]); + min_y = MIN(min_y, p3.v[1]); + + max_x = MAX(p0.v[0], p1.v[0]); + max_x = MAX(max_x, p2.v[0]); + max_x = MAX(max_x, p3.v[0]); + + max_y = MAX(p0.v[1], p1.v[1]); + max_y = MAX(max_y, p2.v[1]); + max_y = MAX(max_y, p3.v[1]); + box->x1 = floor(min_x) - 1; + box->y1 = floor(min_y) - 1; + box->x2 = ceil(max_x) + 1; + box->y2 = ceil(max_y) + 1; } static void _glamor_process_transformed_clipped_region(glamor_pixmap_private *priv, - int repeat_type, - glamor_pixmap_clipped_regions *clipped_regions, - int *n_regions, int *need_clean_fbo) + int repeat_type, + glamor_pixmap_clipped_regions * + clipped_regions, int *n_regions, + int *need_clean_fbo) { - int shift_x, shift_y; - if (*n_regions != 1) { - /* Merge all source regions into one region. */ - glamor_merge_clipped_regions(priv, repeat_type, - clipped_regions, n_regions, - need_clean_fbo); - } else { - SET_PIXMAP_FBO_CURRENT(priv, - clipped_regions[0].block_idx); - if (repeat_type == RepeatReflect || repeat_type == RepeatNormal) { - /* The required source areas are in one region, - * we need to shift the corresponding box's coords to proper position, - * thus we can calculate the relative coords correctly.*/ - BoxPtr temp_box; - int rem; - temp_box = RegionExtents(clipped_regions[0].region); - modulus(temp_box->x1, priv->base.pixmap->drawable.width, rem); - shift_x = (temp_box->x1 - rem) / priv->base.pixmap->drawable.width; - modulus(temp_box->y1, priv->base.pixmap->drawable.height, rem); - shift_y = (temp_box->y1 - rem) / priv->base.pixmap->drawable.height; - - if (shift_x != 0) { - priv->large.box.x1 += shift_x * priv->base.pixmap->drawable.width; - priv->large.box.x2 += shift_x * priv->base.pixmap->drawable.width; - } - if (shift_y != 0) { - priv->large.box.y1 += shift_y * priv->base.pixmap->drawable.height; - priv->large.box.y2 += shift_y * priv->base.pixmap->drawable.height; - } - } - } + int shift_x, shift_y; + + if (*n_regions != 1) { + /* Merge all source regions into one region. */ + glamor_merge_clipped_regions(priv, repeat_type, + clipped_regions, n_regions, + need_clean_fbo); + } + else { + SET_PIXMAP_FBO_CURRENT(priv, clipped_regions[0].block_idx); + if (repeat_type == RepeatReflect || repeat_type == RepeatNormal) { + /* The required source areas are in one region, + * we need to shift the corresponding box's coords to proper position, + * thus we can calculate the relative coords correctly.*/ + BoxPtr temp_box; + int rem; + + temp_box = RegionExtents(clipped_regions[0].region); + modulus(temp_box->x1, priv->base.pixmap->drawable.width, rem); + shift_x = (temp_box->x1 - rem) / priv->base.pixmap->drawable.width; + modulus(temp_box->y1, priv->base.pixmap->drawable.height, rem); + shift_y = (temp_box->y1 - rem) / priv->base.pixmap->drawable.height; + + if (shift_x != 0) { + priv->large.box.x1 += + shift_x * priv->base.pixmap->drawable.width; + priv->large.box.x2 += + shift_x * priv->base.pixmap->drawable.width; + } + if (shift_y != 0) { + priv->large.box.y1 += + shift_y * priv->base.pixmap->drawable.height; + priv->large.box.y2 += + shift_y * priv->base.pixmap->drawable.height; + } + } + } } - Bool glamor_composite_largepixmap_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private * source_pixmap_priv, - glamor_pixmap_private * mask_pixmap_priv, - glamor_pixmap_private * dest_pixmap_priv, - RegionPtr region, Bool force_clip, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, Bool force_clip, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height) { - glamor_screen_private *glamor_priv; - glamor_pixmap_clipped_regions *clipped_dest_regions; - glamor_pixmap_clipped_regions *clipped_source_regions; - glamor_pixmap_clipped_regions *clipped_mask_regions; - int n_dest_regions; - int n_mask_regions; - int n_source_regions; - int i,j,k; - int need_clean_source_fbo = 0; - int need_clean_mask_fbo = 0; - int is_normal_source_fbo = 0; - int is_normal_mask_fbo = 0; - int fixed_block_width, fixed_block_height; - int null_source, null_mask; - glamor_pixmap_private * need_free_source_pixmap_priv = NULL; - glamor_pixmap_private * need_free_mask_pixmap_priv = NULL; - int source_repeat_type = 0, mask_repeat_type = 0; - int ok = TRUE; - - if (source->repeat) - source_repeat_type = source->repeatType; - else - source_repeat_type = RepeatNone; - - if (mask && mask->repeat) - mask_repeat_type = mask->repeatType; - else - mask_repeat_type = RepeatNone; - - glamor_priv = dest_pixmap_priv->base.glamor_priv; - fixed_block_width = glamor_priv->max_fbo_size; - fixed_block_height = glamor_priv->max_fbo_size; - /* If we got an totally out-of-box region for a source or mask - * region without repeat, we need to set it as null_source and - * give it a solid color (0,0,0,0). */ - null_source = 0; - null_mask = 0; - RegionTranslate(region, -dest->pDrawable->x, - -dest->pDrawable->y); - - /* need to transform the dest region to the correct sourcei/mask region. - * it's a little complex, as one single edge of the - * target region may be transformed to cross a block boundary of the - * source or mask. Then it's impossible to handle it as usual way. - * We may have to split the original dest region to smaller region, and - * make sure each region's transformed region can fit into one texture, - * and then continue this loop again, and each time when a transformed region - * cross the bound, we need to copy it to a single pixmap and do the composition - * with the new pixmap. If the transformed region doesn't cross a source/mask's - * boundary then we don't need to copy. - * - */ - if (source_pixmap_priv - && source->transform - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - int source_transformed_block_width, source_transformed_block_height; - if (!glamor_get_transform_block_size(source->transform, - source_pixmap_priv->large.block_w, - source_pixmap_priv->large.block_h, - &source_transformed_block_width, - &source_transformed_block_height)) { - DEBUGF("source block size less than 1, fallback.\n"); - RegionTranslate(region, dest->pDrawable->x, - dest->pDrawable->y); - return FALSE; - } - fixed_block_width = min(fixed_block_width , source_transformed_block_width); - fixed_block_height = min(fixed_block_height , source_transformed_block_height); - DEBUGF("new source block size %d x %d \n", fixed_block_width, fixed_block_height); - } - - if (mask_pixmap_priv - && mask->transform - && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - int mask_transformed_block_width, mask_transformed_block_height; - if (!glamor_get_transform_block_size(mask->transform, - mask_pixmap_priv->large.block_w, - mask_pixmap_priv->large.block_h, - &mask_transformed_block_width, - &mask_transformed_block_height)) { - DEBUGF("mask block size less than 1, fallback.\n"); - RegionTranslate(region, dest->pDrawable->x, - dest->pDrawable->y); - return FALSE; - } - fixed_block_width = min(fixed_block_width , mask_transformed_block_width); - fixed_block_height = min(fixed_block_height , mask_transformed_block_height); - DEBUGF("new mask block size %d x %d \n", fixed_block_width, fixed_block_height); - } - - /*compute the correct block width and height whose transformed source/mask - *region can fit into one texture.*/ - if (force_clip || fixed_block_width < glamor_priv->max_fbo_size - || fixed_block_height < glamor_priv->max_fbo_size) - clipped_dest_regions = glamor_compute_clipped_regions_ext(dest_pixmap_priv, - region, - &n_dest_regions, - fixed_block_width, - fixed_block_height, - 0, 0); - else - clipped_dest_regions = glamor_compute_clipped_regions(dest_pixmap_priv, - region, - &n_dest_regions, - 0, 0, 0); - DEBUGF("dest clipped result %d region: \n", n_dest_regions); - if (source_pixmap_priv - && (source_pixmap_priv == dest_pixmap_priv || source_pixmap_priv == mask_pixmap_priv) - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - /* XXX self-copy...*/ - need_free_source_pixmap_priv = source_pixmap_priv; - source_pixmap_priv = malloc(sizeof(*source_pixmap_priv)); - *source_pixmap_priv = *need_free_source_pixmap_priv; - need_free_source_pixmap_priv = source_pixmap_priv; - } - assert(mask_pixmap_priv != dest_pixmap_priv); - - for(i = 0; i < n_dest_regions; i++) - { - DEBUGF("dest region %d idx %d\n", i, clipped_dest_regions[i].block_idx); - DEBUGRegionPrint(clipped_dest_regions[i].region); - SET_PIXMAP_FBO_CURRENT(dest_pixmap_priv, clipped_dest_regions[i].block_idx); - if ( source_pixmap_priv && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (!source->transform && source_repeat_type != RepeatPad) { - RegionTranslate(clipped_dest_regions[i].region, - x_source - x_dest, - y_source - y_dest); - clipped_source_regions = glamor_compute_clipped_regions(source_pixmap_priv, - clipped_dest_regions[i].region, - &n_source_regions, source_repeat_type, - 0, 0); - is_normal_source_fbo = 1; - } - else { - clipped_source_regions = glamor_compute_transform_clipped_regions(source_pixmap_priv, - source->transform, - clipped_dest_regions[i].region, - &n_source_regions, - x_source - x_dest, y_source - y_dest, - source_repeat_type, 0, 0); - is_normal_source_fbo = 0; - if (n_source_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_source = 1; - n_source_regions = 1; - } else - _glamor_process_transformed_clipped_region(source_pixmap_priv, - source_repeat_type, clipped_source_regions, &n_source_regions, - &need_clean_source_fbo); - } - DEBUGF("source clipped result %d region: \n", n_source_regions); - for(j = 0; j < n_source_regions; j++) - { - if (is_normal_source_fbo) - SET_PIXMAP_FBO_CURRENT(source_pixmap_priv, - clipped_source_regions[j].block_idx); - - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (is_normal_mask_fbo && is_normal_source_fbo) { - /* both mask and source are normal fbo box without transform or repeatpad. - * The region is clipped against source and then we clip it against mask here.*/ - DEBUGF("source region %d idx %d\n", j, clipped_source_regions[j].block_idx); - DEBUGRegionPrint(clipped_source_regions[j].region); - RegionTranslate(clipped_source_regions[j].region, - - x_source + x_mask, - - y_source + y_mask); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_source_regions[j].region, - &n_mask_regions, mask_repeat_type, - 0, 0); - is_normal_mask_fbo = 1; - } else if (is_normal_mask_fbo && !is_normal_source_fbo) { - assert(n_source_regions == 1); - /* The source fbo is not a normal fbo box, it has transform or repeatpad. - * the valid clip region should be the clip dest region rather than the - * clip source region.*/ - RegionTranslate(clipped_dest_regions[i].region, - - x_dest + x_mask, - - y_dest + y_mask); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_dest_regions[i].region, - &n_mask_regions, mask_repeat_type, - 0, 0); - is_normal_mask_fbo = 1; - } else { - /* This mask region has transform or repeatpad, we need clip it agains the previous - * valid region rather than the mask region. */ - if (!is_normal_source_fbo) - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_dest_regions[i].region, - &n_mask_regions, - x_mask - x_dest, - y_mask - y_dest, - mask_repeat_type, 0, 0); - else - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_source_regions[j].region, - &n_mask_regions, - x_mask - x_source, y_mask - y_source, - mask_repeat_type, 0, 0); - is_normal_mask_fbo = 0; - if (n_mask_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_mask = 1; - n_mask_regions = 1; - } else - _glamor_process_transformed_clipped_region(mask_pixmap_priv, - mask_repeat_type, clipped_mask_regions, &n_mask_regions, - &need_clean_mask_fbo); - } - DEBUGF("mask clipped result %d region: \n", n_mask_regions); + glamor_screen_private *glamor_priv; + glamor_pixmap_clipped_regions *clipped_dest_regions; + glamor_pixmap_clipped_regions *clipped_source_regions; + glamor_pixmap_clipped_regions *clipped_mask_regions; + int n_dest_regions; + int n_mask_regions; + int n_source_regions; + int i, j, k; + int need_clean_source_fbo = 0; + int need_clean_mask_fbo = 0; + int is_normal_source_fbo = 0; + int is_normal_mask_fbo = 0; + int fixed_block_width, fixed_block_height; + int null_source, null_mask; + glamor_pixmap_private *need_free_source_pixmap_priv = NULL; + glamor_pixmap_private *need_free_mask_pixmap_priv = NULL; + int source_repeat_type = 0, mask_repeat_type = 0; + int ok = TRUE; + + if (source->repeat) + source_repeat_type = source->repeatType; + else + source_repeat_type = RepeatNone; + + if (mask && mask->repeat) + mask_repeat_type = mask->repeatType; + else + mask_repeat_type = RepeatNone; + + glamor_priv = dest_pixmap_priv->base.glamor_priv; + fixed_block_width = glamor_priv->max_fbo_size; + fixed_block_height = glamor_priv->max_fbo_size; + /* If we got an totally out-of-box region for a source or mask + * region without repeat, we need to set it as null_source and + * give it a solid color (0,0,0,0). */ + null_source = 0; + null_mask = 0; + RegionTranslate(region, -dest->pDrawable->x, -dest->pDrawable->y); + + /* need to transform the dest region to the correct sourcei/mask region. + * it's a little complex, as one single edge of the + * target region may be transformed to cross a block boundary of the + * source or mask. Then it's impossible to handle it as usual way. + * We may have to split the original dest region to smaller region, and + * make sure each region's transformed region can fit into one texture, + * and then continue this loop again, and each time when a transformed region + * cross the bound, we need to copy it to a single pixmap and do the composition + * with the new pixmap. If the transformed region doesn't cross a source/mask's + * boundary then we don't need to copy. + * + */ + if (source_pixmap_priv + && source->transform + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + int source_transformed_block_width, source_transformed_block_height; + + if (!glamor_get_transform_block_size(source->transform, + source_pixmap_priv->large.block_w, + source_pixmap_priv->large.block_h, + &source_transformed_block_width, + &source_transformed_block_height)) + { + DEBUGF("source block size less than 1, fallback.\n"); + RegionTranslate(region, dest->pDrawable->x, dest->pDrawable->y); + return FALSE; + } + fixed_block_width = + min(fixed_block_width, source_transformed_block_width); + fixed_block_height = + min(fixed_block_height, source_transformed_block_height); + DEBUGF("new source block size %d x %d \n", fixed_block_width, + fixed_block_height); + } + + if (mask_pixmap_priv + && mask->transform && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + int mask_transformed_block_width, mask_transformed_block_height; + + if (!glamor_get_transform_block_size(mask->transform, + mask_pixmap_priv->large.block_w, + mask_pixmap_priv->large.block_h, + &mask_transformed_block_width, + &mask_transformed_block_height)) { + DEBUGF("mask block size less than 1, fallback.\n"); + RegionTranslate(region, dest->pDrawable->x, dest->pDrawable->y); + return FALSE; + } + fixed_block_width = + min(fixed_block_width, mask_transformed_block_width); + fixed_block_height = + min(fixed_block_height, mask_transformed_block_height); + DEBUGF("new mask block size %d x %d \n", fixed_block_width, + fixed_block_height); + } + + /*compute the correct block width and height whose transformed source/mask + *region can fit into one texture.*/ + if (force_clip || fixed_block_width < glamor_priv->max_fbo_size + || fixed_block_height < glamor_priv->max_fbo_size) + clipped_dest_regions = + glamor_compute_clipped_regions_ext(dest_pixmap_priv, region, + &n_dest_regions, + fixed_block_width, + fixed_block_height, 0, 0); + else + clipped_dest_regions = glamor_compute_clipped_regions(dest_pixmap_priv, + region, + &n_dest_regions, + 0, 0, 0); + DEBUGF("dest clipped result %d region: \n", n_dest_regions); + if (source_pixmap_priv + && (source_pixmap_priv == dest_pixmap_priv || + source_pixmap_priv == mask_pixmap_priv) + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + /* XXX self-copy... */ + need_free_source_pixmap_priv = source_pixmap_priv; + source_pixmap_priv = malloc(sizeof(*source_pixmap_priv)); + *source_pixmap_priv = *need_free_source_pixmap_priv; + need_free_source_pixmap_priv = source_pixmap_priv; + } + assert(mask_pixmap_priv != dest_pixmap_priv); + + for (i = 0; i < n_dest_regions; i++) { + DEBUGF("dest region %d idx %d\n", i, + clipped_dest_regions[i].block_idx); + DEBUGRegionPrint(clipped_dest_regions[i].region); + SET_PIXMAP_FBO_CURRENT(dest_pixmap_priv, + clipped_dest_regions[i].block_idx); + if (source_pixmap_priv && + source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (!source->transform && source_repeat_type != RepeatPad) { + RegionTranslate(clipped_dest_regions[i].region, + x_source - x_dest, y_source - y_dest); + clipped_source_regions = + glamor_compute_clipped_regions(source_pixmap_priv, + clipped_dest_regions[i]. + region, &n_source_regions, + source_repeat_type, 0, 0); + is_normal_source_fbo = 1; + } + else { + clipped_source_regions = + glamor_compute_transform_clipped_regions(source_pixmap_priv, + source->transform, + clipped_dest_regions + [i].region, + &n_source_regions, + x_source - x_dest, + y_source - y_dest, + source_repeat_type, + 0, 0); + is_normal_source_fbo = 0; + if (n_source_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_source = 1; + n_source_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (source_pixmap_priv, source_repeat_type, + clipped_source_regions, &n_source_regions, + &need_clean_source_fbo); + } + DEBUGF("source clipped result %d region: \n", n_source_regions); + for (j = 0; j < n_source_regions; j++) { + if (is_normal_source_fbo) + SET_PIXMAP_FBO_CURRENT(source_pixmap_priv, + clipped_source_regions[j].block_idx); + + if (mask_pixmap_priv && + mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (is_normal_mask_fbo && is_normal_source_fbo) { + /* both mask and source are normal fbo box without transform or repeatpad. + * The region is clipped against source and then we clip it against mask here.*/ + DEBUGF("source region %d idx %d\n", j, + clipped_source_regions[j].block_idx); + DEBUGRegionPrint(clipped_source_regions[j].region); + RegionTranslate(clipped_source_regions[j].region, + -x_source + x_mask, -y_source + y_mask); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_source_regions + [j].region, + &n_mask_regions, + mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 1; + } + else if (is_normal_mask_fbo && !is_normal_source_fbo) { + assert(n_source_regions == 1); + /* The source fbo is not a normal fbo box, it has transform or repeatpad. + * the valid clip region should be the clip dest region rather than the + * clip source region.*/ + RegionTranslate(clipped_dest_regions[i].region, + -x_dest + x_mask, -y_dest + y_mask); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_dest_regions + [i].region, + &n_mask_regions, + mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 1; + } + else { + /* This mask region has transform or repeatpad, we need clip it agains the previous + * valid region rather than the mask region. */ + if (!is_normal_source_fbo) + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_dest_regions[i].region, + &n_mask_regions, x_mask - x_dest, + y_mask - y_dest, mask_repeat_type, 0, 0); + else + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_source_regions[j].region, + &n_mask_regions, x_mask - x_source, + y_mask - y_source, mask_repeat_type, 0, 0); + is_normal_mask_fbo = 0; + if (n_mask_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_mask = 1; + n_mask_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (mask_pixmap_priv, mask_repeat_type, + clipped_mask_regions, &n_mask_regions, + &need_clean_mask_fbo); + } + DEBUGF("mask clipped result %d region: \n", n_mask_regions); #define COMPOSITE_REGION(region) do { \ if (!glamor_composite_clipped_region(op, \ @@ -1186,139 +1263,157 @@ glamor_composite_largepixmap_region(CARD8 op, } \ } while(0) - for(k = 0; k < n_mask_regions; k++) - { - DEBUGF("mask region %d idx %d\n", k, clipped_mask_regions[k].block_idx); - DEBUGRegionPrint(clipped_mask_regions[k].region); - if (is_normal_mask_fbo) { - SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, - clipped_mask_regions[k].block_idx); - DEBUGF("mask fbo off %d %d \n", - mask_pixmap_priv->large.box.x1, - mask_pixmap_priv->large.box.y1); - DEBUGF("start composite mask hasn't transform.\n"); - RegionTranslate(clipped_mask_regions[k].region, - x_dest - x_mask + dest->pDrawable->x, - y_dest - y_mask + dest->pDrawable->y); - COMPOSITE_REGION(clipped_mask_regions[k].region); - } else if (!is_normal_mask_fbo && !is_normal_source_fbo) { - DEBUGF("start composite both mask and source have transform.\n"); - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } else { - DEBUGF("start composite only mask has transform.\n"); - RegionTranslate(clipped_source_regions[j].region, - x_dest - x_source + dest->pDrawable->x, - y_dest - y_source + dest->pDrawable->y); - COMPOSITE_REGION(clipped_source_regions[j].region); - } - RegionDestroy(clipped_mask_regions[k].region); - } - free(clipped_mask_regions); - if (null_mask) null_mask = 0; - if (need_clean_mask_fbo) { - assert(is_normal_mask_fbo == 0); - glamor_destroy_fbo(mask_pixmap_priv->base.fbo); - mask_pixmap_priv->base.fbo = NULL; - need_clean_mask_fbo = 0; - } - } else { - if (is_normal_source_fbo) { - RegionTranslate(clipped_source_regions[j].region, - -x_source + x_dest + dest->pDrawable->x, - -y_source + y_dest + dest->pDrawable->y); - COMPOSITE_REGION(clipped_source_regions[j].region); - } else { - /* Source has transform or repeatPad. dest regions is the right - * region to do the composite. */ - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - } - if (clipped_source_regions && clipped_source_regions[j].region) - RegionDestroy(clipped_source_regions[j].region); - } - free(clipped_source_regions); - if (null_source) null_source = 0; - if (need_clean_source_fbo) { - assert(is_normal_source_fbo == 0); - glamor_destroy_fbo(source_pixmap_priv->base.fbo); - source_pixmap_priv->base.fbo = NULL; - need_clean_source_fbo = 0; - } - } - else { - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (!mask->transform && mask_repeat_type != RepeatPad) { - RegionTranslate(clipped_dest_regions[i].region, - x_mask - x_dest, - y_mask - y_dest); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_dest_regions[i].region, - &n_mask_regions, mask_repeat_type, 0, 0); - is_normal_mask_fbo = 1; - } - else { - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_dest_regions[i].region, - &n_mask_regions, - x_mask - x_dest, y_mask - y_dest, - mask_repeat_type, 0, 0); - is_normal_mask_fbo = 0; - if (n_mask_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_mask = 1; - n_mask_regions = 1; - } else - _glamor_process_transformed_clipped_region(mask_pixmap_priv, - mask_repeat_type, clipped_mask_regions, &n_mask_regions, - &need_clean_mask_fbo); - } - - for(k = 0; k < n_mask_regions; k++) - { - DEBUGF("mask region %d idx %d\n", k, clipped_mask_regions[k].block_idx); - DEBUGRegionPrint(clipped_mask_regions[k].region); - if (is_normal_mask_fbo) { - SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, - clipped_mask_regions[k].block_idx); - RegionTranslate(clipped_mask_regions[k].region, - x_dest - x_mask + dest->pDrawable->x, - y_dest - y_mask + dest->pDrawable->y); - COMPOSITE_REGION(clipped_mask_regions[k].region); - } else { - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - RegionDestroy(clipped_mask_regions[k].region); - } - free(clipped_mask_regions); - if (null_mask) null_mask = 0; - if (need_clean_mask_fbo) { - glamor_destroy_fbo(mask_pixmap_priv->base.fbo); - mask_pixmap_priv->base.fbo = NULL; - need_clean_mask_fbo = 0; - } - } - else { - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - } - RegionDestroy(clipped_dest_regions[i].region); - } - free(clipped_dest_regions); - free(need_free_source_pixmap_priv); - free(need_free_mask_pixmap_priv); - ok = TRUE; - return ok; + for (k = 0; k < n_mask_regions; k++) { + DEBUGF("mask region %d idx %d\n", k, + clipped_mask_regions[k].block_idx); + DEBUGRegionPrint(clipped_mask_regions[k].region); + if (is_normal_mask_fbo) { + SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, + clipped_mask_regions[k]. + block_idx); + DEBUGF("mask fbo off %d %d \n", + mask_pixmap_priv->large.box.x1, + mask_pixmap_priv->large.box.y1); + DEBUGF("start composite mask hasn't transform.\n"); + RegionTranslate(clipped_mask_regions[k].region, + x_dest - x_mask + + dest->pDrawable->x, + y_dest - y_mask + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_mask_regions[k].region); + } + else if (!is_normal_mask_fbo && !is_normal_source_fbo) { + DEBUGF + ("start composite both mask and source have transform.\n"); + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, + dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + else { + DEBUGF + ("start composite only mask has transform.\n"); + RegionTranslate(clipped_source_regions[j].region, + x_dest - x_source + + dest->pDrawable->x, + y_dest - y_source + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_source_regions[j].region); + } + RegionDestroy(clipped_mask_regions[k].region); + } + free(clipped_mask_regions); + if (null_mask) + null_mask = 0; + if (need_clean_mask_fbo) { + assert(is_normal_mask_fbo == 0); + glamor_destroy_fbo(mask_pixmap_priv->base.fbo); + mask_pixmap_priv->base.fbo = NULL; + need_clean_mask_fbo = 0; + } + } + else { + if (is_normal_source_fbo) { + RegionTranslate(clipped_source_regions[j].region, + -x_source + x_dest + dest->pDrawable->x, + -y_source + y_dest + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_source_regions[j].region); + } + else { + /* Source has transform or repeatPad. dest regions is the right + * region to do the composite. */ + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + } + if (clipped_source_regions && clipped_source_regions[j].region) + RegionDestroy(clipped_source_regions[j].region); + } + free(clipped_source_regions); + if (null_source) + null_source = 0; + if (need_clean_source_fbo) { + assert(is_normal_source_fbo == 0); + glamor_destroy_fbo(source_pixmap_priv->base.fbo); + source_pixmap_priv->base.fbo = NULL; + need_clean_source_fbo = 0; + } + } + else { + if (mask_pixmap_priv && + mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (!mask->transform && mask_repeat_type != RepeatPad) { + RegionTranslate(clipped_dest_regions[i].region, + x_mask - x_dest, y_mask - y_dest); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_dest_regions[i]. + region, &n_mask_regions, + mask_repeat_type, 0, 0); + is_normal_mask_fbo = 1; + } + else { + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_dest_regions[i].region, &n_mask_regions, + x_mask - x_dest, y_mask - y_dest, mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 0; + if (n_mask_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_mask = 1; + n_mask_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (mask_pixmap_priv, mask_repeat_type, + clipped_mask_regions, &n_mask_regions, + &need_clean_mask_fbo); + } + + for (k = 0; k < n_mask_regions; k++) { + DEBUGF("mask region %d idx %d\n", k, + clipped_mask_regions[k].block_idx); + DEBUGRegionPrint(clipped_mask_regions[k].region); + if (is_normal_mask_fbo) { + SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, + clipped_mask_regions[k]. + block_idx); + RegionTranslate(clipped_mask_regions[k].region, + x_dest - x_mask + dest->pDrawable->x, + y_dest - y_mask + dest->pDrawable->y); + COMPOSITE_REGION(clipped_mask_regions[k].region); + } + else { + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + RegionDestroy(clipped_mask_regions[k].region); + } + free(clipped_mask_regions); + if (null_mask) + null_mask = 0; + if (need_clean_mask_fbo) { + glamor_destroy_fbo(mask_pixmap_priv->base.fbo); + mask_pixmap_priv->base.fbo = NULL; + need_clean_mask_fbo = 0; + } + } + else { + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + } + RegionDestroy(clipped_dest_regions[i].region); + } + free(clipped_dest_regions); + free(need_free_source_pixmap_priv); + free(need_free_mask_pixmap_priv); + ok = TRUE; + return ok; } diff --git a/xorg-server/glamor/glamor_picture.c b/xorg-server/glamor/glamor_picture.c index 7d5ffbb76..f51a7e459 100644 --- a/xorg-server/glamor/glamor_picture.c +++ b/xorg-server/glamor/glamor_picture.c @@ -37,30 +37,30 @@ enum glamor_pixmap_status glamor_upload_picture_to_texture(PicturePtr picture) { - PixmapPtr pixmap; - assert(picture->pDrawable); - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + PixmapPtr pixmap; - return glamor_upload_pixmap_to_texture(pixmap); -} + assert(picture->pDrawable); + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + return glamor_upload_pixmap_to_texture(pixmap); +} Bool glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access) { - if (!picture || !picture->pDrawable) - return TRUE; + if (!picture || !picture->pDrawable) + return TRUE; - return glamor_prepare_access(picture->pDrawable, access); + return glamor_prepare_access(picture->pDrawable, access); } void glamor_finish_access_picture(PicturePtr picture, glamor_access_t access) { - if (!picture || !picture->pDrawable) - return; + if (!picture || !picture->pDrawable) + return; - glamor_finish_access(picture->pDrawable, access); + glamor_finish_access(picture->pDrawable, access); } /* @@ -71,61 +71,62 @@ glamor_finish_access_picture(PicturePtr picture, glamor_access_t access) int glamor_create_picture(PicturePtr picture) { - PixmapPtr pixmap; - glamor_pixmap_private *pixmap_priv; - - if (!picture || !picture->pDrawable) - return 0; - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!pixmap_priv) { - /* We must create a pixmap priv to track the picture format even - * if the pixmap is a pure in memory pixmap. The reason is that - * we may need to upload this pixmap to a texture on the fly. During - * the uploading, we need to know the picture format. */ - glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); - pixmap_priv = glamor_get_pixmap_private(pixmap); - } else { - if (GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - /* If the picture format is not compatible with glamor fbo format, - * we have to mark this pixmap as a separated texture, and don't - * fallback to DDX layer. */ - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM - && !glamor_pict_format_is_compatible(picture->format, - pixmap->drawable.depth)) - glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE); - } - } - - pixmap_priv->base.is_picture = 1; - pixmap_priv->base.picture = picture; - - return miCreatePicture(picture); + PixmapPtr pixmap; + glamor_pixmap_private *pixmap_priv; + + if (!picture || !picture->pDrawable) + return 0; + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!pixmap_priv) { + /* We must create a pixmap priv to track the picture format even + * if the pixmap is a pure in memory pixmap. The reason is that + * we may need to upload this pixmap to a texture on the fly. During + * the uploading, we need to know the picture format. */ + glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); + pixmap_priv = glamor_get_pixmap_private(pixmap); + } + else { + if (GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + /* If the picture format is not compatible with glamor fbo format, + * we have to mark this pixmap as a separated texture, and don't + * fallback to DDX layer. */ + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM + && !glamor_pict_format_is_compatible(picture->format, + pixmap->drawable.depth)) + glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE); + } + } + + pixmap_priv->base.is_picture = 1; + pixmap_priv->base.picture = picture; + + return miCreatePicture(picture); } void glamor_destroy_picture(PicturePtr picture) { - PixmapPtr pixmap; - glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap; + glamor_pixmap_private *pixmap_priv; - if (!picture || !picture->pDrawable) - return; + if (!picture || !picture->pDrawable) + return; - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv) { - pixmap_priv->base.is_picture = 0; - pixmap_priv->base.picture = NULL; - } - miDestroyPicture(picture); + if (pixmap_priv) { + pixmap_priv->base.is_picture = 0; + pixmap_priv->base.picture = NULL; + } + miDestroyPicture(picture); } void glamor_picture_format_fixup(PicturePtr picture, - glamor_pixmap_private * pixmap_priv) + glamor_pixmap_private *pixmap_priv) { - pixmap_priv->base.picture = picture; + pixmap_priv->base.picture = picture; } diff --git a/xorg-server/glamor/glamor_pixmap.c b/xorg-server/glamor/glamor_pixmap.c index 84694ec3c..f7de59c39 100644 --- a/xorg-server/glamor/glamor_pixmap.c +++ b/xorg-server/glamor/glamor_pixmap.c @@ -37,21 +37,20 @@ */ void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, - int *x, int *y) + int *x, int *y) { #ifdef COMPOSITE - if (drawable->type == DRAWABLE_WINDOW) { - *x = -pixmap->screen_x; - *y = -pixmap->screen_y; - return; - } + if (drawable->type == DRAWABLE_WINDOW) { + *x = -pixmap->screen_x; + *y = -pixmap->screen_y; + return; + } #endif - *x = 0; - *y = 0; + *x = 0; + *y = 0; } - void glamor_pixmap_init(ScreenPtr screen) { @@ -64,173 +63,168 @@ glamor_pixmap_fini(ScreenPtr screen) } void -glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo * fbo, int x0, int y0, int width, int height) +glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *fbo, int x0, int y0, + int width, int height) { - glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); + glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); + + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); #ifndef GLAMOR_GLES2 - dispatch->glMatrixMode(GL_PROJECTION); - dispatch->glLoadIdentity(); - dispatch->glMatrixMode(GL_MODELVIEW); - dispatch->glLoadIdentity(); + dispatch->glMatrixMode(GL_PROJECTION); + dispatch->glLoadIdentity(); + dispatch->glMatrixMode(GL_MODELVIEW); + dispatch->glLoadIdentity(); #endif - dispatch->glViewport(x0, y0, - width, height); + dispatch->glViewport(x0, y0, width, height); - glamor_put_dispatch(fbo->glamor_priv); + glamor_put_dispatch(fbo->glamor_priv); } void -glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * pixmap_priv) +glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private *pixmap_priv) { - int w,h; + int w, h; - PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap_priv, w, h); - glamor_set_destination_pixmap_fbo(pixmap_priv->base.fbo, 0, 0, - w, h); + PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap_priv, w, h); + glamor_set_destination_pixmap_fbo(pixmap_priv->base.fbo, 0, 0, w, h); } int -glamor_set_destination_pixmap_priv(glamor_pixmap_private * pixmap_priv) +glamor_set_destination_pixmap_priv(glamor_pixmap_private *pixmap_priv) { - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return -1; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return -1; - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - return 0; + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + return 0; } int glamor_set_destination_pixmap(PixmapPtr pixmap) { - int err; - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); + int err; + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - err = glamor_set_destination_pixmap_priv(pixmap_priv); - return err; + err = glamor_set_destination_pixmap_priv(pixmap_priv); + return err; } Bool glamor_set_planemask(PixmapPtr pixmap, unsigned long planemask) { - if (glamor_pm_is_solid(&pixmap->drawable, planemask)) { - return GL_TRUE; - } + if (glamor_pm_is_solid(&pixmap->drawable, planemask)) { + return GL_TRUE; + } - glamor_fallback("unsupported planemask %lx\n", planemask); - return GL_FALSE; + glamor_fallback("unsupported planemask %lx\n", planemask); + return GL_FALSE; } Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, unsigned char alu) { #ifndef GLAMOR_GLES2 - if (alu == GXcopy) { - dispatch->glDisable(GL_COLOR_LOGIC_OP); - return TRUE; - } - dispatch->glEnable(GL_COLOR_LOGIC_OP); - switch (alu) { - case GXclear: - dispatch->glLogicOp(GL_CLEAR); - break; - case GXand: - dispatch->glLogicOp(GL_AND); - break; - case GXandReverse: - dispatch->glLogicOp(GL_AND_REVERSE); - break; - case GXandInverted: - dispatch->glLogicOp(GL_AND_INVERTED); - break; - case GXnoop: - dispatch->glLogicOp(GL_NOOP); - break; - case GXxor: - dispatch->glLogicOp(GL_XOR); - break; - case GXor: - dispatch->glLogicOp(GL_OR); - break; - case GXnor: - dispatch->glLogicOp(GL_NOR); - break; - case GXequiv: - dispatch->glLogicOp(GL_EQUIV); - break; - case GXinvert: - dispatch->glLogicOp(GL_INVERT); - break; - case GXorReverse: - dispatch->glLogicOp(GL_OR_REVERSE); - break; - case GXcopyInverted: - dispatch->glLogicOp(GL_COPY_INVERTED); - break; - case GXorInverted: - dispatch->glLogicOp(GL_OR_INVERTED); - break; - case GXnand: - dispatch->glLogicOp(GL_NAND); - break; - case GXset: - dispatch->glLogicOp(GL_SET); - break; - default: - glamor_fallback("unsupported alu %x\n", alu); - return FALSE; - } + if (alu == GXcopy) { + dispatch->glDisable(GL_COLOR_LOGIC_OP); + return TRUE; + } + dispatch->glEnable(GL_COLOR_LOGIC_OP); + switch (alu) { + case GXclear: + dispatch->glLogicOp(GL_CLEAR); + break; + case GXand: + dispatch->glLogicOp(GL_AND); + break; + case GXandReverse: + dispatch->glLogicOp(GL_AND_REVERSE); + break; + case GXandInverted: + dispatch->glLogicOp(GL_AND_INVERTED); + break; + case GXnoop: + dispatch->glLogicOp(GL_NOOP); + break; + case GXxor: + dispatch->glLogicOp(GL_XOR); + break; + case GXor: + dispatch->glLogicOp(GL_OR); + break; + case GXnor: + dispatch->glLogicOp(GL_NOR); + break; + case GXequiv: + dispatch->glLogicOp(GL_EQUIV); + break; + case GXinvert: + dispatch->glLogicOp(GL_INVERT); + break; + case GXorReverse: + dispatch->glLogicOp(GL_OR_REVERSE); + break; + case GXcopyInverted: + dispatch->glLogicOp(GL_COPY_INVERTED); + break; + case GXorInverted: + dispatch->glLogicOp(GL_OR_INVERTED); + break; + case GXnand: + dispatch->glLogicOp(GL_NAND); + break; + case GXset: + dispatch->glLogicOp(GL_SET); + break; + default: + glamor_fallback("unsupported alu %x\n", alu); + return FALSE; + } #else - if (alu != GXcopy) - return FALSE; + if (alu != GXcopy) + return FALSE; #endif - return TRUE; + return TRUE; } static void * -_glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int stride, int revert) +_glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, + int stride, int revert) { - PictFormatShort dst_format, src_format; - pixman_image_t *dst_image; - pixman_image_t *src_image; - int src_stride; - - if (revert == REVERT_UPLOADING_A1) { - src_format = PICT_a1; - dst_format = PICT_a8; - src_stride = PixmapBytePad(w, 1); - } else { - dst_format = PICT_a1; - src_format = PICT_a8; - src_stride = (((w * 8 + 7) / 8) + 3) & ~3; - } - - dst_image = pixman_image_create_bits(dst_format, - w, h, - dst_bits, - stride); - if (dst_image == NULL) { - return NULL; - } - - src_image = pixman_image_create_bits(src_format, - w, h, - src_bits, - src_stride); - - if (src_image == NULL) { - pixman_image_unref(dst_image); - return NULL; - } - - pixman_image_composite(PictOpSrc, src_image, NULL, dst_image, - 0, 0, 0, 0, 0, 0, - w,h); - - pixman_image_unref(src_image); - pixman_image_unref(dst_image); - return dst_bits; + PictFormatShort dst_format, src_format; + pixman_image_t *dst_image; + pixman_image_t *src_image; + int src_stride; + + if (revert == REVERT_UPLOADING_A1) { + src_format = PICT_a1; + dst_format = PICT_a8; + src_stride = PixmapBytePad(w, 1); + } + else { + dst_format = PICT_a1; + src_format = PICT_a8; + src_stride = (((w * 8 + 7) / 8) + 3) & ~3; + } + + dst_image = pixman_image_create_bits(dst_format, w, h, dst_bits, stride); + if (dst_image == NULL) { + return NULL; + } + + src_image = pixman_image_create_bits(src_format, + w, h, src_bits, src_stride); + + if (src_image == NULL) { + pixman_image_unref(dst_image); + return NULL; + } + + pixman_image_composite(PictOpSrc, src_image, NULL, dst_image, + 0, 0, 0, 0, 0, 0, w, h); + + pixman_image_unref(src_image); + pixman_image_unref(dst_image); + return dst_bits; } #define ADJUST_BITS(d, src_bits, dst_bits) (((dst_bits) == (src_bits)) ? (d) : \ @@ -248,7 +242,7 @@ _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int st b_shift, b_bits, \ g_shift, g_bits, \ r_shift, r_bits) \ - { \ + do { \ typeof(src) a,b,g,r; \ typeof(src) a_mask_src, b_mask_src, g_mask_src, r_mask_src;\ a_mask_src = (((1 << (a_bits_src)) - 1) << a_shift_src);\ @@ -270,79 +264,80 @@ _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int st (*dst) = ((a) << (a_shift)) | ((b) << (b_shift)) | ((g) << (g_shift)) | ((r) << (r_shift)); \ else \ (*dst) = ((a) << (a_shift)) | ((r) << (b_shift)) | ((g) << (g_shift)) | ((b) << (r_shift)); \ - } + } while (0) static void * -_glamor_color_revert_x2b10g10r10(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +_glamor_color_revert_x2b10g10r10(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, + int swap_rb) { - int x,y; - unsigned int *words, *saved_words, *source_words; - int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || swap_rb == SWAP_NONE_UPLOADING); - - source_words = src_bits; - words = dst_bits; - saved_words = words; - - for (y = 0; y < h; y++) - { - DEBUGF("Line %d : ", y); - for (x = 0; x < w; x++) - { - unsigned int pixel = source_words[x]; - - if (revert == REVERT_DOWNLOADING_2_10_10_10) - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 24, 8, 16, 8, 8, 8, 0, 8, - 30, 2, 20, 10, 10, 10, 0, 10) - else - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 30, 2, 20, 10, 10, 10, 0, 10, - 24, 8, 16, 8, 8, 8, 0, 8); - DEBUGF("%x:%x ", pixel, words[x]); - } - DEBUGF("\n"); - words += stride / sizeof(*words); - source_words += stride / sizeof(*words); - } - DEBUGF("\n"); - return saved_words; + int x, y; + unsigned int *words, *saved_words, *source_words; + int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || + swap_rb == SWAP_NONE_UPLOADING); + + source_words = src_bits; + words = dst_bits; + saved_words = words; + + for (y = 0; y < h; y++) { + DEBUGF("Line %d : ", y); + for (x = 0; x < w; x++) { + unsigned int pixel = source_words[x]; + + if (revert == REVERT_DOWNLOADING_2_10_10_10) + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 24, 8, 16, 8, 8, 8, 0, 8, + 30, 2, 20, 10, 10, 10, 0, 10); + else + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 30, 2, 20, 10, 10, 10, 0, 10, + 24, 8, 16, 8, 8, 8, 0, 8); + DEBUGF("%x:%x ", pixel, words[x]); + } + DEBUGF("\n"); + words += stride / sizeof(*words); + source_words += stride / sizeof(*words); + } + DEBUGF("\n"); + return saved_words; } static void * -_glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +_glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, int swap_rb) { - int x,y; - unsigned short *words, *saved_words, *source_words; - int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || swap_rb == SWAP_NONE_UPLOADING); - - words = dst_bits; - source_words = src_bits; - saved_words = words; - - for (y = 0; y < h; y++) - { - DEBUGF("Line %d : ", y); - for (x = 0; x < w; x++) - { - unsigned short pixel = source_words[x]; - - if (revert == REVERT_DOWNLOADING_1_5_5_5) - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 0, 1, 1, 5, 6, 5, 11, 5, - 15, 1, 10, 5, 5, 5, 0, 5) - else - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 15, 1, 10, 5, 5, 5, 0, 5, - 0, 1, 1, 5, 6, 5, 11, 5); - DEBUGF("%04x:%04x ", pixel, words[x]); - } - DEBUGF("\n"); - words += stride / sizeof(*words); - source_words += stride / sizeof(*words); - } - DEBUGF("\n"); - return saved_words; + int x, y; + unsigned short *words, *saved_words, *source_words; + int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || + swap_rb == SWAP_NONE_UPLOADING); + + words = dst_bits; + source_words = src_bits; + saved_words = words; + + for (y = 0; y < h; y++) { + DEBUGF("Line %d : ", y); + for (x = 0; x < w; x++) { + unsigned short pixel = source_words[x]; + + if (revert == REVERT_DOWNLOADING_1_5_5_5) + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 0, 1, 1, 5, 6, 5, 11, 5, + 15, 1, 10, 5, 5, 5, 0, 5); + else + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 15, 1, 10, 5, 5, 5, 0, 5, + 0, 1, 1, 5, 6, 5, 11, 5); + DEBUGF("%04x:%04x ", pixel, words[x]); + } + DEBUGF("\n"); + words += stride / sizeof(*words); + source_words += stride / sizeof(*words); + } + DEBUGF("\n"); + return saved_words; } /* @@ -364,18 +359,28 @@ _glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, int */ static void * -glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, int swap_rb) { - if (revert == REVERT_DOWNLOADING_A1 || revert == REVERT_UPLOADING_A1) { - return _glamor_color_convert_a1_a8(src_bits, dst_bits, w, h, stride, revert); - } else if (revert == REVERT_DOWNLOADING_2_10_10_10 || revert == REVERT_UPLOADING_2_10_10_10) { - return _glamor_color_revert_x2b10g10r10(src_bits, dst_bits, w, h, stride, no_alpha, revert, swap_rb); - } else if (revert == REVERT_DOWNLOADING_1_5_5_5 || revert == REVERT_UPLOADING_1_5_5_5) { - return _glamor_color_revert_x1b5g5r5(src_bits, dst_bits, w, h, stride, no_alpha, revert, swap_rb); - } else - ErrorF("convert a non-supported mode %x.\n", revert); - - return NULL; + if (revert == REVERT_DOWNLOADING_A1 || revert == REVERT_UPLOADING_A1) { + return _glamor_color_convert_a1_a8(src_bits, dst_bits, w, h, stride, + revert); + } + else if (revert == REVERT_DOWNLOADING_2_10_10_10 || + revert == REVERT_UPLOADING_2_10_10_10) { + return _glamor_color_revert_x2b10g10r10(src_bits, dst_bits, w, h, + stride, no_alpha, revert, + swap_rb); + } + else if (revert == REVERT_DOWNLOADING_1_5_5_5 || + revert == REVERT_UPLOADING_1_5_5_5) { + return _glamor_color_revert_x1b5g5r5(src_bits, dst_bits, w, h, stride, + no_alpha, revert, swap_rb); + } + else + ErrorF("convert a non-supported mode %x.\n", revert); + + return NULL; } /** @@ -385,198 +390,182 @@ glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, int s int in_restore = 0; static void __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, unsigned int *tex, - GLenum format, - GLenum type, - int x, int y, int w, int h, - void *bits, int pbo) + GLenum format, + GLenum type, + int x, int y, int w, int h, + void *bits, int pbo) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - int non_sub = 0; - unsigned int iformat = 0; - - dispatch = glamor_get_dispatch(glamor_priv); - if (*tex == 0) { - dispatch->glGenTextures(1, tex); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - gl_iformat_for_depth(pixmap->drawable.depth, &iformat); - else - iformat = format; - non_sub = 1; - assert(x == 0 && y == 0); - } - - dispatch->glBindTexture(GL_TEXTURE_2D, *tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - - if (bits == NULL) - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, - pbo); - if (non_sub) - dispatch->glTexImage2D(GL_TEXTURE_2D, - 0, iformat, w, h, 0, - format, type, - bits); - else - dispatch->glTexSubImage2D(GL_TEXTURE_2D, - 0, x, y, w, h, - format, type, - bits); - - if (bits == NULL) - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + int non_sub = 0; + unsigned int iformat = 0; + + dispatch = glamor_get_dispatch(glamor_priv); + if (*tex == 0) { + dispatch->glGenTextures(1, tex); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + gl_iformat_for_depth(pixmap->drawable.depth, &iformat); + else + iformat = format; + non_sub = 1; + assert(x == 0 && y == 0); + } + + dispatch->glBindTexture(GL_TEXTURE_2D, *tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + + if (bits == NULL) + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo); + if (non_sub) + dispatch->glTexImage2D(GL_TEXTURE_2D, + 0, iformat, w, h, 0, format, type, bits); + else + dispatch->glTexSubImage2D(GL_TEXTURE_2D, + 0, x, y, w, h, format, type, bits); + + if (bits == NULL) + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glamor_put_dispatch(glamor_priv); } static Bool -_glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, GLenum type, - int no_alpha, int revert, - int swap_rb, int x, int y, int w, int h, - int stride, void* bits, int pbo) +_glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, + GLenum type, int no_alpha, int revert, + int swap_rb, int x, int y, int w, int h, + int stride, void *bits, int pbo) { - glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - static float vertices[8]; - static float texcoords[8] = { 0, 1, - 1, 1, - 1, 0, - 0, 0 - }; - static float texcoords_inv[8] = { 0, 0, - 1, 0, - 1, 1, - 0, 1 - }; - float *ptexcoords; - float dst_xscale, dst_yscale; - GLuint tex = 0; - int need_flip; - int need_free_bits = 0; - - need_flip = !glamor_priv->yInverted; - - if (bits == NULL) - goto ready_to_upload; - - if (revert > REVERT_NORMAL) { - /* XXX if we are restoring the pixmap, then we may not need to allocate - * new buffer */ - void *converted_bits; - - if (pixmap->drawable.depth == 1) - stride = (((w * 8 + 7) / 8) + 3) & ~3; - - converted_bits = malloc(h * stride); - - if (converted_bits == NULL) - return FALSE; - bits = glamor_color_convert_to_bits(bits, converted_bits, w, h, - stride, - no_alpha, revert, swap_rb); - if (bits == NULL) { - ErrorF("Failed to convert pixmap no_alpha %d," - "revert mode %d, swap mode %d\n", no_alpha, revert, swap_rb); - return FALSE; - } - no_alpha = 0; - revert = REVERT_NONE; - swap_rb = SWAP_NONE_UPLOADING; - need_free_bits = TRUE; - } - -ready_to_upload: - - /* Try fast path firstly, upload the pixmap to the texture attached - * to the fbo directly. */ - if (no_alpha == 0 - && revert == REVERT_NONE - && swap_rb == SWAP_NONE_UPLOADING - && !need_flip + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + static float vertices[8]; + + static float texcoords[8] = { 0, 1, + 1, 1, + 1, 0, + 0, 0 + }; + static float texcoords_inv[8] = { 0, 0, + 1, 0, + 1, 1, + 0, 1 + }; + float *ptexcoords; + float dst_xscale, dst_yscale; + GLuint tex = 0; + int need_flip; + int need_free_bits = 0; + + need_flip = !glamor_priv->yInverted; + + if (bits == NULL) + goto ready_to_upload; + + if (revert > REVERT_NORMAL) { + /* XXX if we are restoring the pixmap, then we may not need to allocate + * new buffer */ + void *converted_bits; + + if (pixmap->drawable.depth == 1) + stride = (((w * 8 + 7) / 8) + 3) & ~3; + + converted_bits = malloc(h * stride); + + if (converted_bits == NULL) + return FALSE; + bits = glamor_color_convert_to_bits(bits, converted_bits, w, h, + stride, no_alpha, revert, swap_rb); + if (bits == NULL) { + ErrorF("Failed to convert pixmap no_alpha %d," + "revert mode %d, swap mode %d\n", no_alpha, revert, swap_rb); + return FALSE; + } + no_alpha = 0; + revert = REVERT_NONE; + swap_rb = SWAP_NONE_UPLOADING; + need_free_bits = TRUE; + } + + ready_to_upload: + + /* Try fast path firstly, upload the pixmap to the texture attached + * to the fbo directly. */ + if (no_alpha == 0 + && revert == REVERT_NONE && swap_rb == SWAP_NONE_UPLOADING && !need_flip #ifdef WALKAROUND_LARGE_TEXTURE_MAP - && pixmap_priv->type != GLAMOR_TEXTURE_LARGE + && pixmap_priv->type != GLAMOR_TEXTURE_LARGE #endif - ) { - int fbo_x_off, fbo_y_off; - assert(pixmap_priv->base.fbo->tex); - pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); - - assert(x + fbo_x_off >= 0 && y + fbo_y_off >= 0); - assert(x + fbo_x_off + w <= pixmap_priv->base.fbo->width); - assert(y + fbo_y_off + h <= pixmap_priv->base.fbo->height); - __glamor_upload_pixmap_to_texture(pixmap, &pixmap_priv->base.fbo->tex, - format, type, - x + fbo_x_off, y + fbo_y_off, w, h, - bits, pbo); - return TRUE; - } - - if (need_flip) - ptexcoords = texcoords; - else - ptexcoords = texcoords_inv; - - pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); - glamor_set_normalize_vcoords(pixmap_priv, dst_xscale, - dst_yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, - vertices); - /* Slow path, we need to flip y or wire alpha to 1. */ - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - ptexcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - __glamor_upload_pixmap_to_texture(pixmap, &tex, - format, type, - 0, 0, w, h, - bits, pbo); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); + ) { + int fbo_x_off, fbo_y_off; + + assert(pixmap_priv->base.fbo->tex); + pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); + + assert(x + fbo_x_off >= 0 && y + fbo_y_off >= 0); + assert(x + fbo_x_off + w <= pixmap_priv->base.fbo->width); + assert(y + fbo_y_off + h <= pixmap_priv->base.fbo->height); + __glamor_upload_pixmap_to_texture(pixmap, &pixmap_priv->base.fbo->tex, + format, type, + x + fbo_x_off, y + fbo_y_off, w, h, + bits, pbo); + return TRUE; + } + + if (need_flip) + ptexcoords = texcoords; + else + ptexcoords = texcoords_inv; + + pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); + glamor_set_normalize_vcoords(pixmap_priv, dst_xscale, + dst_yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, vertices); + /* Slow path, we need to flip y or wire alpha to 1. */ + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), ptexcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + __glamor_upload_pixmap_to_texture(pixmap, &tex, + format, type, 0, 0, w, h, bits, pbo); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); - dispatch->glUniform1i(glamor_priv-> - finish_access_revert[no_alpha], - revert); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], - swap_rb); + dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[no_alpha], revert); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], + swap_rb); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDeleteTextures(1, &tex); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + dispatch->glUseProgram(0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDeleteTextures(1, &tex); + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); - glamor_put_dispatch(glamor_priv); + glamor_put_dispatch(glamor_priv); - if (need_free_bits) - free(bits); - return TRUE; + if (need_free_bits) + free(bits); + return TRUE; } /* @@ -587,54 +576,53 @@ ready_to_upload: * 2. no_alpha != 0, we need to wire the alpha. * */ static int -glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, int revert, int swap_rb) +glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, + int revert, int swap_rb) { - int flag = 0; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo; - GLenum iformat; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - - if (pixmap_priv->base.gl_fbo) - return 0; - - if (pixmap_priv->base.fbo - && (pixmap_priv->base.fbo->width < pixmap->drawable.width - || pixmap_priv->base.fbo->height < pixmap->drawable.height)) { - fbo = glamor_pixmap_detach_fbo(pixmap_priv); - glamor_destroy_fbo(fbo); - } - - if (pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb) - return 0; - - if (!(no_alpha - || (revert == REVERT_NORMAL) - || (swap_rb != SWAP_NONE_UPLOADING) - || !glamor_priv->yInverted)) { - /* We don't need a fbo, a simple texture uploading should work. */ - - flag = GLAMOR_CREATE_FBO_NO_FBO; - } - - if ((flag == GLAMOR_CREATE_FBO_NO_FBO - && pixmap_priv->base.fbo && pixmap_priv->base.fbo->tex) - || (flag == 0 - && pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb)) - return 0; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - gl_iformat_for_depth(pixmap->drawable.depth, &iformat); - else - iformat = format; - - if (!glamor_pixmap_ensure_fbo(pixmap, iformat, flag)) - return -1; - - return 0; + int flag = 0; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo; + GLenum iformat; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + + if (pixmap_priv->base.gl_fbo) + return 0; + + if (pixmap_priv->base.fbo + && (pixmap_priv->base.fbo->width < pixmap->drawable.width + || pixmap_priv->base.fbo->height < pixmap->drawable.height)) { + fbo = glamor_pixmap_detach_fbo(pixmap_priv); + glamor_destroy_fbo(fbo); + } + + if (pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb) + return 0; + + if (!(no_alpha || (revert == REVERT_NORMAL) + || (swap_rb != SWAP_NONE_UPLOADING) + || !glamor_priv->yInverted)) { + /* We don't need a fbo, a simple texture uploading should work. */ + + flag = GLAMOR_CREATE_FBO_NO_FBO; + } + + if ((flag == GLAMOR_CREATE_FBO_NO_FBO + && pixmap_priv->base.fbo && pixmap_priv->base.fbo->tex) + || (flag == 0 && pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb)) + return 0; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + gl_iformat_for_depth(pixmap->drawable.depth, &iformat); + else + iformat = format; + + if (!glamor_pixmap_ensure_fbo(pixmap, iformat, flag)) + return -1; + + return 0; } /* @@ -642,185 +630,188 @@ glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, int * */ static void glamor_put_bits(char *dst_bits, int dst_stride, char *src_bits, - int src_stride, int bpp, - int x, int y, int w, int h) + int src_stride, int bpp, int x, int y, int w, int h) { - int j; - int byte_per_pixel; - - byte_per_pixel = bpp / 8; - src_bits += y * src_stride + (x * byte_per_pixel); - - for(j = y; j < y + h; j++) - { - memcpy(dst_bits, src_bits, w * byte_per_pixel); - src_bits += src_stride; - dst_bits += dst_stride; - } + int j; + int byte_per_pixel; + + byte_per_pixel = bpp / 8; + src_bits += y * src_stride + (x * byte_per_pixel); + + for (j = y; j < y + h; j++) { + memcpy(dst_bits, src_bits, w * byte_per_pixel); + src_bits += src_stride; + dst_bits += dst_stride; + } } + /* * download sub region from a large region. */ static void glamor_get_bits(char *dst_bits, int dst_stride, char *src_bits, - int src_stride, int bpp, - int x, int y, int w, int h) + int src_stride, int bpp, int x, int y, int w, int h) { - int j; - int byte_per_pixel; - - byte_per_pixel = bpp / 8; - dst_bits += y * dst_stride + x * byte_per_pixel; - - for(j = y; j < y + h; j++) - { - memcpy(dst_bits, src_bits, w * byte_per_pixel); - src_bits += src_stride; - dst_bits += dst_stride; - } -} + int j; + int byte_per_pixel; + byte_per_pixel = bpp / 8; + dst_bits += y * dst_stride + x * byte_per_pixel; + + for (j = y; j < y + h; j++) { + memcpy(dst_bits, src_bits, w * byte_per_pixel); + src_bits += src_stride; + dst_bits += dst_stride; + } +} Bool -glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo) +glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, int pbo) { - GLenum format, type; - int no_alpha, revert, swap_rb; - glamor_pixmap_private *pixmap_priv; - Bool force_clip; - - if (glamor_get_tex_format_type_from_pixmap(pixmap, - &format, - &type, - &no_alpha, - &revert, - &swap_rb, 1)) { - glamor_fallback("Unknown pixmap depth %d.\n", - pixmap->drawable.depth); - return TRUE; - } - if (glamor_pixmap_upload_prepare(pixmap, format, no_alpha, revert, swap_rb)) - return FALSE; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { - RegionRec region; - BoxRec box; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - void *sub_bits; - int i,j; - - sub_bits = malloc(h * stride); - if (sub_bits == NULL) - return FALSE; - box.x1 = x; - box.y1 = y; - box.x2 = x + w; - box.y2 = y + h; - RegionInitBoxes(®ion, &box, 1); - if (!force_clip) - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - else - clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, &n_region, - pixmap_priv->base.glamor_priv->max_fbo_size, - pixmap_priv->base.glamor_priv->max_fbo_size, 0, 0); - DEBUGF("prepare upload %dx%d to a large pixmap %p\n", w, h, pixmap); - for(i = 0; i < n_region; i++) - { - BoxPtr boxes; - int nbox; - int temp_stride; - void *temp_bits; - - assert(pbo == 0); - - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - boxes = RegionRects(clipped_regions[i].region); - nbox = RegionNumRects(clipped_regions[i].region); - DEBUGF("split to %d boxes\n", nbox); - for(j = 0; j < nbox; j++) - { - temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, - pixmap->drawable.depth); - - if (boxes[j].x1 == x && temp_stride == stride) { - temp_bits = (char*)bits + (boxes[j].y1 - y) * stride; - } else { - temp_bits = sub_bits; - glamor_put_bits(temp_bits, temp_stride, bits, stride, - pixmap->drawable.bitsPerPixel, - boxes[j].x1 - x, boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1); - } - DEBUGF("upload x %d y %d w %d h %d temp stride %d \n", - boxes[j].x1 - x, boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, temp_stride); - if (_glamor_upload_bits_to_pixmap_texture(pixmap, format, type, no_alpha, - revert, swap_rb, boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, - temp_stride, temp_bits, pbo) == FALSE) { - RegionUninit(®ion); - free(sub_bits); - assert(0); - return FALSE; - } - } - RegionDestroy(clipped_regions[i].region); - } - free(sub_bits); - free(clipped_regions); - RegionUninit(®ion); - return TRUE; - } else - return _glamor_upload_bits_to_pixmap_texture(pixmap, format, type, no_alpha, revert, swap_rb, - x, y, w, h, stride, bits, pbo); + GLenum format, type; + int no_alpha, revert, swap_rb; + glamor_pixmap_private *pixmap_priv; + Bool force_clip; + + if (glamor_get_tex_format_type_from_pixmap(pixmap, + &format, + &type, + &no_alpha, + &revert, &swap_rb, 1)) { + glamor_fallback("Unknown pixmap depth %d.\n", pixmap->drawable.depth); + return TRUE; + } + if (glamor_pixmap_upload_prepare(pixmap, format, no_alpha, revert, swap_rb)) + return FALSE; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP + && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { + RegionRec region; + BoxRec box; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + void *sub_bits; + int i, j; + + sub_bits = malloc(h * stride); + if (sub_bits == NULL) + return FALSE; + box.x1 = x; + box.y1 = y; + box.x2 = x + w; + box.y2 = y + h; + RegionInitBoxes(®ion, &box, 1); + if (!force_clip) + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, + 0, 0, 0); + else + clipped_regions = + glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, + &n_region, + pixmap_priv->base. + glamor_priv->max_fbo_size, + pixmap_priv->base. + glamor_priv->max_fbo_size, 0, + 0); + DEBUGF("prepare upload %dx%d to a large pixmap %p\n", w, h, pixmap); + for (i = 0; i < n_region; i++) { + BoxPtr boxes; + int nbox; + int temp_stride; + void *temp_bits; + + assert(pbo == 0); + + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + boxes = RegionRects(clipped_regions[i].region); + nbox = RegionNumRects(clipped_regions[i].region); + DEBUGF("split to %d boxes\n", nbox); + for (j = 0; j < nbox; j++) { + temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, + pixmap->drawable.depth); + + if (boxes[j].x1 == x && temp_stride == stride) { + temp_bits = (char *) bits + (boxes[j].y1 - y) * stride; + } + else { + temp_bits = sub_bits; + glamor_put_bits(temp_bits, temp_stride, bits, stride, + pixmap->drawable.bitsPerPixel, + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1); + } + DEBUGF("upload x %d y %d w %d h %d temp stride %d \n", + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride); + if (_glamor_upload_bits_to_pixmap_texture + (pixmap, format, type, no_alpha, revert, swap_rb, + boxes[j].x1, boxes[j].y1, boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride, temp_bits, + pbo) == FALSE) { + RegionUninit(®ion); + free(sub_bits); + assert(0); + return FALSE; + } + } + RegionDestroy(clipped_regions[i].region); + } + free(sub_bits); + free(clipped_regions); + RegionUninit(®ion); + return TRUE; + } + else + return _glamor_upload_bits_to_pixmap_texture(pixmap, format, type, + no_alpha, revert, swap_rb, + x, y, w, h, stride, bits, + pbo); } enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - void *data; - int pbo; - int ret; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if ((pixmap_priv->base.fbo) - && (pixmap_priv->base.fbo->pbo_valid)) { - data = NULL; - pbo = pixmap_priv->base.fbo->pbo; - } else { - data = pixmap->devPrivate.ptr; - pbo = 0; - } - - if (glamor_upload_sub_pixmap_to_texture(pixmap, 0, 0, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->devKind, - data, pbo)) - ret = GLAMOR_UPLOAD_DONE; - else - ret = GLAMOR_UPLOAD_FAILED; - - return ret; + glamor_pixmap_private *pixmap_priv; + void *data; + int pbo; + int ret; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if ((pixmap_priv->base.fbo) + && (pixmap_priv->base.fbo->pbo_valid)) { + data = NULL; + pbo = pixmap_priv->base.fbo->pbo; + } + else { + data = pixmap->devPrivate.ptr; + pbo = 0; + } + + if (glamor_upload_sub_pixmap_to_texture(pixmap, 0, 0, + pixmap->drawable.width, + pixmap->drawable.height, + pixmap->devKind, data, pbo)) + ret = GLAMOR_UPLOAD_DONE; + else + ret = GLAMOR_UPLOAD_FAILED; + + return ret; } void glamor_restore_pixmap_to_texture(PixmapPtr pixmap) { - if (glamor_upload_pixmap_to_texture(pixmap) != GLAMOR_UPLOAD_DONE) - LogMessage(X_WARNING, "Failed to restore pixmap to texture.\n"); + if (glamor_upload_pixmap_to_texture(pixmap) != GLAMOR_UPLOAD_DONE) + LogMessage(X_WARNING, "Failed to restore pixmap to texture.\n"); } /* @@ -832,83 +823,68 @@ glamor_restore_pixmap_to_texture(PixmapPtr pixmap) * */ glamor_pixmap_fbo * -glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLenum format, - GLenum type, int no_alpha, int revert, int swap_rb) - +glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, + GLenum format, GLenum type, int no_alpha, + int revert, int swap_rb) { - glamor_pixmap_private *source_priv; - glamor_screen_private *glamor_priv; - ScreenPtr screen; - glamor_pixmap_fbo *temp_fbo; - glamor_gl_dispatch *dispatch; - float temp_xscale, temp_yscale, source_xscale, source_yscale; - static float vertices[8]; - static float texcoords[8]; - - screen = source->drawable.pScreen; - - glamor_priv = glamor_get_screen_private(screen); - source_priv = glamor_get_pixmap_private(source); - temp_fbo = glamor_create_fbo(glamor_priv, - w, h, - format, - 0); - if (temp_fbo == NULL) - return NULL; - - dispatch = glamor_get_dispatch(glamor_priv); - temp_xscale = 1.0 / w; - temp_yscale = 1.0 / h; - - glamor_set_normalize_vcoords((struct glamor_pixmap_private*)NULL,temp_xscale, - temp_yscale, - 0, 0, - w, h, - glamor_priv->yInverted, - vertices); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - pixmap_priv_get_scale(source_priv, &source_xscale, &source_yscale); - glamor_set_normalize_tcoords(source_priv, source_xscale, - source_yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, - texcoords); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, source_priv->base.fbo->tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - glamor_set_destination_pixmap_fbo(temp_fbo, 0, 0, w, h); - dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); - dispatch->glUniform1i(glamor_priv-> - finish_access_revert[no_alpha], - revert); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], - swap_rb); - - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return temp_fbo; + glamor_pixmap_private *source_priv; + glamor_screen_private *glamor_priv; + ScreenPtr screen; + glamor_pixmap_fbo *temp_fbo; + glamor_gl_dispatch *dispatch; + float temp_xscale, temp_yscale, source_xscale, source_yscale; + static float vertices[8]; + static float texcoords[8]; + + screen = source->drawable.pScreen; + + glamor_priv = glamor_get_screen_private(screen); + source_priv = glamor_get_pixmap_private(source); + temp_fbo = glamor_create_fbo(glamor_priv, w, h, format, 0); + if (temp_fbo == NULL) + return NULL; + + dispatch = glamor_get_dispatch(glamor_priv); + temp_xscale = 1.0 / w; + temp_yscale = 1.0 / h; + + glamor_set_normalize_vcoords((struct glamor_pixmap_private *) NULL, + temp_xscale, temp_yscale, 0, 0, w, h, + glamor_priv->yInverted, vertices); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + pixmap_priv_get_scale(source_priv, &source_xscale, &source_yscale); + glamor_set_normalize_tcoords(source_priv, source_xscale, + source_yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, texcoords); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, source_priv->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glamor_set_destination_pixmap_fbo(temp_fbo, 0, 0, w, h); + dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[no_alpha], revert); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], + swap_rb); + + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return temp_fbo; } /* @@ -918,263 +894,263 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLe static void * _glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, GLenum format, - GLenum type, int no_alpha, - int revert, int swap_rb, - int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access) + GLenum type, int no_alpha, + int revert, int swap_rb, + int x, int y, int w, int h, + int stride, void *bits, int pbo, + glamor_access_t access) { - glamor_pixmap_private *pixmap_priv; - GLenum gl_access = 0, gl_usage = 0; - void *data, *read; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - glamor_pixmap_fbo *temp_fbo = NULL; - int need_post_conversion = 0; - int need_free_data = 0; - int fbo_x_off, fbo_y_off; - - data = bits; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - - switch (access) { - case GLAMOR_ACCESS_RO: - gl_access = GL_READ_ONLY; - gl_usage = GL_STREAM_READ; - break; - case GLAMOR_ACCESS_WO: - return bits; - case GLAMOR_ACCESS_RW: - gl_access = GL_READ_WRITE; - gl_usage = GL_DYNAMIC_DRAW; - break; - default: - ErrorF("Glamor: Invalid access code. %d\n", access); - assert(0); - } - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - need_post_conversion = (revert > REVERT_NORMAL); - if (need_post_conversion) { - if (pixmap->drawable.depth == 1) { - int temp_stride; - temp_stride = (((w * 8 + 7) / 8) + 3) & ~3; - data = malloc(temp_stride * h); - if (data == NULL) - return NULL; - need_free_data = 1; - } - } - - pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); - - if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - && !need_post_conversion - && (swap_rb != SWAP_NONE_DOWNLOADING || revert != REVERT_NONE)) { - if (!(temp_fbo = glamor_es2_pixmap_read_prepare(pixmap, x, y, w, h, - format, type, no_alpha, - revert, swap_rb))) { - free(data); - return NULL; - } - x = 0; - y = 0; - fbo_x_off = 0; - fbo_y_off = 0; - } - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 4); - - if (glamor_priv->has_pack_invert || glamor_priv->yInverted) { - - if (!glamor_priv->yInverted) { - assert(glamor_priv->gl_flavor == - GLAMOR_GL_DESKTOP); - dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 1); - } - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && data == NULL) { - assert(pbo > 0); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo); - dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, - stride * - h, - NULL, gl_usage); - } - - dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, format, type, data); - - if (!glamor_priv->yInverted) { - assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); - dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 0); - } - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && bits == NULL) { - bits = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, - gl_access); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - } - } else { - unsigned int temp_pbo; - int yy; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &temp_pbo); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, - temp_pbo); - dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, - stride * - h, - NULL, GL_STREAM_READ); - dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, - format, type, 0); - read = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, - GL_READ_ONLY); - for (yy = 0; yy < pixmap->drawable.height; yy++) - memcpy((char*)data + yy * stride, - (char*)read + (h - yy - 1) * stride, stride); - dispatch->glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - dispatch->glDeleteBuffers(1, &temp_pbo); - } - - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); - glamor_put_dispatch(glamor_priv); - - if (need_post_conversion) { - /* As OpenGL desktop version never enters here. - * Don't need to consider if the pbo is valid.*/ - bits = glamor_color_convert_to_bits(data, bits, - w, h, - stride, - no_alpha, - revert, swap_rb); - } - - if (temp_fbo != NULL) - glamor_destroy_fbo(temp_fbo); - if (need_free_data) - free(data); - - return bits; + glamor_pixmap_private *pixmap_priv; + GLenum gl_access = 0, gl_usage = 0; + void *data, *read; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + glamor_pixmap_fbo *temp_fbo = NULL; + int need_post_conversion = 0; + int need_free_data = 0; + int fbo_x_off, fbo_y_off; + + data = bits; + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + + switch (access) { + case GLAMOR_ACCESS_RO: + gl_access = GL_READ_ONLY; + gl_usage = GL_STREAM_READ; + break; + case GLAMOR_ACCESS_WO: + return bits; + case GLAMOR_ACCESS_RW: + gl_access = GL_READ_WRITE; + gl_usage = GL_DYNAMIC_DRAW; + break; + default: + ErrorF("Glamor: Invalid access code. %d\n", access); + assert(0); + } + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + need_post_conversion = (revert > REVERT_NORMAL); + if (need_post_conversion) { + if (pixmap->drawable.depth == 1) { + int temp_stride; + + temp_stride = (((w * 8 + 7) / 8) + 3) & ~3; + data = malloc(temp_stride * h); + if (data == NULL) + return NULL; + need_free_data = 1; + } + } + + pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); + + if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + && !need_post_conversion + && (swap_rb != SWAP_NONE_DOWNLOADING || revert != REVERT_NONE)) { + if (!(temp_fbo = glamor_es2_pixmap_read_prepare(pixmap, x, y, w, h, + format, type, no_alpha, + revert, swap_rb))) { + free(data); + return NULL; + } + x = 0; + y = 0; + fbo_x_off = 0; + fbo_y_off = 0; + } + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 4); + + if (glamor_priv->has_pack_invert || glamor_priv->yInverted) { + + if (!glamor_priv->yInverted) { + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 1); + } + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && data == NULL) { + assert(pbo > 0); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo); + dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, + stride * h, NULL, gl_usage); + } + + dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, format, type, + data); + + if (!glamor_priv->yInverted) { + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 0); + } + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && bits == NULL) { + bits = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, gl_access); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + } + } + else { + unsigned int temp_pbo; + int yy; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &temp_pbo); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, temp_pbo); + dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, + stride * h, NULL, GL_STREAM_READ); + dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, + format, type, 0); + read = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + for (yy = 0; yy < pixmap->drawable.height; yy++) + memcpy((char *) data + yy * stride, + (char *) read + (h - yy - 1) * stride, stride); + dispatch->glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + dispatch->glDeleteBuffers(1, &temp_pbo); + } + + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + glamor_put_dispatch(glamor_priv); + + if (need_post_conversion) { + /* As OpenGL desktop version never enters here. + * Don't need to consider if the pbo is valid.*/ + bits = glamor_color_convert_to_bits(data, bits, + w, h, + stride, no_alpha, revert, swap_rb); + } + + if (temp_fbo != NULL) + glamor_destroy_fbo(temp_fbo); + if (need_free_data) + free(data); + + return bits; } void * glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access) + int stride, void *bits, int pbo, + glamor_access_t access) { - GLenum format, type; - int no_alpha, revert, swap_rb; - glamor_pixmap_private *pixmap_priv; - Bool force_clip; - - if (glamor_get_tex_format_type_from_pixmap(pixmap, - &format, - &type, - &no_alpha, - &revert, - &swap_rb, 0)) { - glamor_fallback("Unknown pixmap depth %d.\n", - pixmap->drawable.depth); - return NULL; - } - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - - force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { - - RegionRec region; - BoxRec box; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - void *sub_bits; - int i,j; - - sub_bits = malloc(h * stride); - if (sub_bits == NULL) - return FALSE; - box.x1 = x; - box.y1 = y; - box.x2 = x + w; - box.y2 = y + h; - RegionInitBoxes(®ion, &box, 1); - - if (!force_clip) - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - else - clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, &n_region, - pixmap_priv->base.glamor_priv->max_fbo_size, - pixmap_priv->base.glamor_priv->max_fbo_size, 0, 0); - - DEBUGF("start download large pixmap %p %dx%d \n", pixmap, w, h); - for(i = 0; i < n_region; i++) - { - BoxPtr boxes; - int nbox; - int temp_stride; - void *temp_bits; - - assert(pbo == 0); - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - boxes = RegionRects(clipped_regions[i].region); - nbox = RegionNumRects(clipped_regions[i].region); - for(j = 0; j < nbox; j++) - { - temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, - pixmap->drawable.depth); - - if (boxes[j].x1 == x && temp_stride == stride) { - temp_bits = (char*)bits + (boxes[j].y1 - y) * stride; - } else { - temp_bits = sub_bits; - } - DEBUGF("download x %d y %d w %d h %d temp stride %d \n", - boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, temp_stride); - - /* For large pixmap, we don't support pbo currently.*/ - assert(pbo == 0); - if (_glamor_download_sub_pixmap_to_cpu(pixmap, format, type, no_alpha, - revert, swap_rb, boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, - temp_stride, temp_bits, pbo, access) == FALSE) { - RegionUninit(®ion); - free(sub_bits); - assert(0); - return NULL; - } - if (boxes[j].x1 != x || temp_stride != stride) - glamor_get_bits(bits, stride, temp_bits, temp_stride, - pixmap->drawable.bitsPerPixel, - boxes[j].x1 - x , boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1); - } - - RegionDestroy(clipped_regions[i].region); - } - free(sub_bits); - free(clipped_regions); - RegionUninit(®ion); - return bits; - } else - return _glamor_download_sub_pixmap_to_cpu(pixmap, format, type, no_alpha, revert, swap_rb, - x, y, w, h, stride, - bits, pbo, access); + GLenum format, type; + int no_alpha, revert, swap_rb; + glamor_pixmap_private *pixmap_priv; + Bool force_clip; + + if (glamor_get_tex_format_type_from_pixmap(pixmap, + &format, + &type, + &no_alpha, + &revert, &swap_rb, 0)) { + glamor_fallback("Unknown pixmap depth %d.\n", pixmap->drawable.depth); + return NULL; + } + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + + force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP + && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { + + RegionRec region; + BoxRec box; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + void *sub_bits; + int i, j; + + sub_bits = malloc(h * stride); + if (sub_bits == NULL) + return FALSE; + box.x1 = x; + box.y1 = y; + box.x2 = x + w; + box.y2 = y + h; + RegionInitBoxes(®ion, &box, 1); + + if (!force_clip) + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, + 0, 0, 0); + else + clipped_regions = + glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, + &n_region, + pixmap_priv->base. + glamor_priv->max_fbo_size, + pixmap_priv->base. + glamor_priv->max_fbo_size, 0, + 0); + + DEBUGF("start download large pixmap %p %dx%d \n", pixmap, w, h); + for (i = 0; i < n_region; i++) { + BoxPtr boxes; + int nbox; + int temp_stride; + void *temp_bits; + + assert(pbo == 0); + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + boxes = RegionRects(clipped_regions[i].region); + nbox = RegionNumRects(clipped_regions[i].region); + for (j = 0; j < nbox; j++) { + temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, + pixmap->drawable.depth); + + if (boxes[j].x1 == x && temp_stride == stride) { + temp_bits = (char *) bits + (boxes[j].y1 - y) * stride; + } + else { + temp_bits = sub_bits; + } + DEBUGF("download x %d y %d w %d h %d temp stride %d \n", + boxes[j].x1, boxes[j].y1, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride); + + /* For large pixmap, we don't support pbo currently. */ + assert(pbo == 0); + if (_glamor_download_sub_pixmap_to_cpu + (pixmap, format, type, no_alpha, revert, swap_rb, + boxes[j].x1, boxes[j].y1, boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride, temp_bits, pbo, + access) == FALSE) { + RegionUninit(®ion); + free(sub_bits); + assert(0); + return NULL; + } + if (boxes[j].x1 != x || temp_stride != stride) + glamor_get_bits(bits, stride, temp_bits, temp_stride, + pixmap->drawable.bitsPerPixel, + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1); + } + + RegionDestroy(clipped_regions[i].region); + } + free(sub_bits); + free(clipped_regions); + RegionUninit(®ion); + return bits; + } + else + return _glamor_download_sub_pixmap_to_cpu(pixmap, format, type, + no_alpha, revert, swap_rb, x, + y, w, h, stride, bits, pbo, + access); } - /** * Move a pixmap to CPU memory. * The input data is the pixmap's fbo. @@ -1187,67 +1163,64 @@ glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) { - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - unsigned int stride; - void *data = NULL, *dst; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - int pbo = 0; - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return TRUE; - - glamor_debug_output(GLAMOR_DEBUG_TEXTURE_DOWNLOAD, - "Downloading pixmap %p %dx%d depth%d\n", - pixmap, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->drawable.depth); - - stride = pixmap->devKind; - - if (access == GLAMOR_ACCESS_WO - || glamor_priv->gl_flavor == GLAMOR_GL_ES2 - || (!glamor_priv->has_pack_invert && !glamor_priv->yInverted) - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - data = malloc(stride * pixmap->drawable.height); - } else { - dispatch = glamor_get_dispatch(glamor_priv); - if (pixmap_priv->base.fbo->pbo == 0) - dispatch->glGenBuffers(1, - &pixmap_priv->base.fbo->pbo); - glamor_put_dispatch(glamor_priv); - pbo = pixmap_priv->base.fbo->pbo; - } - - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) { - stride = PixmapBytePad(pixmap->drawable.width, pixmap->drawable.depth); - pixmap_priv->base.drm_stride = pixmap->devKind; - pixmap->devKind = stride; - } - - dst = glamor_download_sub_pixmap_to_cpu(pixmap, 0, 0, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->devKind, - data, pbo, access); - - if (!dst) { - if (data) - free(data); - return FALSE; - } - - if (pbo != 0) - pixmap_priv->base.fbo->pbo_valid = 1; - - pixmap_priv->base.gl_fbo = GLAMOR_FBO_DOWNLOADED; - - pixmap->devPrivate.ptr = dst; - - return TRUE; + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + unsigned int stride; + void *data = NULL, *dst; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + int pbo = 0; + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return TRUE; + + glamor_debug_output(GLAMOR_DEBUG_TEXTURE_DOWNLOAD, + "Downloading pixmap %p %dx%d depth%d\n", + pixmap, + pixmap->drawable.width, + pixmap->drawable.height, pixmap->drawable.depth); + + stride = pixmap->devKind; + + if (access == GLAMOR_ACCESS_WO + || glamor_priv->gl_flavor == GLAMOR_GL_ES2 + || (!glamor_priv->has_pack_invert && !glamor_priv->yInverted) + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + data = malloc(stride * pixmap->drawable.height); + } + else { + dispatch = glamor_get_dispatch(glamor_priv); + if (pixmap_priv->base.fbo->pbo == 0) + dispatch->glGenBuffers(1, &pixmap_priv->base.fbo->pbo); + glamor_put_dispatch(glamor_priv); + pbo = pixmap_priv->base.fbo->pbo; + } + + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) { + stride = PixmapBytePad(pixmap->drawable.width, pixmap->drawable.depth); + pixmap_priv->base.drm_stride = pixmap->devKind; + pixmap->devKind = stride; + } + + dst = glamor_download_sub_pixmap_to_cpu(pixmap, 0, 0, + pixmap->drawable.width, + pixmap->drawable.height, + pixmap->devKind, data, pbo, access); + + if (!dst) { + if (data) + free(data); + return FALSE; + } + + if (pbo != 0) + pixmap_priv->base.fbo->pbo_valid = 1; + + pixmap_priv->base.gl_fbo = GLAMOR_FBO_DOWNLOADED; + + pixmap->devPrivate.ptr = dst; + + return TRUE; } /* fixup a fbo to the exact size as the pixmap. */ @@ -1255,60 +1228,58 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) Bool glamor_fixup_pixmap_priv(ScreenPtr screen, glamor_pixmap_private *pixmap_priv) { - glamor_pixmap_fbo *old_fbo; - glamor_pixmap_fbo *new_fbo = NULL; - PixmapPtr scratch = NULL; - glamor_pixmap_private *scratch_priv; - DrawablePtr drawable; - GCPtr gc = NULL; - int ret = FALSE; - - drawable = &pixmap_priv->base.pixmap->drawable; - - if (!GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv)) - return TRUE; - - old_fbo = pixmap_priv->base.fbo; - - if (!old_fbo) - return FALSE; - - gc = GetScratchGC(drawable->depth, screen); - if (!gc) - goto fail; - - scratch = glamor_create_pixmap(screen, drawable->width, drawable->height, - drawable->depth, - GLAMOR_CREATE_PIXMAP_FIXUP); - - scratch_priv = glamor_get_pixmap_private(scratch); - - if (!scratch_priv->base.fbo) - goto fail; - - ValidateGC(&scratch->drawable, gc); - glamor_copy_area(drawable, - &scratch->drawable, - gc, 0, 0, - drawable->width, drawable->height, - 0, 0); - old_fbo = glamor_pixmap_detach_fbo(pixmap_priv); - new_fbo = glamor_pixmap_detach_fbo(scratch_priv); - glamor_pixmap_attach_fbo(pixmap_priv->base.pixmap, new_fbo); - glamor_pixmap_attach_fbo(scratch, old_fbo); - - DEBUGF("old %dx%d type %d\n", - drawable->width, drawable->height, pixmap_priv->type); - DEBUGF("copy tex %d %dx%d to tex %d %dx%d \n", - old_fbo->tex, old_fbo->width, old_fbo->height, new_fbo->tex, new_fbo->width, new_fbo->height); - ret = TRUE; -fail: - if (gc) - FreeScratchGC(gc); - if (scratch) - glamor_destroy_pixmap(scratch); - - return ret; + glamor_pixmap_fbo *old_fbo; + glamor_pixmap_fbo *new_fbo = NULL; + PixmapPtr scratch = NULL; + glamor_pixmap_private *scratch_priv; + DrawablePtr drawable; + GCPtr gc = NULL; + int ret = FALSE; + + drawable = &pixmap_priv->base.pixmap->drawable; + + if (!GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv)) + return TRUE; + + old_fbo = pixmap_priv->base.fbo; + + if (!old_fbo) + return FALSE; + + gc = GetScratchGC(drawable->depth, screen); + if (!gc) + goto fail; + + scratch = glamor_create_pixmap(screen, drawable->width, drawable->height, + drawable->depth, GLAMOR_CREATE_PIXMAP_FIXUP); + + scratch_priv = glamor_get_pixmap_private(scratch); + + if (!scratch_priv->base.fbo) + goto fail; + + ValidateGC(&scratch->drawable, gc); + glamor_copy_area(drawable, + &scratch->drawable, + gc, 0, 0, drawable->width, drawable->height, 0, 0); + old_fbo = glamor_pixmap_detach_fbo(pixmap_priv); + new_fbo = glamor_pixmap_detach_fbo(scratch_priv); + glamor_pixmap_attach_fbo(pixmap_priv->base.pixmap, new_fbo); + glamor_pixmap_attach_fbo(scratch, old_fbo); + + DEBUGF("old %dx%d type %d\n", + drawable->width, drawable->height, pixmap_priv->type); + DEBUGF("copy tex %d %dx%d to tex %d %dx%d \n", + old_fbo->tex, old_fbo->width, old_fbo->height, new_fbo->tex, + new_fbo->width, new_fbo->height); + ret = TRUE; + fail: + if (gc) + FreeScratchGC(gc); + if (scratch) + glamor_destroy_pixmap(scratch); + + return ret; } /* @@ -1328,106 +1299,120 @@ fail: * * */ PixmapPtr -glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, int w, int h, glamor_access_t access) +glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, int w, int h, + glamor_access_t access) { - glamor_screen_private *glamor_priv; - PixmapPtr sub_pixmap; - glamor_pixmap_private *sub_pixmap_priv, *pixmap_priv; - void *data; - int pbo; - int flag; - if (x < 0 || y < 0) - return NULL; - w = (x + w) > pixmap->drawable.width ? (pixmap->drawable.width - x) : w; - h = (y + h) > pixmap->drawable.height ? (pixmap->drawable.height - y) : h; - if (access == GLAMOR_ACCESS_WO) { - sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, GLAMOR_CREATE_PIXMAP_CPU); - return sub_pixmap; - } - - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) - flag = GLAMOR_CREATE_PIXMAP_CPU; - else - flag = GLAMOR_CREATE_PIXMAP_MAP; - - sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, flag); - - if (sub_pixmap == NULL) - return NULL; - - sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); - pbo = sub_pixmap_priv ? (sub_pixmap_priv->base.fbo ? sub_pixmap_priv->base.fbo->pbo : 0): 0; - - if (pixmap_priv->base.is_picture) { - sub_pixmap_priv->base.picture = pixmap_priv->base.picture; - sub_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; - } - - if (pbo) - data = NULL; - else - data = sub_pixmap->devPrivate.ptr; - - data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, sub_pixmap->devKind, - data, pbo, access); - if(data == NULL) { - fbDestroyPixmap(sub_pixmap); - return NULL; - } - if (pbo) { - assert(sub_pixmap->devPrivate.ptr == NULL); - sub_pixmap->devPrivate.ptr = data; - sub_pixmap_priv->base.fbo->pbo_valid = 1; - } + glamor_screen_private *glamor_priv; + PixmapPtr sub_pixmap; + glamor_pixmap_private *sub_pixmap_priv, *pixmap_priv; + void *data; + int pbo; + int flag; + + if (x < 0 || y < 0) + return NULL; + w = (x + w) > pixmap->drawable.width ? (pixmap->drawable.width - x) : w; + h = (y + h) > pixmap->drawable.height ? (pixmap->drawable.height - y) : h; + if (access == GLAMOR_ACCESS_WO) { + sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_CPU); + return sub_pixmap; + } + + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 || + pixmap_priv->type == GLAMOR_TEXTURE_LARGE) + flag = GLAMOR_CREATE_PIXMAP_CPU; + else + flag = GLAMOR_CREATE_PIXMAP_MAP; + + sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, flag); + + if (sub_pixmap == NULL) + return NULL; + + sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); + pbo = + sub_pixmap_priv ? (sub_pixmap_priv->base.fbo ? sub_pixmap_priv->base. + fbo->pbo : 0) : 0; + + if (pixmap_priv->base.is_picture) { + sub_pixmap_priv->base.picture = pixmap_priv->base.picture; + sub_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; + } + + if (pbo) + data = NULL; + else + data = sub_pixmap->devPrivate.ptr; + + data = + glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, + sub_pixmap->devKind, data, pbo, + access); + if (data == NULL) { + fbDestroyPixmap(sub_pixmap); + return NULL; + } + if (pbo) { + assert(sub_pixmap->devPrivate.ptr == NULL); + sub_pixmap->devPrivate.ptr = data; + sub_pixmap_priv->base.fbo->pbo_valid = 1; + } #if 0 - struct pixman_box16 box; - PixmapPtr new_sub_pixmap; - int dx, dy; - box.x1 = 0; - box.y1 = 0; - box.x2 = w; - box.y2 = h; - - dx = x; - dy = y; - - new_sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, GLAMOR_CREATE_PIXMAP_CPU); - glamor_copy_n_to_n(&pixmap->drawable, &new_sub_pixmap->drawable, NULL, &box, 1, dx, dy, 0, 0, 0, NULL); - glamor_compare_pixmaps(new_sub_pixmap, sub_pixmap, 0, 0, w, h, 1, 1); + struct pixman_box16 box; + PixmapPtr new_sub_pixmap; + int dx, dy; + + box.x1 = 0; + box.y1 = 0; + box.x2 = w; + box.y2 = h; + + dx = x; + dy = y; + + new_sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_CPU); + glamor_copy_n_to_n(&pixmap->drawable, &new_sub_pixmap->drawable, NULL, &box, + 1, dx, dy, 0, 0, 0, NULL); + glamor_compare_pixmaps(new_sub_pixmap, sub_pixmap, 0, 0, w, h, 1, 1); #endif - return sub_pixmap; + return sub_pixmap; } void -glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, int w, int h, glamor_access_t access) +glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access) { - void *bits; - int pbo; - glamor_pixmap_private *sub_pixmap_priv; - if (access != GLAMOR_ACCESS_RO) { - sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); - if (sub_pixmap_priv->base.fbo - && sub_pixmap_priv->base.fbo->pbo_valid) { - bits = NULL; - pbo = sub_pixmap_priv->base.fbo->pbo; - } else { - bits = sub_pixmap->devPrivate.ptr; - pbo = 0; - } - - assert(x >= 0 && y >= 0); - w = (w > sub_pixmap->drawable.width) ? sub_pixmap->drawable.width : w; - h = (h > sub_pixmap->drawable.height) ? sub_pixmap->drawable.height : h; - glamor_upload_sub_pixmap_to_texture(pixmap, x, y, w, h, sub_pixmap->devKind, bits, pbo); - } - glamor_destroy_pixmap(sub_pixmap); + void *bits; + int pbo; + glamor_pixmap_private *sub_pixmap_priv; + + if (access != GLAMOR_ACCESS_RO) { + sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); + if (sub_pixmap_priv->base.fbo && sub_pixmap_priv->base.fbo->pbo_valid) { + bits = NULL; + pbo = sub_pixmap_priv->base.fbo->pbo; + } + else { + bits = sub_pixmap->devPrivate.ptr; + pbo = 0; + } + + assert(x >= 0 && y >= 0); + w = (w > sub_pixmap->drawable.width) ? sub_pixmap->drawable.width : w; + h = (h > sub_pixmap->drawable.height) ? sub_pixmap->drawable.height : h; + glamor_upload_sub_pixmap_to_texture(pixmap, x, y, w, h, + sub_pixmap->devKind, bits, pbo); + } + glamor_destroy_pixmap(sub_pixmap); } diff --git a/xorg-server/glamor/glamor_polyfillrect.c b/xorg-server/glamor/glamor_polyfillrect.c index 4e1f7b3a9..a25fc4ed5 100644 --- a/xorg-server/glamor/glamor_polyfillrect.c +++ b/xorg-server/glamor/glamor_polyfillrect.c @@ -35,93 +35,90 @@ static Bool _glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect, Bool fallback) + GCPtr gc, int nrect, xRectangle *prect, Bool fallback) { - int fullX1, fullX2, fullY1, fullY2; - int xorg, yorg; - int n; - register BoxPtr pbox; - RegionPtr pClip = fbGetCompositeClip(gc); - Bool ret = FALSE; + int fullX1, fullX2, fullY1, fullY2; + int xorg, yorg; + int n; + register BoxPtr pbox; + RegionPtr pClip = fbGetCompositeClip(gc); + Bool ret = FALSE; - xorg = drawable->x; - yorg = drawable->y; + xorg = drawable->x; + yorg = drawable->y; - while (nrect--) { - fullX1 = prect->x + xorg; - fullY1 = prect->y + yorg; - fullX2 = fullX1 + (int) prect->width; - fullY2 = fullY1 + (int) prect->height; + while (nrect--) { + fullX1 = prect->x + xorg; + fullY1 = prect->y + yorg; + fullX2 = fullX1 + (int) prect->width; + fullY2 = fullY1 + (int) prect->height; - n = REGION_NUM_RECTS(pClip); - pbox = REGION_RECTS(pClip); - /* - * clip the rectangle to each box in the clip region - * this is logically equivalent to calling Intersect(), - * but rectangles may overlap each other here. - */ - while (n--) { - int x1 = fullX1; - int x2 = fullX2; - int y1 = fullY1; - int y2 = fullY2; + n = REGION_NUM_RECTS(pClip); + pbox = REGION_RECTS(pClip); + /* + * clip the rectangle to each box in the clip region + * this is logically equivalent to calling Intersect(), + * but rectangles may overlap each other here. + */ + while (n--) { + int x1 = fullX1; + int x2 = fullX2; + int y1 = fullY1; + int y2 = fullY2; - if (pbox->x1 > x1) - x1 = pbox->x1; - if (pbox->x2 < x2) - x2 = pbox->x2; - if (pbox->y1 > y1) - y1 = pbox->y1; - if (pbox->y2 < y2) - y2 = pbox->y2; + if (pbox->x1 > x1) + x1 = pbox->x1; + if (pbox->x2 < x2) + x2 = pbox->x2; + if (pbox->y1 > y1) + y1 = pbox->y1; + if (pbox->y2 < y2) + y2 = pbox->y2; - pbox++; - if (x1 >= x2 || y1 >= y2) - continue; - if (!glamor_fill(drawable, gc, x1, y1, x2 - x1, - y2 - y1, fallback)) { - nrect++; - goto fail; - } - } - prect++; - } - ret = TRUE; - goto done; + pbox++; + if (x1 >= x2 || y1 >= y2) + continue; + if (!glamor_fill(drawable, gc, x1, y1, x2 - x1, y2 - y1, fallback)) { + nrect++; + goto fail; + } + } + prect++; + } + ret = TRUE; + goto done; -fail: + fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) - goto done; + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) + goto done; - glamor_fallback(" to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbPolyFillRect(drawable, gc, nrect, prect); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + glamor_fallback(" to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbPolyFillRect(drawable, gc, nrect, prect); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; -done: - return ret; + done: + return ret; } - void glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect) + GCPtr gc, int nrect, xRectangle *prect) { - _glamor_poly_fill_rect(drawable, gc, nrect, prect, TRUE); + _glamor_poly_fill_rect(drawable, gc, nrect, prect, TRUE); } Bool glamor_poly_fill_rect_nf(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect) + GCPtr gc, int nrect, xRectangle *prect) { - return _glamor_poly_fill_rect(drawable, gc, nrect, prect, FALSE); + return _glamor_poly_fill_rect(drawable, gc, nrect, prect, FALSE); } diff --git a/xorg-server/glamor/glamor_polylines.c b/xorg-server/glamor/glamor_polylines.c index e723e9500..b94161760 100644 --- a/xorg-server/glamor/glamor_polylines.c +++ b/xorg-server/glamor/glamor_polylines.c @@ -40,96 +40,97 @@ */ static Bool _glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points, Bool fallback) + DDXPointPtr points, Bool fallback) { - xRectangle *rects; - int x1, x2, y1, y2; - int i; + xRectangle *rects; + int x1, x2, y1, y2; + int i; - /* Don't try to do wide lines or non-solid fill style. */ - if (gc->lineWidth != 0) { - /* This ends up in miSetSpans, which is accelerated as well as we - * can hope X wide lines will be. - */ - goto wide_line; - } - if (gc->lineStyle != LineSolid) { - glamor_fallback - ("non-solid fill line style %d\n", - gc->lineStyle); - goto fail; - } - rects = malloc(sizeof(xRectangle) * (n - 1)); - x1 = points[0].x; - y1 = points[0].y; - /* If we have any non-horizontal/vertical, fall back. */ - for (i = 0; i < n - 1; i++) { - if (mode == CoordModePrevious) { - x2 = x1 + points[i + 1].x; - y2 = y1 + points[i + 1].y; - } else { - x2 = points[i + 1].x; - y2 = points[i + 1].y; - } - if (x1 != x2 && y1 != y2) { - free(rects); - glamor_fallback("stub diagonal poly_line\n"); - goto fail; - } - if (x1 < x2) { - rects[i].x = x1; - rects[i].width = x2 - x1 + 1; - } else { - rects[i].x = x2; - rects[i].width = x1 - x2 + 1; - } - if (y1 < y2) { - rects[i].y = y1; - rects[i].height = y2 - y1 + 1; - } else { - rects[i].y = y2; - rects[i].height = y1 - y2 + 1; - } + /* Don't try to do wide lines or non-solid fill style. */ + if (gc->lineWidth != 0) { + /* This ends up in miSetSpans, which is accelerated as well as we + * can hope X wide lines will be. + */ + goto wide_line; + } + if (gc->lineStyle != LineSolid) { + glamor_fallback("non-solid fill line style %d\n", gc->lineStyle); + goto fail; + } + rects = malloc(sizeof(xRectangle) * (n - 1)); + x1 = points[0].x; + y1 = points[0].y; + /* If we have any non-horizontal/vertical, fall back. */ + for (i = 0; i < n - 1; i++) { + if (mode == CoordModePrevious) { + x2 = x1 + points[i + 1].x; + y2 = y1 + points[i + 1].y; + } + else { + x2 = points[i + 1].x; + y2 = points[i + 1].y; + } + if (x1 != x2 && y1 != y2) { + free(rects); + glamor_fallback("stub diagonal poly_line\n"); + goto fail; + } + if (x1 < x2) { + rects[i].x = x1; + rects[i].width = x2 - x1 + 1; + } + else { + rects[i].x = x2; + rects[i].width = x1 - x2 + 1; + } + if (y1 < y2) { + rects[i].y = y1; + rects[i].height = y2 - y1 + 1; + } + else { + rects[i].y = y2; + rects[i].height = y1 - y2 + 1; + } - x1 = x2; - y1 = y2; - } - gc->ops->PolyFillRect(drawable, gc, n - 1, rects); - free(rects); - return TRUE; + x1 = x2; + y1 = y2; + } + gc->ops->PolyFillRect(drawable, gc, n - 1, rects); + free(rects); + return TRUE; - fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) - return FALSE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) + return FALSE; - if (gc->lineWidth == 0) { - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbPolyLine(drawable, gc, mode, n, points); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - } else { -wide_line: - /* fb calls mi functions in the lineWidth != 0 case. */ - fbPolyLine(drawable, gc, mode, n, points); - } - return TRUE; + if (gc->lineWidth == 0) { + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbPolyLine(drawable, gc, mode, n, points); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + } + else { + wide_line: + /* fb calls mi functions in the lineWidth != 0 case. */ + fbPolyLine(drawable, gc, mode, n, points); + } + return TRUE; } void glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points) + DDXPointPtr points) { - _glamor_poly_lines(drawable, gc, mode, n, points, TRUE); + _glamor_poly_lines(drawable, gc, mode, n, points, TRUE); } Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points) + DDXPointPtr points) { - return _glamor_poly_lines(drawable, gc, mode, n, points, FALSE); + return _glamor_poly_lines(drawable, gc, mode, n, points, FALSE); } diff --git a/xorg-server/glamor/glamor_polyops.c b/xorg-server/glamor/glamor_polyops.c index 59301784d..1484d80f1 100644 --- a/xorg-server/glamor/glamor_polyops.c +++ b/xorg-server/glamor/glamor_polyops.c @@ -30,56 +30,53 @@ static Bool _glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt, Bool fallback) + DDXPointPtr ppt, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pDrawable)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pDrawable)) + return FALSE; - miPolyPoint(pDrawable, pGC, mode, npt, ppt); + miPolyPoint(pDrawable, pGC, mode, npt, ppt); - return TRUE; + return TRUE; } void glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt) + DDXPointPtr ppt) { - _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, TRUE); + _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, TRUE); } Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt) + DDXPointPtr ppt) { - return _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, FALSE); + return _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, FALSE); } static Bool _glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg, Bool fallback) + xSegment *pSeg, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pDrawable)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pDrawable)) + return FALSE; - miPolySegment(pDrawable, pGC, nseg, pSeg); + miPolySegment(pDrawable, pGC, nseg, pSeg); - return TRUE; + return TRUE; } void -glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg) +glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSeg) { - _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, TRUE); + _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, TRUE); } Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg) + xSegment *pSeg) { - return _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, FALSE); + return _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, FALSE); } diff --git a/xorg-server/glamor/glamor_priv.h b/xorg-server/glamor/glamor_priv.h index 7b8f762c9..dc3873013 100644 --- a/xorg-server/glamor/glamor_priv.h +++ b/xorg-server/glamor/glamor_priv.h @@ -27,20 +27,13 @@ #ifndef GLAMOR_PRIV_H #define GLAMOR_PRIV_H -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "compiler.h" +#include "dix-config.h" #include #ifndef DEBUG #define NDEBUG #endif #include "glamor.h" -#include "compat-api.h" - -#define GL_GLEXT_PROTOTYPES #ifdef GLAMOR_GLES2 #include @@ -61,125 +54,110 @@ #include "glamor_debug.h" #include -/* The list.h rename all the function to add xorg_ prefix. - We add hack here to avoid the compile error when using - old version xserver header file. - These will be removed in future. */ -#ifndef xorg_list_entry -#define xorg_list list -#define xorg_list_for_each_entry list_for_each_entry -#define xorg_list_for_each_entry_safe list_for_each_entry_safe -#define xorg_list_del list_del -#define xorg_list_add list_add -#define xorg_list_append list_append -#define xorg_list_init list_init -#endif struct glamor_pixmap_private; typedef struct glamor_composite_shader { - GLuint prog; - GLint dest_to_dest_uniform_location; - GLint dest_to_source_uniform_location; - GLint dest_to_mask_uniform_location; - GLint source_uniform_location; - GLint mask_uniform_location; - GLint source_wh; - GLint mask_wh; - GLint source_repeat_mode; - GLint mask_repeat_mode; - union { - float source_solid_color[4]; - struct { - struct glamor_pixmap_private *source_priv; - PicturePtr source; - }; - }; - - union { - float mask_solid_color[4]; - struct { - struct glamor_pixmap_private *mask_priv; - PicturePtr mask; - }; - }; + GLuint prog; + GLint dest_to_dest_uniform_location; + GLint dest_to_source_uniform_location; + GLint dest_to_mask_uniform_location; + GLint source_uniform_location; + GLint mask_uniform_location; + GLint source_wh; + GLint mask_wh; + GLint source_repeat_mode; + GLint mask_repeat_mode; + union { + float source_solid_color[4]; + struct { + struct glamor_pixmap_private *source_priv; + PicturePtr source; + }; + }; + + union { + float mask_solid_color[4]; + struct { + struct glamor_pixmap_private *mask_priv; + PicturePtr mask; + }; + }; } glamor_composite_shader; enum shader_source { - SHADER_SOURCE_SOLID, - SHADER_SOURCE_TEXTURE, - SHADER_SOURCE_TEXTURE_ALPHA, - SHADER_SOURCE_COUNT, + SHADER_SOURCE_SOLID, + SHADER_SOURCE_TEXTURE, + SHADER_SOURCE_TEXTURE_ALPHA, + SHADER_SOURCE_COUNT, }; enum shader_mask { - SHADER_MASK_NONE, - SHADER_MASK_SOLID, - SHADER_MASK_TEXTURE, - SHADER_MASK_TEXTURE_ALPHA, - SHADER_MASK_COUNT, + SHADER_MASK_NONE, + SHADER_MASK_SOLID, + SHADER_MASK_TEXTURE, + SHADER_MASK_TEXTURE_ALPHA, + SHADER_MASK_COUNT, }; enum shader_in { - SHADER_IN_SOURCE_ONLY, - SHADER_IN_NORMAL, - SHADER_IN_CA_SOURCE, - SHADER_IN_CA_ALPHA, - SHADER_IN_COUNT, + SHADER_IN_SOURCE_ONLY, + SHADER_IN_NORMAL, + SHADER_IN_CA_SOURCE, + SHADER_IN_CA_ALPHA, + SHADER_IN_COUNT, }; struct shader_key { - enum shader_source source; - enum shader_mask mask; - enum shader_in in; + enum shader_source source; + enum shader_mask mask; + enum shader_in in; }; struct blendinfo { - Bool dest_alpha; - Bool source_alpha; - GLenum source_blend; - GLenum dest_blend; + Bool dest_alpha; + Bool source_alpha; + GLenum source_blend; + GLenum dest_blend; }; typedef struct { - INT16 x_src; - INT16 y_src; - INT16 x_mask; - INT16 y_mask; - INT16 x_dst; - INT16 y_dst; - INT16 width; - INT16 height; + INT16 x_src; + INT16 y_src; + INT16 x_mask; + INT16 y_mask; + INT16 x_dst; + INT16 y_dst; + INT16 width; + INT16 height; } glamor_composite_rect_t; - enum glamor_vertex_type { - GLAMOR_VERTEX_POS, - GLAMOR_VERTEX_SOURCE, - GLAMOR_VERTEX_MASK + GLAMOR_VERTEX_POS, + GLAMOR_VERTEX_SOURCE, + GLAMOR_VERTEX_MASK }; - enum gradient_shader { - SHADER_GRADIENT_LINEAR, - SHADER_GRADIENT_RADIAL, - SHADER_GRADIENT_CONICAL, - SHADER_GRADIENT_COUNT, + SHADER_GRADIENT_LINEAR, + SHADER_GRADIENT_RADIAL, + SHADER_GRADIENT_CONICAL, + SHADER_GRADIENT_COUNT, }; enum gradient_shader_prog { - SHADER_GRADIENT_VS_PROG, - SHADER_GRADIENT_FS_MAIN_PROG, - SHADER_GRADIENT_FS_GETCOLOR_PROG, - SHADER_GRADIENT_PROG_COUNT, + SHADER_GRADIENT_VS_PROG, + SHADER_GRADIENT_FS_MAIN_PROG, + SHADER_GRADIENT_FS_GETCOLOR_PROG, + SHADER_GRADIENT_PROG_COUNT, }; struct glamor_screen_private; struct glamor_pixmap_private; enum glamor_gl_flavor { - GLAMOR_GL_DESKTOP, // OPENGL API - GLAMOR_GL_ES2 // OPENGL ES2.0 API + GLAMOR_GL_DESKTOP, // OPENGL API + GLAMOR_GL_ES2 // OPENGL ES2.0 API }; #define GLAMOR_CREATE_PIXMAP_CPU 0x100 @@ -194,34 +172,34 @@ enum glamor_gl_flavor { #define GLAMOR_COMPOSITE_VBO_VERT_CNT (64*1024) typedef struct { - PicturePtr picture; /* Where the glyphs of the cache are stored */ - GlyphPtr *glyphs; - uint16_t count; - uint16_t evict; + PicturePtr picture; /* Where the glyphs of the cache are stored */ + GlyphPtr *glyphs; + uint16_t count; + uint16_t evict; } glamor_glyph_cache_t; #include "glamor_gl_dispatch.h" -struct glamor_saved_procs { - CloseScreenProcPtr close_screen; - CreateGCProcPtr create_gc; - CreatePixmapProcPtr create_pixmap; - DestroyPixmapProcPtr destroy_pixmap; - GetSpansProcPtr get_spans; - GetImageProcPtr get_image; - CompositeProcPtr composite; - CompositeRectsProcPtr composite_rects; - TrapezoidsProcPtr trapezoids; - GlyphsProcPtr glyphs; - ChangeWindowAttributesProcPtr change_window_attributes; - CopyWindowProcPtr copy_window; - BitmapToRegionProcPtr bitmap_to_region; - TrianglesProcPtr triangles; - AddTrapsProcPtr addtraps; - CreatePictureProcPtr create_picture; - DestroyPictureProcPtr destroy_picture; - UnrealizeGlyphProcPtr unrealize_glyph; - SetWindowPixmapProcPtr set_window_pixmap; +struct glamor_saved_procs { + CloseScreenProcPtr close_screen; + CreateGCProcPtr create_gc; + CreatePixmapProcPtr create_pixmap; + DestroyPixmapProcPtr destroy_pixmap; + GetSpansProcPtr get_spans; + GetImageProcPtr get_image; + CompositeProcPtr composite; + CompositeRectsProcPtr composite_rects; + TrapezoidsProcPtr trapezoids; + GlyphsProcPtr glyphs; + ChangeWindowAttributesProcPtr change_window_attributes; + CopyWindowProcPtr copy_window; + BitmapToRegionProcPtr bitmap_to_region; + TrianglesProcPtr triangles; + AddTrapsProcPtr addtraps; + CreatePictureProcPtr create_picture; + DestroyPictureProcPtr destroy_picture; + UnrealizeGlyphProcPtr unrealize_glyph; + SetWindowPixmapProcPtr set_window_pixmap; }; #ifdef GLAMOR_GLES2 @@ -242,79 +220,80 @@ struct glamor_saved_procs { #define RENDER_IDEL_MAX 32 typedef struct glamor_screen_private { - struct glamor_gl_dispatch _dispatch; - int yInverted; - unsigned int tick; - enum glamor_gl_flavor gl_flavor; - int has_pack_invert; - int has_fbo_blit; - int max_fbo_size; - - struct xorg_list fbo_cache[CACHE_FORMAT_COUNT][CACHE_BUCKET_WCOUNT][CACHE_BUCKET_HCOUNT]; - unsigned long fbo_cache_watermark; - - /* glamor_solid */ - GLint solid_prog; - GLint solid_color_uniform_location; - - /* vertext/elment_index buffer object for render */ - GLuint vbo, ebo; - int vbo_offset; - int vbo_size; - char *vb; - int vb_stride; - Bool has_source_coords, has_mask_coords; - int render_nr_verts; - glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT] - [SHADER_MASK_COUNT] - [SHADER_IN_COUNT]; - glamor_glyph_cache_t glyphCaches[GLAMOR_NUM_GLYPH_CACHE_FORMATS]; - Bool glyph_cache_initialized; - - /* shaders to restore a texture to another texture.*/ - GLint finish_access_prog[2]; - GLint finish_access_revert[2]; - GLint finish_access_swap_rb[2]; - - /* glamor_tile */ - GLint tile_prog; - GLint tile_wh; - - /* glamor gradient, 0 for small nstops, 1 for - large nstops and 2 for dynamic generate. */ - GLint gradient_prog[SHADER_GRADIENT_COUNT][3]; - GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; - int linear_max_nstops; - GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; - int radial_max_nstops; - - /* glamor trapezoid shader. */ - GLint trapezoid_prog; - - /* glamor_putimage */ - GLint put_image_xybitmap_prog; - GLint put_image_xybitmap_fg_uniform_location; - GLint put_image_xybitmap_bg_uniform_location; - - PixmapPtr *back_pixmap; - int screen_fbo; - struct glamor_saved_procs saved_procs; - char delayed_fallback_string[GLAMOR_DELAYED_STRING_MAX + 1]; - int delayed_fallback_pending; - int flags; - int state; - unsigned int render_idle_cnt; - ScreenPtr screen; - int dri3_enabled; - - /* xv */ - GLint xv_prog; + struct glamor_gl_dispatch _dispatch; + int yInverted; + unsigned int tick; + enum glamor_gl_flavor gl_flavor; + int has_pack_invert; + int has_fbo_blit; + int max_fbo_size; + + struct xorg_list + fbo_cache[CACHE_FORMAT_COUNT][CACHE_BUCKET_WCOUNT][CACHE_BUCKET_HCOUNT]; + unsigned long fbo_cache_watermark; + + /* glamor_solid */ + GLint solid_prog; + GLint solid_color_uniform_location; + + /* vertext/elment_index buffer object for render */ + GLuint vbo, ebo; + int vbo_offset; + int vbo_size; + char *vb; + int vb_stride; + Bool has_source_coords, has_mask_coords; + int render_nr_verts; + glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT] + [SHADER_MASK_COUNT] + [SHADER_IN_COUNT]; + glamor_glyph_cache_t glyphCaches[GLAMOR_NUM_GLYPH_CACHE_FORMATS]; + Bool glyph_cache_initialized; + + /* shaders to restore a texture to another texture. */ + GLint finish_access_prog[2]; + GLint finish_access_revert[2]; + GLint finish_access_swap_rb[2]; + + /* glamor_tile */ + GLint tile_prog; + GLint tile_wh; + + /* glamor gradient, 0 for small nstops, 1 for + large nstops and 2 for dynamic generate. */ + GLint gradient_prog[SHADER_GRADIENT_COUNT][3]; + GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; + int linear_max_nstops; + GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; + int radial_max_nstops; + + /* glamor trapezoid shader. */ + GLint trapezoid_prog; + + /* glamor_putimage */ + GLint put_image_xybitmap_prog; + GLint put_image_xybitmap_fg_uniform_location; + GLint put_image_xybitmap_bg_uniform_location; + + PixmapPtr *back_pixmap; + int screen_fbo; + struct glamor_saved_procs saved_procs; + char delayed_fallback_string[GLAMOR_DELAYED_STRING_MAX + 1]; + int delayed_fallback_pending; + int flags; + int state; + unsigned int render_idle_cnt; + ScreenPtr screen; + int dri3_enabled; + + /* xv */ + GLint xv_prog; } glamor_screen_private; typedef enum glamor_access { - GLAMOR_ACCESS_RO, - GLAMOR_ACCESS_RW, - GLAMOR_ACCESS_WO, + GLAMOR_ACCESS_RO, + GLAMOR_ACCESS_RW, + GLAMOR_ACCESS_WO, } glamor_access_t; #define GLAMOR_FBO_NORMAL 1 @@ -335,17 +314,17 @@ typedef enum glamor_access { * @glamor_priv: point to glamor private data. */ typedef struct glamor_pixmap_fbo { - struct xorg_list list; - unsigned int expire; - unsigned char pbo_valid; - GLuint tex; - GLuint fb; - GLuint pbo; - int width; - int height; - GLenum format; - GLenum type; - glamor_screen_private *glamor_priv; + struct xorg_list list; + unsigned int expire; + unsigned char pbo_valid; + GLuint tex; + GLuint fb; + GLuint pbo; + int width; + int height; + GLenum format; + GLenum type; + glamor_screen_private *glamor_priv; } glamor_pixmap_fbo; /* @@ -414,9 +393,9 @@ typedef struct glamor_pixmap_fbo { * **/ -typedef struct glamor_pixmap_clipped_regions{ - int block_idx; - RegionPtr region; +typedef struct glamor_pixmap_clipped_regions { + int block_idx; + RegionPtr region; } glamor_pixmap_clipped_regions; #define SET_PIXMAP_FBO_CURRENT(priv, idx) \ @@ -428,16 +407,16 @@ typedef struct glamor_pixmap_clipped_regions{ } while(0) typedef struct glamor_pixmap_private_base { - glamor_pixmap_type_t type; - unsigned char gl_fbo:2; - unsigned char is_picture:1; - unsigned char gl_tex:1; - glamor_pixmap_fbo *fbo; - PixmapPtr pixmap; - int drm_stride; - glamor_screen_private *glamor_priv; - PicturePtr picture; -}glamor_pixmap_private_base_t; + glamor_pixmap_type_t type; + unsigned char gl_fbo:2; + unsigned char is_picture:1; + unsigned char gl_tex:1; + glamor_pixmap_fbo *fbo; + PixmapPtr pixmap; + int drm_stride; + glamor_screen_private *glamor_priv; + PicturePtr picture; +} glamor_pixmap_private_base_t; /* * @base.fbo: current fbo. @@ -452,39 +431,39 @@ typedef struct glamor_pixmap_private_base { * **/ typedef struct glamor_pixmap_private_large { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - }; - BoxRec box; - int block_w; - int block_h; - int block_wcnt; - int block_hcnt; - int nbox; - BoxPtr box_array; - glamor_pixmap_fbo **fbo_array; -}glamor_pixmap_private_large_t; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + }; + BoxRec box; + int block_w; + int block_h; + int block_wcnt; + int block_hcnt; + int nbox; + BoxPtr box_array; + glamor_pixmap_fbo **fbo_array; +} glamor_pixmap_private_large_t; /* * @box: the relative coords in the corresponding fbo. */ typedef struct glamor_pixmap_private_atlas { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - }; - BoxRec box; -}glamor_pixmap_private_atlas_t; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + }; + BoxRec box; +} glamor_pixmap_private_atlas_t; typedef struct glamor_pixmap_private { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - glamor_pixmap_private_large_t large; - glamor_pixmap_private_atlas_t atlas; - }; -}glamor_pixmap_private; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + glamor_pixmap_private_large_t large; + glamor_pixmap_private_atlas_t atlas; + }; +} glamor_pixmap_private; /* * Pixmap dynamic status, used by dynamic upload feature. @@ -496,10 +475,10 @@ typedef struct glamor_pixmap_private { * * */ typedef enum glamor_pixmap_status { - GLAMOR_NONE, - GLAMOR_UPLOAD_PENDING, - GLAMOR_UPLOAD_DONE, - GLAMOR_UPLOAD_FAILED + GLAMOR_NONE, + GLAMOR_UPLOAD_PENDING, + GLAMOR_UPLOAD_DONE, + GLAMOR_UPLOAD_FAILED } glamor_pixmap_status_t; extern DevPrivateKey glamor_screen_private_key; @@ -507,33 +486,28 @@ extern DevPrivateKey glamor_pixmap_private_key; static inline glamor_screen_private * glamor_get_screen_private(ScreenPtr screen) { - return (glamor_screen_private *) - dixLookupPrivate(&screen->devPrivates, - glamor_screen_private_key); + return (glamor_screen_private *) + dixLookupPrivate(&screen->devPrivates, glamor_screen_private_key); } static inline void glamor_set_screen_private(ScreenPtr screen, glamor_screen_private *priv) { - dixSetPrivate(&screen->devPrivates, - glamor_screen_private_key, - priv); + dixSetPrivate(&screen->devPrivates, glamor_screen_private_key, priv); } - - static inline glamor_pixmap_private * glamor_get_pixmap_private(PixmapPtr pixmap) { - glamor_pixmap_private *priv; - priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - if (!priv) { - glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); - priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - } - return priv; + glamor_pixmap_private *priv; + + priv = dixLookupPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); + if (!priv) { + glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); + priv = dixLookupPrivate(&pixmap->devPrivates, + glamor_pixmap_private_key); + } + return priv; } void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); @@ -545,8 +519,8 @@ void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); static inline Bool glamor_pm_is_solid(DrawablePtr drawable, unsigned long planemask) { - return (planemask & FbFullMask(drawable->depth)) == - FbFullMask(drawable->depth); + return (planemask & FbFullMask(drawable->depth)) == + FbFullMask(drawable->depth); } extern int glamor_debug_level; @@ -556,12 +530,15 @@ PixmapPtr glamor_get_drawable_pixmap(DrawablePtr drawable); Bool glamor_destroy_pixmap(PixmapPtr pixmap); -glamor_pixmap_fbo* glamor_pixmap_detach_fbo(glamor_pixmap_private *pixmap_priv); +glamor_pixmap_fbo *glamor_pixmap_detach_fbo(glamor_pixmap_private * + pixmap_priv); void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo); -glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, GLint tex, int flag); -glamor_pixmap_fbo * glamor_create_fbo(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag); +glamor_pixmap_fbo *glamor_create_fbo_from_tex(glamor_screen_private * + glamor_priv, int w, int h, + GLenum format, GLint tex, + int flag); +glamor_pixmap_fbo *glamor_create_fbo(glamor_screen_private *glamor_priv, int w, + int h, GLenum format, int flag); void glamor_destroy_fbo(glamor_pixmap_fbo *fbo); void glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv); void glamor_purge_fbo(glamor_pixmap_fbo *fbo); @@ -571,23 +548,23 @@ void glamor_fini_pixmap_fbo(ScreenPtr screen); Bool glamor_pixmap_fbo_fixup(ScreenPtr screen, PixmapPtr pixmap); void glamor_fbo_expire(glamor_screen_private *glamor_priv); -glamor_pixmap_fbo * -glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, glamor_pixmap_private *); +glamor_pixmap_fbo *glamor_create_fbo_array(glamor_screen_private *glamor_priv, + int w, int h, GLenum format, + int flag, int block_w, int block_h, + glamor_pixmap_private *); /* glamor_copyarea.c */ RegionPtr + glamor_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc, - int srcx, int srcy, int width, int height, int dstx, - int dsty); + int srcx, int srcy, int width, int height, int dstx, int dsty); void glamor_copy_n_to_n(DrawablePtr src, DrawablePtr dst, GCPtr gc, - BoxPtr box, int nbox, int dx, int dy, Bool reverse, - Bool upsidedown, Pixel bitplane, void *closure); + BoxPtr box, int nbox, int dx, int dy, Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure); /* glamor_copywindow.c */ void glamor_copy_window(WindowPtr win, DDXPointRec old_origin, - RegionPtr src_region); + RegionPtr src_region); /* glamor_core.c */ Bool glamor_prepare_access(DrawablePtr drawable, glamor_access_t access); @@ -600,36 +577,34 @@ void glamor_init_finish_access_shaders(ScreenPtr screen); void glamor_fini_finish_access_shaders(ScreenPtr screen); const Bool glamor_get_drawable_location(const DrawablePtr drawable); void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, - int *x, int *y); + int *x, int *y); Bool glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel, unsigned long bg_pixel, - int stipple_x, int stipple_y); -GLint glamor_compile_glsl_prog(glamor_gl_dispatch * dispatch, GLenum type, - const char *source); -void glamor_link_glsl_prog(glamor_gl_dispatch * dispatch, GLint prog); + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel, unsigned long bg_pixel, + int stipple_x, int stipple_y); +GLint glamor_compile_glsl_prog(glamor_gl_dispatch *dispatch, GLenum type, + const char *source); +void glamor_link_glsl_prog(glamor_gl_dispatch *dispatch, GLint prog); void glamor_get_color_4f_from_pixel(PixmapPtr pixmap, - unsigned long fg_pixel, - GLfloat * color); + unsigned long fg_pixel, GLfloat *color); int glamor_set_destination_pixmap(PixmapPtr pixmap); -int glamor_set_destination_pixmap_priv(glamor_pixmap_private * - pixmap_priv); +int glamor_set_destination_pixmap_priv(glamor_pixmap_private *pixmap_priv); void glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *, int, int, int, int); /* nc means no check. caller must ensure this pixmap has valid fbo. * usually use the GLAMOR_PIXMAP_PRIV_HAS_FBO firstly. * */ -void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * - pixmap_priv); +void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private *pixmap_priv); -glamor_pixmap_fbo * -glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLenum format, - GLenum type, int no_alpha, int revert, int swap_rb); +glamor_pixmap_fbo *glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, + int y, int w, int h, + GLenum format, GLenum type, + int no_alpha, int revert, + int swap_rb); -Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, - unsigned char alu); +Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, unsigned char alu); Bool glamor_set_planemask(PixmapPtr pixmap, unsigned long planemask); Bool glamor_change_window_attributes(WindowPtr pWin, unsigned long mask); RegionPtr glamor_bitmap_to_region(PixmapPtr pixmap); @@ -640,107 +615,88 @@ int glamor_gl_get_version(void); ((major) * 256) \ + ((minor) * 1)) - - - /* glamor_fill.c */ Bool glamor_fill(DrawablePtr drawable, - GCPtr gc, int x, int y, int width, int height, Bool fallback); + GCPtr gc, int x, int y, int width, int height, Bool fallback); Bool glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel); -Bool -glamor_solid_boxes(PixmapPtr pixmap, - BoxPtr box, int nbox, - unsigned long fg_pixel); + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel); +Bool glamor_solid_boxes(PixmapPtr pixmap, + BoxPtr box, int nbox, unsigned long fg_pixel); /* glamor_fillspans.c */ void glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted); + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted); void glamor_init_solid_shader(ScreenPtr screen); void glamor_fini_solid_shader(ScreenPtr screen); /* glamor_getspans.c */ -void - -glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, - int *widths, int nspans, char *dst_start); +void glamor_get_spans(DrawablePtr drawable, + int wmax, DDXPointPtr points, int *widths, + int nspans, char *dst_start); /* glamor_glyphs.c */ void glamor_glyphs_fini(ScreenPtr screen); void glamor_glyphs(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, int nlist, GlyphListPtr list, - GlyphPtr * glyphs); + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr *glyphs); /* glamor_setspans.c */ void glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted); + DDXPointPtr points, int *widths, int n, int sorted); /* glamor_polyfillrect.c */ -void -glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect); +void glamor_poly_fill_rect(DrawablePtr drawable, + GCPtr gc, int nrect, xRectangle *prect); /* glamor_polylines.c */ -void - -glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points); +void glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, + DDXPointPtr points); /* glamor_putimage.c */ -void - -glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int leftPad, int format, char *bits); +void glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, + int w, int h, int leftPad, int format, char *bits); void glamor_init_putimage_shaders(ScreenPtr screen); void glamor_fini_putimage_shaders(ScreenPtr screen); /* glamor_render.c */ -Bool -glamor_composite_clipped_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *soruce_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - RegionPtr region, - int x_source, - int y_source, - int x_mask, - int y_mask, - int x_dest, - int y_dest); +Bool glamor_composite_clipped_region(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *soruce_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, + int x_source, + int y_source, + int x_mask, int y_mask, + int x_dest, int y_dest); void glamor_composite(CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); void glamor_init_composite_shaders(ScreenPtr screen); void glamor_fini_composite_shaders(ScreenPtr screen); void glamor_composite_glyph_rects(CARD8 op, - PicturePtr src, PicturePtr mask, - PicturePtr dst, int nrect, - glamor_composite_rect_t * rects); -void glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects); + PicturePtr src, PicturePtr mask, + PicturePtr dst, int nrect, + glamor_composite_rect_t *rects); +void glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects); void glamor_init_trapezoid_shader(ScreenPtr screen); void glamor_fini_trapezoid_shader(ScreenPtr screen); PicturePtr glamor_convert_gradient_picture(ScreenPtr screen, @@ -752,19 +708,18 @@ Bool glamor_composite_choose_shader(CARD8 op, PicturePtr source, PicturePtr mask, PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, struct shader_key *s_key, - glamor_composite_shader **shader, - struct blendinfo *op_info, + glamor_composite_shader ** shader, + struct blendinfo *op_info, PictFormatShort *psaved_source_format); -void -glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, - struct shader_key *key, - glamor_composite_shader *shader, - struct blendinfo *op_info); +void glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, + struct shader_key *key, + glamor_composite_shader *shader, + struct blendinfo *op_info); void glamor_setup_composite_vbo(ScreenPtr screen, int n_verts); void glamor_emit_composite_vert(ScreenPtr screen, @@ -774,15 +729,15 @@ void glamor_emit_composite_vert(ScreenPtr screen, /* glamor_trapezoid.c */ void glamor_trapezoids(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps); + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps); /* glamor_tile.c */ Bool glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - int tile_x, int tile_y); + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + int tile_x, int tile_y); void glamor_init_tile_shader(ScreenPtr screen); void glamor_fini_tile_shader(ScreenPtr screen); @@ -801,18 +756,17 @@ PicturePtr glamor_generate_radial_gradient_picture(ScreenPtr screen, PictFormatShort format); /* glamor_triangles.c */ -void - -glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris); +void glamor_triangles(CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris); /* glamor_pixmap.c */ void glamor_pixmap_init(ScreenPtr screen); void glamor_pixmap_fini(ScreenPtr screen); + /** * Download a pixmap's texture to cpu memory. If success, * One copy of current pixmap's texture will be put into @@ -822,13 +776,11 @@ void glamor_pixmap_fini(ScreenPtr screen); * gl_tex must be 1. Used by glamor_prepare_access. * */ -Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, - glamor_access_t access); - -void * -glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access); +Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access); +void *glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, int pbo, + glamor_access_t access); /** * Restore a pixmap's data which is downloaded by @@ -848,85 +800,81 @@ void glamor_restore_pixmap_to_texture(PixmapPtr pixmap); * the fbo has valid texture and attach to a valid fb. * If the fbo already has a valid glfbo then do nothing. */ -Bool -glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag); +Bool glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag); /** * Upload a pixmap to gl texture. Used by dynamic pixmap * uploading feature. The pixmap must be a software pixmap. * This function will change current FBO and current shaders. */ -enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr - pixmap); +enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr pixmap); -Bool -glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo); +Bool glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, + int pbo); -PixmapPtr -glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, - int w, int h, glamor_access_t access); -void -glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, - int w, int h, glamor_access_t access); +PixmapPtr glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access); +void glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access); glamor_pixmap_clipped_regions * -glamor_compute_clipped_regions(glamor_pixmap_private *priv, RegionPtr region, - int *clipped_nbox, int repeat_type, - int reverse, int upsidedown); +glamor_compute_clipped_regions(glamor_pixmap_private *priv, + RegionPtr region, int *clipped_nbox, + int repeat_type, int reverse, + int upsidedown); glamor_pixmap_clipped_regions * glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, - RegionPtr region, - int *n_region, - int inner_block_w, int inner_block_h, - int reverse, int upsidedown); + RegionPtr region, int *n_region, + int inner_block_w, int inner_block_h, + int reverse, int upsidedown); glamor_pixmap_clipped_regions * -glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pixman_transform *transform, - RegionPtr region, int *n_region, int dx, int dy, int repeat_type, - int reverse, int upsidedown); - -Bool -glamor_composite_largepixmap_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private * source_pixmap_priv, - glamor_pixmap_private * mask_pixmap_priv, - glamor_pixmap_private * dest_pixmap_priv, - RegionPtr region, Bool force_clip, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height); - -Bool -glamor_get_transform_block_size(struct pixman_transform *transform, - int block_w, int block_h, - int *transformed_block_w, - int *transformed_block_h); - -void -glamor_get_transform_extent_from_box(struct pixman_box32 *temp_box, - struct pixman_transform *transform); +glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, + struct pixman_transform *transform, + RegionPtr region, + int *n_region, int dx, int dy, + int repeat_type, int reverse, + int upsidedown); + +Bool glamor_composite_largepixmap_region(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, Bool force_clip, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height); + +Bool glamor_get_transform_block_size(struct pixman_transform *transform, + int block_w, int block_h, + int *transformed_block_w, + int *transformed_block_h); + +void glamor_get_transform_extent_from_box(struct pixman_box32 *temp_box, + struct pixman_transform *transform); /** * Upload a picture to gl texture. Similar to the * glamor_upload_pixmap_to_texture. Used in rendering. **/ -enum glamor_pixmap_status - glamor_upload_picture_to_texture(PicturePtr picture); +enum glamor_pixmap_status glamor_upload_picture_to_texture(PicturePtr picture); /** * Upload bits to a pixmap's texture. This function will * convert the bits to the specified format/type format * if the conversion is unavoidable. **/ -Bool glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, GLenum type, - int no_alpha, int revert, int swap_rb, void *bits); +Bool glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, + GLenum type, int no_alpha, int revert, + int swap_rb, void *bits); /** * Destroy all the resources allocated on the uploading @@ -938,72 +886,59 @@ int glamor_create_picture(PicturePtr picture); void glamor_set_window_pixmap(WindowPtr pWindow, PixmapPtr pPixmap); -Bool -glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access); +Bool glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access); void glamor_finish_access_picture(PicturePtr picture, glamor_access_t access); void glamor_destroy_picture(PicturePtr picture); /* fixup a fbo to the exact size as the pixmap. */ -Bool -glamor_fixup_pixmap_priv(ScreenPtr screen, glamor_pixmap_private *pixmap_priv); +Bool glamor_fixup_pixmap_priv(ScreenPtr screen, + glamor_pixmap_private *pixmap_priv); -void -glamor_picture_format_fixup(PicturePtr picture, - glamor_pixmap_private * pixmap_priv); +void glamor_picture_format_fixup(PicturePtr picture, + glamor_pixmap_private *pixmap_priv); -void -glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d); +void glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, + unsigned int format, unsigned long planeMask, char *d); -void -glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps); +void glamor_add_traps(PicturePtr pPicture, + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps); -RegionPtr -glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane); - -void -glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); - -void -glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); - -void -glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y); - -void -glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); - -void -glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg); - -void -glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); - -void -glamor_composite_rectangles(CARD8 op, - PicturePtr dst, - xRenderColor *color, - int num_rects, - xRectangle *rects); +RegionPtr glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, + int srcx, int srcy, int w, int h, + int dstx, int dsty, + unsigned long bitPlane); + +void glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase); + +void glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase); + +void glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, + DrawablePtr pDrawable, int w, int h, int x, int y); + +void glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, + DDXPointPtr ppt); + +void glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, + xSegment *pSeg); + +void glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, + DDXPointPtr ppt); + +void glamor_composite_rectangles(CARD8 op, + PicturePtr dst, + xRenderColor *color, + int num_rects, xRectangle *rects); /* glamor_xv */ typedef struct { - uint32_t transform_index; - uint32_t gamma; /* gamma value x 1000 */ + uint32_t transform_index; + uint32_t gamma; /* gamma value x 1000 */ int brightness; int saturation; int hue; @@ -1016,8 +951,8 @@ typedef struct { int src_w, src_h, dst_w, dst_h; int src_x, src_y, drw_x, drw_y; int w, h; - RegionRec clip; - PixmapPtr src_pix[3]; /* y, u, v for planar */ + RegionRec clip; + PixmapPtr src_pix[3]; /* y, u, v for planar */ int src_pix_w, src_pix_h; } glamor_port_private; @@ -1039,9 +974,9 @@ void glamor_fini_xv_shader(ScreenPtr screen); #define GLAMOR_TEXTURED_LARGE_PIXMAP 1 #define WALKAROUND_LARGE_TEXTURE_MAP #if 0 -#define MAX_FBO_SIZE 32 /* For test purpose only. */ +#define MAX_FBO_SIZE 32 /* For test purpose only. */ #endif //#define GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK #define GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK -#endif /* GLAMOR_PRIV_H */ +#endif /* GLAMOR_PRIV_H */ diff --git a/xorg-server/glamor/glamor_putimage.c b/xorg-server/glamor/glamor_putimage.c index 99f7ac6f5..6b25bec84 100644 --- a/xorg-server/glamor/glamor_putimage.c +++ b/xorg-server/glamor/glamor_putimage.c @@ -26,7 +26,6 @@ * */ - /** @file glamor_putaimge.c * * XPutImage implementation @@ -37,54 +36,61 @@ void glamor_init_putimage_shaders(ScreenPtr screen) { #if 0 - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - const char *xybitmap_vs = - "uniform float x_bias;\n" "uniform float x_scale;\n" - "uniform float y_bias;\n" "uniform float y_scale;\n" - "varying vec2 bitmap_coords;\n" "void main()\n" "{\n" - " gl_Position = vec4((gl_Vertex.x + x_bias) * x_scale,\n" - " (gl_Vertex.y + y_bias) * y_scale,\n" - " 0,\n" - " 1);\n" - " bitmap_coords = gl_MultiTexCoord0.xy;\n" "}\n"; - const char *xybitmap_fs = - "uniform vec4 fg, bg;\n" "varying vec2 bitmap_coords;\n" - "uniform sampler2D bitmap_sampler;\n" "void main()\n" "{\n" - " float bitmap_value = texture2D(bitmap_sampler,\n" - " bitmap_coords).x;\n" - " gl_FragColor = mix(bg, fg, bitmap_value);\n" "}\n"; - GLint fs_prog, vs_prog, prog; - GLint sampler_uniform_location; - - if (!GLEW_ARB_fragment_shader) - return; - - prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xybitmap_vs); - fs_prog = - glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xybitmap_fs); - dispatch->glAttachShader(prog, vs_prog); - dispatch->glAttachShader(prog, fs_prog); - glamor_link_glsl_prog(prog); - - dispatch->glUseProgram(prog); - sampler_uniform_location = - dispatch->glGetUniformLocation(prog, "bitmap_sampler"); - dispatch->glUniform1i(sampler_uniform_location, 0); - - glamor_priv->put_image_xybitmap_fg_uniform_location = - dispatch->glGetUniformLocation(prog, "fg"); - glamor_priv->put_image_xybitmap_bg_uniform_location = - dispatch->glGetUniformLocation(prog, "bg"); - glamor_get_transform_uniform_locations(prog, - &glamor_priv->put_image_xybitmap_transform); - glamor_priv->put_image_xybitmap_prog = prog; - dispatch->glUseProgram(0); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + const char *xybitmap_vs = + "uniform float x_bias;\n" + "uniform float x_scale;\n" + "uniform float y_bias;\n" + "uniform float y_scale;\n" + "varying vec2 bitmap_coords;\n" + "void main()\n" + "{\n" + " gl_Position = vec4((gl_Vertex.x + x_bias) * x_scale,\n" + " (gl_Vertex.y + y_bias) * y_scale,\n" + " 0,\n" + " 1);\n" + " bitmap_coords = gl_MultiTexCoord0.xy;\n" + "}\n"; + const char *xybitmap_fs = + "uniform vec4 fg, bg;\n" + "varying vec2 bitmap_coords;\n" + "uniform sampler2D bitmap_sampler;\n" + "void main()\n" + "{\n" + " float bitmap_value = texture2D(bitmap_sampler,\n" + " bitmap_coords).x;\n" + " gl_FragColor = mix(bg, fg, bitmap_value);\n" + "}\n"; + GLint fs_prog, vs_prog, prog; + GLint sampler_uniform_location; + + if (!GLEW_ARB_fragment_shader) + return; + + prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xybitmap_vs); + fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xybitmap_fs); + dispatch->glAttachShader(prog, vs_prog); + dispatch->glAttachShader(prog, fs_prog); + glamor_link_glsl_prog(prog); + + dispatch->glUseProgram(prog); + sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "bitmap_sampler"); + dispatch->glUniform1i(sampler_uniform_location, 0); + + glamor_priv->put_image_xybitmap_fg_uniform_location = + dispatch->glGetUniformLocation(prog, "fg"); + glamor_priv->put_image_xybitmap_bg_uniform_location = + dispatch->glGetUniformLocation(prog, "bg"); + glamor_get_transform_uniform_locations(prog, + &glamor_priv-> + put_image_xybitmap_transform); + glamor_priv->put_image_xybitmap_prog = prog; + dispatch->glUseProgram(0); #endif } - /* Do an XYBitmap putimage. The bits are byte-aligned rows of bitmap * data (where each row starts at a bit index of left_pad), and the * destination gets filled with the gc's fg color where the bitmap is set @@ -101,141 +107,136 @@ glamor_init_putimage_shaders(ScreenPtr screen) static int y_flip(PixmapPtr pixmap, int y) { - ScreenPtr screen = pixmap->drawable.pScreen; - PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); + ScreenPtr screen = pixmap->drawable.pScreen; + PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); - if (pixmap == screen_pixmap) - return (pixmap->drawable.height - 1) - y; - else - return y; + if (pixmap == screen_pixmap) + return (pixmap->drawable.height - 1) - y; + else + return y; } - static void glamor_put_image_xybitmap(DrawablePtr drawable, GCPtr gc, - int x, int y, int w, int h, int left_pad, - int image_format, char *bits) + int x, int y, int w, int h, int left_pad, + int image_format, char *bits) { - ScreenPtr screen = drawable->pScreen; - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - float fg[4], bg[4]; - GLuint tex; - unsigned int stride = PixmapBytePad(1, w + left_pad); - RegionPtr clip; - BoxPtr box; - int nbox; - float dest_coords[8]; - const float bitmap_coords[8] = { - 0.0, 0.0, - 1.0, 0.0, - 1.0, 1.0, - 0.0, 1.0, - }; - GLfloat xscale, yscale; - glamor_pixmap_private *pixmap_priv; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - pixmap_priv_get_scale(pixmap_priv, &xscale, &yscale); - - glamor_set_normalize_vcoords(xscale, yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, dest_coords); - - glamor_fallback("glamor_put_image_xybitmap: disabled\n"); - goto fail; - - if (glamor_priv->put_image_xybitmap_prog == 0) { - ErrorF("no program for xybitmap putimage\n"); - goto fail; - } - - glamor_set_alu(gc->alu); - if (!glamor_set_planemask(pixmap, gc->planemask)) - goto fail; - - dispatch->glUseProgram(glamor_priv->put_image_xybitmap_prog); - - glamor_get_color_4f_from_pixel(pixmap, gc->fgPixel, fg); - dispatch->glUniform4fv - (glamor_priv->put_image_xybitmap_fg_uniform_location, 1, fg); - glamor_get_color_4f_from_pixel(pixmap, gc->bgPixel, bg); - dispatch->glUniform4fv - (glamor_priv->put_image_xybitmap_bg_uniform_location, 1, bg); - - dispatch->glGenTextures(1, &tex); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glEnable(GL_TEXTURE_2D); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, stride * 8); - dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, left_pad); - dispatch->glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, - w, h, 0, GL_COLOR_INDEX, GL_BITMAP, bits); - dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - - /* Now that we've set up our bitmap texture and the shader, shove - * the destination rectangle through the cliprects and run the - * shader on the resulting fragments. - */ - dispatch->glVertexPointer(2, GL_FLOAT, 0, dest_coords); - dispatch->glEnableClientState(GL_VERTEX_ARRAY); - dispatch->glClientActiveTexture(GL_TEXTURE0); - dispatch->glTexCoordPointer(2, GL_FLOAT, 0, bitmap_coords); - dispatch->glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - dispatch->glEnable(GL_SCISSOR_TEST); - clip = fbGetCompositeClip(gc); - for (nbox = REGION_NUM_RECTS(clip), - box = REGION_RECTS(clip); nbox--; box++) { - int x1 = x; - int y1 = y; - int x2 = x + w; - int y2 = y + h; - - if (x1 < box->x1) - x1 = box->x1; - if (y1 < box->y1) - y1 = box->y1; - if (x2 > box->x2) - x2 = box->x2; - if (y2 > box->y2) - y2 = box->y2; - if (x1 >= x2 || y1 >= y2) - continue; - - dispatch->glScissor(box->x1, - y_flip(pixmap, box->y1), - box->x2 - box->x1, box->y2 - box->y1); - dispatch->glDrawArrays(GL_QUADS, 0, 4); - } - - dispatch->glDisable(GL_SCISSOR_TEST); - glamor_set_alu(GXcopy); - glamor_set_planemask(pixmap, ~0); - dispatch->glDeleteTextures(1, &tex); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glDisableClientState(GL_VERTEX_ARRAY); - dispatch->glDisableClientState(GL_TEXTURE_COORD_ARRAY); - return; - glamor_set_alu(GXcopy); - glamor_set_planemask(pixmap, ~0); - glamor_fallback(": to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); -fail: - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - fbPutImage(drawable, gc, 1, x, y, w, h, left_pad, XYBitmap, - bits); - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } + ScreenPtr screen = drawable->pScreen; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + float fg[4], bg[4]; + GLuint tex; + unsigned int stride = PixmapBytePad(1, w + left_pad); + RegionPtr clip; + BoxPtr box; + int nbox; + float dest_coords[8]; + + const float bitmap_coords[8] = { + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + }; + GLfloat xscale, yscale; + glamor_pixmap_private *pixmap_priv; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + pixmap_priv_get_scale(pixmap_priv, &xscale, &yscale); + + glamor_set_normalize_vcoords(xscale, yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, dest_coords); + + glamor_fallback("glamor_put_image_xybitmap: disabled\n"); + goto fail; + + if (glamor_priv->put_image_xybitmap_prog == 0) { + ErrorF("no program for xybitmap putimage\n"); + goto fail; + } + + glamor_set_alu(gc->alu); + if (!glamor_set_planemask(pixmap, gc->planemask)) + goto fail; + + dispatch->glUseProgram(glamor_priv->put_image_xybitmap_prog); + + glamor_get_color_4f_from_pixel(pixmap, gc->fgPixel, fg); + dispatch->glUniform4fv + (glamor_priv->put_image_xybitmap_fg_uniform_location, 1, fg); + glamor_get_color_4f_from_pixel(pixmap, gc->bgPixel, bg); + dispatch->glUniform4fv + (glamor_priv->put_image_xybitmap_bg_uniform_location, 1, bg); + + dispatch->glGenTextures(1, &tex); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, stride * 8); + dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, left_pad); + dispatch->glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, + w, h, 0, GL_COLOR_INDEX, GL_BITMAP, bits); + dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); + + /* Now that we've set up our bitmap texture and the shader, shove + * the destination rectangle through the cliprects and run the + * shader on the resulting fragments. + */ + dispatch->glVertexPointer(2, GL_FLOAT, 0, dest_coords); + dispatch->glEnableClientState(GL_VERTEX_ARRAY); + dispatch->glClientActiveTexture(GL_TEXTURE0); + dispatch->glTexCoordPointer(2, GL_FLOAT, 0, bitmap_coords); + dispatch->glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + dispatch->glEnable(GL_SCISSOR_TEST); + clip = fbGetCompositeClip(gc); + for (nbox = REGION_NUM_RECTS(clip), box = REGION_RECTS(clip); nbox--; box++) { + int x1 = x; + int y1 = y; + int x2 = x + w; + int y2 = y + h; + + if (x1 < box->x1) + x1 = box->x1; + if (y1 < box->y1) + y1 = box->y1; + if (x2 > box->x2) + x2 = box->x2; + if (y2 > box->y2) + y2 = box->y2; + if (x1 >= x2 || y1 >= y2) + continue; + + dispatch->glScissor(box->x1, + y_flip(pixmap, box->y1), + box->x2 - box->x1, box->y2 - box->y1); + dispatch->glDrawArrays(GL_QUADS, 0, 4); + } + + dispatch->glDisable(GL_SCISSOR_TEST); + glamor_set_alu(GXcopy); + glamor_set_planemask(pixmap, ~0); + dispatch->glDeleteTextures(1, &tex); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisableClientState(GL_VERTEX_ARRAY); + dispatch->glDisableClientState(GL_TEXTURE_COORD_ARRAY); + return; + glamor_set_alu(GXcopy); + glamor_set_planemask(pixmap, ~0); + glamor_fallback(": to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + fail: + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + fbPutImage(drawable, gc, 1, x, y, w, h, left_pad, XYBitmap, bits); + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } } #endif @@ -244,120 +245,120 @@ glamor_fini_putimage_shaders(ScreenPtr screen) { } - -static Bool +static Bool _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits, Bool fallback) + int w, int h, int left_pad, int image_format, char *bits, + Bool fallback) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - RegionPtr clip; - int x_off, y_off; - Bool ret = FALSE; - PixmapPtr temp_pixmap, sub_pixmap; - glamor_pixmap_private *temp_pixmap_priv; - BoxRec box; - - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - clip = fbGetCompositeClip(gc); - if (image_format == XYBitmap) { - assert(depth == 1); - goto fail; - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - glamor_fallback("has no fbo.\n"); - goto fail; - } - - if (image_format != ZPixmap) { - glamor_fallback("non-ZPixmap\n"); - goto fail; - } - - if (!glamor_set_planemask(pixmap, gc->planemask)) { - goto fail; - } - /* create a temporary pixmap and upload the bits to that - * pixmap, then apply clip copy it to the destination pixmap.*/ - box.x1 = x + drawable->x; - box.y1 = y + drawable->y; - box.x2 = x + w + drawable->x; - box.y2 = y + h + drawable->y; - - if ((clip != NULL && RegionContainsRect(clip, &box) != rgnIN) - || gc->alu != GXcopy) { - temp_pixmap = glamor_create_pixmap(drawable->pScreen, w, h, depth, 0); - if (temp_pixmap == NULL) - goto fail; - - temp_pixmap_priv = glamor_get_pixmap_private(temp_pixmap); - - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) { - temp_pixmap_priv->base.picture = pixmap_priv->base.picture; - temp_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; - } - - glamor_upload_sub_pixmap_to_texture(temp_pixmap, 0, 0, w, h, - pixmap->devKind, bits, 0); - - glamor_copy_area(&temp_pixmap->drawable, drawable, gc, 0, 0, w, h, x, y); - glamor_destroy_pixmap(temp_pixmap); - } else - glamor_upload_sub_pixmap_to_texture(pixmap, x + drawable->x + x_off, y + drawable->y + y_off, - w, h, PixmapBytePad(w, depth), bits, 0); - ret = TRUE; - goto done; - -fail: - glamor_set_planemask(pixmap, ~0); - - if (!fallback - && glamor_ddx_fallback_check_pixmap(&pixmap->drawable)) - goto done; - - glamor_fallback("to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - - sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, - y + y_off + drawable->y, w, h, - GLAMOR_ACCESS_RW); - if (sub_pixmap) { - if (clip != NULL) - pixman_region_translate (clip, -x - drawable->x, -y - drawable->y); - - fbPutImage(&sub_pixmap->drawable, gc, depth, 0, 0, w, h, - left_pad, image_format, bits); - - glamor_put_sub_pixmap(sub_pixmap, pixmap, - x + x_off + drawable->x, - y + y_off + drawable->y, - w, h, GLAMOR_ACCESS_RW); - if (clip != NULL) - pixman_region_translate (clip, x + drawable->x, y + drawable->y); - } else - fbPutImage(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits); - ret = TRUE; - -done: - return ret; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + RegionPtr clip; + int x_off, y_off; + Bool ret = FALSE; + PixmapPtr temp_pixmap, sub_pixmap; + glamor_pixmap_private *temp_pixmap_priv; + BoxRec box; + + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + clip = fbGetCompositeClip(gc); + if (image_format == XYBitmap) { + assert(depth == 1); + goto fail; + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + glamor_fallback("has no fbo.\n"); + goto fail; + } + + if (image_format != ZPixmap) { + glamor_fallback("non-ZPixmap\n"); + goto fail; + } + + if (!glamor_set_planemask(pixmap, gc->planemask)) { + goto fail; + } + /* create a temporary pixmap and upload the bits to that + * pixmap, then apply clip copy it to the destination pixmap.*/ + box.x1 = x + drawable->x; + box.y1 = y + drawable->y; + box.x2 = x + w + drawable->x; + box.y2 = y + h + drawable->y; + + if ((clip != NULL && RegionContainsRect(clip, &box) != rgnIN) + || gc->alu != GXcopy) { + temp_pixmap = glamor_create_pixmap(drawable->pScreen, w, h, depth, 0); + if (temp_pixmap == NULL) + goto fail; + + temp_pixmap_priv = glamor_get_pixmap_private(temp_pixmap); + + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) { + temp_pixmap_priv->base.picture = pixmap_priv->base.picture; + temp_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; + } + + glamor_upload_sub_pixmap_to_texture(temp_pixmap, 0, 0, w, h, + pixmap->devKind, bits, 0); + + glamor_copy_area(&temp_pixmap->drawable, drawable, gc, 0, 0, w, h, x, + y); + glamor_destroy_pixmap(temp_pixmap); + } + else + glamor_upload_sub_pixmap_to_texture(pixmap, x + drawable->x + x_off, + y + drawable->y + y_off, w, h, + PixmapBytePad(w, depth), bits, 0); + ret = TRUE; + goto done; + + fail: + glamor_set_planemask(pixmap, ~0); + + if (!fallback && glamor_ddx_fallback_check_pixmap(&pixmap->drawable)) + goto done; + + glamor_fallback("to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + + sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, + y + y_off + drawable->y, w, h, + GLAMOR_ACCESS_RW); + if (sub_pixmap) { + if (clip != NULL) + pixman_region_translate(clip, -x - drawable->x, -y - drawable->y); + + fbPutImage(&sub_pixmap->drawable, gc, depth, 0, 0, w, h, + left_pad, image_format, bits); + + glamor_put_sub_pixmap(sub_pixmap, pixmap, + x + x_off + drawable->x, + y + y_off + drawable->y, w, h, GLAMOR_ACCESS_RW); + if (clip != NULL) + pixman_region_translate(clip, x + drawable->x, y + drawable->y); + } + else + fbPutImage(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits); + ret = TRUE; + + done: + return ret; } void glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits) + int w, int h, int left_pad, int image_format, char *bits) { - _glamor_put_image(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits, TRUE); + _glamor_put_image(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits, TRUE); } Bool glamor_put_image_nf(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits) + int w, int h, int left_pad, int image_format, char *bits) { - return _glamor_put_image(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits, FALSE); + return _glamor_put_image(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits, FALSE); } - diff --git a/xorg-server/glamor/glamor_render.c b/xorg-server/glamor/glamor_render.c index 76a571f8b..4a3a97ccd 100644 --- a/xorg-server/glamor/glamor_render.c +++ b/xorg-server/glamor/glamor_render.c @@ -45,1425 +45,1428 @@ #endif static struct blendinfo composite_op_info[] = { - [PictOpClear] = {0, 0, GL_ZERO, GL_ZERO}, - [PictOpSrc] = {0, 0, GL_ONE, GL_ZERO}, - [PictOpDst] = {0, 0, GL_ZERO, GL_ONE}, - [PictOpOver] = {0, 1, GL_ONE, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpOverReverse] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ONE}, - [PictOpIn] = {1, 0, GL_DST_ALPHA, GL_ZERO}, - [PictOpInReverse] = {0, 1, GL_ZERO, GL_SRC_ALPHA}, - [PictOpOut] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ZERO}, - [PictOpOutReverse] = {0, 1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAtop] = {1, 1, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAtopReverse] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA}, - [PictOpXor] = - {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAdd] = {0, 0, GL_ONE, GL_ONE}, + [PictOpClear] = {0, 0, GL_ZERO, GL_ZERO}, + [PictOpSrc] = {0, 0, GL_ONE, GL_ZERO}, + [PictOpDst] = {0, 0, GL_ZERO, GL_ONE}, + [PictOpOver] = {0, 1, GL_ONE, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpOverReverse] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ONE}, + [PictOpIn] = {1, 0, GL_DST_ALPHA, GL_ZERO}, + [PictOpInReverse] = {0, 1, GL_ZERO, GL_SRC_ALPHA}, + [PictOpOut] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ZERO}, + [PictOpOutReverse] = {0, 1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAtop] = {1, 1, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAtopReverse] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA}, + [PictOpXor] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAdd] = {0, 0, GL_ONE, GL_ONE}, }; + #define RepeatFix 10 static GLuint -glamor_create_composite_fs(glamor_gl_dispatch * dispatch, - struct shader_key *key) +glamor_create_composite_fs(glamor_gl_dispatch *dispatch, + struct shader_key *key) { - const char *repeat_define = - "#define RepeatNone 0\n" - "#define RepeatNormal 1\n" - "#define RepeatPad 2\n" - "#define RepeatReflect 3\n" - "#define RepeatFix 10\n" - "uniform int source_repeat_mode;\n" - "uniform int mask_repeat_mode;\n"; - const char *relocate_texture = - GLAMOR_DEFAULT_PRECISION - "vec2 rel_tex_coord(vec2 texture, vec4 wh, int repeat) \n" - "{\n" - " vec2 rel_tex; \n" - " rel_tex = texture * wh.xy; \n" - " if (repeat == RepeatNone)\n" - " return rel_tex; \n" - " else if (repeat == RepeatNormal) \n" - " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n" - " else if(repeat == RepeatPad) { \n" - " if (rel_tex.x >= 1.0) rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n" - " else if(rel_tex.x < 0.0) rel_tex.x = 0.0; \n" - " if (rel_tex.y >= 1.0) rel_tex.y = 1.0 - wh.w * wh.y / 2.; \n" - " else if(rel_tex.y < 0.0) rel_tex.y = 0.0; \n" - " rel_tex = rel_tex / wh.xy; \n" - " } \n" - " else if(repeat == RepeatReflect) {\n" - " if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n" - " rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x))/wh.x;\n" - " else \n" - " rel_tex.x = fract(rel_tex.x)/wh.x;\n" - " if ((1.0 - mod(abs(floor(rel_tex.y)), 2.0)) < 0.001)\n" - " rel_tex.y = 2.0 - (1.0 - fract(rel_tex.y))/wh.y;\n" - " else \n" - " rel_tex.y = fract(rel_tex.y)/wh.y;\n" - " } \n" - " return rel_tex; \n" - "}\n"; - /* The texture and the pixmap size is not match eaxctly, so can't sample it directly. - * rel_sampler will recalculate the texture coords.*/ - const char *rel_sampler = - " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, int set_alpha)\n" - "{\n" - " tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n" - " if (repeat == RepeatFix) {\n" - " if (!(tex.x >= 0.0 && tex.x < 1.0 \n" - " && tex.y >= 0.0 && tex.y < 1.0))\n" - " return vec4(0.0, 0.0, 0.0, set_alpha);\n" - " tex = (fract(tex) / wh.xy);\n" - " }\n" - " if (set_alpha != 1)\n" - " return texture2D(tex_image, tex);\n" - " else\n" - " return vec4(texture2D(tex_image, tex).rgb, 1.0);\n" - "}\n"; - - const char *source_solid_fetch = - GLAMOR_DEFAULT_PRECISION - "uniform vec4 source;\n" - "vec4 get_source()\n" "{\n" " return source;\n" "}\n"; - const char *source_alpha_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture;\n" - "uniform sampler2D source_sampler;\n" - "uniform vec4 source_wh;" - "vec4 get_source()\n" - "{\n" - " if (source_repeat_mode < RepeatFix)\n" - " return texture2D(source_sampler, source_texture);\n" - " else \n" - " return rel_sampler(source_sampler, source_texture,\n" - " source_wh, source_repeat_mode, 0);\n" - "}\n"; - const char *source_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 source_texture;\n" - "uniform sampler2D source_sampler;\n" - "uniform vec4 source_wh;\n" - "vec4 get_source()\n" - "{\n" - " if (source_repeat_mode < RepeatFix) \n" - " return vec4(texture2D(source_sampler, source_texture).rgb, 1);\n" - " else \n" - " return rel_sampler(source_sampler, source_texture,\n" - " source_wh, source_repeat_mode, 1);\n" - "}\n"; - const char *mask_solid_fetch = - GLAMOR_DEFAULT_PRECISION "uniform vec4 mask;\n" - "vec4 get_mask()\n" "{\n" " return mask;\n" "}\n"; - const char *mask_alpha_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 mask_texture;\n" - "uniform sampler2D mask_sampler;\n" - "uniform vec4 mask_wh;\n" - "vec4 get_mask()\n" - "{\n" - " if (mask_repeat_mode < RepeatFix) \n" - " return texture2D(mask_sampler, mask_texture);\n" - " else \n" - " return rel_sampler(mask_sampler, mask_texture,\n" - " mask_wh, mask_repeat_mode, 0);\n" - "}\n"; - const char *mask_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 mask_texture;\n" - "uniform sampler2D mask_sampler;\n" - "uniform vec4 mask_wh;\n" - "vec4 get_mask()\n" - "{\n" - " if (mask_repeat_mode < RepeatFix) \n" - " return vec4(texture2D(mask_sampler, mask_texture).rgb, 1);\n" - " else \n" - " return rel_sampler(mask_sampler, mask_texture,\n" - " mask_wh, mask_repeat_mode, 1);\n" - "}\n"; - const char *in_source_only = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source();\n" "}\n"; - const char *in_normal = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source() * get_mask().a;\n" "}\n"; - const char *in_ca_source = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source() * get_mask();\n" "}\n"; - const char *in_ca_alpha = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source().a * get_mask();\n" "}\n"; - char *source; - const char *source_fetch; - const char *mask_fetch = ""; - const char *in; - GLuint prog; - - switch (key->source) { - case SHADER_SOURCE_SOLID: - source_fetch = source_solid_fetch; - break; - case SHADER_SOURCE_TEXTURE_ALPHA: - source_fetch = source_alpha_pixmap_fetch; - break; - case SHADER_SOURCE_TEXTURE: - source_fetch = source_pixmap_fetch; - break; - default: - FatalError("Bad composite shader source"); - } - - switch (key->mask) { - case SHADER_MASK_NONE: - break; - case SHADER_MASK_SOLID: - mask_fetch = mask_solid_fetch; - break; - case SHADER_MASK_TEXTURE_ALPHA: - mask_fetch = mask_alpha_pixmap_fetch; - break; - case SHADER_MASK_TEXTURE: - mask_fetch = mask_pixmap_fetch; - break; - default: - FatalError("Bad composite shader mask"); - } - - switch (key->in) { - case SHADER_IN_SOURCE_ONLY: - in = in_source_only; - break; - case SHADER_IN_NORMAL: - in = in_normal; - break; - case SHADER_IN_CA_SOURCE: - in = in_ca_source; - break; - case SHADER_IN_CA_ALPHA: - in = in_ca_alpha; - break; - default: - FatalError("Bad composite IN type"); - } - - XNFasprintf(&source, "%s%s%s%s%s%s", repeat_define, relocate_texture, rel_sampler,source_fetch, mask_fetch, in); - - - prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - return prog; + const char *repeat_define = + "#define RepeatNone 0\n" + "#define RepeatNormal 1\n" + "#define RepeatPad 2\n" + "#define RepeatReflect 3\n" + "#define RepeatFix 10\n" + "uniform int source_repeat_mode;\n" + "uniform int mask_repeat_mode;\n"; + const char *relocate_texture = + GLAMOR_DEFAULT_PRECISION + "vec2 rel_tex_coord(vec2 texture, vec4 wh, int repeat) \n" + "{\n" + " vec2 rel_tex; \n" + " rel_tex = texture * wh.xy; \n" + " if (repeat == RepeatNone)\n" + " return rel_tex; \n" + " else if (repeat == RepeatNormal) \n" + " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n" + " else if(repeat == RepeatPad) { \n" + " if (rel_tex.x >= 1.0) rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n" + " else if(rel_tex.x < 0.0) rel_tex.x = 0.0; \n" + " if (rel_tex.y >= 1.0) rel_tex.y = 1.0 - wh.w * wh.y / 2.; \n" + " else if(rel_tex.y < 0.0) rel_tex.y = 0.0; \n" + " rel_tex = rel_tex / wh.xy; \n" + " } \n" + " else if(repeat == RepeatReflect) {\n" + " if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n" + " rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x))/wh.x;\n" + " else \n" + " rel_tex.x = fract(rel_tex.x)/wh.x;\n" + " if ((1.0 - mod(abs(floor(rel_tex.y)), 2.0)) < 0.001)\n" + " rel_tex.y = 2.0 - (1.0 - fract(rel_tex.y))/wh.y;\n" + " else \n" + " rel_tex.y = fract(rel_tex.y)/wh.y;\n" + " } \n" + " return rel_tex; \n" + "}\n"; + /* The texture and the pixmap size is not match eaxctly, so can't sample it directly. + * rel_sampler will recalculate the texture coords.*/ + const char *rel_sampler = + " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, int set_alpha)\n" + "{\n" + " tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n" + " if (repeat == RepeatFix) {\n" + " if (!(tex.x >= 0.0 && tex.x < 1.0 \n" + " && tex.y >= 0.0 && tex.y < 1.0))\n" + " return vec4(0.0, 0.0, 0.0, set_alpha);\n" + " tex = (fract(tex) / wh.xy);\n" + " }\n" + " if (set_alpha != 1)\n" + " return texture2D(tex_image, tex);\n" + " else\n" + " return vec4(texture2D(tex_image, tex).rgb, 1.0);\n" + "}\n"; + + const char *source_solid_fetch = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 source;\n" + "vec4 get_source()\n" + "{\n" + " return source;\n" + "}\n"; + const char *source_alpha_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D source_sampler;\n" + "uniform vec4 source_wh;" + "vec4 get_source()\n" + "{\n" + " if (source_repeat_mode < RepeatFix)\n" + " return texture2D(source_sampler, source_texture);\n" + " else \n" + " return rel_sampler(source_sampler, source_texture,\n" + " source_wh, source_repeat_mode, 0);\n" + "}\n"; + const char *source_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D source_sampler;\n" + "uniform vec4 source_wh;\n" + "vec4 get_source()\n" + "{\n" + " if (source_repeat_mode < RepeatFix) \n" + " return vec4(texture2D(source_sampler, source_texture).rgb, 1);\n" + " else \n" + " return rel_sampler(source_sampler, source_texture,\n" + " source_wh, source_repeat_mode, 1);\n" + "}\n"; + const char *mask_solid_fetch = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 mask;\n" + "vec4 get_mask()\n" + "{\n" + " return mask;\n" + "}\n"; + const char *mask_alpha_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 mask_texture;\n" + "uniform sampler2D mask_sampler;\n" + "uniform vec4 mask_wh;\n" + "vec4 get_mask()\n" + "{\n" + " if (mask_repeat_mode < RepeatFix) \n" + " return texture2D(mask_sampler, mask_texture);\n" + " else \n" + " return rel_sampler(mask_sampler, mask_texture,\n" + " mask_wh, mask_repeat_mode, 0);\n" + "}\n"; + const char *mask_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 mask_texture;\n" + "uniform sampler2D mask_sampler;\n" + "uniform vec4 mask_wh;\n" + "vec4 get_mask()\n" + "{\n" + " if (mask_repeat_mode < RepeatFix) \n" + " return vec4(texture2D(mask_sampler, mask_texture).rgb, 1);\n" + " else \n" + " return rel_sampler(mask_sampler, mask_texture,\n" + " mask_wh, mask_repeat_mode, 1);\n" + "}\n"; + const char *in_source_only = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source();\n" + "}\n"; + const char *in_normal = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source() * get_mask().a;\n" + "}\n"; + const char *in_ca_source = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source() * get_mask();\n" + "}\n"; + const char *in_ca_alpha = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source().a * get_mask();\n" + "}\n"; + char *source; + const char *source_fetch; + const char *mask_fetch = ""; + const char *in; + GLuint prog; + + switch (key->source) { + case SHADER_SOURCE_SOLID: + source_fetch = source_solid_fetch; + break; + case SHADER_SOURCE_TEXTURE_ALPHA: + source_fetch = source_alpha_pixmap_fetch; + break; + case SHADER_SOURCE_TEXTURE: + source_fetch = source_pixmap_fetch; + break; + default: + FatalError("Bad composite shader source"); + } + + switch (key->mask) { + case SHADER_MASK_NONE: + break; + case SHADER_MASK_SOLID: + mask_fetch = mask_solid_fetch; + break; + case SHADER_MASK_TEXTURE_ALPHA: + mask_fetch = mask_alpha_pixmap_fetch; + break; + case SHADER_MASK_TEXTURE: + mask_fetch = mask_pixmap_fetch; + break; + default: + FatalError("Bad composite shader mask"); + } + + switch (key->in) { + case SHADER_IN_SOURCE_ONLY: + in = in_source_only; + break; + case SHADER_IN_NORMAL: + in = in_normal; + break; + case SHADER_IN_CA_SOURCE: + in = in_ca_source; + break; + case SHADER_IN_CA_ALPHA: + in = in_ca_alpha; + break; + default: + FatalError("Bad composite IN type"); + } + + XNFasprintf(&source, "%s%s%s%s%s%s", repeat_define, relocate_texture, + rel_sampler, source_fetch, mask_fetch, in); + + prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, source); + free(source); + + return prog; } static GLuint -glamor_create_composite_vs(glamor_gl_dispatch * dispatch, - struct shader_key *key) +glamor_create_composite_vs(glamor_gl_dispatch *dispatch, + struct shader_key *key) { - const char *main_opening = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "attribute vec4 v_texcoord1;\n" - "varying vec2 source_texture;\n" - "varying vec2 mask_texture;\n" - "void main()\n" "{\n" " gl_Position = v_position;\n"; - const char *source_coords = - " source_texture = v_texcoord0.xy;\n"; - const char *mask_coords = " mask_texture = v_texcoord1.xy;\n"; - const char *main_closing = "}\n"; - const char *source_coords_setup = ""; - const char *mask_coords_setup = ""; - char *source; - GLuint prog; - - if (key->source != SHADER_SOURCE_SOLID) - source_coords_setup = source_coords; - - if (key->mask != SHADER_MASK_NONE - && key->mask != SHADER_MASK_SOLID) - mask_coords_setup = mask_coords; - - XNFasprintf(&source, - "%s%s%s%s", - main_opening, - source_coords_setup, mask_coords_setup, main_closing); - - prog = - glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, source); - free(source); - - return prog; + const char *main_opening = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "attribute vec4 v_texcoord1;\n" + "varying vec2 source_texture;\n" + "varying vec2 mask_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n"; + const char *source_coords = " source_texture = v_texcoord0.xy;\n"; + const char *mask_coords = " mask_texture = v_texcoord1.xy;\n"; + const char *main_closing = "}\n"; + const char *source_coords_setup = ""; + const char *mask_coords_setup = ""; + char *source; + GLuint prog; + + if (key->source != SHADER_SOURCE_SOLID) + source_coords_setup = source_coords; + + if (key->mask != SHADER_MASK_NONE && key->mask != SHADER_MASK_SOLID) + mask_coords_setup = mask_coords; + + XNFasprintf(&source, + "%s%s%s%s", + main_opening, + source_coords_setup, mask_coords_setup, main_closing); + + prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, source); + free(source); + + return prog; } static void glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key, - glamor_composite_shader * shader) + glamor_composite_shader *shader) { - GLuint vs, fs, prog; - GLint source_sampler_uniform_location, - mask_sampler_uniform_location; - glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - vs = glamor_create_composite_vs(dispatch, key); - if (vs == 0) - goto out; - fs = glamor_create_composite_fs(dispatch, key); - if (fs == 0) - goto out; - - prog = dispatch->glCreateProgram(); - dispatch->glAttachShader(prog, vs); - dispatch->glAttachShader(prog, fs); - - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_POS, - "v_position"); - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_MASK, - "v_texcoord1"); - - glamor_link_glsl_prog(dispatch, prog); - - shader->prog = prog; - - dispatch->glUseProgram(prog); - - if (key->source == SHADER_SOURCE_SOLID) { - shader->source_uniform_location = - dispatch->glGetUniformLocation(prog, "source"); - } else { - source_sampler_uniform_location = - dispatch->glGetUniformLocation(prog, "source_sampler"); - dispatch->glUniform1i(source_sampler_uniform_location, 0); - shader->source_wh = dispatch->glGetUniformLocation(prog, "source_wh"); - shader->source_repeat_mode = dispatch->glGetUniformLocation(prog, "source_repeat_mode"); - } - - if (key->mask != SHADER_MASK_NONE) { - if (key->mask == SHADER_MASK_SOLID) { - shader->mask_uniform_location = - dispatch->glGetUniformLocation(prog, "mask"); - } else { - mask_sampler_uniform_location = - dispatch->glGetUniformLocation(prog, - "mask_sampler"); - dispatch->glUniform1i - (mask_sampler_uniform_location, 1); - shader->mask_wh = dispatch->glGetUniformLocation(prog, "mask_wh"); - shader->mask_repeat_mode = dispatch->glGetUniformLocation(prog, "mask_repeat_mode"); - } - } - -out: - glamor_put_dispatch(glamor_priv); + GLuint vs, fs, prog; + GLint source_sampler_uniform_location, mask_sampler_uniform_location; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + vs = glamor_create_composite_vs(dispatch, key); + if (vs == 0) + goto out; + fs = glamor_create_composite_fs(dispatch, key); + if (fs == 0) + goto out; + + prog = dispatch->glCreateProgram(); + dispatch->glAttachShader(prog, vs); + dispatch->glAttachShader(prog, fs); + + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_MASK, "v_texcoord1"); + + glamor_link_glsl_prog(dispatch, prog); + + shader->prog = prog; + + dispatch->glUseProgram(prog); + + if (key->source == SHADER_SOURCE_SOLID) { + shader->source_uniform_location = + dispatch->glGetUniformLocation(prog, "source"); + } + else { + source_sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "source_sampler"); + dispatch->glUniform1i(source_sampler_uniform_location, 0); + shader->source_wh = dispatch->glGetUniformLocation(prog, "source_wh"); + shader->source_repeat_mode = + dispatch->glGetUniformLocation(prog, "source_repeat_mode"); + } + + if (key->mask != SHADER_MASK_NONE) { + if (key->mask == SHADER_MASK_SOLID) { + shader->mask_uniform_location = + dispatch->glGetUniformLocation(prog, "mask"); + } + else { + mask_sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "mask_sampler"); + dispatch->glUniform1i(mask_sampler_uniform_location, 1); + shader->mask_wh = dispatch->glGetUniformLocation(prog, "mask_wh"); + shader->mask_repeat_mode = + dispatch->glGetUniformLocation(prog, "mask_repeat_mode"); + } + } + + out: + glamor_put_dispatch(glamor_priv); } static glamor_composite_shader * glamor_lookup_composite_shader(ScreenPtr screen, struct - shader_key - *key) + shader_key + *key) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_composite_shader *shader; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_composite_shader *shader; - shader = - &glamor_priv->composite_shader[key->source][key-> - mask][key->in]; - if (shader->prog == 0) - glamor_create_composite_shader(screen, key, shader); + shader = &glamor_priv->composite_shader[key->source][key->mask][key->in]; + if (shader->prog == 0) + glamor_create_composite_shader(screen, key, shader); - return shader; + return shader; } static void glamor_init_eb(unsigned short *eb, int vert_cnt) { - int i, j; - for(i = 0, j = 0; j < vert_cnt; i += 6, j += 4) - { - eb[i] = j; - eb[i + 1] = j + 1; - eb[i + 2] = j + 2; - eb[i + 3] = j; - eb[i + 4] = j + 2; - eb[i + 5] = j + 3; - } + int i, j; + + for (i = 0, j = 0; j < vert_cnt; i += 6, j += 4) { + eb[i] = j; + eb[i + 1] = j + 1; + eb[i + 2] = j + 2; + eb[i + 3] = j; + eb[i + 4] = j + 2; + eb[i + 5] = j + 3; + } } void glamor_init_composite_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - unsigned short *eb; - float *vb = NULL; - int eb_size; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &glamor_priv->vbo); - dispatch->glGenBuffers(1, &glamor_priv->ebo); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - eb_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(short) * 2; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, - eb_size, - NULL, GL_STATIC_DRAW); - eb = dispatch->glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); - } - else { - vb = malloc(GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2); - if (vb == NULL) - FatalError("Failed to allocate vb memory.\n"); - eb = malloc(eb_size); - } - - if (eb == NULL) - FatalError("fatal error, fail to get element buffer. GL context may be not created correctly.\n"); - glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - dispatch->glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - } else { - dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, - eb_size, - eb, GL_STATIC_DRAW); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2, - NULL, GL_DYNAMIC_DRAW); - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - - free(eb); - glamor_priv->vb = (char*)vb; - } - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + unsigned short *eb; + float *vb = NULL; + int eb_size; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &glamor_priv->vbo); + dispatch->glGenBuffers(1, &glamor_priv->ebo); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + eb_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(short) * 2; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, + eb_size, NULL, GL_STATIC_DRAW); + eb = dispatch->glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); + } + else { + vb = malloc(GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2); + if (vb == NULL) + FatalError("Failed to allocate vb memory.\n"); + eb = malloc(eb_size); + } + + if (eb == NULL) + FatalError + ("fatal error, fail to get element buffer. GL context may be not created correctly.\n"); + glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + dispatch->glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + } + else { + dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, + eb_size, eb, GL_STATIC_DRAW); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * + 2, NULL, GL_DYNAMIC_DRAW); + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + + free(eb); + glamor_priv->vb = (char *) vb; + } + + glamor_put_dispatch(glamor_priv); } void glamor_fini_composite_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - glamor_composite_shader *shader; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteBuffers(1, &glamor_priv->vbo); - dispatch->glDeleteBuffers(1, &glamor_priv->ebo); - - for(i = 0; i < SHADER_SOURCE_COUNT; i++) - for(j = 0; j < SHADER_MASK_COUNT; j++) - for(k = 0; k < SHADER_IN_COUNT; k++) - { - shader = &glamor_priv->composite_shader[i][j][k]; - if (shader->prog) - dispatch->glDeleteProgram(shader->prog); - } - if (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && glamor_priv->vb) - free(glamor_priv->vb); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + glamor_composite_shader *shader; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteBuffers(1, &glamor_priv->vbo); + dispatch->glDeleteBuffers(1, &glamor_priv->ebo); + + for (i = 0; i < SHADER_SOURCE_COUNT; i++) + for (j = 0; j < SHADER_MASK_COUNT; j++) + for (k = 0; k < SHADER_IN_COUNT; k++) { + shader = &glamor_priv->composite_shader[i][j][k]; + if (shader->prog) + dispatch->glDeleteProgram(shader->prog); + } + if (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP && glamor_priv->vb) + free(glamor_priv->vb); + + glamor_put_dispatch(glamor_priv); } static Bool glamor_set_composite_op(ScreenPtr screen, - CARD8 op, struct blendinfo *op_info_result, - PicturePtr dest, PicturePtr mask) + CARD8 op, struct blendinfo *op_info_result, + PicturePtr dest, PicturePtr mask) { - GLenum source_blend, dest_blend; - struct blendinfo *op_info; - - if (op >= ARRAY_SIZE(composite_op_info)) { - glamor_fallback("unsupported render op %d \n", op); - return GL_FALSE; - } - op_info = &composite_op_info[op]; - - source_blend = op_info->source_blend; - dest_blend = op_info->dest_blend; - - /* If there's no dst alpha channel, adjust the blend op so that we'll treat - * it as always 1. - */ - if (PICT_FORMAT_A(dest->format) == 0 && op_info->dest_alpha) { - if (source_blend == GL_DST_ALPHA) - source_blend = GL_ONE; - else if (source_blend == GL_ONE_MINUS_DST_ALPHA) - source_blend = GL_ZERO; - } - - /* Set up the source alpha value for blending in component alpha mode. */ - if (mask && mask->componentAlpha - && PICT_FORMAT_RGB(mask->format) != 0 && op_info->source_alpha) - { - if (dest_blend == GL_SRC_ALPHA) - dest_blend = GL_SRC_COLOR; - else if (dest_blend == GL_ONE_MINUS_SRC_ALPHA) - dest_blend = GL_ONE_MINUS_SRC_COLOR; - } - - op_info_result->source_blend = source_blend; - op_info_result->dest_blend = dest_blend; - op_info_result->source_alpha = op_info->source_alpha; - op_info_result->dest_alpha = op_info->dest_alpha; - - return TRUE; + GLenum source_blend, dest_blend; + struct blendinfo *op_info; + + if (op >= ARRAY_SIZE(composite_op_info)) { + glamor_fallback("unsupported render op %d \n", op); + return GL_FALSE; + } + op_info = &composite_op_info[op]; + + source_blend = op_info->source_blend; + dest_blend = op_info->dest_blend; + + /* If there's no dst alpha channel, adjust the blend op so that we'll treat + * it as always 1. + */ + if (PICT_FORMAT_A(dest->format) == 0 && op_info->dest_alpha) { + if (source_blend == GL_DST_ALPHA) + source_blend = GL_ONE; + else if (source_blend == GL_ONE_MINUS_DST_ALPHA) + source_blend = GL_ZERO; + } + + /* Set up the source alpha value for blending in component alpha mode. */ + if (mask && mask->componentAlpha + && PICT_FORMAT_RGB(mask->format) != 0 && op_info->source_alpha) { + if (dest_blend == GL_SRC_ALPHA) + dest_blend = GL_SRC_COLOR; + else if (dest_blend == GL_ONE_MINUS_SRC_ALPHA) + dest_blend = GL_ONE_MINUS_SRC_COLOR; + } + + op_info_result->source_blend = source_blend; + op_info_result->dest_blend = dest_blend; + op_info_result->source_alpha = op_info->source_alpha; + op_info_result->dest_alpha = op_info->dest_alpha; + + return TRUE; } static void glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit, - PicturePtr picture, - glamor_pixmap_private * pixmap_priv, - GLuint wh_location, GLuint repeat_location) + PicturePtr picture, + glamor_pixmap_private *pixmap_priv, + GLuint wh_location, GLuint repeat_location) { - glamor_gl_dispatch *dispatch; - float wh[4]; - int repeat_type; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glActiveTexture(GL_TEXTURE0 + unit); - dispatch->glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex); - repeat_type = picture->repeatType; - switch (picture->repeatType) { - case RepeatNone: + glamor_gl_dispatch *dispatch; + float wh[4]; + int repeat_type; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glActiveTexture(GL_TEXTURE0 + unit); + dispatch->glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex); + repeat_type = picture->repeatType; + switch (picture->repeatType) { + case RepeatNone: #ifndef GLAMOR_GLES2 - /* XXX GLES2 doesn't support GL_CLAMP_TO_BORDER. */ - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_BORDER); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_BORDER); + /* XXX GLES2 doesn't support GL_CLAMP_TO_BORDER. */ + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_BORDER); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_BORDER); #else - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); #endif - break; - case RepeatNormal: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_REPEAT); - break; - case RepeatPad: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - break; - case RepeatReflect: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_MIRRORED_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_MIRRORED_REPEAT); - break; - } - - switch (picture->filter) { - default: - case PictFilterFast: - case PictFilterNearest: - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - break; - case PictFilterGood: - case PictFilterBest: - case PictFilterBilinear: - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - break; - } + break; + case RepeatNormal: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + break; + case RepeatPad: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); + break; + case RepeatReflect: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_MIRRORED_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_MIRRORED_REPEAT); + break; + } + + switch (picture->filter) { + default: + case PictFilterFast: + case PictFilterNearest: + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_NEAREST); + break; + case PictFilterGood: + case PictFilterBest: + case PictFilterBilinear: + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_LINEAR); + break; + } #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - /* - * GLES2 doesn't support RepeatNone. We need to fix it anyway. - * - **/ - if (repeat_type != RepeatNone) - repeat_type += RepeatFix; - else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (picture->transform - || (GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv))) - repeat_type += RepeatFix; - } - if (repeat_type >= RepeatFix) { - glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap_priv); - if ((wh[0] != 1.0 || wh[1] != 1.0 ) - || (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - && repeat_type == RepeatFix)) - dispatch->glUniform4fv(wh_location, 1, wh); - else - repeat_type -= RepeatFix; - } - dispatch->glUniform1i(repeat_location, repeat_type); - glamor_put_dispatch(glamor_priv); + /* + * GLES2 doesn't support RepeatNone. We need to fix it anyway. + * + **/ + if (repeat_type != RepeatNone) + repeat_type += RepeatFix; + else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (picture->transform + || (GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv))) + repeat_type += RepeatFix; + } + if (repeat_type >= RepeatFix) { + glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap_priv); + if ((wh[0] != 1.0 || wh[1] != 1.0) + || (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + && repeat_type == RepeatFix)) + dispatch->glUniform4fv(wh_location, 1, wh); + else + repeat_type -= RepeatFix; + } + dispatch->glUniform1i(repeat_location, repeat_type); + glamor_put_dispatch(glamor_priv); } static void -glamor_set_composite_solid(glamor_gl_dispatch * dispatch, float *color, - GLint uniform_location) +glamor_set_composite_solid(glamor_gl_dispatch *dispatch, float *color, + GLint uniform_location) { - dispatch->glUniform4fv(uniform_location, 1, color); + dispatch->glUniform4fv(uniform_location, 1, color); } static int compatible_formats(CARD8 op, PicturePtr dst, PicturePtr src) { - if (op == PictOpSrc) { - if (src->format == dst->format) - return 1; - - if (src->format == PICT_a8r8g8b8 - && dst->format == PICT_x8r8g8b8) - return 1; - - if (src->format == PICT_a8b8g8r8 - && dst->format == PICT_x8b8g8r8) - return 1; - } else if (op == PictOpOver) { - if (src->alphaMap || dst->alphaMap) - return 0; - - if (src->format != dst->format) - return 0; - - if (src->format == PICT_x8r8g8b8 - || src->format == PICT_x8b8g8r8) - return 1; - } - - return 0; + if (op == PictOpSrc) { + if (src->format == dst->format) + return 1; + + if (src->format == PICT_a8r8g8b8 && dst->format == PICT_x8r8g8b8) + return 1; + + if (src->format == PICT_a8b8g8r8 && dst->format == PICT_x8b8g8r8) + return 1; + } + else if (op == PictOpOver) { + if (src->alphaMap || dst->alphaMap) + return 0; + + if (src->format != dst->format) + return 0; + + if (src->format == PICT_x8r8g8b8 || src->format == PICT_x8b8g8r8) + return 1; + } + + return 0; } static char glamor_get_picture_location(PicturePtr picture) { - if (picture == NULL) - return ' '; - - if (picture->pDrawable == NULL) { - switch (picture->pSourcePict->type) { - case SourcePictTypeSolidFill: - return 'c'; - case SourcePictTypeLinear: - return 'l'; - case SourcePictTypeRadial: - return 'r'; - default: - return '?'; - } - } - return glamor_get_drawable_location(picture->pDrawable); + if (picture == NULL) + return ' '; + + if (picture->pDrawable == NULL) { + switch (picture->pSourcePict->type) { + case SourcePictTypeSolidFill: + return 'c'; + case SourcePictTypeLinear: + return 'l'; + case SourcePictTypeRadial: + return 'r'; + default: + return '?'; + } + } + return glamor_get_drawable_location(picture->pDrawable); } static Bool glamor_composite_with_copy(CARD8 op, - PicturePtr source, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_dest, - INT16 y_dest, - RegionPtr region) + PicturePtr source, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_dest, INT16 y_dest, RegionPtr region) { - int ret = FALSE; - if (!source->pDrawable) - return FALSE; - - if (!compatible_formats(op, dest, source)) - return FALSE; - - if (source->repeat || source->transform) { - return FALSE; - } - - x_dest += dest->pDrawable->x; - y_dest += dest->pDrawable->y; - x_source += source->pDrawable->x; - y_source += source->pDrawable->y; - if (PICT_FORMAT_A(source->format) == 0) { - /* Fallback if we sample outside the source so that we - * swizzle the correct clear color for out-of-bounds texels. - */ - if (region->extents.x1 + x_source - x_dest < 0) - goto cleanup_region; - if (region->extents.x2 + x_source - x_dest > source->pDrawable->width) - goto cleanup_region; - - if (region->extents.y1 + y_source - y_dest < 0) - goto cleanup_region; - if (region->extents.y2 + y_source - y_dest > source->pDrawable->height) - goto cleanup_region; - } - ret = glamor_copy_n_to_n_nf(source->pDrawable, - dest->pDrawable, NULL, - RegionRects(region), RegionNumRects(region), - x_source - x_dest, y_source - y_dest, - FALSE, FALSE, 0, NULL); -cleanup_region: - return ret; + int ret = FALSE; + + if (!source->pDrawable) + return FALSE; + + if (!compatible_formats(op, dest, source)) + return FALSE; + + if (source->repeat || source->transform) { + return FALSE; + } + + x_dest += dest->pDrawable->x; + y_dest += dest->pDrawable->y; + x_source += source->pDrawable->x; + y_source += source->pDrawable->y; + if (PICT_FORMAT_A(source->format) == 0) { + /* Fallback if we sample outside the source so that we + * swizzle the correct clear color for out-of-bounds texels. + */ + if (region->extents.x1 + x_source - x_dest < 0) + goto cleanup_region; + if (region->extents.x2 + x_source - x_dest > source->pDrawable->width) + goto cleanup_region; + + if (region->extents.y1 + y_source - y_dest < 0) + goto cleanup_region; + if (region->extents.y2 + y_source - y_dest > source->pDrawable->height) + goto cleanup_region; + } + ret = glamor_copy_n_to_n_nf(source->pDrawable, + dest->pDrawable, NULL, + RegionRects(region), RegionNumRects(region), + x_source - x_dest, y_source - y_dest, + FALSE, FALSE, 0, NULL); + cleanup_region: + return ret; } void glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int vert_size; - - glamor_priv->render_nr_verts = 0; - glamor_priv->vb_stride = 2 * sizeof(float); - if (glamor_priv->has_source_coords) - glamor_priv->vb_stride += 2 * sizeof(float); - if (glamor_priv->has_mask_coords) - glamor_priv->vb_stride += 2 * sizeof(float); - - vert_size = n_verts * glamor_priv->vb_stride; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { - glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * - glamor_priv->vb_stride; - glamor_priv->vbo_offset = 0; - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_size, - NULL, GL_STREAM_DRAW); - } - - glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - vert_size, - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); - assert(glamor_priv->vb != NULL); - glamor_priv->vb -= glamor_priv->vbo_offset; - } else - glamor_priv->vbo_offset = 0; - - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset)); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - if (glamor_priv->has_source_coords) { - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset - + - 2 * - sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - } - - if (glamor_priv->has_mask_coords) { - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_MASK, 2, - GL_FLOAT, GL_FALSE, - glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset - + - (glamor_priv->has_source_coords - ? 4 : 2) * - sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); - } - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int vert_size; + + glamor_priv->render_nr_verts = 0; + glamor_priv->vb_stride = 2 * sizeof(float); + if (glamor_priv->has_source_coords) + glamor_priv->vb_stride += 2 * sizeof(float); + if (glamor_priv->has_mask_coords) + glamor_priv->vb_stride += 2 * sizeof(float); + + vert_size = n_verts * glamor_priv->vb_stride; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { + glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * + glamor_priv->vb_stride; + glamor_priv->vbo_offset = 0; + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_size, NULL, GL_STREAM_DRAW); + } + + glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + vert_size, + GL_MAP_WRITE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); + assert(glamor_priv->vb != NULL); + glamor_priv->vb -= glamor_priv->vbo_offset; + } + else + glamor_priv->vbo_offset = 0; + + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) + glamor_priv->vbo_offset)); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + if (glamor_priv->has_source_coords) { + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + glamor_priv->vb_stride, (void *) ((long) + glamor_priv-> + vbo_offset + + + 2 * + sizeof + (float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + } + + if (glamor_priv->has_mask_coords) { + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_MASK, 2, + GL_FLOAT, GL_FALSE, + glamor_priv->vb_stride, (void *) ((long) + glamor_priv-> + vbo_offset + + + (glamor_priv-> + has_source_coords + ? 4 : + 2) * + sizeof + (float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); + } + glamor_put_dispatch(glamor_priv); } void glamor_emit_composite_vert(ScreenPtr screen, - const float *src_coords, - const float *mask_coords, - const float *dst_coords, int i) + const float *src_coords, + const float *mask_coords, + const float *dst_coords, int i) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - float *vb = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); - int j = 0; - - vb[j++] = dst_coords[i * 2 + 0]; - vb[j++] = dst_coords[i * 2 + 1]; - if (glamor_priv->has_source_coords) { - vb[j++] = src_coords[i * 2 + 0]; - vb[j++] = src_coords[i * 2 + 1]; - } - if (glamor_priv->has_mask_coords) { - vb[j++] = mask_coords[i * 2 + 0]; - vb[j++] = mask_coords[i * 2 + 1]; - } - - glamor_priv->render_nr_verts++; - glamor_priv->vbo_offset += glamor_priv->vb_stride; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + float *vb = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); + int j = 0; + + vb[j++] = dst_coords[i * 2 + 0]; + vb[j++] = dst_coords[i * 2 + 1]; + if (glamor_priv->has_source_coords) { + vb[j++] = src_coords[i * 2 + 0]; + vb[j++] = src_coords[i * 2 + 1]; + } + if (glamor_priv->has_mask_coords) { + vb[j++] = mask_coords[i * 2 + 0]; + vb[j++] = mask_coords[i * 2 + 1]; + } + + glamor_priv->render_nr_verts++; + glamor_priv->vbo_offset += glamor_priv->vb_stride; } - - static void glamor_flush_composite_rects(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; - dispatch = glamor_get_dispatch(glamor_priv); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { + dispatch = glamor_get_dispatch(glamor_priv); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } - if (!glamor_priv->render_nr_verts) - return; + if (!glamor_priv->render_nr_verts) + return; #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, - (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawElements(GL_TRIANGLES, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #endif - glamor_put_dispatch(glamor_priv); + glamor_put_dispatch(glamor_priv); } int pict_format_combine_tab[][3] = { - {PICT_TYPE_ARGB, PICT_TYPE_A, PICT_TYPE_ARGB}, - {PICT_TYPE_ABGR, PICT_TYPE_A, PICT_TYPE_ABGR}, + {PICT_TYPE_ARGB, PICT_TYPE_A, PICT_TYPE_ARGB}, + {PICT_TYPE_ABGR, PICT_TYPE_A, PICT_TYPE_ABGR}, }; static Bool combine_pict_format(PictFormatShort * des, const PictFormatShort src, - const PictFormatShort mask, enum shader_in in_ca) + const PictFormatShort mask, enum shader_in in_ca) { - PictFormatShort new_vis; - int src_type, mask_type, src_bpp, mask_bpp; - int i; - if (src == mask) { - *des = src; - return TRUE; - } - src_bpp = PICT_FORMAT_BPP(src); - mask_bpp = PICT_FORMAT_BPP(mask); - - assert(src_bpp == mask_bpp); - - new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask); - - switch (in_ca) { - case SHADER_IN_SOURCE_ONLY: - return TRUE; - case SHADER_IN_NORMAL: - src_type = PICT_FORMAT_TYPE(src); - mask_type = PICT_TYPE_A; - break; - case SHADER_IN_CA_SOURCE: - src_type = PICT_FORMAT_TYPE(src); - mask_type = PICT_FORMAT_TYPE(mask); - break; - case SHADER_IN_CA_ALPHA: - src_type = PICT_TYPE_A; - mask_type = PICT_FORMAT_TYPE(mask); - break; - default: - return FALSE; - } - - if (src_type == mask_type) { - *des = PICT_VISFORMAT(src_bpp, src_type, new_vis); - return TRUE; - } - - for (i = 0; - i < - sizeof(pict_format_combine_tab) / - sizeof(pict_format_combine_tab[0]); i++) { - if ((src_type == pict_format_combine_tab[i][0] - && mask_type == pict_format_combine_tab[i][1]) - || (src_type == pict_format_combine_tab[i][1] - && mask_type == pict_format_combine_tab[i][0])) { - *des = PICT_VISFORMAT(src_bpp, - pict_format_combine_tab[i] - [2], new_vis); - return TRUE; - } - } - return FALSE; + PictFormatShort new_vis; + int src_type, mask_type, src_bpp; + int i; + + if (src == mask) { + *des = src; + return TRUE; + } + src_bpp = PICT_FORMAT_BPP(src); + + assert(src_bpp == PICT_FORMAT_BPP(mask)); + + new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask); + + switch (in_ca) { + case SHADER_IN_SOURCE_ONLY: + return TRUE; + case SHADER_IN_NORMAL: + src_type = PICT_FORMAT_TYPE(src); + mask_type = PICT_TYPE_A; + break; + case SHADER_IN_CA_SOURCE: + src_type = PICT_FORMAT_TYPE(src); + mask_type = PICT_FORMAT_TYPE(mask); + break; + case SHADER_IN_CA_ALPHA: + src_type = PICT_TYPE_A; + mask_type = PICT_FORMAT_TYPE(mask); + break; + default: + return FALSE; + } + + if (src_type == mask_type) { + *des = PICT_VISFORMAT(src_bpp, src_type, new_vis); + return TRUE; + } + + for (i = 0; + i < + sizeof(pict_format_combine_tab) / + sizeof(pict_format_combine_tab[0]); i++) { + if ((src_type == pict_format_combine_tab[i][0] + && mask_type == pict_format_combine_tab[i][1]) + || (src_type == pict_format_combine_tab[i][1] + && mask_type == pict_format_combine_tab[i][0])) { + *des = PICT_VISFORMAT(src_bpp, pict_format_combine_tab[i] + [2], new_vis); + return TRUE; + } + } + return FALSE; } static void glamor_set_normalize_tcoords_generic(glamor_pixmap_private *priv, - int repeat_type, - float *matrix, - float xscale, float yscale, - int x1, int y1, int x2, int y2, - int yInverted, float *texcoords, - int stride) + int repeat_type, + float *matrix, + float xscale, float yscale, + int x1, int y1, int x2, int y2, + int yInverted, float *texcoords, + int stride) { - if (!matrix && repeat_type == RepeatNone) - glamor_set_normalize_tcoords_ext(priv, xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (matrix && repeat_type == RepeatNone) - glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, - yscale, x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (!matrix && repeat_type != RepeatNone) - glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, - xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (matrix && repeat_type != RepeatNone) - glamor_set_repeat_transformed_normalize_tcoords_ext(priv, repeat_type, - matrix, xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); + if (!matrix && repeat_type == RepeatNone) + glamor_set_normalize_tcoords_ext(priv, xscale, yscale, + x1, y1, + x2, y2, yInverted, texcoords, stride); + else if (matrix && repeat_type == RepeatNone) + glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, + yscale, x1, y1, + x2, y2, + yInverted, + texcoords, stride); + else if (!matrix && repeat_type != RepeatNone) + glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, + xscale, yscale, + x1, y1, + x2, y2, + yInverted, texcoords, stride); + else if (matrix && repeat_type != RepeatNone) + glamor_set_repeat_transformed_normalize_tcoords_ext(priv, repeat_type, + matrix, xscale, + yscale, x1, y1, x2, + y2, yInverted, + texcoords, stride); } -Bool glamor_composite_choose_shader(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - struct shader_key *s_key, - glamor_composite_shader **shader, - struct blendinfo *op_info, - PictFormatShort *psaved_source_format) +Bool +glamor_composite_choose_shader(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + struct shader_key *s_key, + glamor_composite_shader ** shader, + struct blendinfo *op_info, + PictFormatShort *psaved_source_format) { - ScreenPtr screen = dest->pDrawable->pScreen; - PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; - PixmapPtr source_pixmap = NULL; - PixmapPtr mask_pixmap = NULL; - enum glamor_pixmap_status source_status = GLAMOR_NONE; - enum glamor_pixmap_status mask_status = GLAMOR_NONE; - PictFormatShort saved_source_format = 0; - struct shader_key key; - GLfloat source_solid_color[4]; - GLfloat mask_solid_color[4]; - Bool ret = FALSE; - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - glamor_fallback("dest has no fbo.\n"); - goto fail; - } - - memset(&key, 0, sizeof(key)); - if (!source) { - key.source = SHADER_SOURCE_SOLID; - source_solid_color[0] = 0.0; - source_solid_color[1] = 0.0; - source_solid_color[2] = 0.0; - source_solid_color[3] = 0.0; - } else if (!source->pDrawable) { - if (source->pSourcePict->type == SourcePictTypeSolidFill) { - key.source = SHADER_SOURCE_SOLID; - glamor_get_rgba_from_pixel(source-> - pSourcePict->solidFill. - color, - &source_solid_color[0], - &source_solid_color[1], - &source_solid_color[2], - &source_solid_color[3], - PICT_a8r8g8b8); - } else - goto fail; - } else { - key.source = SHADER_SOURCE_TEXTURE_ALPHA; - } - - if (mask) { - if (!mask->pDrawable) { - if (mask->pSourcePict->type == - SourcePictTypeSolidFill) { - key.mask = SHADER_MASK_SOLID; - glamor_get_rgba_from_pixel - (mask->pSourcePict->solidFill.color, - &mask_solid_color[0], - &mask_solid_color[1], - &mask_solid_color[2], - &mask_solid_color[3], PICT_a8r8g8b8); - } else - goto fail; - } else { - key.mask = SHADER_MASK_TEXTURE_ALPHA; - } - - if (!mask->componentAlpha) { - key.in = SHADER_IN_NORMAL; - } else { - if (op == PictOpClear) - key.mask = SHADER_MASK_NONE; - else if (op == PictOpSrc || op == PictOpAdd - || op == PictOpIn || op == PictOpOut - || op == PictOpOverReverse) - key.in = SHADER_IN_CA_SOURCE; - else if (op == PictOpOutReverse || op == PictOpInReverse) { - key.in = SHADER_IN_CA_ALPHA; - } else { - glamor_fallback("Unsupported component alpha op: %d\n", op); - goto fail; - } - } - } else { - key.mask = SHADER_MASK_NONE; - key.in = SHADER_IN_SOURCE_ONLY; - } - - if (source && source->alphaMap) { - glamor_fallback("source alphaMap\n"); - goto fail; - } - if (mask && mask->alphaMap) { - glamor_fallback("mask alphaMap\n"); - goto fail; - } - - if (key.source == SHADER_SOURCE_TEXTURE || - key.source == SHADER_SOURCE_TEXTURE_ALPHA) { - source_pixmap = source_pixmap_priv->base.pixmap; - if (source_pixmap == dest_pixmap) { - /* XXX source and the dest share the same texture. - * Does it need special handle? */ - glamor_fallback("source == dest\n"); - } - if (source_pixmap_priv->base.gl_fbo == 0) { - /* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex - * equal to zero when the pixmap is screen pixmap. Then we may - * refer the tex zero directly latter in the composition. - * It seems that it works fine, but it may have potential problem*/ + ScreenPtr screen = dest->pDrawable->pScreen; + PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; + PixmapPtr source_pixmap = NULL; + PixmapPtr mask_pixmap = NULL; + enum glamor_pixmap_status source_status = GLAMOR_NONE; + enum glamor_pixmap_status mask_status = GLAMOR_NONE; + PictFormatShort saved_source_format = 0; + struct shader_key key; + GLfloat source_solid_color[4]; + GLfloat mask_solid_color[4]; + Bool ret = FALSE; + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + glamor_fallback("dest has no fbo.\n"); + goto fail; + } + + memset(&key, 0, sizeof(key)); + if (!source) { + key.source = SHADER_SOURCE_SOLID; + source_solid_color[0] = 0.0; + source_solid_color[1] = 0.0; + source_solid_color[2] = 0.0; + source_solid_color[3] = 0.0; + } + else if (!source->pDrawable) { + if (source->pSourcePict->type == SourcePictTypeSolidFill) { + key.source = SHADER_SOURCE_SOLID; + glamor_get_rgba_from_pixel(source->pSourcePict->solidFill.color, + &source_solid_color[0], + &source_solid_color[1], + &source_solid_color[2], + &source_solid_color[3], PICT_a8r8g8b8); + } + else + goto fail; + } + else { + key.source = SHADER_SOURCE_TEXTURE_ALPHA; + } + + if (mask) { + if (!mask->pDrawable) { + if (mask->pSourcePict->type == SourcePictTypeSolidFill) { + key.mask = SHADER_MASK_SOLID; + glamor_get_rgba_from_pixel + (mask->pSourcePict->solidFill.color, + &mask_solid_color[0], + &mask_solid_color[1], + &mask_solid_color[2], &mask_solid_color[3], PICT_a8r8g8b8); + } + else + goto fail; + } + else { + key.mask = SHADER_MASK_TEXTURE_ALPHA; + } + + if (!mask->componentAlpha) { + key.in = SHADER_IN_NORMAL; + } + else { + if (op == PictOpClear) + key.mask = SHADER_MASK_NONE; + else if (op == PictOpSrc || op == PictOpAdd + || op == PictOpIn || op == PictOpOut + || op == PictOpOverReverse) + key.in = SHADER_IN_CA_SOURCE; + else if (op == PictOpOutReverse || op == PictOpInReverse) { + key.in = SHADER_IN_CA_ALPHA; + } + else { + glamor_fallback("Unsupported component alpha op: %d\n", op); + goto fail; + } + } + } + else { + key.mask = SHADER_MASK_NONE; + key.in = SHADER_IN_SOURCE_ONLY; + } + + if (source && source->alphaMap) { + glamor_fallback("source alphaMap\n"); + goto fail; + } + if (mask && mask->alphaMap) { + glamor_fallback("mask alphaMap\n"); + goto fail; + } + + if (key.source == SHADER_SOURCE_TEXTURE || + key.source == SHADER_SOURCE_TEXTURE_ALPHA) { + source_pixmap = source_pixmap_priv->base.pixmap; + if (source_pixmap == dest_pixmap) { + /* XXX source and the dest share the same texture. + * Does it need special handle? */ + glamor_fallback("source == dest\n"); + } + if (source_pixmap_priv->base.gl_fbo == 0) { + /* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex + * equal to zero when the pixmap is screen pixmap. Then we may + * refer the tex zero directly latter in the composition. + * It seems that it works fine, but it may have potential problem*/ #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - source_status = GLAMOR_UPLOAD_PENDING; + source_status = GLAMOR_UPLOAD_PENDING; #else - glamor_fallback("no texture in source\n"); - goto fail; + glamor_fallback("no texture in source\n"); + goto fail; #endif - } - } - - if (key.mask == SHADER_MASK_TEXTURE || - key.mask == SHADER_MASK_TEXTURE_ALPHA) { - mask_pixmap = mask_pixmap_priv->base.pixmap; - if (mask_pixmap == dest_pixmap) { - glamor_fallback("mask == dest\n"); - goto fail; - } - if (mask_pixmap_priv->base.gl_fbo == 0) { + } + } + + if (key.mask == SHADER_MASK_TEXTURE || + key.mask == SHADER_MASK_TEXTURE_ALPHA) { + mask_pixmap = mask_pixmap_priv->base.pixmap; + if (mask_pixmap == dest_pixmap) { + glamor_fallback("mask == dest\n"); + goto fail; + } + if (mask_pixmap_priv->base.gl_fbo == 0) { #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - mask_status = GLAMOR_UPLOAD_PENDING; + mask_status = GLAMOR_UPLOAD_PENDING; #else - glamor_fallback("no texture in mask\n"); - goto fail; + glamor_fallback("no texture in mask\n"); + goto fail; #endif - } - } + } + } #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - if (source_status == GLAMOR_UPLOAD_PENDING - && mask_status == GLAMOR_UPLOAD_PENDING - && source_pixmap == mask_pixmap) { - - if (source->format != mask->format) { - saved_source_format = source->format; - - if (!combine_pict_format(&source->format, source->format, - mask->format, key.in)) { - glamor_fallback("combine source %x mask %x failed.\n", - source->format, mask->format); - goto fail; - } - - if (source->format != saved_source_format) { - glamor_picture_format_fixup(source, - source_pixmap_priv); - } - /* XXX - * By default, glamor_upload_picture_to_texture will wire alpha to 1 - * if one picture doesn't have alpha. So we don't do that again in - * rendering function. But here is a special case, as source and - * mask share the same texture but may have different formats. For - * example, source doesn't have alpha, but mask has alpha. Then the - * texture will have the alpha value for the mask. And will not wire - * to 1 for the source. In this case, we have to use different shader - * to wire the source's alpha to 1. - * - * But this may cause a potential problem if the source's repeat mode - * is REPEAT_NONE, and if the source is smaller than the dest, then - * for the region not covered by the source may be painted incorrectly. - * because we wire the alpha to 1. - * - **/ - if (!PICT_FORMAT_A(saved_source_format) - && PICT_FORMAT_A(mask->format)) - key.source = SHADER_SOURCE_TEXTURE; - - if (!PICT_FORMAT_A(mask->format) - && PICT_FORMAT_A(saved_source_format)) - key.mask = SHADER_MASK_TEXTURE; - - mask_status = GLAMOR_NONE; - } - - source_status = glamor_upload_picture_to_texture(source); - if (source_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload source texture.\n"); - goto fail; - } - } else { - if (source_status == GLAMOR_UPLOAD_PENDING) { - source_status = glamor_upload_picture_to_texture(source); - if (source_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload source texture.\n"); - goto fail; - } - } - - if (mask_status == GLAMOR_UPLOAD_PENDING) { - mask_status = glamor_upload_picture_to_texture(mask); - if (mask_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload mask texture.\n"); - goto fail; - } - } - } + if (source_status == GLAMOR_UPLOAD_PENDING + && mask_status == GLAMOR_UPLOAD_PENDING + && source_pixmap == mask_pixmap) { + + if (source->format != mask->format) { + saved_source_format = source->format; + + if (!combine_pict_format(&source->format, source->format, + mask->format, key.in)) { + glamor_fallback("combine source %x mask %x failed.\n", + source->format, mask->format); + goto fail; + } + + if (source->format != saved_source_format) { + glamor_picture_format_fixup(source, source_pixmap_priv); + } + /* XXX + * By default, glamor_upload_picture_to_texture will wire alpha to 1 + * if one picture doesn't have alpha. So we don't do that again in + * rendering function. But here is a special case, as source and + * mask share the same texture but may have different formats. For + * example, source doesn't have alpha, but mask has alpha. Then the + * texture will have the alpha value for the mask. And will not wire + * to 1 for the source. In this case, we have to use different shader + * to wire the source's alpha to 1. + * + * But this may cause a potential problem if the source's repeat mode + * is REPEAT_NONE, and if the source is smaller than the dest, then + * for the region not covered by the source may be painted incorrectly. + * because we wire the alpha to 1. + * + **/ + if (!PICT_FORMAT_A(saved_source_format) + && PICT_FORMAT_A(mask->format)) + key.source = SHADER_SOURCE_TEXTURE; + + if (!PICT_FORMAT_A(mask->format) + && PICT_FORMAT_A(saved_source_format)) + key.mask = SHADER_MASK_TEXTURE; + + mask_status = GLAMOR_NONE; + } + + source_status = glamor_upload_picture_to_texture(source); + if (source_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload source texture.\n"); + goto fail; + } + } + else { + if (source_status == GLAMOR_UPLOAD_PENDING) { + source_status = glamor_upload_picture_to_texture(source); + if (source_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload source texture.\n"); + goto fail; + } + } + + if (mask_status == GLAMOR_UPLOAD_PENDING) { + mask_status = glamor_upload_picture_to_texture(mask); + if (mask_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload mask texture.\n"); + goto fail; + } + } + } #endif - /*Before enter the rendering stage, we need to fixup - * transformed source and mask, if the transform is not int translate. */ - if (key.source != SHADER_SOURCE_SOLID - && source->transform - && !pixman_transform_is_int_translate(source->transform) - && source_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - if (!glamor_fixup_pixmap_priv(screen, source_pixmap_priv)) - goto fail; - } - if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID - && mask->transform - && !pixman_transform_is_int_translate(mask->transform) - && mask_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - if (!glamor_fixup_pixmap_priv(screen, mask_pixmap_priv)) - goto fail; - } - - - if (!glamor_set_composite_op(screen, op, op_info, dest, mask)) - goto fail; - - *shader = glamor_lookup_composite_shader(screen, &key); - if ((*shader)->prog == 0) { - glamor_fallback("no shader program for this" - "render acccel mode\n"); - goto fail; - } - - if (key.source == SHADER_SOURCE_SOLID) - memcpy(&(*shader)->source_solid_color[0], - source_solid_color, 4*sizeof(float)); - else { - (*shader)->source_priv = source_pixmap_priv; - (*shader)->source = source; - } - - if (key.mask == SHADER_MASK_SOLID) - memcpy(&(*shader)->mask_solid_color[0], - mask_solid_color, 4*sizeof(float)); - else { - (*shader)->mask_priv = mask_pixmap_priv; - (*shader)->mask = mask; - } - - ret = TRUE; - memcpy(s_key, &key, sizeof(key)); - *psaved_source_format = saved_source_format; - goto done; - -fail: - if (saved_source_format) - source->format = saved_source_format; -done: - return ret; + /*Before enter the rendering stage, we need to fixup + * transformed source and mask, if the transform is not int translate. */ + if (key.source != SHADER_SOURCE_SOLID + && source->transform + && !pixman_transform_is_int_translate(source->transform) + && source_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (!glamor_fixup_pixmap_priv(screen, source_pixmap_priv)) + goto fail; + } + if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID + && mask->transform + && !pixman_transform_is_int_translate(mask->transform) + && mask_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (!glamor_fixup_pixmap_priv(screen, mask_pixmap_priv)) + goto fail; + } + + if (!glamor_set_composite_op(screen, op, op_info, dest, mask)) + goto fail; + + *shader = glamor_lookup_composite_shader(screen, &key); + if ((*shader)->prog == 0) { + glamor_fallback("no shader program for this render acccel mode\n"); + goto fail; + } + + if (key.source == SHADER_SOURCE_SOLID) + memcpy(&(*shader)->source_solid_color[0], + source_solid_color, 4 * sizeof(float)); + else { + (*shader)->source_priv = source_pixmap_priv; + (*shader)->source = source; + } + + if (key.mask == SHADER_MASK_SOLID) + memcpy(&(*shader)->mask_solid_color[0], + mask_solid_color, 4 * sizeof(float)); + else { + (*shader)->mask_priv = mask_pixmap_priv; + (*shader)->mask = mask; + } + + ret = TRUE; + memcpy(s_key, &key, sizeof(key)); + *psaved_source_format = saved_source_format; + goto done; + + fail: + if (saved_source_format) + source->format = saved_source_format; + done: + return ret; } void glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, - struct shader_key *key, - glamor_composite_shader *shader, - struct blendinfo *op_info) + struct shader_key *key, + glamor_composite_shader *shader, + struct blendinfo *op_info) { - glamor_gl_dispatch *dispatch; - glamor_screen_private *glamor_priv; - - glamor_priv = dest_priv->base.glamor_priv; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(shader->prog); - - if (key->source == SHADER_SOURCE_SOLID) { - glamor_set_composite_solid(dispatch, - shader->source_solid_color, - shader->source_uniform_location); - } else { - glamor_set_composite_texture(glamor_priv, 0, - shader->source, - shader->source_priv, shader->source_wh, - shader->source_repeat_mode); - } - - if (key->mask != SHADER_MASK_NONE) { - if (key->mask == SHADER_MASK_SOLID) { - glamor_set_composite_solid(dispatch, - shader->mask_solid_color, - shader->mask_uniform_location); - } else { - glamor_set_composite_texture(glamor_priv, 1, - shader->mask, - shader->mask_priv, shader->mask_wh, - shader->mask_repeat_mode); - } - } - - if (op_info->source_blend == GL_ONE - && op_info->dest_blend == GL_ZERO) { - dispatch->glDisable(GL_BLEND); - } else { - dispatch->glEnable(GL_BLEND); - dispatch->glBlendFunc(op_info->source_blend, - op_info->dest_blend); - } - - glamor_put_dispatch(glamor_priv); + glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + + glamor_priv = dest_priv->base.glamor_priv; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(shader->prog); + + if (key->source == SHADER_SOURCE_SOLID) { + glamor_set_composite_solid(dispatch, + shader->source_solid_color, + shader->source_uniform_location); + } + else { + glamor_set_composite_texture(glamor_priv, 0, + shader->source, + shader->source_priv, shader->source_wh, + shader->source_repeat_mode); + } + + if (key->mask != SHADER_MASK_NONE) { + if (key->mask == SHADER_MASK_SOLID) { + glamor_set_composite_solid(dispatch, + shader->mask_solid_color, + shader->mask_uniform_location); + } + else { + glamor_set_composite_texture(glamor_priv, 1, + shader->mask, + shader->mask_priv, shader->mask_wh, + shader->mask_repeat_mode); + } + } + + if (op_info->source_blend == GL_ONE && op_info->dest_blend == GL_ZERO) { + dispatch->glDisable(GL_BLEND); + } + else { + dispatch->glEnable(GL_BLEND); + dispatch->glBlendFunc(op_info->source_blend, op_info->dest_blend); + } + + glamor_put_dispatch(glamor_priv); } static Bool glamor_composite_with_shader(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - int nrect, glamor_composite_rect_t * rects, - Bool two_pass_ca) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + int nrect, glamor_composite_rect_t *rects, + Bool two_pass_ca) { - ScreenPtr screen = dest->pDrawable->pScreen; - glamor_screen_private *glamor_priv = dest_pixmap_priv->base.glamor_priv; - PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; - PixmapPtr source_pixmap = NULL; - PixmapPtr mask_pixmap = NULL; - glamor_gl_dispatch *dispatch = NULL; - GLfloat dst_xscale, dst_yscale; - GLfloat mask_xscale = 1, mask_yscale = 1, - src_xscale = 1, src_yscale = 1; - struct shader_key key, key_ca; - float *vertices; - int dest_x_off, dest_y_off; - int source_x_off, source_y_off; - int mask_x_off, mask_y_off; - PictFormatShort saved_source_format = 0; - float src_matrix[9], mask_matrix[9]; - float *psrc_matrix = NULL, *pmask_matrix = NULL; - int vert_stride = 4; - int nrect_max; - Bool ret = FALSE; - glamor_composite_shader *shader = NULL, *shader_ca = NULL; - struct blendinfo op_info, op_info_ca; - - if(!glamor_composite_choose_shader(op, source, mask, dest, - source_pixmap_priv, mask_pixmap_priv, - dest_pixmap_priv, - &key, &shader, &op_info, - &saved_source_format)) { - glamor_fallback("glamor_composite_choose_shader failed\n"); - return ret; - } - if (two_pass_ca) { - if(!glamor_composite_choose_shader(PictOpAdd, source, mask, dest, - source_pixmap_priv, mask_pixmap_priv, - dest_pixmap_priv, - &key_ca, &shader_ca, &op_info_ca, - &saved_source_format)) { - glamor_fallback("glamor_composite_choose_shader failed\n"); - return ret; - } - } - - glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); - glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; - glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && - key.mask != SHADER_MASK_SOLID); - - dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - glamor_get_drawable_deltas(dest->pDrawable, dest_pixmap, - &dest_x_off, &dest_y_off); - pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); - - if (glamor_priv->has_source_coords) { - source_pixmap = source_pixmap_priv->base.pixmap; - glamor_get_drawable_deltas(source->pDrawable, - source_pixmap, &source_x_off, - &source_y_off); - pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, - &src_yscale); - if (source->transform) { - psrc_matrix = src_matrix; - glamor_picture_get_matrixf(source, psrc_matrix); - } - vert_stride += 4; - } - - if (glamor_priv->has_mask_coords) { - mask_pixmap = mask_pixmap_priv->base.pixmap; - glamor_get_drawable_deltas(mask->pDrawable, mask_pixmap, - &mask_x_off, &mask_y_off); - pixmap_priv_get_scale(mask_pixmap_priv, &mask_xscale, - &mask_yscale); - if (mask->transform) { - pmask_matrix = mask_matrix; - glamor_picture_get_matrixf(mask, pmask_matrix); - } - vert_stride += 4; - } - - nrect_max = (vert_stride * nrect) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? - (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nrect; - - while(nrect) { - int mrect, rect_processed; - int vb_stride; - - mrect = nrect > nrect_max ? nrect_max : nrect ; - glamor_setup_composite_vbo(screen, mrect * vert_stride); - rect_processed = mrect; - vb_stride = glamor_priv->vb_stride/sizeof(float); - while (mrect--) { - INT16 x_source; - INT16 y_source; - INT16 x_mask; - INT16 y_mask; - INT16 x_dest; - INT16 y_dest; - CARD16 width; - CARD16 height; - - x_dest = rects->x_dst + dest_x_off; - y_dest = rects->y_dst + dest_y_off; - x_source = rects->x_src + source_x_off; - y_source = rects->y_src + source_y_off; - x_mask = rects->x_mask + mask_x_off; - y_mask = rects->y_mask + mask_y_off; - width = rects->width; - height = rects->height; - - DEBUGF("dest(%d,%d) source(%d %d) mask (%d %d), width %d height %d \n", - x_dest, y_dest, x_source, y_source,x_mask,y_mask,width,height); - vertices = (float*)(glamor_priv->vb + glamor_priv->vbo_offset); - assert(glamor_priv->vbo_offset < glamor_priv->vbo_size - glamor_priv->vb_stride); - glamor_set_normalize_vcoords_ext(dest_pixmap_priv, dst_xscale, - dst_yscale, - x_dest, y_dest, - x_dest + width, y_dest + height, - glamor_priv->yInverted, - vertices, vb_stride); - vertices += 2; - if (key.source != SHADER_SOURCE_SOLID) { - glamor_set_normalize_tcoords_generic( - source_pixmap_priv, source->repeatType, psrc_matrix, - src_xscale, src_yscale, x_source, y_source, - x_source + width, y_source + height, - glamor_priv->yInverted, vertices, vb_stride); - vertices += 2; - } - - if (key.mask != SHADER_MASK_NONE - && key.mask != SHADER_MASK_SOLID) { - glamor_set_normalize_tcoords_generic( - mask_pixmap_priv, mask->repeatType, pmask_matrix, - mask_xscale, mask_yscale, x_mask, y_mask, - x_mask + width, y_mask + height, - glamor_priv->yInverted, vertices, vb_stride); - } - glamor_priv->render_nr_verts += 4; - glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; - rects++; - } - glamor_flush_composite_rects(screen); - nrect -= rect_processed; - if (two_pass_ca) { - glamor_composite_set_shader_blend(dest_pixmap_priv, - &key_ca, shader_ca, - &op_info_ca); - glamor_flush_composite_rects(screen); - if (nrect) - glamor_composite_set_shader_blend(dest_pixmap_priv, - &key, shader, - &op_info); - } - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); - dispatch->glDisable(GL_BLEND); + ScreenPtr screen = dest->pDrawable->pScreen; + glamor_screen_private *glamor_priv = dest_pixmap_priv->base.glamor_priv; + PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; + PixmapPtr source_pixmap = NULL; + PixmapPtr mask_pixmap = NULL; + glamor_gl_dispatch *dispatch = NULL; + GLfloat dst_xscale, dst_yscale; + GLfloat mask_xscale = 1, mask_yscale = 1, src_xscale = 1, src_yscale = 1; + struct shader_key key, key_ca; + float *vertices; + int dest_x_off, dest_y_off; + int source_x_off, source_y_off; + int mask_x_off, mask_y_off; + PictFormatShort saved_source_format = 0; + float src_matrix[9], mask_matrix[9]; + float *psrc_matrix = NULL, *pmask_matrix = NULL; + int vert_stride = 4; + int nrect_max; + Bool ret = FALSE; + glamor_composite_shader *shader = NULL, *shader_ca = NULL; + struct blendinfo op_info, op_info_ca; + + if (!glamor_composite_choose_shader(op, source, mask, dest, + source_pixmap_priv, mask_pixmap_priv, + dest_pixmap_priv, + &key, &shader, &op_info, + &saved_source_format)) { + glamor_fallback("glamor_composite_choose_shader failed\n"); + return ret; + } + if (two_pass_ca) { + if (!glamor_composite_choose_shader(PictOpAdd, source, mask, dest, + source_pixmap_priv, + mask_pixmap_priv, dest_pixmap_priv, + &key_ca, &shader_ca, &op_info_ca, + &saved_source_format)) { + glamor_fallback("glamor_composite_choose_shader failed\n"); + return ret; + } + } + + glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); + glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; + glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && + key.mask != SHADER_MASK_SOLID); + + dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + glamor_get_drawable_deltas(dest->pDrawable, dest_pixmap, + &dest_x_off, &dest_y_off); + pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); + + if (glamor_priv->has_source_coords) { + source_pixmap = source_pixmap_priv->base.pixmap; + glamor_get_drawable_deltas(source->pDrawable, + source_pixmap, &source_x_off, &source_y_off); + pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, &src_yscale); + if (source->transform) { + psrc_matrix = src_matrix; + glamor_picture_get_matrixf(source, psrc_matrix); + } + vert_stride += 4; + } + + if (glamor_priv->has_mask_coords) { + mask_pixmap = mask_pixmap_priv->base.pixmap; + glamor_get_drawable_deltas(mask->pDrawable, mask_pixmap, + &mask_x_off, &mask_y_off); + pixmap_priv_get_scale(mask_pixmap_priv, &mask_xscale, &mask_yscale); + if (mask->transform) { + pmask_matrix = mask_matrix; + glamor_picture_get_matrixf(mask, pmask_matrix); + } + vert_stride += 4; + } + + nrect_max = (vert_stride * nrect) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? + (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nrect; + + while (nrect) { + int mrect, rect_processed; + int vb_stride; + + mrect = nrect > nrect_max ? nrect_max : nrect; + glamor_setup_composite_vbo(screen, mrect * vert_stride); + rect_processed = mrect; + vb_stride = glamor_priv->vb_stride / sizeof(float); + while (mrect--) { + INT16 x_source; + INT16 y_source; + INT16 x_mask; + INT16 y_mask; + INT16 x_dest; + INT16 y_dest; + CARD16 width; + CARD16 height; + + x_dest = rects->x_dst + dest_x_off; + y_dest = rects->y_dst + dest_y_off; + x_source = rects->x_src + source_x_off; + y_source = rects->y_src + source_y_off; + x_mask = rects->x_mask + mask_x_off; + y_mask = rects->y_mask + mask_y_off; + width = rects->width; + height = rects->height; + + DEBUGF + ("dest(%d,%d) source(%d %d) mask (%d %d), width %d height %d \n", + x_dest, y_dest, x_source, y_source, x_mask, y_mask, width, + height); + vertices = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); + assert(glamor_priv->vbo_offset < + glamor_priv->vbo_size - glamor_priv->vb_stride); + glamor_set_normalize_vcoords_ext(dest_pixmap_priv, dst_xscale, + dst_yscale, x_dest, y_dest, + x_dest + width, y_dest + height, + glamor_priv->yInverted, vertices, + vb_stride); + vertices += 2; + if (key.source != SHADER_SOURCE_SOLID) { + glamor_set_normalize_tcoords_generic(source_pixmap_priv, + source->repeatType, + psrc_matrix, src_xscale, + src_yscale, x_source, + y_source, x_source + width, + y_source + height, + glamor_priv->yInverted, + vertices, vb_stride); + vertices += 2; + } + + if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID) { + glamor_set_normalize_tcoords_generic(mask_pixmap_priv, + mask->repeatType, + pmask_matrix, mask_xscale, + mask_yscale, x_mask, + y_mask, x_mask + width, + y_mask + height, + glamor_priv->yInverted, + vertices, vb_stride); + } + glamor_priv->render_nr_verts += 4; + glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; + rects++; + } + glamor_flush_composite_rects(screen); + nrect -= rect_processed; + if (two_pass_ca) { + glamor_composite_set_shader_blend(dest_pixmap_priv, + &key_ca, shader_ca, &op_info_ca); + glamor_flush_composite_rects(screen); + if (nrect) + glamor_composite_set_shader_blend(dest_pixmap_priv, + &key, shader, &op_info); + } + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); + dispatch->glDisable(GL_BLEND); #ifndef GLAMOR_GLES2 - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glActiveTexture(GL_TEXTURE1); - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glDisable(GL_TEXTURE_2D); #endif - DEBUGF("finish rendering.\n"); - dispatch->glUseProgram(0); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; - if (saved_source_format) - source->format = saved_source_format; - glamor_put_dispatch(glamor_priv); - - ret = TRUE; - return ret; + DEBUGF("finish rendering.\n"); + dispatch->glUseProgram(0); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; + if (saved_source_format) + source->format = saved_source_format; + glamor_put_dispatch(glamor_priv); + + ret = TRUE; + return ret; } PicturePtr @@ -1472,411 +1475,412 @@ glamor_convert_gradient_picture(ScreenPtr screen, int x_source, int y_source, int width, int height) { - PixmapPtr pixmap; - PicturePtr dst = NULL; - int error; - PictFormatShort format; - if (!source->pDrawable) - format = PICT_a8r8g8b8; - else - format = source->format; + PixmapPtr pixmap; + PicturePtr dst = NULL; + int error; + PictFormatShort format; + + if (!source->pDrawable) + format = PICT_a8r8g8b8; + else + format = source->format; #ifdef GLAMOR_GRADIENT_SHADER - if (!source->pDrawable) { - if (source->pSourcePict->type == SourcePictTypeLinear) { - dst = glamor_generate_linear_gradient_picture(screen, - source, x_source, y_source, width, height, format); - } else if (source->pSourcePict->type == SourcePictTypeRadial) { - dst = glamor_generate_radial_gradient_picture(screen, - source, x_source, y_source, width, height, format); - } - - if (dst) { -#if 0 /* Debug to compare it to pixman, Enable it if needed. */ - glamor_compare_pictures(screen, source, - dst, x_source, y_source, width, height, - 0, 3); + if (!source->pDrawable) { + if (source->pSourcePict->type == SourcePictTypeLinear) { + dst = glamor_generate_linear_gradient_picture(screen, + source, x_source, + y_source, width, + height, format); + } + else if (source->pSourcePict->type == SourcePictTypeRadial) { + dst = glamor_generate_radial_gradient_picture(screen, + source, x_source, + y_source, width, + height, format); + } + + if (dst) { +#if 0 /* Debug to compare it to pixman, Enable it if needed. */ + glamor_compare_pictures(screen, source, + dst, x_source, y_source, width, height, + 0, 3); #endif - return dst; - } - } + return dst; + } + } #endif - pixmap = glamor_create_pixmap(screen, - width, - height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - if (!pixmap) - return NULL; - - dst = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), - format), - 0, 0, serverClient, &error); - glamor_destroy_pixmap(pixmap); - if (!dst) - return NULL; - - ValidatePicture(dst); - - fbComposite(PictOpSrc, source, NULL, dst, x_source, y_source, - 0, 0, 0, 0, width, height); - return dst; + pixmap = glamor_create_pixmap(screen, + width, + height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + if (!pixmap) + return NULL; + + dst = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, &error); + glamor_destroy_pixmap(pixmap); + if (!dst) + return NULL; + + ValidatePicture(dst); + + fbComposite(PictOpSrc, source, NULL, dst, x_source, y_source, + 0, 0, 0, 0, width, height); + return dst; } Bool glamor_composite_clipped_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - RegionPtr region, - int x_source, - int y_source, - int x_mask, - int y_mask, - int x_dest, - int y_dest) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, + int x_source, + int y_source, + int x_mask, int y_mask, int x_dest, int y_dest) { - ScreenPtr screen = dest->pDrawable->pScreen; - PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; - PicturePtr temp_src = source, temp_mask = mask; - glamor_pixmap_private *temp_src_priv = source_pixmap_priv; - glamor_pixmap_private *temp_mask_priv = mask_pixmap_priv; - int x_temp_src, y_temp_src, x_temp_mask, y_temp_mask; - BoxPtr extent; - glamor_composite_rect_t rect[10]; - glamor_composite_rect_t *prect = rect; - int prect_size = ARRAY_SIZE(rect); - int ok = FALSE; - int i; - int width; - int height; - BoxPtr box; - int nbox; - Bool two_pass_ca = FALSE; - - extent = RegionExtents(region); - box = RegionRects(region); - nbox = RegionNumRects(region); - width = extent->x2 - extent->x1; - height = extent->y2 - extent->y1; - - x_temp_src = x_source; - y_temp_src = y_source; - x_temp_mask = x_mask; - y_temp_mask = y_mask; - - DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n", - x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); - - if (source_pixmap_priv) - source_pixmap = source_pixmap_priv->base.pixmap; - - if (mask_pixmap_priv) - mask_pixmap = mask_pixmap_priv->base.pixmap; - - /* XXX is it possible source mask have non-zero drawable.x/y? */ - if (source - && ((!source->pDrawable - && (source->pSourcePict->type != SourcePictTypeSolidFill)) - || (source->pDrawable - && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) - && (source_pixmap->drawable.width != width - || source_pixmap->drawable.height != height)))) { - temp_src = - glamor_convert_gradient_picture(screen, source, - extent->x1 + x_source - x_dest, - extent->y1 + y_source - y_dest, - width, height); - if (!temp_src) { - temp_src = source; - goto out; - } - temp_src_priv = glamor_get_pixmap_private((PixmapPtr)(temp_src->pDrawable)); - x_temp_src = - extent->x1 + x_dest; - y_temp_src = - extent->y1 + y_dest; - } - - if (mask - && - ((!mask->pDrawable - && (mask->pSourcePict->type != SourcePictTypeSolidFill)) - || (mask->pDrawable - && !GLAMOR_PIXMAP_PRIV_HAS_FBO(mask_pixmap_priv) - && (mask_pixmap->drawable.width != width - || mask_pixmap->drawable.height != height)))) { - /* XXX if mask->pDrawable is the same as source->pDrawable, we have an opportunity - * to do reduce one convertion. */ - temp_mask = - glamor_convert_gradient_picture(screen, mask, - extent->x1 + x_mask - x_dest, - extent->y1 + y_mask - y_dest, - width, height); - if (!temp_mask) { - temp_mask = mask; - goto out; - } - temp_mask_priv = glamor_get_pixmap_private((PixmapPtr)(temp_mask->pDrawable)); - x_temp_mask = - extent->x1 + x_dest; - y_temp_mask = - extent->y1 + y_dest; - } - /* Do two-pass PictOpOver componentAlpha, until we enable - * dual source color blending. - */ - - if (mask && mask->componentAlpha) { - if (op == PictOpOver) { - two_pass_ca = TRUE; - op = PictOpOutReverse; - } - } - - if (!mask && temp_src) { - if (glamor_composite_with_copy(op, temp_src, dest, - x_temp_src, y_temp_src, - x_dest, y_dest, region)) { - ok = TRUE; - goto out; - } - } - - /*XXXXX, self copy?*/ - - x_dest += dest->pDrawable->x; - y_dest += dest->pDrawable->y; - if (temp_src && temp_src->pDrawable) { - x_temp_src += temp_src->pDrawable->x; - y_temp_src += temp_src->pDrawable->y; - } - if (temp_mask && temp_mask->pDrawable) { - x_temp_mask += temp_mask->pDrawable->x; - y_temp_mask += temp_mask->pDrawable->y; - } - - if (nbox > ARRAY_SIZE(rect)) { - prect = calloc(nbox, sizeof(*prect)); - if (prect) - prect_size = nbox; - else { - prect = rect; - prect_size = ARRAY_SIZE(rect); - } - } - while(nbox) { - int box_cnt; - box_cnt = nbox > prect_size ? prect_size : nbox; - for (i = 0; i < box_cnt; i++) { - prect[i].x_src = box[i].x1 + x_temp_src - x_dest; - prect[i].y_src = box[i].y1 + y_temp_src - y_dest; - prect[i].x_mask = box[i].x1 + x_temp_mask - x_dest; - prect[i].y_mask = box[i].y1 + y_temp_mask - y_dest; - prect[i].x_dst = box[i].x1; - prect[i].y_dst = box[i].y1; - prect[i].width = box[i].x2 - box[i].x1; - prect[i].height = box[i].y2 - box[i].y1; - DEBUGF("dest %d %d \n", prect[i].x_dst, prect[i].y_dst); - } - ok = glamor_composite_with_shader(op, temp_src, temp_mask, dest, - temp_src_priv, temp_mask_priv, - dest_pixmap_priv, - box_cnt, prect, two_pass_ca); - if (!ok) - break; - nbox -= box_cnt; - box += box_cnt; - } - - if (prect != rect) - free(prect); -out: - if (temp_src != source) - FreePicture(temp_src, 0); - if (temp_mask != mask) - FreePicture(temp_mask, 0); - - return ok; + ScreenPtr screen = dest->pDrawable->pScreen; + PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; + PicturePtr temp_src = source, temp_mask = mask; + glamor_pixmap_private *temp_src_priv = source_pixmap_priv; + glamor_pixmap_private *temp_mask_priv = mask_pixmap_priv; + int x_temp_src, y_temp_src, x_temp_mask, y_temp_mask; + BoxPtr extent; + glamor_composite_rect_t rect[10]; + glamor_composite_rect_t *prect = rect; + int prect_size = ARRAY_SIZE(rect); + int ok = FALSE; + int i; + int width; + int height; + BoxPtr box; + int nbox; + Bool two_pass_ca = FALSE; + + extent = RegionExtents(region); + box = RegionRects(region); + nbox = RegionNumRects(region); + width = extent->x2 - extent->x1; + height = extent->y2 - extent->y1; + + x_temp_src = x_source; + y_temp_src = y_source; + x_temp_mask = x_mask; + y_temp_mask = y_mask; + + DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n", + x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); + + if (source_pixmap_priv) + source_pixmap = source_pixmap_priv->base.pixmap; + + if (mask_pixmap_priv) + mask_pixmap = mask_pixmap_priv->base.pixmap; + + /* XXX is it possible source mask have non-zero drawable.x/y? */ + if (source + && ((!source->pDrawable + && (source->pSourcePict->type != SourcePictTypeSolidFill)) + || (source->pDrawable + && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) + && (source_pixmap->drawable.width != width + || source_pixmap->drawable.height != height)))) { + temp_src = + glamor_convert_gradient_picture(screen, source, + extent->x1 + x_source - x_dest, + extent->y1 + y_source - y_dest, + width, height); + if (!temp_src) { + temp_src = source; + goto out; + } + temp_src_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_src->pDrawable)); + x_temp_src = -extent->x1 + x_dest; + y_temp_src = -extent->y1 + y_dest; + } + + if (mask + && + ((!mask->pDrawable + && (mask->pSourcePict->type != SourcePictTypeSolidFill)) + || (mask->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(mask_pixmap_priv) + && (mask_pixmap->drawable.width != width + || mask_pixmap->drawable.height != height)))) { + /* XXX if mask->pDrawable is the same as source->pDrawable, we have an opportunity + * to do reduce one convertion. */ + temp_mask = + glamor_convert_gradient_picture(screen, mask, + extent->x1 + x_mask - x_dest, + extent->y1 + y_mask - y_dest, + width, height); + if (!temp_mask) { + temp_mask = mask; + goto out; + } + temp_mask_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_mask->pDrawable)); + x_temp_mask = -extent->x1 + x_dest; + y_temp_mask = -extent->y1 + y_dest; + } + /* Do two-pass PictOpOver componentAlpha, until we enable + * dual source color blending. + */ + + if (mask && mask->componentAlpha) { + if (op == PictOpOver) { + two_pass_ca = TRUE; + op = PictOpOutReverse; + } + } + + if (!mask && temp_src) { + if (glamor_composite_with_copy(op, temp_src, dest, + x_temp_src, y_temp_src, + x_dest, y_dest, region)) { + ok = TRUE; + goto out; + } + } + + /*XXXXX, self copy? */ + + x_dest += dest->pDrawable->x; + y_dest += dest->pDrawable->y; + if (temp_src && temp_src->pDrawable) { + x_temp_src += temp_src->pDrawable->x; + y_temp_src += temp_src->pDrawable->y; + } + if (temp_mask && temp_mask->pDrawable) { + x_temp_mask += temp_mask->pDrawable->x; + y_temp_mask += temp_mask->pDrawable->y; + } + + if (nbox > ARRAY_SIZE(rect)) { + prect = calloc(nbox, sizeof(*prect)); + if (prect) + prect_size = nbox; + else { + prect = rect; + prect_size = ARRAY_SIZE(rect); + } + } + while (nbox) { + int box_cnt; + + box_cnt = nbox > prect_size ? prect_size : nbox; + for (i = 0; i < box_cnt; i++) { + prect[i].x_src = box[i].x1 + x_temp_src - x_dest; + prect[i].y_src = box[i].y1 + y_temp_src - y_dest; + prect[i].x_mask = box[i].x1 + x_temp_mask - x_dest; + prect[i].y_mask = box[i].y1 + y_temp_mask - y_dest; + prect[i].x_dst = box[i].x1; + prect[i].y_dst = box[i].y1; + prect[i].width = box[i].x2 - box[i].x1; + prect[i].height = box[i].y2 - box[i].y1; + DEBUGF("dest %d %d \n", prect[i].x_dst, prect[i].y_dst); + } + ok = glamor_composite_with_shader(op, temp_src, temp_mask, dest, + temp_src_priv, temp_mask_priv, + dest_pixmap_priv, + box_cnt, prect, two_pass_ca); + if (!ok) + break; + nbox -= box_cnt; + box += box_cnt; + } + + if (prect != rect) + free(prect); + out: + if (temp_src != source) + FreePicture(temp_src, 0); + if (temp_mask != mask) + FreePicture(temp_mask, 0); + + return ok; } static Bool _glamor_composite(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height, Bool fallback) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height, Bool fallback) { - ScreenPtr screen = dest->pDrawable->pScreen; - glamor_pixmap_private *dest_pixmap_priv; - glamor_pixmap_private *source_pixmap_priv = - NULL, *mask_pixmap_priv = NULL; - PixmapPtr dest_pixmap = - glamor_get_drawable_pixmap(dest->pDrawable); - PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - Bool ret = TRUE; - RegionRec region; - BoxPtr extent; - int nbox, ok = FALSE; - PixmapPtr sub_dest_pixmap = NULL; - PixmapPtr sub_source_pixmap = NULL; - PixmapPtr sub_mask_pixmap = NULL; - int dest_x_off, dest_y_off, saved_dest_x, saved_dest_y; - int source_x_off, source_y_off, saved_source_x, saved_source_y; - int mask_x_off, mask_y_off, saved_mask_x, saved_mask_y; - DrawablePtr saved_dest_drawable; - DrawablePtr saved_source_drawable; - DrawablePtr saved_mask_drawable; - int force_clip = 0; - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - - if (source->pDrawable) { - source_pixmap = glamor_get_drawable_pixmap(source->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - if (source_pixmap_priv && source_pixmap_priv->type == GLAMOR_DRM_ONLY) - goto fail; - } - - if (mask && mask->pDrawable) { - mask_pixmap = glamor_get_drawable_pixmap(mask->pDrawable); - mask_pixmap_priv = glamor_get_pixmap_private(mask_pixmap); - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_DRM_ONLY) - goto fail; - } - - DEBUGF("source pixmap %p (%d %d) mask(%d %d) dest(%d %d) width %d height %d \n", - source_pixmap, x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - goto fail; - } - - if (op >= ARRAY_SIZE(composite_op_info)) - goto fail; - - if (mask && mask->componentAlpha) { - if (op == PictOpAtop - || op == PictOpAtopReverse - || op == PictOpXor - || op >= PictOpSaturate) { - glamor_fallback - ("glamor_composite(): component alpha op %x\n", op); - goto fail; - } - } - - if ((source && source->filter >= PictFilterConvolution) - || (mask && mask->filter >= PictFilterConvolution)) { - glamor_fallback("glamor_composite(): unsupported filter\n"); - goto fail; - } - - if (!miComputeCompositeRegion(®ion, - source, mask, dest, - x_source + (source_pixmap ? source->pDrawable->x : 0), - y_source + (source_pixmap ? source->pDrawable->y : 0), - x_mask + (mask_pixmap ? mask->pDrawable->x : 0), - y_mask + (mask_pixmap ? mask->pDrawable->y : 0), - x_dest + dest->pDrawable->x, - y_dest + dest->pDrawable->y, - width, - height)) { - ret = TRUE; - goto done; - } - - nbox = REGION_NUM_RECTS(®ion); - DEBUGF("first clipped when compositing.\n"); - DEBUGRegionPrint(®ion); - extent = RegionExtents(®ion); - if (nbox == 0) { - ret = TRUE; - goto done; - } - /* If destination is not a large pixmap, but the region is larger - * than texture size limitation, and source or mask is memory pixmap, - * then there may be need to load a large memory pixmap to a - * texture, and this is not permitted. Then we force to clip the - * destination and make sure latter will not upload a large memory - * pixmap. */ - if (!glamor_check_fbo_size(glamor_priv, - extent->x2 - extent->x1, extent->y2 - extent->y1) - && (dest_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) - && ((source_pixmap_priv - && (source_pixmap_priv->type == GLAMOR_MEMORY || source->repeatType == RepeatPad)) - || (mask_pixmap_priv - && (mask_pixmap_priv->type == GLAMOR_MEMORY || mask->repeatType == RepeatPad)) - || (!source_pixmap_priv - && (source->pSourcePict->type != SourcePictTypeSolidFill)) - || (!mask_pixmap_priv && mask - && mask->pSourcePict->type != SourcePictTypeSolidFill))) - force_clip = 1; - - if (force_clip || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || (source_pixmap_priv - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) - || (mask_pixmap_priv - && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) - ok = glamor_composite_largepixmap_region(op, - source, mask, dest, - source_pixmap_priv, - mask_pixmap_priv, - dest_pixmap_priv, - ®ion, force_clip, - x_source, y_source, - x_mask, y_mask, - x_dest, y_dest, - width, height); - else - ok = glamor_composite_clipped_region(op, source, - mask, dest, - source_pixmap_priv, - mask_pixmap_priv, - dest_pixmap_priv, - ®ion, - x_source, y_source, - x_mask, y_mask, - x_dest, y_dest); - - REGION_UNINIT(dest->pDrawable->pScreen, ®ion); - - if (ok) - goto done; -fail: - - if (!fallback - && glamor_ddx_fallback_check_pixmap(&dest_pixmap->drawable) - && (!source_pixmap - || glamor_ddx_fallback_check_pixmap(&source_pixmap->drawable)) - && (!mask_pixmap - || glamor_ddx_fallback_check_pixmap(&mask_pixmap->drawable))) { - ret = FALSE; - goto done; - } - - glamor_fallback - ("from picts %p:%p %dx%d / %p:%p %d x %d (%c,%c) to pict %p:%p %dx%d (%c)\n", - source, source->pDrawable, - source->pDrawable ? source->pDrawable->width : 0, - source->pDrawable ? source->pDrawable->height : 0, mask, - (!mask) ? NULL : mask->pDrawable, (!mask - || !mask->pDrawable) ? 0 : - mask->pDrawable->width, (!mask - || !mask-> - pDrawable) ? 0 : mask->pDrawable-> - height, glamor_get_picture_location(source), - glamor_get_picture_location(mask), dest, dest->pDrawable, - dest->pDrawable->width, dest->pDrawable->height, - glamor_get_picture_location(dest)); + ScreenPtr screen = dest->pDrawable->pScreen; + glamor_pixmap_private *dest_pixmap_priv; + glamor_pixmap_private *source_pixmap_priv = NULL, *mask_pixmap_priv = NULL; + PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); + PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + Bool ret = TRUE; + RegionRec region; + BoxPtr extent; + int nbox, ok = FALSE; + PixmapPtr sub_dest_pixmap = NULL; + PixmapPtr sub_source_pixmap = NULL; + PixmapPtr sub_mask_pixmap = NULL; + int dest_x_off, dest_y_off, saved_dest_x, saved_dest_y; + int source_x_off, source_y_off, saved_source_x, saved_source_y; + int mask_x_off, mask_y_off, saved_mask_x, saved_mask_y; + DrawablePtr saved_dest_drawable; + DrawablePtr saved_source_drawable; + DrawablePtr saved_mask_drawable; + int force_clip = 0; + + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + + if (source->pDrawable) { + source_pixmap = glamor_get_drawable_pixmap(source->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + if (source_pixmap_priv && source_pixmap_priv->type == GLAMOR_DRM_ONLY) + goto fail; + } + + if (mask && mask->pDrawable) { + mask_pixmap = glamor_get_drawable_pixmap(mask->pDrawable); + mask_pixmap_priv = glamor_get_pixmap_private(mask_pixmap); + if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_DRM_ONLY) + goto fail; + } + + DEBUGF + ("source pixmap %p (%d %d) mask(%d %d) dest(%d %d) width %d height %d \n", + source_pixmap, x_source, y_source, x_mask, y_mask, x_dest, y_dest, + width, height); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + goto fail; + } + + if (op >= ARRAY_SIZE(composite_op_info)) + goto fail; + + if (mask && mask->componentAlpha) { + if (op == PictOpAtop + || op == PictOpAtopReverse + || op == PictOpXor || op >= PictOpSaturate) { + glamor_fallback("glamor_composite(): component alpha op %x\n", op); + goto fail; + } + } + + if ((source && source->filter >= PictFilterConvolution) + || (mask && mask->filter >= PictFilterConvolution)) { + glamor_fallback("glamor_composite(): unsupported filter\n"); + goto fail; + } + + if (!miComputeCompositeRegion(®ion, + source, mask, dest, + x_source + + (source_pixmap ? source->pDrawable->x : 0), + y_source + + (source_pixmap ? source->pDrawable->y : 0), + x_mask + + (mask_pixmap ? mask->pDrawable->x : 0), + y_mask + + (mask_pixmap ? mask->pDrawable->y : 0), + x_dest + dest->pDrawable->x, + y_dest + dest->pDrawable->y, width, height)) { + ret = TRUE; + goto done; + } + + nbox = REGION_NUM_RECTS(®ion); + DEBUGF("first clipped when compositing.\n"); + DEBUGRegionPrint(®ion); + extent = RegionExtents(®ion); + if (nbox == 0) { + ret = TRUE; + goto done; + } + /* If destination is not a large pixmap, but the region is larger + * than texture size limitation, and source or mask is memory pixmap, + * then there may be need to load a large memory pixmap to a + * texture, and this is not permitted. Then we force to clip the + * destination and make sure latter will not upload a large memory + * pixmap. */ + if (!glamor_check_fbo_size(glamor_priv, + extent->x2 - extent->x1, extent->y2 - extent->y1) + && (dest_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) + && ((source_pixmap_priv + && (source_pixmap_priv->type == GLAMOR_MEMORY || + source->repeatType == RepeatPad)) + || (mask_pixmap_priv && + (mask_pixmap_priv->type == GLAMOR_MEMORY || + mask->repeatType == RepeatPad)) + || (!source_pixmap_priv && + (source->pSourcePict->type != SourcePictTypeSolidFill)) + || (!mask_pixmap_priv && mask && + mask->pSourcePict->type != SourcePictTypeSolidFill))) + force_clip = 1; + + if (force_clip || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || (source_pixmap_priv + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) + || (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) + ok = glamor_composite_largepixmap_region(op, + source, mask, dest, + source_pixmap_priv, + mask_pixmap_priv, + dest_pixmap_priv, + ®ion, force_clip, + x_source, y_source, + x_mask, y_mask, + x_dest, y_dest, width, height); + else + ok = glamor_composite_clipped_region(op, source, + mask, dest, + source_pixmap_priv, + mask_pixmap_priv, + dest_pixmap_priv, + ®ion, + x_source, y_source, + x_mask, y_mask, x_dest, y_dest); + + REGION_UNINIT(dest->pDrawable->pScreen, ®ion); + + if (ok) + goto done; + fail: + + if (!fallback && glamor_ddx_fallback_check_pixmap(&dest_pixmap->drawable) + && (!source_pixmap + || glamor_ddx_fallback_check_pixmap(&source_pixmap->drawable)) + && (!mask_pixmap + || glamor_ddx_fallback_check_pixmap(&mask_pixmap->drawable))) { + ret = FALSE; + goto done; + } + + glamor_fallback + ("from picts %p:%p %dx%d / %p:%p %d x %d (%c,%c) to pict %p:%p %dx%d (%c)\n", + source, source->pDrawable, + source->pDrawable ? source->pDrawable->width : 0, + source->pDrawable ? source->pDrawable->height : 0, mask, + (!mask) ? NULL : mask->pDrawable, (!mask + || !mask->pDrawable) ? 0 : + mask->pDrawable->width, (!mask + || !mask->pDrawable) ? 0 : mask-> + pDrawable->height, glamor_get_picture_location(source), + glamor_get_picture_location(mask), dest, dest->pDrawable, + dest->pDrawable->width, dest->pDrawable->height, + glamor_get_picture_location(dest)); #define GET_SUB_PICTURE(p, access) do { \ glamor_get_drawable_deltas(p->pDrawable, p ##_pixmap, \ @@ -1897,32 +1901,28 @@ fail: x_ ##p = 0; \ y_ ##p = 0; \ } } while(0) - GET_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); - if (source->pDrawable && !source->transform) - GET_SUB_PICTURE(source, GLAMOR_ACCESS_RO); - if (mask && mask->pDrawable && !mask->transform) - GET_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); - - if (glamor_prepare_access_picture(dest, GLAMOR_ACCESS_RW)) { - if (source_pixmap == dest_pixmap || glamor_prepare_access_picture - (source, GLAMOR_ACCESS_RO)) { - if (!mask - || glamor_prepare_access_picture(mask, - GLAMOR_ACCESS_RO)) - { - fbComposite(op, - source, mask, dest, - x_source, y_source, - x_mask, y_mask, x_dest, - y_dest, width, height); - if (mask) - glamor_finish_access_picture(mask, GLAMOR_ACCESS_RO); - } - if (source_pixmap != dest_pixmap) - glamor_finish_access_picture(source, GLAMOR_ACCESS_RO); - } - glamor_finish_access_picture(dest, GLAMOR_ACCESS_RW); - } + GET_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); + if (source->pDrawable && !source->transform) + GET_SUB_PICTURE(source, GLAMOR_ACCESS_RO); + if (mask && mask->pDrawable && !mask->transform) + GET_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); + + if (glamor_prepare_access_picture(dest, GLAMOR_ACCESS_RW)) { + if (source_pixmap == dest_pixmap || glamor_prepare_access_picture + (source, GLAMOR_ACCESS_RO)) { + if (!mask || glamor_prepare_access_picture(mask, GLAMOR_ACCESS_RO)) { + fbComposite(op, + source, mask, dest, + x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height); + if (mask) + glamor_finish_access_picture(mask, GLAMOR_ACCESS_RO); + } + if (source_pixmap != dest_pixmap) + glamor_finish_access_picture(source, GLAMOR_ACCESS_RO); + } + glamor_finish_access_picture(dest, GLAMOR_ACCESS_RW); + } #define PUT_SUB_PICTURE(p, access) do { \ if (sub_ ##p ##_pixmap != NULL) { \ @@ -1938,198 +1938,196 @@ fail: y_ ##p + p ##_y_off + p->pDrawable->y, \ width, height, access); \ }} while(0) - if (mask && mask->pDrawable) - PUT_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); - if (source->pDrawable) - PUT_SUB_PICTURE(source, GLAMOR_ACCESS_RO); - PUT_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); - done: - return ret; + if (mask && mask->pDrawable) + PUT_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); + if (source->pDrawable) + PUT_SUB_PICTURE(source, GLAMOR_ACCESS_RO); + PUT_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); + done: + return ret; } void glamor_composite(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, CARD16 width, CARD16 height) { - _glamor_composite(op, source, mask, dest, x_source, y_source, - x_mask, y_mask, x_dest, y_dest, width, height, - TRUE); + _glamor_composite(op, source, mask, dest, x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height, TRUE); } Bool glamor_composite_nf(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, CARD16 width, CARD16 height) { - return _glamor_composite(op, source, mask, dest, x_source, y_source, - x_mask, y_mask, x_dest, y_dest, width, height, - FALSE); + return _glamor_composite(op, source, mask, dest, x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height, + FALSE); } static void glamor_get_src_rect_extent(int nrect, - glamor_composite_rect_t *rects, - BoxPtr extent) + glamor_composite_rect_t *rects, BoxPtr extent) { - extent->x1 = MAXSHORT; - extent->y1 = MAXSHORT; - extent->x2 = MINSHORT; - extent->y2 = MINSHORT; - - while(nrect--) { - if (extent->x1 > rects->x_src) - extent->x1 = rects->x_src; - if (extent->y1 > rects->y_src) - extent->y1 = rects->y_src; - if (extent->x2 < rects->x_src + rects->width) - extent->x2 = rects->x_src + rects->width; - if (extent->y2 < rects->y_src + rects->height) - extent->y2 = rects->y_src + rects->height; - rects++; - } + extent->x1 = MAXSHORT; + extent->y1 = MAXSHORT; + extent->x2 = MINSHORT; + extent->y2 = MINSHORT; + + while (nrect--) { + if (extent->x1 > rects->x_src) + extent->x1 = rects->x_src; + if (extent->y1 > rects->y_src) + extent->y1 = rects->y_src; + if (extent->x2 < rects->x_src + rects->width) + extent->x2 = rects->x_src + rects->width; + if (extent->y2 < rects->y_src + rects->height) + extent->y2 = rects->y_src + rects->height; + rects++; + } } static void glamor_composite_src_rect_translate(int nrect, - glamor_composite_rect_t *rects, - int x, int y) + glamor_composite_rect_t *rects, + int x, int y) { - while(nrect--) { - rects->x_src += x; - rects->y_src += y; - rects++; - } + while (nrect--) { + rects->x_src += x; + rects->y_src += y; + rects++; + } } void glamor_composite_glyph_rects(CARD8 op, - PicturePtr src, PicturePtr mask, PicturePtr dst, - int nrect, glamor_composite_rect_t * rects) + PicturePtr src, PicturePtr mask, PicturePtr dst, + int nrect, glamor_composite_rect_t *rects) { - int n; - PicturePtr temp_src = NULL; - glamor_composite_rect_t *r; - - ValidatePicture(src); - ValidatePicture(dst); - if (!(glamor_is_large_picture(src) - || (mask && glamor_is_large_picture(mask)) - || glamor_is_large_picture(dst))) { - glamor_pixmap_private *src_pixmap_priv = NULL; - glamor_pixmap_private *mask_pixmap_priv = NULL; - glamor_pixmap_private *dst_pixmap_priv; - glamor_pixmap_private *temp_src_priv = NULL; - BoxRec src_extent; - - dst_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(dst->pDrawable)); - - if (mask && mask->pDrawable) - mask_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(mask->pDrawable)); - if (src->pDrawable) - src_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(src->pDrawable)); - - if (!src->pDrawable - && (src->pSourcePict->type != SourcePictTypeSolidFill)) { - glamor_get_src_rect_extent(nrect, rects, &src_extent); - temp_src = glamor_convert_gradient_picture(dst->pDrawable->pScreen, - src, - src_extent.x1, src_extent.y1, - src_extent.x2 - src_extent.x1, - src_extent.y2 - src_extent.y1); - if (!temp_src) - goto fallback; - - temp_src_priv = glamor_get_pixmap_private - ((PixmapPtr)(temp_src->pDrawable)); - glamor_composite_src_rect_translate(nrect, rects, - -src_extent.x1, -src_extent.y1); - } else { - temp_src = src; - temp_src_priv = src_pixmap_priv; - } - - if (mask && mask->componentAlpha) { - if (op == PictOpOver) { - if (glamor_composite_with_shader(PictOpOutReverse, - temp_src, mask, dst, temp_src_priv, - mask_pixmap_priv, dst_pixmap_priv, nrect, rects, - TRUE)) - goto done; - } - } else { - if (glamor_composite_with_shader(op, temp_src, mask, dst, temp_src_priv, - mask_pixmap_priv, dst_pixmap_priv, nrect, rects, FALSE)) - goto done; - } - } -fallback: - n = nrect; - r = rects; - - while (n--) { - CompositePicture(op, - temp_src ? temp_src : src, - mask, - dst, - r->x_src, r->y_src, - r->x_mask, r->y_mask, - r->x_dst, r->y_dst, r->width, r->height); - r++; - } - -done: - if (temp_src && temp_src != src) - FreePicture(temp_src, 0); + int n; + PicturePtr temp_src = NULL; + glamor_composite_rect_t *r; + + ValidatePicture(src); + ValidatePicture(dst); + if (!(glamor_is_large_picture(src) + || (mask && glamor_is_large_picture(mask)) + || glamor_is_large_picture(dst))) { + glamor_pixmap_private *src_pixmap_priv = NULL; + glamor_pixmap_private *mask_pixmap_priv = NULL; + glamor_pixmap_private *dst_pixmap_priv; + glamor_pixmap_private *temp_src_priv = NULL; + BoxRec src_extent; + + dst_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(dst->pDrawable)); + + if (mask && mask->pDrawable) + mask_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(mask->pDrawable)); + if (src->pDrawable) + src_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(src->pDrawable)); + + if (!src->pDrawable + && (src->pSourcePict->type != SourcePictTypeSolidFill)) { + glamor_get_src_rect_extent(nrect, rects, &src_extent); + temp_src = glamor_convert_gradient_picture(dst->pDrawable->pScreen, + src, + src_extent.x1, + src_extent.y1, + src_extent.x2 - + src_extent.x1, + src_extent.y2 - + src_extent.y1); + if (!temp_src) + goto fallback; + + temp_src_priv = glamor_get_pixmap_private + ((PixmapPtr) (temp_src->pDrawable)); + glamor_composite_src_rect_translate(nrect, rects, + -src_extent.x1, -src_extent.y1); + } + else { + temp_src = src; + temp_src_priv = src_pixmap_priv; + } + + if (mask && mask->componentAlpha) { + if (op == PictOpOver) { + if (glamor_composite_with_shader(PictOpOutReverse, + temp_src, mask, dst, + temp_src_priv, + mask_pixmap_priv, + dst_pixmap_priv, nrect, rects, + TRUE)) + goto done; + } + } + else { + if (glamor_composite_with_shader + (op, temp_src, mask, dst, temp_src_priv, mask_pixmap_priv, + dst_pixmap_priv, nrect, rects, FALSE)) + goto done; + } + } + fallback: + n = nrect; + r = rects; + + while (n--) { + CompositePicture(op, + temp_src ? temp_src : src, + mask, + dst, + r->x_src, r->y_src, + r->x_mask, r->y_mask, + r->x_dst, r->y_dst, r->width, r->height); + r++; + } + + done: + if (temp_src && temp_src != src) + FreePicture(temp_src, 0); } static Bool -_glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects, - Bool fallback) +_glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, + int nRect, xRectangle *rects, Bool fallback) { - miCompositeRects(op, pDst, color, nRect, rects); - return TRUE; + miCompositeRects(op, pDst, color, nRect, rects); + return TRUE; } void -glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects) +glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects) { - _glamor_composite_rects(op, pDst, color, nRect, rects, TRUE); + _glamor_composite_rects(op, pDst, color, nRect, rects, TRUE); } Bool -glamor_composite_rects_nf (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects) +glamor_composite_rects_nf(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects) { - return _glamor_composite_rects(op, pDst, color, nRect, rects, FALSE); + return _glamor_composite_rects(op, pDst, color, nRect, rects, FALSE); } -#endif /* RENDER */ +#endif /* RENDER */ diff --git a/xorg-server/glamor/glamor_setspans.c b/xorg-server/glamor/glamor_setspans.c index 3d447b606..22fe88ce5 100644 --- a/xorg-server/glamor/glamor_setspans.c +++ b/xorg-server/glamor/glamor_setspans.c @@ -30,82 +30,83 @@ static Bool _glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int numPoints, int sorted, - Bool fallback) + DDXPointPtr points, int *widths, int numPoints, int sorted, + Bool fallback) { - PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *dest_pixmap_priv; - int i; - uint8_t *drawpixels_src = (uint8_t *) src; - RegionPtr clip = fbGetCompositeClip(gc); - BoxRec *pbox; - int x_off, y_off; - Bool ret = FALSE; + PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *dest_pixmap_priv; + int i; + uint8_t *drawpixels_src = (uint8_t *) src; + RegionPtr clip = fbGetCompositeClip(gc); + BoxRec *pbox; + int x_off, y_off; + Bool ret = FALSE; - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - glamor_fallback("pixmap has no fbo.\n"); - goto fail; - } + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + glamor_fallback("pixmap has no fbo.\n"); + goto fail; + } - /* XXX Shall we set alu here? */ - if (!glamor_set_planemask(dest_pixmap, gc->planemask)) - goto fail; + /* XXX Shall we set alu here? */ + if (!glamor_set_planemask(dest_pixmap, gc->planemask)) + goto fail; - glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); - for (i = 0; i < numPoints; i++) { + glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); + for (i = 0; i < numPoints; i++) { - int n = REGION_NUM_RECTS(clip); - pbox = REGION_RECTS(clip); - while (n--) { - int x1 = points[i].x; - int x2 = x1 + widths[i]; - int y1 = points[i].y; + int n = REGION_NUM_RECTS(clip); - if (pbox->y1 > points[i].y || pbox->y2 < points[i].y) - break; - x1 = x1 > pbox->x1 ? x1 : pbox->x1; - x2 = x2 < pbox->x2 ? x2 : pbox->x2; - if (x1 >= x2) - continue; - glamor_upload_sub_pixmap_to_texture(dest_pixmap, x1 + x_off, y1 + y_off, x2 - x1, 1, - PixmapBytePad(widths[i], drawable->depth), - drawpixels_src, 0); - } - drawpixels_src += PixmapBytePad(widths[i], drawable->depth); - } - ret = TRUE; - goto done; + pbox = REGION_RECTS(clip); + while (n--) { + int x1 = points[i].x; + int x2 = x1 + widths[i]; + int y1 = points[i].y; -fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable)) - goto done; + if (pbox->y1 > points[i].y || pbox->y2 < points[i].y) + break; + x1 = x1 > pbox->x1 ? x1 : pbox->x1; + x2 = x2 < pbox->x2 ? x2 : pbox->x2; + if (x1 >= x2) + continue; + glamor_upload_sub_pixmap_to_texture(dest_pixmap, x1 + x_off, + y1 + y_off, x2 - x1, 1, + PixmapBytePad(widths[i], + drawable->depth), + drawpixels_src, 0); + } + drawpixels_src += PixmapBytePad(widths[i], drawable->depth); + } + ret = TRUE; + goto done; - glamor_fallback("to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - fbSetSpans(drawable, gc, src, points, widths, numPoints, sorted); - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable)) + goto done; -done: - return ret; + glamor_fallback("to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + fbSetSpans(drawable, gc, src, points, widths, numPoints, sorted); + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; + + done: + return ret; } void glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted) + DDXPointPtr points, int *widths, int n, int sorted) { - _glamor_set_spans(drawable, gc, src, points, - widths, n, sorted, TRUE); + _glamor_set_spans(drawable, gc, src, points, widths, n, sorted, TRUE); } Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted) + DDXPointPtr points, int *widths, int n, int sorted) { - return _glamor_set_spans(drawable, gc, src, points, - widths, n, sorted, FALSE); + return _glamor_set_spans(drawable, gc, src, points, + widths, n, sorted, FALSE); } diff --git a/xorg-server/glamor/glamor_tile.c b/xorg-server/glamor/glamor_tile.c index 60486cfc0..9c8e521b9 100644 --- a/xorg-server/glamor/glamor_tile.c +++ b/xorg-server/glamor/glamor_tile.c @@ -36,290 +36,276 @@ void glamor_init_tile_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *tile_vs = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 tile_texture;\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " tile_texture = v_texcoord0.xy;\n" "}\n"; - const char *tile_fs = - GLAMOR_DEFAULT_PRECISION - "varying vec2 tile_texture;\n" - "uniform sampler2D sampler;\n" - "uniform vec2 wh;" - "void main()\n" - "{\n" - " vec2 rel_tex;" - " rel_tex = tile_texture * wh; \n" - " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh); \n" - " gl_FragColor = texture2D(sampler, rel_tex);\n" - "}\n"; - GLint fs_prog, vs_prog; - GLint sampler_uniform_location; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->tile_prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, tile_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - tile_fs); - dispatch->glAttachShader(glamor_priv->tile_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->tile_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->tile_prog, - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->tile_prog, - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, glamor_priv->tile_prog); - - sampler_uniform_location = - dispatch->glGetUniformLocation(glamor_priv->tile_prog, - "sampler"); - dispatch->glUseProgram(glamor_priv->tile_prog); - dispatch->glUniform1i(sampler_uniform_location, 0); - - glamor_priv->tile_wh = - dispatch->glGetUniformLocation(glamor_priv->tile_prog, - "wh"); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *tile_vs = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 tile_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " tile_texture = v_texcoord0.xy;\n" + "}\n"; + const char *tile_fs = + GLAMOR_DEFAULT_PRECISION + "varying vec2 tile_texture;\n" + "uniform sampler2D sampler;\n" + "uniform vec2 wh;" + "void main()\n" + "{\n" + " vec2 rel_tex;" + " rel_tex = tile_texture * wh; \n" + " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh); \n" + " gl_FragColor = texture2D(sampler, rel_tex);\n" + "}\n"; + GLint fs_prog, vs_prog; + GLint sampler_uniform_location; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->tile_prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, tile_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, tile_fs); + dispatch->glAttachShader(glamor_priv->tile_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->tile_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->tile_prog, + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->tile_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->tile_prog); + + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->tile_prog, "sampler"); + dispatch->glUseProgram(glamor_priv->tile_prog); + dispatch->glUniform1i(sampler_uniform_location, 0); + + glamor_priv->tile_wh = + dispatch->glGetUniformLocation(glamor_priv->tile_prog, "wh"); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); } void glamor_fini_tile_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->tile_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->tile_prog); + glamor_put_dispatch(glamor_priv); } static void _glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - int tile_x, int tile_y) + int x, int y, int width, int height, int tile_x, int tile_y) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int x1 = x; - int x2 = x + width; - int y1 = y; - int y2 = y + height; - int tile_x1 = tile_x; - int tile_x2 = tile_x + width; - int tile_y1 = tile_y; - int tile_y2 = tile_y + height; - float vertices[8]; - float source_texcoords[8]; - GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; - glamor_pixmap_private *src_pixmap_priv; - glamor_pixmap_private *dst_pixmap_priv; - float wh[4]; - src_pixmap_priv = glamor_get_pixmap_private(tile); - dst_pixmap_priv = glamor_get_pixmap_private(pixmap); - - glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); - pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); - pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, - &src_yscale); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(glamor_priv->tile_prog); - - glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv); - dispatch->glUniform2fv(glamor_priv->tile_wh, 1, wh); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, - src_pixmap_priv->base.fbo->tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_REPEAT); + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int x1 = x; + int x2 = x + width; + int y1 = y; + int y2 = y + height; + int tile_x1 = tile_x; + int tile_x2 = tile_x + width; + int tile_y1 = tile_y; + int tile_y2 = tile_y + height; + float vertices[8]; + float source_texcoords[8]; + GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; + glamor_pixmap_private *src_pixmap_priv; + glamor_pixmap_private *dst_pixmap_priv; + float wh[4]; + + src_pixmap_priv = glamor_get_pixmap_private(tile); + dst_pixmap_priv = glamor_get_pixmap_private(pixmap); + + glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); + pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); + pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->tile_prog); + + glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv); + dispatch->glUniform2fv(glamor_priv->tile_wh, 1, wh); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - glamor_set_repeat_normalize_tcoords - (src_pixmap_priv, RepeatNormal, - src_xscale, src_yscale, - tile_x1, tile_y1, - tile_x2, tile_y2, - glamor_priv->yInverted, - source_texcoords); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - source_texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_set_normalize_vcoords(dst_pixmap_priv, dst_xscale, dst_yscale, - x1, y1, - x2, y2, - glamor_priv->yInverted, vertices); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + glamor_set_repeat_normalize_tcoords + (src_pixmap_priv, RepeatNormal, + src_xscale, src_yscale, + tile_x1, tile_y1, + tile_x2, tile_y2, glamor_priv->yInverted, source_texcoords); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), source_texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_set_normalize_vcoords(dst_pixmap_priv, dst_xscale, dst_yscale, + x1, y1, + x2, y2, glamor_priv->yInverted, vertices); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; } Bool glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - int tile_x, int tile_y) + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, int tile_x, int tile_y) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *dst_pixmap_priv; - glamor_pixmap_private *src_pixmap_priv; - glamor_gl_dispatch *dispatch; - - dst_pixmap_priv = glamor_get_pixmap_private(pixmap); - src_pixmap_priv = glamor_get_pixmap_private(tile); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) - return FALSE; - - if (glamor_priv->tile_prog == 0) { - glamor_fallback("Tiling unsupported\n"); - goto fail; - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { - /* XXX dynamic uploading candidate. */ - glamor_fallback("Non-texture tile pixmap\n"); - goto fail; - } - - if (!glamor_set_planemask(pixmap, planemask)) { - glamor_fallback("unsupported planemask %lx\n", planemask); - goto fail; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, alu)) { - glamor_fallback("unsupported alu %x\n", alu); - glamor_put_dispatch(glamor_priv); - goto fail; - } - - if (dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - glamor_pixmap_clipped_regions *clipped_dst_regions; - int n_dst_region, i, j, k; - BoxRec box; - RegionRec region; - - box.x1 = x; - box.y1 = y; - box.x2 = x + width; - box.y2 = y + height; - RegionInitBoxes(®ion, &box, 1); - clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, - ®ion, &n_dst_region, 0, 0, 0); - for(i = 0; i < n_dst_region; i++) - { - int n_src_region; - glamor_pixmap_clipped_regions *clipped_src_regions; - BoxPtr current_boxes; - int n_current_boxes; - - SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, clipped_dst_regions[i].block_idx); - - if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionTranslate(clipped_dst_regions[i].region, - tile_x - x, tile_y - y); - DEBUGF("tiled a large src pixmap. %dx%d \n", tile->drawable.width, tile->drawable.height); - clipped_src_regions = glamor_compute_clipped_regions(src_pixmap_priv, - clipped_dst_regions[i].region, - &n_src_region, 1, 0, 0); - DEBUGF("got %d src regions %d \n", n_src_region); - for (j = 0; j < n_src_region; j++) - { - - SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, clipped_src_regions[j].block_idx); - - RegionTranslate(clipped_src_regions[j].region, - x - tile_x, - y - tile_y); - current_boxes = RegionRects(clipped_src_regions[j].region); - n_current_boxes = RegionNumRects(clipped_src_regions[j].region); - for(k = 0; k < n_current_boxes; k++) - { - DEBUGF("Tile on %d %d %d %d dst block id %d tile block id %d tilex %d tiley %d\n", - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - clipped_dst_regions[i].block_idx, - clipped_src_regions[j].block_idx, - (tile_x + (current_boxes[k].x1 - x)), - tile_y + (current_boxes[k].y1 - y)); - - _glamor_tile(pixmap, tile, - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - (tile_x + (current_boxes[k].x1 - x)), - (tile_y + (current_boxes[k].y1 - y))); - } - - RegionDestroy(clipped_src_regions[j].region); - } - free(clipped_src_regions); - } else { - current_boxes = RegionRects(clipped_dst_regions[i].region); - n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); - for(k = 0; k < n_current_boxes; k++) - { - _glamor_tile(pixmap, tile, - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - (tile_x + (current_boxes[k].x1 - x)), - (tile_y + (current_boxes[k].y1 - y))); - } - } - RegionDestroy(clipped_dst_regions[i].region); - } - free(clipped_dst_regions); - RegionUninit(®ion); - } - else - _glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y); - - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - return TRUE; -fail: - return FALSE; + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *dst_pixmap_priv; + glamor_pixmap_private *src_pixmap_priv; + glamor_gl_dispatch *dispatch; + + dst_pixmap_priv = glamor_get_pixmap_private(pixmap); + src_pixmap_priv = glamor_get_pixmap_private(tile); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) + return FALSE; + + if (glamor_priv->tile_prog == 0) { + glamor_fallback("Tiling unsupported\n"); + goto fail; + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { + /* XXX dynamic uploading candidate. */ + glamor_fallback("Non-texture tile pixmap\n"); + goto fail; + } + + if (!glamor_set_planemask(pixmap, planemask)) { + glamor_fallback("unsupported planemask %lx\n", planemask); + goto fail; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, alu)) { + glamor_fallback("unsupported alu %x\n", alu); + glamor_put_dispatch(glamor_priv); + goto fail; + } + + if (dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_clipped_regions *clipped_dst_regions; + int n_dst_region, i, j, k; + BoxRec box; + RegionRec region; + + box.x1 = x; + box.y1 = y; + box.x2 = x + width; + box.y2 = y + height; + RegionInitBoxes(®ion, &box, 1); + clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, + ®ion, + &n_dst_region, 0, + 0, 0); + for (i = 0; i < n_dst_region; i++) { + int n_src_region; + glamor_pixmap_clipped_regions *clipped_src_regions; + BoxPtr current_boxes; + int n_current_boxes; + + SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, + clipped_dst_regions[i].block_idx); + + if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionTranslate(clipped_dst_regions[i].region, + tile_x - x, tile_y - y); + DEBUGF("tiled a large src pixmap. %dx%d \n", + tile->drawable.width, tile->drawable.height); + clipped_src_regions = + glamor_compute_clipped_regions(src_pixmap_priv, + clipped_dst_regions[i]. + region, &n_src_region, 1, 0, + 0); + DEBUGF("got %d src regions %d \n", n_src_region); + for (j = 0; j < n_src_region; j++) { + + SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, + clipped_src_regions[j].block_idx); + + RegionTranslate(clipped_src_regions[j].region, + x - tile_x, y - tile_y); + current_boxes = RegionRects(clipped_src_regions[j].region); + n_current_boxes = + RegionNumRects(clipped_src_regions[j].region); + for (k = 0; k < n_current_boxes; k++) { + DEBUGF + ("Tile on %d %d %d %d dst block id %d tile block id %d tilex %d tiley %d\n", + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + clipped_dst_regions[i].block_idx, + clipped_src_regions[j].block_idx, + (tile_x + (current_boxes[k].x1 - x)), + tile_y + (current_boxes[k].y1 - y)); + + _glamor_tile(pixmap, tile, + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + (tile_x + (current_boxes[k].x1 - x)), + (tile_y + (current_boxes[k].y1 - y))); + } + + RegionDestroy(clipped_src_regions[j].region); + } + free(clipped_src_regions); + } + else { + current_boxes = RegionRects(clipped_dst_regions[i].region); + n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); + for (k = 0; k < n_current_boxes; k++) { + _glamor_tile(pixmap, tile, + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + (tile_x + (current_boxes[k].x1 - x)), + (tile_y + (current_boxes[k].y1 - y))); + } + } + RegionDestroy(clipped_dst_regions[i].region); + } + free(clipped_dst_regions); + RegionUninit(®ion); + } + else + _glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y); + + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + return TRUE; + fail: + return FALSE; } diff --git a/xorg-server/glamor/glamor_trapezoid.c b/xorg-server/glamor/glamor_trapezoid.c index 76b3729cf..cd99a4782 100644 --- a/xorg-server/glamor/glamor_trapezoid.c +++ b/xorg-server/glamor/glamor_trapezoid.c @@ -37,25 +37,27 @@ #include "fbpict.h" static xFixed -_glamor_linefixedX (xLineFixed *l, xFixed y, Bool ceil) +_glamor_linefixedX(xLineFixed *l, xFixed y, Bool ceil) { - xFixed dx = l->p2.x - l->p1.x; - xFixed_32_32 ex = (xFixed_32_32) (y - l->p1.y) * dx; - xFixed dy = l->p2.y - l->p1.y; - if (ceil) - ex += (dy - 1); - return l->p1.x + (xFixed) (ex / dy); + xFixed dx = l->p2.x - l->p1.x; + xFixed_32_32 ex = (xFixed_32_32) (y - l->p1.y) * dx; + xFixed dy = l->p2.y - l->p1.y; + + if (ceil) + ex += (dy - 1); + return l->p1.x + (xFixed) (ex / dy); } static xFixed -_glamor_linefixedY (xLineFixed *l, xFixed x, Bool ceil) +_glamor_linefixedY(xLineFixed *l, xFixed x, Bool ceil) { - xFixed dy = l->p2.y - l->p1.y; - xFixed_32_32 ey = (xFixed_32_32) (x - l->p1.x) * dy; - xFixed dx = l->p2.x - l->p1.x; - if (ceil) - ey += (dx - 1); - return l->p1.y + (xFixed) (ey / dx); + xFixed dy = l->p2.y - l->p1.y; + xFixed_32_32 ey = (xFixed_32_32) (x - l->p1.x) * dy; + xFixed dx = l->p2.x - l->p1.x; + + if (ceil) + ey += (dx - 1); + return l->p1.y + (xFixed) (ey / dx); } #ifdef GLAMOR_TRAPEZOID_SHADER @@ -73,204 +75,206 @@ _glamor_linefixedY (xLineFixed *l, xFixed x, Bool ceil) && point[1] <= IntToxFixed(rect->y2)) static xFixed -_glamor_lines_crossfixedY (xLineFixed *l, xLineFixed *r) +_glamor_lines_crossfixedY(xLineFixed *l, xLineFixed *r) { - xFixed dx1 = l->p2.x - l->p1.x; - xFixed dx2 = r->p2.x - r->p1.x; - xFixed dy1 = l->p2.y - l->p1.y; - xFixed dy2 = r->p2.y - r->p1.y; - xFixed_32_32 tmp = (xFixed_32_32) dy2 * dy1; - xFixed_32_32 dividend1 = (tmp >> 32) * (l->p1.x - r->p1.x); - xFixed_32_32 dividend2; - xFixed_32_32 dividend3; - xFixed_32_32 divisor; - - tmp = (xFixed_32_32) dx1 * dy2; - dividend2 = (tmp >> 32) * l->p1.y; - tmp = (xFixed_32_32) dy1 * dx2; - dividend3 = (tmp >> 32) * r->p1.y; - divisor = ((xFixed_32_32) dx1 * (xFixed_32_32) dy2 - - (xFixed_32_32) dy1 * (xFixed_32_32) dx2) >> 32; - - if (divisor) - return (xFixed)((dividend2 - dividend1 - dividend3) / divisor); - - return 0xFFFFFFFF; -} + xFixed dx1 = l->p2.x - l->p1.x; + xFixed dx2 = r->p2.x - r->p1.x; + xFixed dy1 = l->p2.y - l->p1.y; + xFixed dy2 = r->p2.y - r->p1.y; + xFixed_32_32 tmp = (xFixed_32_32) dy2 * dy1; + xFixed_32_32 dividend1 = (tmp >> 32) * (l->p1.x - r->p1.x); + xFixed_32_32 dividend2; + xFixed_32_32 dividend3; + xFixed_32_32 divisor; -static Bool -point_inside_trapezoid(int point[2], xTrapezoid * trap, xFixed cut_y) -{ - int ret = TRUE; - int tmp; - if (point[1] > trap->bottom) { - ret = FALSE; - if (DEBUG_CLIP_VTX) { - ErrorF("Out of Trap bottom, point[1] = %d(0x%x)), " - "bottom = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[1]), point[1], - (unsigned int)xFixedToInt(trap->bottom), - (unsigned int)trap->bottom); - } - - return ret; - } + tmp = (xFixed_32_32) dx1 *dy2; - if (point[1] < trap->top) { - ret = FALSE; - if (DEBUG_CLIP_VTX) { - ErrorF("Out of Trap top, point[1] = %d(0x%x)), " - "top = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[1]), point[1], - (unsigned int)xFixedToInt(trap->top), - (unsigned int)trap->top); - } - - return ret; - } + dividend2 = (tmp >> 32) * l->p1.y; + tmp = (xFixed_32_32) dy1 *dx2; - tmp = _glamor_linefixedX (&trap->left, point[1], FALSE); - if (point[0] < tmp) { - ret = FALSE; - - if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && - abs(point[1] - trap->top) < pixman_fixed_1_minus_e && - tmp - point[0] < pixman_fixed_1_minus_e) { - ret = TRUE; - } else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && - point[1] - trap->bottom < pixman_fixed_1_minus_e && - tmp - point[0] < pixman_fixed_1_minus_e) { - ret = TRUE; - } - - if (DEBUG_CLIP_VTX && !ret) { - ErrorF("Out of Trap left, point[0] = %d(0x%x)), " - "left = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[0]), point[0], - (unsigned int)xFixedToInt(tmp), (unsigned int)tmp); - } - - if (!ret) - return ret; - } + dividend3 = (tmp >> 32) * r->p1.y; + divisor = ((xFixed_32_32) dx1 * (xFixed_32_32) dy2 + - (xFixed_32_32) dy1 * (xFixed_32_32) dx2) >> 32; - tmp = _glamor_linefixedX (&trap->right, point[1], TRUE); - if (point[0] > tmp) { - ret = FALSE; - - if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && - abs(point[1] - trap->top) < pixman_fixed_1_minus_e && - point[0] - tmp < pixman_fixed_1_minus_e) { - ret = TRUE; - } else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && - abs(point[1] - trap->bottom) < pixman_fixed_1_minus_e && - point[0] - tmp < pixman_fixed_1_minus_e) { - ret = TRUE; - } - - if (DEBUG_CLIP_VTX && !ret) { - ErrorF("Out of Trap right, point[0] = %d(0x%x)), " - "right = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[0]), point[0], - (unsigned int)xFixedToInt(tmp), (unsigned int)tmp); - } - - if (!ret) - return ret; - } + if (divisor) + return (xFixed) ((dividend2 - dividend1 - dividend3) / divisor); + + return 0xFFFFFFFF; +} - return ret; +static Bool +point_inside_trapezoid(int point[2], xTrapezoid *trap, xFixed cut_y) +{ + int ret = TRUE; + int tmp; + + if (point[1] > trap->bottom) { + ret = FALSE; + if (DEBUG_CLIP_VTX) { + ErrorF("Out of Trap bottom, point[1] = %d(0x%x)), " + "bottom = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[1]), point[1], + (unsigned int) xFixedToInt(trap->bottom), + (unsigned int) trap->bottom); + } + + return ret; + } + + if (point[1] < trap->top) { + ret = FALSE; + if (DEBUG_CLIP_VTX) { + ErrorF("Out of Trap top, point[1] = %d(0x%x)), " + "top = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[1]), point[1], + (unsigned int) xFixedToInt(trap->top), + (unsigned int) trap->top); + } + + return ret; + } + + tmp = _glamor_linefixedX(&trap->left, point[1], FALSE); + if (point[0] < tmp) { + ret = FALSE; + + if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && + abs(point[1] - trap->top) < pixman_fixed_1_minus_e && + tmp - point[0] < pixman_fixed_1_minus_e) { + ret = TRUE; + } + else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && + point[1] - trap->bottom < pixman_fixed_1_minus_e && + tmp - point[0] < pixman_fixed_1_minus_e) { + ret = TRUE; + } + + if (DEBUG_CLIP_VTX && !ret) { + ErrorF("Out of Trap left, point[0] = %d(0x%x)), " + "left = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[0]), point[0], + (unsigned int) xFixedToInt(tmp), (unsigned int) tmp); + } + + if (!ret) + return ret; + } + + tmp = _glamor_linefixedX(&trap->right, point[1], TRUE); + if (point[0] > tmp) { + ret = FALSE; + + if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && + abs(point[1] - trap->top) < pixman_fixed_1_minus_e && + point[0] - tmp < pixman_fixed_1_minus_e) { + ret = TRUE; + } + else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && + abs(point[1] - trap->bottom) < pixman_fixed_1_minus_e && + point[0] - tmp < pixman_fixed_1_minus_e) { + ret = TRUE; + } + + if (DEBUG_CLIP_VTX && !ret) { + ErrorF("Out of Trap right, point[0] = %d(0x%x)), " + "right = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[0]), point[0], + (unsigned int) xFixedToInt(tmp), (unsigned int) tmp); + } + + if (!ret) + return ret; + } + + return ret; } static void glamor_emit_composite_triangle(ScreenPtr screen, - const float *src_coords, - const float *mask_coords, - const float *dst_coords) + const float *src_coords, + const float *mask_coords, + const float *dst_coords) { - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 0); - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 1); - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 2); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 0); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 1); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 2); } static void glamor_flush_composite_triangles(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { - if (!glamor_priv->render_nr_verts) - return; + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } - dispatch->glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); - glamor_put_dispatch(glamor_priv); + if (!glamor_priv->render_nr_verts) + return; + + dispatch->glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); + glamor_put_dispatch(glamor_priv); } static Bool -_glamor_clip_trapezoid_vertex(xTrapezoid * trap, BoxPtr pbox, - int vertex[6], int *num) +_glamor_clip_trapezoid_vertex(xTrapezoid *trap, BoxPtr pbox, + int vertex[6], int *num) { - xFixed edge_cross_y = 0xFFFFFFFF; - int tl[2]; - int bl[2]; - int tr[2]; - int br[2]; - int left_cut_top[2]; - int left_cut_left[2]; - int left_cut_right[2]; - int left_cut_bottom[2]; - int right_cut_top[2]; - int right_cut_left[2]; - int right_cut_right[2]; - int right_cut_bottom[2]; - int tmp[2]; - int tmp_vtx[20*2]; - float tmp_vtx_slope[20]; - BoxRec trap_bound; - int i = 0; - int vertex_num = 0; - - if (DEBUG_CLIP_VTX) { - ErrorF("The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" - "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" - "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", - xFixedToInt(trap->top), (unsigned int)trap->top, - xFixedToInt(trap->bottom), (unsigned int)trap->bottom, - xFixedToInt(trap->left.p1.x), (unsigned int)trap->left.p1.x, - xFixedToInt(trap->left.p1.y), (unsigned int)trap->left.p1.y, - xFixedToInt(trap->left.p2.x), (unsigned int)trap->left.p2.x, - xFixedToInt(trap->left.p2.y), (unsigned int)trap->left.p2.y, - xFixedToInt(trap->right.p1.x), (unsigned int)trap->right.p1.x, - xFixedToInt(trap->right.p1.y), (unsigned int)trap->right.p1.y, - xFixedToInt(trap->right.p2.x), (unsigned int)trap->right.p2.x, - xFixedToInt(trap->right.p2.y), (unsigned int)trap->right.p2.y); - } - - miTrapezoidBounds(1, trap, &trap_bound); - if (DEBUG_CLIP_VTX) - ErrorF("The bounds for this traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d\n", trap_bound.x1, trap_bound.x2, - trap_bound.y1, trap_bound.y2); - - if (trap_bound.x1 > pbox->x2 || trap_bound.x2 < pbox->x1) - return FALSE; - if (trap_bound.y1 > pbox->y2 || trap_bound.y2 < pbox->y1) - return FALSE; + xFixed edge_cross_y = 0xFFFFFFFF; + int tl[2]; + int bl[2]; + int tr[2]; + int br[2]; + int left_cut_top[2]; + int left_cut_left[2]; + int left_cut_right[2]; + int left_cut_bottom[2]; + int right_cut_top[2]; + int right_cut_left[2]; + int right_cut_right[2]; + int right_cut_bottom[2]; + int tmp[2]; + int tmp_vtx[20 * 2]; + float tmp_vtx_slope[20]; + BoxRec trap_bound; + int i = 0; + int vertex_num = 0; + + if (DEBUG_CLIP_VTX) { + ErrorF + ("The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" + "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" + "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", + xFixedToInt(trap->top), (unsigned int) trap->top, + xFixedToInt(trap->bottom), (unsigned int) trap->bottom, + xFixedToInt(trap->left.p1.x), (unsigned int) trap->left.p1.x, + xFixedToInt(trap->left.p1.y), (unsigned int) trap->left.p1.y, + xFixedToInt(trap->left.p2.x), (unsigned int) trap->left.p2.x, + xFixedToInt(trap->left.p2.y), (unsigned int) trap->left.p2.y, + xFixedToInt(trap->right.p1.x), (unsigned int) trap->right.p1.x, + xFixedToInt(trap->right.p1.y), (unsigned int) trap->right.p1.y, + xFixedToInt(trap->right.p2.x), (unsigned int) trap->right.p2.x, + xFixedToInt(trap->right.p2.y), (unsigned int) trap->right.p2.y); + } + + miTrapezoidBounds(1, trap, &trap_bound); + if (DEBUG_CLIP_VTX) + ErrorF("The bounds for this traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d\n", trap_bound.x1, trap_bound.x2, + trap_bound.y1, trap_bound.y2); + + if (trap_bound.x1 > pbox->x2 || trap_bound.x2 < pbox->x1) + return FALSE; + if (trap_bound.y1 > pbox->y2 || trap_bound.y2 < pbox->y1) + return FALSE; #define IS_TRAP_EDGE_VERTICAL(edge) \ (edge->p1.x == edge->p2.x) @@ -334,1319 +338,1352 @@ _glamor_clip_trapezoid_vertex(xTrapezoid * trap, BoxPtr pbox, "the Rect\n"); \ } - /*Trap's right edge cut right edge. */ - if((!IS_TRAP_EDGE_VERTICAL((&trap->left))) || - (!IS_TRAP_EDGE_VERTICAL((&trap->right)))) { - edge_cross_y = _glamor_lines_crossfixedY((&trap->left), (&trap->right)); - if (DEBUG_CLIP_VTX) { - ErrorF("Trap's left edge cut right edge at %d(0x%x), " - "trap_top = %x, trap_bottom = %x\n", - xFixedToInt(edge_cross_y), edge_cross_y, - (unsigned int)trap->top, (unsigned int)trap->bottom); - } - } - - /*Trap's TopLeft, BottomLeft, TopRight and BottomRight. */ - CACULATE_CUT_VERTEX(tl, 1, FALSE, trap->top, (&trap->left)); - CACULATE_CUT_VERTEX(bl, 1, FALSE, trap->bottom, (&trap->left)); - CACULATE_CUT_VERTEX(tr, 1, TRUE, trap->top, (&trap->right)); - CACULATE_CUT_VERTEX(br, 1, TRUE, trap->bottom, (&trap->right)); - - if (DEBUG_CLIP_VTX) - ErrorF("Trap's TopLeft, BottomLeft, TopRight and BottomRight\n"); - if (DEBUG_CLIP_VTX) - ErrorF("Caculate the vertex of trapezoid:\n" - " (%3d, %3d)-------------------------(%3d, %3d)\n" - " / \\ \n" - " / \\ \n" - " / \\ \n" - " (%3d, %3d)---------------------------------(%3d, %3d)\n" - "Clip with rect:\n" - " (%3d, %3d)------------------------(%3d, %3d) \n" - " | | \n" - " | | \n" - " | | \n" - " (%3d, %3d)------------------------(%3d, %3d) \n", - xFixedToInt(tl[0]), xFixedToInt(tl[1]), xFixedToInt(tr[0]), - xFixedToInt(tr[1]), xFixedToInt(bl[0]), xFixedToInt(bl[1]), - xFixedToInt(br[0]), xFixedToInt(br[1]), - pbox->x1, pbox->y1, pbox->x2, pbox->y1, pbox->x1, pbox->y2, - pbox->x2, pbox->y2); - - ADD_VERTEX_IF_INSIDE(tl); - ADD_VERTEX_IF_INSIDE(bl); - ADD_VERTEX_IF_INSIDE(tr); - ADD_VERTEX_IF_INSIDE(br); - - /*Trap's left edge cut Rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's left edge cut Rect\n"); - CACULATE_CUT_VERTEX(left_cut_top, 1, FALSE, IntToxFixed(pbox->y1), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_top); - if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { - CACULATE_CUT_VERTEX(left_cut_left, 0, FALSE, IntToxFixed(pbox->x1), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_left); - } - CACULATE_CUT_VERTEX(left_cut_bottom, 1, FALSE, IntToxFixed(pbox->y2), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_bottom); - if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { - CACULATE_CUT_VERTEX(left_cut_right, 0, FALSE, IntToxFixed(pbox->x2), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_right); - } - - /*Trap's right edge cut Rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's right edge cut Rect\n"); - CACULATE_CUT_VERTEX(right_cut_top, 1, TRUE, IntToxFixed(pbox->y1), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_top); - if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { - CACULATE_CUT_VERTEX(right_cut_left, 0, TRUE, IntToxFixed(pbox->x1), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_left); - } - CACULATE_CUT_VERTEX(right_cut_bottom, 1, TRUE, IntToxFixed(pbox->y2), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_bottom); - if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { - CACULATE_CUT_VERTEX(right_cut_right, 0, TRUE, IntToxFixed(pbox->x2), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_right); - } - - /* Trap's top cut Left and Right of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's top cut Left and Right of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = trap->top; - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = trap->top; - ADD_VERTEX_IF_INSIDE(tmp); - - /* Trap's bottom cut Left and Right of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's bottom cut Left and Right of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = trap->bottom; - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = trap->bottom; - ADD_VERTEX_IF_INSIDE(tmp); - - /* The orginal 4 vertex of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("The orginal 4 vertex of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = IntToxFixed(pbox->y1); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = IntToxFixed(pbox->y2); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = IntToxFixed(pbox->y2); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = IntToxFixed(pbox->y1); - ADD_VERTEX_IF_INSIDE(tmp); - - if (DEBUG_CLIP_VTX) { - ErrorF("\nThe candidate vertex number is %d\n", vertex_num / 2); - for (i = 0; i < vertex_num / 2; i++) { - ErrorF("(%d, %d) ", tmp_vtx[2*i], tmp_vtx[2*i + 1]); - } - ErrorF("\n"); - } - - /* Sort the vertex by X and then Y. */ - for (i = 0; i < vertex_num / 2; i++) { - int j; - for (j = 0; j < vertex_num / 2 - i - 1; j++) { - if (tmp_vtx[2*j] > tmp_vtx[2*(j+1)] - || (tmp_vtx[2*j] == tmp_vtx[2*(j+1)] - && tmp_vtx[2*j + 1] > tmp_vtx[2*(j+1) + 1])) { - tmp[0] = tmp_vtx[2*j]; - tmp[1] = tmp_vtx[2*j + 1]; - tmp_vtx[2*j] = tmp_vtx[2*(j+1)]; - tmp_vtx[2*j + 1] = tmp_vtx[2*(j+1) + 1]; - tmp_vtx[2*(j+1)] = tmp[0]; - tmp_vtx[2*(j+1) + 1] = tmp[1]; - } - } - - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nAfter sort vertex number is:\n"); - for (i = 0; i < vertex_num / 2; i++) { - ErrorF("(%d, %d) ", tmp_vtx[2*i], tmp_vtx[2*i + 1]); - } - ErrorF("\n"); - } - - memset(vertex, -1, 2*6); - *num = 0; - - for (i = 0; i < vertex_num / 2; i++) { - if (*num > 0 && vertex[2*(*num - 1)] == tmp_vtx[2*i] - && vertex[2*(*num - 1) + 1] == tmp_vtx[2*i + 1]) { - /*same vertex.*/ - if (DEBUG_CLIP_VTX) - ErrorF("X Point:(%d, %d) discard\n", - tmp_vtx[2*i], tmp_vtx[2*i + 1]); - continue; - } - - (*num)++; - if (*num > 6) { - if (DEBUG_CLIP_VTX) - FatalError("Trapezoid clip with Rect can never have vtx" - "number bigger than 6\n"); - else { - ErrorF("Trapezoid clip with Rect can never have vtx" - "number bigger than 6\n"); - *num = 6; - break; - } - } - - vertex[2*(*num - 1)] = tmp_vtx[2*i]; - vertex[2*(*num - 1) + 1] = tmp_vtx[2*i + 1]; - if (DEBUG_CLIP_VTX) - ErrorF("@ Point:(%d, %d) select, num now is %d\n", - tmp_vtx[2*i], tmp_vtx[2*i + 1], *num); - } - - /* Now we need to arrange the vtx in the polygon's counter-clockwise - order. We first select the left and top point as the start point and - sort every vtx by the slope from vtx to the start vtx. */ - for (i = 1; i < *num; i++) { - tmp_vtx_slope[i] = (vertex[2*i] != vertex[0] ? - (float)(vertex[2*i + 1] - vertex[1]) / (float)(vertex[2*i] - vertex[0]) - : (float)INT_MAX); - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nvtx number: %d, VTX and slope:\n", *num); - for (i = 0; i < *num; i++) { - ErrorF("(%d, %d):%f ", - vertex[2*i], vertex[2*i + 1], - tmp_vtx_slope[i]); - } - ErrorF("\n"); - } - - /* Sort the vertex by slope. */ - for (i = 0; i < *num - 1; i++) { - int j; - float tmp_slope; - for (j = 1; j < *num - i - 1; j++) { - if (tmp_vtx_slope[j] < tmp_vtx_slope[j + 1]) { - tmp_slope = tmp_vtx_slope[j]; - tmp_vtx_slope[j] = tmp_vtx_slope[j + 1]; - tmp_vtx_slope[j + 1] = tmp_slope; - tmp[0] = vertex[2*j]; - tmp[1] = vertex[2*j + 1]; - vertex[2*j] = vertex[2*(j+1)]; - vertex[2*j + 1] = vertex[2*(j+1) + 1]; - vertex[2*(j+1)] = tmp[0]; - vertex[2*(j+1) + 1] = tmp[1]; - } - } - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nBefore return, vtx number: %d, VTX and slope:\n", *num); - for (i = 0; i < *num; i++) { - ErrorF("(%d, %d):%f ", - vertex[2*i], vertex[2*i + 1], - tmp_vtx_slope[i]); - } - ErrorF("\n"); - } - - return TRUE; + /*Trap's right edge cut right edge. */ + if ((!IS_TRAP_EDGE_VERTICAL((&trap->left))) || + (!IS_TRAP_EDGE_VERTICAL((&trap->right)))) { + edge_cross_y = _glamor_lines_crossfixedY((&trap->left), (&trap->right)); + if (DEBUG_CLIP_VTX) { + ErrorF("Trap's left edge cut right edge at %d(0x%x), " + "trap_top = %x, trap_bottom = %x\n", + xFixedToInt(edge_cross_y), edge_cross_y, + (unsigned int) trap->top, (unsigned int) trap->bottom); + } + } + + /*Trap's TopLeft, BottomLeft, TopRight and BottomRight. */ + CACULATE_CUT_VERTEX(tl, 1, FALSE, trap->top, (&trap->left)); + CACULATE_CUT_VERTEX(bl, 1, FALSE, trap->bottom, (&trap->left)); + CACULATE_CUT_VERTEX(tr, 1, TRUE, trap->top, (&trap->right)); + CACULATE_CUT_VERTEX(br, 1, TRUE, trap->bottom, (&trap->right)); + + if (DEBUG_CLIP_VTX) + ErrorF("Trap's TopLeft, BottomLeft, TopRight and BottomRight\n"); + if (DEBUG_CLIP_VTX) + ErrorF("Caculate the vertex of trapezoid:\n" + " (%3d, %3d)-------------------------(%3d, %3d)\n" + " / \\ \n" + " / \\ \n" + " / \\ \n" + " (%3d, %3d)---------------------------------(%3d, %3d)\n" + "Clip with rect:\n" + " (%3d, %3d)------------------------(%3d, %3d) \n" + " | | \n" + " | | \n" + " | | \n" + " (%3d, %3d)------------------------(%3d, %3d) \n", + xFixedToInt(tl[0]), xFixedToInt(tl[1]), xFixedToInt(tr[0]), + xFixedToInt(tr[1]), xFixedToInt(bl[0]), xFixedToInt(bl[1]), + xFixedToInt(br[0]), xFixedToInt(br[1]), + pbox->x1, pbox->y1, pbox->x2, pbox->y1, pbox->x1, pbox->y2, + pbox->x2, pbox->y2); + + ADD_VERTEX_IF_INSIDE(tl); + ADD_VERTEX_IF_INSIDE(bl); + ADD_VERTEX_IF_INSIDE(tr); + ADD_VERTEX_IF_INSIDE(br); + + /*Trap's left edge cut Rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's left edge cut Rect\n"); + CACULATE_CUT_VERTEX(left_cut_top, 1, FALSE, IntToxFixed(pbox->y1), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_top); + if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { + CACULATE_CUT_VERTEX(left_cut_left, 0, FALSE, IntToxFixed(pbox->x1), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_left); + } + CACULATE_CUT_VERTEX(left_cut_bottom, 1, FALSE, IntToxFixed(pbox->y2), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_bottom); + if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { + CACULATE_CUT_VERTEX(left_cut_right, 0, FALSE, IntToxFixed(pbox->x2), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_right); + } + + /*Trap's right edge cut Rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's right edge cut Rect\n"); + CACULATE_CUT_VERTEX(right_cut_top, 1, TRUE, IntToxFixed(pbox->y1), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_top); + if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { + CACULATE_CUT_VERTEX(right_cut_left, 0, TRUE, IntToxFixed(pbox->x1), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_left); + } + CACULATE_CUT_VERTEX(right_cut_bottom, 1, TRUE, IntToxFixed(pbox->y2), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_bottom); + if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { + CACULATE_CUT_VERTEX(right_cut_right, 0, TRUE, IntToxFixed(pbox->x2), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_right); + } + + /* Trap's top cut Left and Right of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's top cut Left and Right of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = trap->top; + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = trap->top; + ADD_VERTEX_IF_INSIDE(tmp); + + /* Trap's bottom cut Left and Right of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's bottom cut Left and Right of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = trap->bottom; + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = trap->bottom; + ADD_VERTEX_IF_INSIDE(tmp); + + /* The orginal 4 vertex of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("The orginal 4 vertex of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = IntToxFixed(pbox->y1); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = IntToxFixed(pbox->y2); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = IntToxFixed(pbox->y2); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = IntToxFixed(pbox->y1); + ADD_VERTEX_IF_INSIDE(tmp); + + if (DEBUG_CLIP_VTX) { + ErrorF("\nThe candidate vertex number is %d\n", vertex_num / 2); + for (i = 0; i < vertex_num / 2; i++) { + ErrorF("(%d, %d) ", tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + } + ErrorF("\n"); + } + + /* Sort the vertex by X and then Y. */ + for (i = 0; i < vertex_num / 2; i++) { + int j; + + for (j = 0; j < vertex_num / 2 - i - 1; j++) { + if (tmp_vtx[2 * j] > tmp_vtx[2 * (j + 1)] + || (tmp_vtx[2 * j] == tmp_vtx[2 * (j + 1)] + && tmp_vtx[2 * j + 1] > tmp_vtx[2 * (j + 1) + 1])) { + tmp[0] = tmp_vtx[2 * j]; + tmp[1] = tmp_vtx[2 * j + 1]; + tmp_vtx[2 * j] = tmp_vtx[2 * (j + 1)]; + tmp_vtx[2 * j + 1] = tmp_vtx[2 * (j + 1) + 1]; + tmp_vtx[2 * (j + 1)] = tmp[0]; + tmp_vtx[2 * (j + 1) + 1] = tmp[1]; + } + } + + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nAfter sort vertex number is:\n"); + for (i = 0; i < vertex_num / 2; i++) { + ErrorF("(%d, %d) ", tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + } + ErrorF("\n"); + } + + memset(vertex, -1, 2 * 6); + *num = 0; + + for (i = 0; i < vertex_num / 2; i++) { + if (*num > 0 && vertex[2 * (*num - 1)] == tmp_vtx[2 * i] + && vertex[2 * (*num - 1) + 1] == tmp_vtx[2 * i + 1]) { + /*same vertex. */ + if (DEBUG_CLIP_VTX) + ErrorF("X Point:(%d, %d) discard\n", + tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + continue; + } + + (*num)++; + if (*num > 6) { + if (DEBUG_CLIP_VTX) + FatalError("Trapezoid clip with Rect can never have vtx" + "number bigger than 6\n"); + else { + ErrorF("Trapezoid clip with Rect can never have vtx" + "number bigger than 6\n"); + *num = 6; + break; + } + } + + vertex[2 * (*num - 1)] = tmp_vtx[2 * i]; + vertex[2 * (*num - 1) + 1] = tmp_vtx[2 * i + 1]; + if (DEBUG_CLIP_VTX) + ErrorF("@ Point:(%d, %d) select, num now is %d\n", + tmp_vtx[2 * i], tmp_vtx[2 * i + 1], *num); + } + + /* Now we need to arrange the vtx in the polygon's counter-clockwise + order. We first select the left and top point as the start point and + sort every vtx by the slope from vtx to the start vtx. */ + for (i = 1; i < *num; i++) { + tmp_vtx_slope[i] = (vertex[2 * i] != vertex[0] ? + (float) (vertex[2 * i + 1] - + vertex[1]) / (float) (vertex[2 * i] - + vertex[0]) + : (float) INT_MAX); + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nvtx number: %d, VTX and slope:\n", *num); + for (i = 0; i < *num; i++) { + ErrorF("(%d, %d):%f ", + vertex[2 * i], vertex[2 * i + 1], tmp_vtx_slope[i]); + } + ErrorF("\n"); + } + + /* Sort the vertex by slope. */ + for (i = 0; i < *num - 1; i++) { + int j; + float tmp_slope; + + for (j = 1; j < *num - i - 1; j++) { + if (tmp_vtx_slope[j] < tmp_vtx_slope[j + 1]) { + tmp_slope = tmp_vtx_slope[j]; + tmp_vtx_slope[j] = tmp_vtx_slope[j + 1]; + tmp_vtx_slope[j + 1] = tmp_slope; + tmp[0] = vertex[2 * j]; + tmp[1] = vertex[2 * j + 1]; + vertex[2 * j] = vertex[2 * (j + 1)]; + vertex[2 * j + 1] = vertex[2 * (j + 1) + 1]; + vertex[2 * (j + 1)] = tmp[0]; + vertex[2 * (j + 1) + 1] = tmp[1]; + } + } + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nBefore return, vtx number: %d, VTX and slope:\n", *num); + for (i = 0; i < *num; i++) { + ErrorF("(%d, %d):%f ", + vertex[2 * i], vertex[2 * i + 1], tmp_vtx_slope[i]); + } + ErrorF("\n"); + } + + return TRUE; } static void glamor_setup_composite_vbo_for_trapezoid(ScreenPtr screen, int n_verts) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int stride; - int vert_size; - - glamor_priv->render_nr_verts = 0; - - /* For GLAMOR_VERTEX_POS */ - glamor_priv->vb_stride = 2 * sizeof(float); - - /* For GLAMOR_GLAMOR_VERTEX_SOURCE */ - glamor_priv->vb_stride += 2 * sizeof(float); - - /* For GLAMOR_VERTEX_TOP_BOTTOM */ - glamor_priv->vb_stride += 2 * sizeof(float); - - /* For GLAMOR_VERTEX_LEFT_PARAM */ - glamor_priv->vb_stride += 4 * sizeof(float); - - /* For GLAMOR_VERTEX_RIGHT_PARAM */ - glamor_priv->vb_stride += 4 * sizeof(float); - - vert_size = n_verts * glamor_priv->vb_stride; - - dispatch = glamor_get_dispatch(glamor_priv); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { - glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * - glamor_priv->vb_stride; - glamor_priv->vbo_offset = 0; - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_size, - NULL, GL_STREAM_DRAW); - } - - glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - vert_size, - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); - - assert(glamor_priv->vb != NULL); - glamor_priv->vb -= glamor_priv->vbo_offset; - } else { - glamor_priv->vbo_offset = 0; - } - - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - /* Set the vertex pointer. */ - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset)); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - stride = 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - stride += 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_TOP_BOTTOM, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - stride += 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_LEFT_PARAM, 4, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - stride += 4; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_RIGHT_PARAM, 4, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int stride; + int vert_size; + + glamor_priv->render_nr_verts = 0; + + /* For GLAMOR_VERTEX_POS */ + glamor_priv->vb_stride = 2 * sizeof(float); + + /* For GLAMOR_GLAMOR_VERTEX_SOURCE */ + glamor_priv->vb_stride += 2 * sizeof(float); + + /* For GLAMOR_VERTEX_TOP_BOTTOM */ + glamor_priv->vb_stride += 2 * sizeof(float); + + /* For GLAMOR_VERTEX_LEFT_PARAM */ + glamor_priv->vb_stride += 4 * sizeof(float); + + /* For GLAMOR_VERTEX_RIGHT_PARAM */ + glamor_priv->vb_stride += 4 * sizeof(float); + + vert_size = n_verts * glamor_priv->vb_stride; + + dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { + glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * + glamor_priv->vb_stride; + glamor_priv->vbo_offset = 0; + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_size, NULL, GL_STREAM_DRAW); + } + + glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + vert_size, + GL_MAP_WRITE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); + + assert(glamor_priv->vb != NULL); + glamor_priv->vb -= glamor_priv->vbo_offset; + } + else { + glamor_priv->vbo_offset = 0; + } + + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + /* Set the vertex pointer. */ + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset)); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + stride = 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + stride += 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_TOP_BOTTOM, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + stride += 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_LEFT_PARAM, 4, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + stride += 4; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_RIGHT_PARAM, 4, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + + glamor_put_dispatch(glamor_priv); } static Bool _glamor_trapezoids_with_shader(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, + INT16 y_src, int ntrap, xTrapezoid * traps) { - ScreenPtr screen = dst->pDrawable->pScreen; - glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - struct shader_key key; - glamor_composite_shader *shader = NULL; - struct blendinfo op_info; - PictFormatShort saved_source_format = 0; - PixmapPtr source_pixmap = NULL; - PixmapPtr dest_pixmap = NULL; - glamor_pixmap_private *source_pixmap_priv = NULL; - glamor_pixmap_private *dest_pixmap_priv = NULL; - glamor_pixmap_private *temp_src_priv = NULL; - int x_temp_src, y_temp_src; - int src_width, src_height; - int source_x_off, source_y_off; - GLfloat src_xscale = 1, src_yscale = 1; - int x_dst, y_dst; - int dest_x_off, dest_y_off; - GLfloat dst_xscale, dst_yscale; - BoxRec bounds; - PicturePtr temp_src = src; - glamor_gl_dispatch *dispatch = NULL; - int vert_stride = 3; - int ntriangle_per_loop; - int nclip_rect; - int mclip_rect; - int clip_processed; - int clipped_vtx[6*2]; - RegionRec region; - BoxPtr box = NULL; - BoxPtr pbox = NULL; - int traps_count = 0; - int traps_not_completed = 0; - xTrapezoid * ptrap = NULL; - int nbox; - float src_matrix[9]; - Bool ret = FALSE; - - /* If a mask format wasn't provided, we get to choose, but behavior should - * be as if there was no temporary mask the traps were accumulated into. - */ - if (!mask_format) { - if (dst->polyEdge == PolyEdgeSharp) - mask_format = PictureMatchFormat(screen, 1, PICT_a1); - else - mask_format = PictureMatchFormat(screen, 8, PICT_a8); - for (; ntrap; ntrap--, traps++) - glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, 1, traps); - return TRUE; - } - - miTrapezoidBounds(ntrap, traps, &bounds); - DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d\n", bounds.x1, bounds.x2, - bounds.y1, bounds.y2); - - /* No area need to render. */ - if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) - return TRUE; - - dest_pixmap = glamor_get_drawable_pixmap(dst->pDrawable); - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv) - || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - /* Currently. Always fallback to cpu if destination is in CPU memory.*/ - ret = FALSE; - DEBUGF("dst pixmap has no FBO.\n"); - goto TRAPEZOID_OUT; - } - - if (src->pDrawable) { - source_pixmap = glamor_get_drawable_pixmap(src->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - temp_src_priv = source_pixmap_priv; - if (source_pixmap_priv - && (source_pixmap_priv->type == GLAMOR_DRM_ONLY - || source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) { - ret = FALSE; - goto TRAPEZOID_OUT; - } - } - - x_dst = bounds.x1; - y_dst = bounds.y1; - - src_width = bounds.x2 - bounds.x1; - src_height = bounds.y2 - bounds.y1; - - x_temp_src = x_src + bounds.x1 - (traps[0].left.p1.x >> 16); - y_temp_src = y_src + bounds.y1 - (traps[0].left.p1.y >> 16); - - if ((!src->pDrawable && - (src->pSourcePict->type != SourcePictTypeSolidFill)) //1. The Gradient case. - /* 2. Has no fbo but can upload.*/ - || (src->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) - && ((src_width * src_height * 4 < - source_pixmap->drawable.width * source_pixmap->drawable.height) - || !glamor_check_fbo_size(glamor_priv, source_pixmap->drawable.width, - source_pixmap->drawable.height)))) { - - if (!glamor_check_fbo_size(glamor_priv, src_width, src_height)) { - ret = FALSE; - goto TRAPEZOID_OUT; - } - temp_src = glamor_convert_gradient_picture(screen, src, - x_src, y_src, - src_width, src_height); - if (!temp_src) { - temp_src = src; - ret = FALSE; - DEBUGF("Convert gradient picture failed\n"); - goto TRAPEZOID_OUT; - } - temp_src_priv = glamor_get_pixmap_private((PixmapPtr)temp_src->pDrawable); - x_temp_src = y_temp_src = 0; - } - - x_dst += dst->pDrawable->x; - y_dst += dst->pDrawable->y; - if (temp_src->pDrawable) { - x_temp_src += temp_src->pDrawable->x; - y_temp_src += temp_src->pDrawable->y; - } - - if (!miComputeCompositeRegion(®ion, - temp_src, NULL, dst, - x_temp_src, y_temp_src, - 0, 0, - x_dst, y_dst, - src_width, src_height)) { - DEBUGF("All the regions are clipped out, do nothing\n"); - goto TRAPEZOID_OUT; - } - - box = REGION_RECTS(®ion); - nbox = REGION_NUM_RECTS(®ion); - pbox = box; - - ret = glamor_composite_choose_shader(op, temp_src, NULL, dst, - temp_src_priv, NULL, dest_pixmap_priv, - &key, &shader, &op_info, &saved_source_format); - if (ret == FALSE) { - DEBUGF("can not set the shader program for composite\n"); - goto TRAPEZOID_RESET_GL; - } - glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); - glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); - glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; - glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && - key.mask != SHADER_MASK_SOLID); - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_get_drawable_deltas(dst->pDrawable, dest_pixmap, - &dest_x_off, &dest_y_off); - - pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); - - if (glamor_priv->has_source_coords) { - source_pixmap = glamor_get_drawable_pixmap(temp_src->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - glamor_get_drawable_deltas(temp_src->pDrawable, - source_pixmap, - &source_x_off, &source_y_off); - pixmap_priv_get_scale(source_pixmap_priv, - &src_xscale, &src_yscale); - glamor_picture_get_matrixf(temp_src, src_matrix); - vert_stride += 3; - } - - if (glamor_priv->has_mask_coords) { - DEBUGF("Should never have mask coords here!\n"); - ret = FALSE; - goto TRAPEZOID_RESET_GL; - } - - /* A trapezoid clip with a rectangle will at most generate a hexagon, - which can be devided into 4 triangles to render. */ - ntriangle_per_loop = (vert_stride * nbox * ntrap * 4) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? - (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nbox * ntrap * 4; - ntriangle_per_loop = (ntriangle_per_loop / 4) * 4; - - nclip_rect = nbox; - while (nclip_rect) { - mclip_rect = (nclip_rect * ntrap * 4) > ntriangle_per_loop ? - (ntriangle_per_loop / (4 * ntrap)) : nclip_rect; - - if (!mclip_rect) {/* Maybe too many traps. */ - mclip_rect = 1; - ptrap = traps; - traps_count = ntriangle_per_loop / 4; - traps_not_completed = ntrap - traps_count; - } else { - traps_count = ntrap; - ptrap = traps; - traps_not_completed = 0; - } - -NTRAPS_LOOP_AGAIN: - - glamor_setup_composite_vbo(screen, mclip_rect * traps_count * 4 * vert_stride); - clip_processed = mclip_rect; - - - while (mclip_rect--) { - while (traps_count--) { - int vtx_num; - int i; - float vertices[3*2], source_texcoords[3*2]; - - DEBUGF("In loop of render trapezoid, nclip_rect = %d, mclip_rect = %d, " - "clip_processed = %d, traps_count = %d, traps_not_completed = %d\n", - nclip_rect, mclip_rect, clip_processed, traps_count, traps_not_completed); - - if (_glamor_clip_trapezoid_vertex(ptrap, pbox, clipped_vtx, &vtx_num)) { - for (i = 0; i < vtx_num - 2; i++) { - int clipped_vtx_tmp[3*2]; - - clipped_vtx_tmp[0] = clipped_vtx[0]; - clipped_vtx_tmp[1] = clipped_vtx[1]; - clipped_vtx_tmp[2] = clipped_vtx[(i+1)*2]; - clipped_vtx_tmp[3] = clipped_vtx[(i+1)*2 + 1]; - clipped_vtx_tmp[4] = clipped_vtx[(i+2)*2]; - clipped_vtx_tmp[5] = clipped_vtx[(i+2)*2 + 1]; - glamor_set_normalize_tri_vcoords( - dst_xscale, dst_yscale, clipped_vtx_tmp, - glamor_priv->yInverted, vertices); - DEBUGF("vertices of triangle: (%f X %f), (%f X %f), " - "(%f X %f)\n", vertices[0], vertices[1], - vertices[2], vertices[3], vertices[4], vertices[5]); - - - if (key.source != SHADER_SOURCE_SOLID) { - if (src->transform) { - glamor_set_transformed_normalize_tri_tcoords( - source_pixmap_priv, - src_matrix, src_xscale, src_yscale, - clipped_vtx_tmp, - glamor_priv->yInverted, - source_texcoords); - } else { - glamor_set_normalize_tri_tcoords( - src_xscale, src_yscale, - clipped_vtx_tmp, - glamor_priv->yInverted, - source_texcoords); - } - - DEBUGF("source_texcoords of triangle: (%f X %f), " - "(%f X %f), (%f X %f)\n", - source_texcoords[0], source_texcoords[1], - source_texcoords[2], source_texcoords[3], - source_texcoords[4], source_texcoords[5]); - } - - glamor_emit_composite_triangle(screen, source_texcoords, - NULL, vertices); - } - } - - ptrap++; - } - - if (traps_not_completed) { /* one loop of ntraps not completed */ - mclip_rect = 1; - traps_count = traps_not_completed > (ntriangle_per_loop / 4) ? - (ntriangle_per_loop / 4) : traps_not_completed; - traps_not_completed -= traps_count; - glamor_flush_composite_triangles(screen); - goto NTRAPS_LOOP_AGAIN; - } else { - ptrap = traps; - traps_count = ntrap; - } - - pbox++; - } - - glamor_flush_composite_triangles(screen); - - nclip_rect -= clip_processed; - } - - ret = TRUE; - -TRAPEZOID_RESET_GL: - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); - dispatch->glDisable(GL_BLEND); + ScreenPtr screen = dst->pDrawable->pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + struct shader_key key; + glamor_composite_shader *shader = NULL; + struct blendinfo op_info; + PictFormatShort saved_source_format = 0; + PixmapPtr source_pixmap = NULL; + PixmapPtr dest_pixmap = NULL; + glamor_pixmap_private *source_pixmap_priv = NULL; + glamor_pixmap_private *dest_pixmap_priv = NULL; + glamor_pixmap_private *temp_src_priv = NULL; + int x_temp_src, y_temp_src; + int src_width, src_height; + int source_x_off, source_y_off; + GLfloat src_xscale = 1, src_yscale = 1; + int x_dst, y_dst; + int dest_x_off, dest_y_off; + GLfloat dst_xscale, dst_yscale; + BoxRec bounds; + PicturePtr temp_src = src; + glamor_gl_dispatch *dispatch = NULL; + int vert_stride = 3; + int ntriangle_per_loop; + int nclip_rect; + int mclip_rect; + int clip_processed; + int clipped_vtx[6 * 2]; + RegionRec region; + BoxPtr box = NULL; + BoxPtr pbox = NULL; + int traps_count = 0; + int traps_not_completed = 0; + xTrapezoid *ptrap = NULL; + int nbox; + float src_matrix[9]; + Bool ret = FALSE; + + /* If a mask format wasn't provided, we get to choose, but behavior should + * be as if there was no temporary mask the traps were accumulated into. + */ + if (!mask_format) { + if (dst->polyEdge == PolyEdgeSharp) + mask_format = PictureMatchFormat(screen, 1, PICT_a1); + else + mask_format = PictureMatchFormat(screen, 8, PICT_a8); + for (; ntrap; ntrap--, traps++) + glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, 1, traps); + return TRUE; + } + + miTrapezoidBounds(ntrap, traps, &bounds); + DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d\n", bounds.x1, bounds.x2, + bounds.y1, bounds.y2); + + /* No area need to render. */ + if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) + return TRUE; + + dest_pixmap = glamor_get_drawable_pixmap(dst->pDrawable); + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv) + || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + /* Currently. Always fallback to cpu if destination is in CPU memory. */ + ret = FALSE; + DEBUGF("dst pixmap has no FBO.\n"); + goto TRAPEZOID_OUT; + } + + if (src->pDrawable) { + source_pixmap = glamor_get_drawable_pixmap(src->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + temp_src_priv = source_pixmap_priv; + if (source_pixmap_priv + && (source_pixmap_priv->type == GLAMOR_DRM_ONLY + || source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) { + ret = FALSE; + goto TRAPEZOID_OUT; + } + } + + x_dst = bounds.x1; + y_dst = bounds.y1; + + src_width = bounds.x2 - bounds.x1; + src_height = bounds.y2 - bounds.y1; + + x_temp_src = x_src + bounds.x1 - (traps[0].left.p1.x >> 16); + y_temp_src = y_src + bounds.y1 - (traps[0].left.p1.y >> 16); + + if ((!src->pDrawable && (src->pSourcePict->type != SourcePictTypeSolidFill)) //1. The Gradient case. + /* 2. Has no fbo but can upload. */ + || (src->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) + && ((src_width * src_height * 4 < + source_pixmap->drawable.width * source_pixmap->drawable.height) + || !glamor_check_fbo_size(glamor_priv, + source_pixmap->drawable.width, + source_pixmap->drawable.height)))) { + + if (!glamor_check_fbo_size(glamor_priv, src_width, src_height)) { + ret = FALSE; + goto TRAPEZOID_OUT; + } + temp_src = glamor_convert_gradient_picture(screen, src, + x_src, y_src, + src_width, src_height); + if (!temp_src) { + temp_src = src; + ret = FALSE; + DEBUGF("Convert gradient picture failed\n"); + goto TRAPEZOID_OUT; + } + temp_src_priv = + glamor_get_pixmap_private((PixmapPtr) temp_src->pDrawable); + x_temp_src = y_temp_src = 0; + } + + x_dst += dst->pDrawable->x; + y_dst += dst->pDrawable->y; + if (temp_src->pDrawable) { + x_temp_src += temp_src->pDrawable->x; + y_temp_src += temp_src->pDrawable->y; + } + + if (!miComputeCompositeRegion(®ion, + temp_src, NULL, dst, + x_temp_src, y_temp_src, + 0, 0, x_dst, y_dst, src_width, src_height)) { + DEBUGF("All the regions are clipped out, do nothing\n"); + goto TRAPEZOID_OUT; + } + + box = REGION_RECTS(®ion); + nbox = REGION_NUM_RECTS(®ion); + pbox = box; + + ret = glamor_composite_choose_shader(op, temp_src, NULL, dst, + temp_src_priv, NULL, dest_pixmap_priv, + &key, &shader, &op_info, + &saved_source_format); + if (ret == FALSE) { + DEBUGF("can not set the shader program for composite\n"); + goto TRAPEZOID_RESET_GL; + } + glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); + glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); + glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; + glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && + key.mask != SHADER_MASK_SOLID); + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_get_drawable_deltas(dst->pDrawable, dest_pixmap, + &dest_x_off, &dest_y_off); + + pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); + + if (glamor_priv->has_source_coords) { + source_pixmap = glamor_get_drawable_pixmap(temp_src->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + glamor_get_drawable_deltas(temp_src->pDrawable, + source_pixmap, &source_x_off, &source_y_off); + pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, &src_yscale); + glamor_picture_get_matrixf(temp_src, src_matrix); + vert_stride += 3; + } + + if (glamor_priv->has_mask_coords) { + DEBUGF("Should never have mask coords here!\n"); + ret = FALSE; + goto TRAPEZOID_RESET_GL; + } + + /* A trapezoid clip with a rectangle will at most generate a hexagon, + which can be devided into 4 triangles to render. */ + ntriangle_per_loop = + (vert_stride * nbox * ntrap * 4) > + GLAMOR_COMPOSITE_VBO_VERT_CNT ? (GLAMOR_COMPOSITE_VBO_VERT_CNT / + vert_stride) : nbox * ntrap * 4; + ntriangle_per_loop = (ntriangle_per_loop / 4) * 4; + + nclip_rect = nbox; + while (nclip_rect) { + mclip_rect = (nclip_rect * ntrap * 4) > ntriangle_per_loop ? + (ntriangle_per_loop / (4 * ntrap)) : nclip_rect; + + if (!mclip_rect) { /* Maybe too many traps. */ + mclip_rect = 1; + ptrap = traps; + traps_count = ntriangle_per_loop / 4; + traps_not_completed = ntrap - traps_count; + } + else { + traps_count = ntrap; + ptrap = traps; + traps_not_completed = 0; + } + + NTRAPS_LOOP_AGAIN: + + glamor_setup_composite_vbo(screen, + mclip_rect * traps_count * 4 * vert_stride); + clip_processed = mclip_rect; + + while (mclip_rect--) { + while (traps_count--) { + int vtx_num; + int i; + float vertices[3 * 2], source_texcoords[3 * 2]; + + DEBUGF + ("In loop of render trapezoid, nclip_rect = %d, mclip_rect = %d, " + "clip_processed = %d, traps_count = %d, traps_not_completed = %d\n", + nclip_rect, mclip_rect, clip_processed, traps_count, + traps_not_completed); + + if (_glamor_clip_trapezoid_vertex + (ptrap, pbox, clipped_vtx, &vtx_num)) { + for (i = 0; i < vtx_num - 2; i++) { + int clipped_vtx_tmp[3 * 2]; + + clipped_vtx_tmp[0] = clipped_vtx[0]; + clipped_vtx_tmp[1] = clipped_vtx[1]; + clipped_vtx_tmp[2] = clipped_vtx[(i + 1) * 2]; + clipped_vtx_tmp[3] = clipped_vtx[(i + 1) * 2 + 1]; + clipped_vtx_tmp[4] = clipped_vtx[(i + 2) * 2]; + clipped_vtx_tmp[5] = clipped_vtx[(i + 2) * 2 + 1]; + glamor_set_normalize_tri_vcoords(dst_xscale, dst_yscale, + clipped_vtx_tmp, + glamor_priv->yInverted, + vertices); + DEBUGF("vertices of triangle: (%f X %f), (%f X %f), " + "(%f X %f)\n", vertices[0], vertices[1], + vertices[2], vertices[3], vertices[4], + vertices[5]); + + if (key.source != SHADER_SOURCE_SOLID) { + if (src->transform) { + glamor_set_transformed_normalize_tri_tcoords + (source_pixmap_priv, src_matrix, src_xscale, + src_yscale, clipped_vtx_tmp, + glamor_priv->yInverted, source_texcoords); + } + else { + glamor_set_normalize_tri_tcoords(src_xscale, + src_yscale, + clipped_vtx_tmp, + glamor_priv-> + yInverted, + source_texcoords); + } + + DEBUGF("source_texcoords of triangle: (%f X %f), " + "(%f X %f), (%f X %f)\n", + source_texcoords[0], source_texcoords[1], + source_texcoords[2], source_texcoords[3], + source_texcoords[4], source_texcoords[5]); + } + + glamor_emit_composite_triangle(screen, source_texcoords, + NULL, vertices); + } + } + + ptrap++; + } + + if (traps_not_completed) { /* one loop of ntraps not completed */ + mclip_rect = 1; + traps_count = traps_not_completed > (ntriangle_per_loop / 4) ? + (ntriangle_per_loop / 4) : traps_not_completed; + traps_not_completed -= traps_count; + glamor_flush_composite_triangles(screen); + goto NTRAPS_LOOP_AGAIN; + } + else { + ptrap = traps; + traps_count = ntrap; + } + + pbox++; + } + + glamor_flush_composite_triangles(screen); + + nclip_rect -= clip_processed; + } + + ret = TRUE; + + TRAPEZOID_RESET_GL: + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); + dispatch->glDisable(GL_BLEND); #ifndef GLAMOR_GLES2 - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glActiveTexture(GL_TEXTURE1); - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - -TRAPEZOID_OUT: - if (box) { - REGION_UNINIT(dst->pDrawable->pScreen, ®ion); - } - - if (temp_src != src) { - FreePicture(temp_src, 0); - } else { - if (saved_source_format) { - src->format = saved_source_format; - } - } - - if (dispatch) { - glamor_put_dispatch(glamor_priv); - } - - return ret; + dispatch->glUseProgram(0); + + TRAPEZOID_OUT: + if (box) { + REGION_UNINIT(dst->pDrawable->pScreen, ®ion); + } + + if (temp_src != src) { + FreePicture(temp_src, 0); + } + else { + if (saved_source_format) { + src->format = saved_source_format; + } + } + + if (dispatch) { + glamor_put_dispatch(glamor_priv); + } + + return ret; } void glamor_init_trapezoid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - GLint fs_prog, vs_prog; - - const char *trapezoid_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec2 v_texcoord;\n" - /* v_top_bottom, v_left_param and v_right_param contain the - constant value for all the vertex of one rect. Using uniform - is more suitable but we need to reset the uniform variables - for every rect rendering and can not use the vbo, which causes - performance loss. So we set these attributes to same value - for every vertex of one rect and so it is also a constant in FS */ - "attribute vec2 v_top_bottom;\n" - "attribute vec4 v_left_param;\n" - "attribute vec4 v_right_param;\n" - "\n" - "varying vec2 source_texture;\n" - "varying float trap_top;\n" - "varying float trap_bottom;\n" - "varying float trap_left_x;\n" - "varying float trap_left_y;\n" - "varying float trap_left_slope;\n" - "varying float trap_left_vertical_f;\n" - "varying float trap_right_x;\n" - "varying float trap_right_y;\n" - "varying float trap_right_slope;\n" - "varying float trap_right_vertical_f;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - " trap_top = v_top_bottom.x;\n" - " trap_bottom = v_top_bottom.y;\n" - " \n" - " trap_left_x = v_left_param.x;\n" - " trap_left_y = v_left_param.y;\n" - " trap_left_slope = v_left_param.z;\n" - " trap_left_vertical_f = v_left_param.w;\n" - " \n" - " trap_right_x = v_right_param.x;\n" - " trap_right_y = v_right_param.y;\n" - " trap_right_slope = v_right_param.z;\n" - " trap_right_vertical_f = v_right_param.w;\n" - "}\n"; - - /* - * Because some GL fill function do not support the MultSample - * anti-alias, we need to do the MSAA here. This manner like - * pixman, will caculate the value of area in trapezoid dividing - * the totol area for each pixel, as follow: - | - ----+------------------------------------------------------> - | - | ------------- - | / \ - | / \ - | / \ - | / +----------------+ - | / |.....\ | - | / |......\ | - | / |.......\ | - | / |........\ | - | /-------------------+---------\ | - | | | - | | | - | +----------------+ - | - \|/ - - */ - const char *trapezoid_fs = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture; \n" - "varying float trap_top; \n" - "varying float trap_bottom; \n" - "varying float trap_left_x; \n" - "varying float trap_left_y; \n" - "varying float trap_left_slope; \n" - "varying float trap_left_vertical_f; \n" - "varying float trap_right_x; \n" - "varying float trap_right_y; \n" - "varying float trap_right_slope; \n" - "varying float trap_right_vertical_f; \n" - "float x_per_pix = 1.0;" - "float y_per_pix = 1.0;" - "\n" - "float get_alpha_val() \n" - "{ \n" - " float x_up_cut_left; \n" - " float x_bottom_cut_left; \n" - " float x_up_cut_right; \n" - " float x_bottom_cut_right; \n" - " bool trap_left_vertical;\n" - " bool trap_right_vertical;\n" - " if (abs(trap_left_vertical_f - 1.0) <= 0.0001)\n" - " trap_left_vertical = true;\n" - " else\n" - " trap_left_vertical = false;\n" - " if (abs(trap_right_vertical_f - 1.0) <= 0.0001)\n" - " trap_right_vertical = true;\n" - " else\n" - " trap_right_vertical = false;\n" - " \n" - " if(trap_left_vertical == true) { \n" - " x_up_cut_left = trap_left_x; \n" - " x_bottom_cut_left = trap_left_x; \n" - " } else { \n" - " x_up_cut_left = trap_left_x \n" - " + (source_texture.y - y_per_pix/2.0 - trap_left_y) \n" - " / trap_left_slope; \n" - " x_bottom_cut_left = trap_left_x \n" - " + (source_texture.y + y_per_pix/2.0 - trap_left_y) \n" - " / trap_left_slope; \n" - " } \n" - " \n" - " if(trap_right_vertical == true) { \n" - " x_up_cut_right = trap_right_x; \n" - " x_bottom_cut_right = trap_right_x; \n" - " } else { \n" - " x_up_cut_right = trap_right_x \n" - " + (source_texture.y - y_per_pix/2.0 - trap_right_y) \n" - " / trap_right_slope; \n" - " x_bottom_cut_right = trap_right_x \n" - " + (source_texture.y + y_per_pix/2.0 - trap_right_y) \n" - " / trap_right_slope; \n" - " } \n" - " \n" - " if((x_up_cut_left <= source_texture.x - x_per_pix/2.0) && \n" - " (x_bottom_cut_left <= source_texture.x - x_per_pix/2.0) && \n" - " (x_up_cut_right >= source_texture.x + x_per_pix/2.0) && \n" - " (x_bottom_cut_right >= source_texture.x + x_per_pix/2.0) && \n" - " (trap_top <= source_texture.y - y_per_pix/2.0) && \n" - " (trap_bottom >= source_texture.y + y_per_pix/2.0)) { \n" - // The complete inside case. - " return 1.0; \n" - " } else if((trap_top > source_texture.y + y_per_pix/2.0) || \n" - " (trap_bottom < source_texture.y - y_per_pix/2.0)) { \n" - // The complete outside. Above the top or Below the bottom. - " return 0.0; \n" - " } else { \n" - " if((x_up_cut_right < source_texture.x - x_per_pix/2.0 && \n" - " x_bottom_cut_right < source_texture.x - x_per_pix/2.0) \n" - " || (x_up_cut_left > source_texture.x + x_per_pix/2.0 && \n" - " x_bottom_cut_left > source_texture.x + x_per_pix/2.0)) { \n" - // The complete outside. At Left or Right of the trapezoide. - " return 0.0; \n" - " } \n" - " } \n" - // Get here, the pix is partly inside the trapezoid. - " { \n" - " float percent = 0.0; \n" - " float up = (source_texture.y - y_per_pix/2.0) >= trap_top ? \n" - " (source_texture.y - y_per_pix/2.0) : trap_top; \n" - " float bottom = (source_texture.y + y_per_pix/2.0) <= trap_bottom ? \n" - " (source_texture.y + y_per_pix/2.0) : trap_bottom; \n" - " float left = source_texture.x - x_per_pix/2.0; \n" - " float right = source_texture.x + x_per_pix/2.0; \n" - " \n" - " percent = (bottom - up) / y_per_pix; \n" - " \n" - " if(trap_left_vertical == true) { \n" - " if(trap_left_x > source_texture.x - x_per_pix/2.0 && \n" - " trap_left_x < source_texture.x + x_per_pix/2.0) \n" - " left = trap_left_x; \n" - " } \n" - " if(trap_right_vertical == true) { \n" - " if(trap_right_x > source_texture.x - x_per_pix/2.0 && \n" - " trap_right_x < source_texture.x + x_per_pix/2.0) \n" - " right = trap_right_x; \n" - " } \n" - " if((up >= bottom) || (left >= right)) \n" - " return 0.0; \n" - " \n" - " percent = percent * ((right - left)/x_per_pix); \n" - " if(trap_left_vertical == true && trap_right_vertical == true) \n" - " return percent; \n" - " \n" - " if(trap_left_vertical != true) { \n" - " float area; \n" - // the slope should never be 0.0 here - " float up_x = trap_left_x + (up - trap_left_y)/trap_left_slope; \n" - " float bottom_x = trap_left_x + (bottom - trap_left_y)/trap_left_slope; \n" - " if(trap_left_slope < 0.0 && up_x > left) { \n" - /* case 1 - | - ----+-------------------------------------> - | / - | / - | +---/--------+ - | | /.........| - | | /..........| - | |/...........| - | /............| - | /|............| - | +------------+ - | - \|/ - */ - " float left_y = trap_left_y + trap_left_slope*(left - trap_left_x); \n" - " if((up_x > left) && (left_y > up)) { \n" - " area = 0.5 * (up_x - left) * (left_y - up); \n" - " if(up_x > right) { \n" - " float right_y = trap_left_y \n" - " + trap_left_slope*(right - trap_left_x); \n" - " area = area - 0.5 * (up_x - right) * (right_y - up); \n" - " } \n" - " if(left_y > bottom) { \n" - " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" - " } else if(trap_left_slope > 0.0 && bottom_x > left) { \n" - /* case 2 - | - ----+-------------------------------------> - | \ - | \ - | +\-----------+ - | | \..........| - | | \.........| - | | \........| - | | \.......| - | | \......| - | +------\-----+ - | \ - | \ - \|/ - */ - " float right_y = trap_left_y + trap_left_slope*(right - trap_left_x); \n" - " if((up_x < right) && (right_y > up)) { \n" - " area = 0.5 * (right - up_x) * (right_y - up); \n" - " if(up_x < left) { \n" - " float left_y = trap_left_y \n" - " + trap_left_slope*(left - trap_left_x); \n" - " area = area - 0.5 * (left - up_x) * (left_y - up); \n" - " } \n" - " if(right_y > bottom) { \n" - " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (area/((right-left)*(bottom-up))); \n" - " } \n" - " } \n" - " \n" - " if(trap_right_vertical != true) { \n" - " float area; \n" - // the slope should never be 0.0 here - " float up_x = trap_right_x + (up - trap_right_y)/trap_right_slope; \n" - " float bottom_x = trap_right_x + (bottom - trap_right_y)/trap_right_slope; \n" - " if(trap_right_slope < 0.0 && bottom_x < right) { \n" - /* case 3 - | - ----+-------------------------------------> - | / - | +--------/---+ - | |......./ | - | |....../ | - | |...../ | - | |..../ | - | |.../ | - | +--/---------+ - | / - | - \|/ - */ - " float left_y = trap_right_y + trap_right_slope*(left - trap_right_x); \n" - " if((up_x > left) && (left_y > up)) { \n" - " area = 0.5 * (up_x - left) * (left_y - up); \n" - " if(up_x > right) { \n" - " float right_y = trap_right_y \n" - " + trap_right_slope*(right - trap_right_x); \n" - " area = area - 0.5 * (up_x - right) * (right_y - up); \n" - " } \n" - " if(left_y > bottom) { \n" - " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (area/((right-left)*(bottom-up))); \n" - " } else if(trap_right_slope > 0.0 && up_x < right) { \n" - /* case 4 - | - ----+-------------------------------------> - | \ - | +--------\---+ - | |.........\ | - | |..........\ | - | |...........\| - | |............\ - | |............|\ - | +------------+ \ - | \ - | - \|/ - */ - " float right_y = trap_right_y + trap_right_slope*(right - trap_right_x); \n" - " if((up_x < right) && (right_y > up)) { \n" - " area = 0.5 * (right - up_x) * (right_y - up); \n" - " if(up_x < left) { \n" - " float left_y = trap_right_y \n" - " + trap_right_slope*(left - trap_right_x); \n" - " area = area - 0.5 * (left - up_x) * (left_y - up); \n" - " } \n" - " if(right_y > bottom) { \n" - " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" - " } \n" - " } \n" - " \n" - " return percent; \n" - " } \n" - "} \n" - "\n" - "void main() \n" - "{ \n" - " float alpha_val = get_alpha_val(); \n" - " gl_FragColor = vec4(0.0, 0.0, 0.0, alpha_val); \n" - "}\n"; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_priv->trapezoid_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, trapezoid_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, trapezoid_fs); - - dispatch->glAttachShader(glamor_priv->trapezoid_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->trapezoid_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_POS, "v_positionsition"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_SOURCE, "v_texcoord"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_TOP_BOTTOM, "v_top_bottom"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_LEFT_PARAM, "v_left_param"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param"); - - glamor_link_glsl_prog(dispatch, glamor_priv->trapezoid_prog); - - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + GLint fs_prog, vs_prog; + + const char *trapezoid_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec2 v_texcoord;\n" + /* v_top_bottom, v_left_param and v_right_param contain the + constant value for all the vertex of one rect. Using uniform + is more suitable but we need to reset the uniform variables + for every rect rendering and can not use the vbo, which causes + performance loss. So we set these attributes to same value + for every vertex of one rect and so it is also a constant in FS */ + "attribute vec2 v_top_bottom;\n" + "attribute vec4 v_left_param;\n" + "attribute vec4 v_right_param;\n" + "\n" + "varying vec2 source_texture;\n" + "varying float trap_top;\n" + "varying float trap_bottom;\n" + "varying float trap_left_x;\n" + "varying float trap_left_y;\n" + "varying float trap_left_slope;\n" + "varying float trap_left_vertical_f;\n" + "varying float trap_right_x;\n" + "varying float trap_right_y;\n" + "varying float trap_right_slope;\n" + "varying float trap_right_vertical_f;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + " trap_top = v_top_bottom.x;\n" + " trap_bottom = v_top_bottom.y;\n" + " \n" + " trap_left_x = v_left_param.x;\n" + " trap_left_y = v_left_param.y;\n" + " trap_left_slope = v_left_param.z;\n" + " trap_left_vertical_f = v_left_param.w;\n" + " \n" + " trap_right_x = v_right_param.x;\n" + " trap_right_y = v_right_param.y;\n" + " trap_right_slope = v_right_param.z;\n" + " trap_right_vertical_f = v_right_param.w;\n" + "}\n"; + + /* + * Because some GL fill function do not support the MultSample + * anti-alias, we need to do the MSAA here. This manner like + * pixman, will caculate the value of area in trapezoid dividing + * the totol area for each pixel, as follow: + | + ----+------------------------------------------------------> + | + | ------------- + | / \ + | / \ + | / \ + | / +----------------+ + | / |.....\ | + | / |......\ | + | / |.......\ | + | / |........\ | + | /-------------------+---------\ | + | | | + | | | + | +----------------+ + | + \|/ + + */ + const char *trapezoid_fs = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture; \n" + "varying float trap_top; \n" + "varying float trap_bottom; \n" + "varying float trap_left_x; \n" + "varying float trap_left_y; \n" + "varying float trap_left_slope; \n" + "varying float trap_left_vertical_f; \n" + "varying float trap_right_x; \n" + "varying float trap_right_y; \n" + "varying float trap_right_slope; \n" + "varying float trap_right_vertical_f; \n" + "float x_per_pix = 1.0;" + "float y_per_pix = 1.0;" + "\n" + "float get_alpha_val() \n" + "{ \n" + " float x_up_cut_left; \n" + " float x_bottom_cut_left; \n" + " float x_up_cut_right; \n" + " float x_bottom_cut_right; \n" + " bool trap_left_vertical;\n" + " bool trap_right_vertical;\n" + " if (abs(trap_left_vertical_f - 1.0) <= 0.0001)\n" + " trap_left_vertical = true;\n" + " else\n" + " trap_left_vertical = false;\n" + " if (abs(trap_right_vertical_f - 1.0) <= 0.0001)\n" + " trap_right_vertical = true;\n" + " else\n" + " trap_right_vertical = false;\n" + " \n" + " if(trap_left_vertical == true) { \n" + " x_up_cut_left = trap_left_x; \n" + " x_bottom_cut_left = trap_left_x; \n" + " } else { \n" + " x_up_cut_left = trap_left_x \n" + " + (source_texture.y - y_per_pix/2.0 - trap_left_y) \n" + " / trap_left_slope; \n" + " x_bottom_cut_left = trap_left_x \n" + " + (source_texture.y + y_per_pix/2.0 - trap_left_y) \n" + " / trap_left_slope; \n" + " } \n" + " \n" + " if(trap_right_vertical == true) { \n" + " x_up_cut_right = trap_right_x; \n" + " x_bottom_cut_right = trap_right_x; \n" + " } else { \n" + " x_up_cut_right = trap_right_x \n" + " + (source_texture.y - y_per_pix/2.0 - trap_right_y) \n" + " / trap_right_slope; \n" + " x_bottom_cut_right = trap_right_x \n" + " + (source_texture.y + y_per_pix/2.0 - trap_right_y) \n" + " / trap_right_slope; \n" + " } \n" + " \n" + " if((x_up_cut_left <= source_texture.x - x_per_pix/2.0) && \n" + " (x_bottom_cut_left <= source_texture.x - x_per_pix/2.0) && \n" + " (x_up_cut_right >= source_texture.x + x_per_pix/2.0) && \n" + " (x_bottom_cut_right >= source_texture.x + x_per_pix/2.0) && \n" + " (trap_top <= source_texture.y - y_per_pix/2.0) && \n" + " (trap_bottom >= source_texture.y + y_per_pix/2.0)) { \n" + // The complete inside case. + " return 1.0; \n" + " } else if((trap_top > source_texture.y + y_per_pix/2.0) || \n" + " (trap_bottom < source_texture.y - y_per_pix/2.0)) { \n" + // The complete outside. Above the top or Below the bottom. + " return 0.0; \n" + " } else { \n" + " if((x_up_cut_right < source_texture.x - x_per_pix/2.0 && \n" + " x_bottom_cut_right < source_texture.x - x_per_pix/2.0) \n" + " || (x_up_cut_left > source_texture.x + x_per_pix/2.0 && \n" + " x_bottom_cut_left > source_texture.x + x_per_pix/2.0)) { \n" + // The complete outside. At Left or Right of the trapezoide. + " return 0.0; \n" + " } \n" + " } \n" + // Get here, the pix is partly inside the trapezoid. + " { \n" + " float percent = 0.0; \n" + " float up = (source_texture.y - y_per_pix/2.0) >= trap_top ? \n" + " (source_texture.y - y_per_pix/2.0) : trap_top; \n" + " float bottom = (source_texture.y + y_per_pix/2.0) <= trap_bottom ? \n" + " (source_texture.y + y_per_pix/2.0) : trap_bottom; \n" + " float left = source_texture.x - x_per_pix/2.0; \n" + " float right = source_texture.x + x_per_pix/2.0; \n" + " \n" + " percent = (bottom - up) / y_per_pix; \n" + " \n" + " if(trap_left_vertical == true) { \n" + " if(trap_left_x > source_texture.x - x_per_pix/2.0 && \n" + " trap_left_x < source_texture.x + x_per_pix/2.0) \n" + " left = trap_left_x; \n" + " } \n" + " if(trap_right_vertical == true) { \n" + " if(trap_right_x > source_texture.x - x_per_pix/2.0 && \n" + " trap_right_x < source_texture.x + x_per_pix/2.0) \n" + " right = trap_right_x; \n" + " } \n" + " if((up >= bottom) || (left >= right)) \n" + " return 0.0; \n" + " \n" + " percent = percent * ((right - left)/x_per_pix); \n" + " if(trap_left_vertical == true && trap_right_vertical == true) \n" + " return percent; \n" + " \n" + " if(trap_left_vertical != true) { \n" + " float area; \n" + // the slope should never be 0.0 here + " float up_x = trap_left_x + (up - trap_left_y)/trap_left_slope; \n" + " float bottom_x = trap_left_x + (bottom - trap_left_y)/trap_left_slope; \n" + " if(trap_left_slope < 0.0 && up_x > left) { \n" + /* case 1 + | + ----+-------------------------------------> + | / + | / + | +---/--------+ + | | /.........| + | | /..........| + | |/...........| + | /............| + | /|............| + | +------------+ + | + \|/ + */ + " float left_y = trap_left_y + trap_left_slope*(left - trap_left_x); \n" + " if((up_x > left) && (left_y > up)) { \n" + " area = 0.5 * (up_x - left) * (left_y - up); \n" + " if(up_x > right) { \n" + " float right_y = trap_left_y \n" + " + trap_left_slope*(right - trap_left_x); \n" + " area = area - 0.5 * (up_x - right) * (right_y - up); \n" + " } \n" + " if(left_y > bottom) { \n" + " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" + " } else if(trap_left_slope > 0.0 && bottom_x > left) { \n" + /* case 2 + | + ----+-------------------------------------> + | \ + | \ + | +\-----------+ + | | \..........| + | | \.........| + | | \........| + | | \.......| + | | \......| + | +------\-----+ + | \ + | \ + \|/ + */ + " float right_y = trap_left_y + trap_left_slope*(right - trap_left_x); \n" + " if((up_x < right) && (right_y > up)) { \n" + " area = 0.5 * (right - up_x) * (right_y - up); \n" + " if(up_x < left) { \n" + " float left_y = trap_left_y \n" + " + trap_left_slope*(left - trap_left_x); \n" + " area = area - 0.5 * (left - up_x) * (left_y - up); \n" + " } \n" + " if(right_y > bottom) { \n" + " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (area/((right-left)*(bottom-up))); \n" + " } \n" + " } \n" + " \n" + " if(trap_right_vertical != true) { \n" + " float area; \n" + // the slope should never be 0.0 here + " float up_x = trap_right_x + (up - trap_right_y)/trap_right_slope; \n" + " float bottom_x = trap_right_x + (bottom - trap_right_y)/trap_right_slope; \n" + " if(trap_right_slope < 0.0 && bottom_x < right) { \n" + /* case 3 + | + ----+-------------------------------------> + | / + | +--------/---+ + | |......./ | + | |....../ | + | |...../ | + | |..../ | + | |.../ | + | +--/---------+ + | / + | + \|/ + */ + " float left_y = trap_right_y + trap_right_slope*(left - trap_right_x); \n" + " if((up_x > left) && (left_y > up)) { \n" + " area = 0.5 * (up_x - left) * (left_y - up); \n" + " if(up_x > right) { \n" + " float right_y = trap_right_y \n" + " + trap_right_slope*(right - trap_right_x); \n" + " area = area - 0.5 * (up_x - right) * (right_y - up); \n" + " } \n" + " if(left_y > bottom) { \n" + " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (area/((right-left)*(bottom-up))); \n" + " } else if(trap_right_slope > 0.0 && up_x < right) { \n" + /* case 4 + | + ----+-------------------------------------> + | \ + | +--------\---+ + | |.........\ | + | |..........\ | + | |...........\| + | |............\ + | |............|\ + | +------------+ \ + | \ + | + \|/ + */ + " float right_y = trap_right_y + trap_right_slope*(right - trap_right_x); \n" + " if((up_x < right) && (right_y > up)) { \n" + " area = 0.5 * (right - up_x) * (right_y - up); \n" + " if(up_x < left) { \n" + " float left_y = trap_right_y \n" + " + trap_right_slope*(left - trap_right_x); \n" + " area = area - 0.5 * (left - up_x) * (left_y - up); \n" + " } \n" + " if(right_y > bottom) { \n" + " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" + " } \n" + " } \n" + " \n" + " return percent; \n" + " } \n" + "} \n" + "\n" + "void main() \n" + "{ \n" + " float alpha_val = get_alpha_val(); \n" + " gl_FragColor = vec4(0.0, 0.0, 0.0, alpha_val); \n" + "}\n"; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_priv->trapezoid_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, + GL_VERTEX_SHADER, trapezoid_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, trapezoid_fs); + + dispatch->glAttachShader(glamor_priv->trapezoid_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->trapezoid_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_POS, "v_positionsition"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_TOP_BOTTOM, "v_top_bottom"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_LEFT_PARAM, "v_left_param"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param"); + + glamor_link_glsl_prog(dispatch, glamor_priv->trapezoid_prog); + + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); } void glamor_fini_trapezoid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->trapezoid_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->trapezoid_prog); + glamor_put_dispatch(glamor_priv); } static Bool _glamor_generate_trapezoid_with_shader(ScreenPtr screen, PicturePtr picture, - xTrapezoid * traps, int ntrap, BoxRec *bounds) + xTrapezoid *traps, int ntrap, + BoxRec *bounds) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - glamor_pixmap_private *pixmap_priv; - PixmapPtr pixmap = NULL; - GLint trapezoid_prog; - GLfloat xscale, yscale; - float left_slope, right_slope; - xTrapezoid *ptrap; - BoxRec one_trap_bound; - int nrect_max; - int i, j; - float *vertices; - float params[4]; - - glamor_priv = glamor_get_screen_private(screen); - trapezoid_prog = glamor_priv->trapezoid_prog; - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { /* should always have here. */ - DEBUGF("GLAMOR_PIXMAP_PRIV_HAS_FBO check failed, fallback\n"); - return FALSE; - } - - /* First, clear all to zero */ - if (!glamor_solid(pixmap, 0, 0, pixmap_priv->base.pixmap->drawable.width, - pixmap_priv->base.pixmap->drawable.height, - GXclear, 0xFFFFFFFF, 0)) { - DEBUGF("glamor_solid failed, fallback\n"); - return FALSE; - } - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - pixmap_priv_get_dest_scale(pixmap_priv, (&xscale), (&yscale)); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - /* Now draw the Trapezoid mask. */ - dispatch->glUseProgram(trapezoid_prog); - - dispatch->glEnable(GL_BLEND); - dispatch->glBlendFunc(GL_ONE, GL_ONE); - - nrect_max = GLAMOR_COMPOSITE_VBO_VERT_CNT / (4 * GLAMOR_VERTEX_RIGHT_PARAM); - - for (i = 0; i < ntrap;) { - int mrect; - int stride; - - mrect = (ntrap - i) > nrect_max ? nrect_max : (ntrap - i); - glamor_setup_composite_vbo_for_trapezoid(screen, 4 * mrect); - stride = glamor_priv->vb_stride / sizeof(float); - - for (j = 0; j < mrect; j++) { - ptrap = traps + i + j; - - DEBUGF("--- The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" - "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" - "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", - xFixedToInt(ptrap->top), ptrap->top, - xFixedToInt(ptrap->bottom), ptrap->bottom, - xFixedToInt(ptrap->left.p1.x), ptrap->left.p1.x, - xFixedToInt(ptrap->left.p1.y), ptrap->left.p1.y, - xFixedToInt(ptrap->left.p2.x), ptrap->left.p2.x, - xFixedToInt(ptrap->left.p2.y), ptrap->left.p2.y, - xFixedToInt(ptrap->right.p1.x), ptrap->right.p1.x, - xFixedToInt(ptrap->right.p1.y), ptrap->right.p1.y, - xFixedToInt(ptrap->right.p2.x), ptrap->right.p2.x, - xFixedToInt(ptrap->right.p2.y), ptrap->right.p2.y); - - miTrapezoidBounds(1, ptrap, &one_trap_bound); - - vertices = (float*)(glamor_priv->vb + glamor_priv->vbo_offset) + 2; - glamor_set_tcoords_ext((pixmap_priv->base.pixmap->drawable.width), - (pixmap_priv->base.pixmap->drawable.height), - (one_trap_bound.x1), - (one_trap_bound.y1), - (one_trap_bound.x2), - (one_trap_bound.y2), - glamor_priv->yInverted, vertices, stride); - DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], - vertices[1*stride], vertices[1*stride + 1], - vertices[2*stride], vertices[2*stride + 1], - vertices[3*stride], vertices[3*stride + 1]); - - /* Need to rebase. */ - one_trap_bound.x1 -= bounds->x1; - one_trap_bound.x2 -= bounds->x1; - one_trap_bound.y1 -= bounds->y1; - one_trap_bound.y2 -= bounds->y1; - - vertices -= 2; - - glamor_set_normalize_vcoords_ext(pixmap_priv, xscale, yscale, - one_trap_bound.x1, one_trap_bound.y1, - one_trap_bound.x2, one_trap_bound.y2, - glamor_priv->yInverted, vertices, stride); - DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], - vertices[1*stride], vertices[1*stride + 1], - vertices[2*stride], vertices[2*stride + 1], - vertices[3*stride], vertices[3*stride + 1]); - vertices += 4; - - /* Set the top and bottom. */ - params[0] = ((float)ptrap->top) / 65536; - params[1] = ((float)ptrap->bottom) / 65536; - glamor_set_const_ext(params, 2, vertices, 4, stride); - vertices += 2; - - /* Set the left params. */ - params[0] = ((float)ptrap->left.p1.x) / 65536; - params[1] = ((float)ptrap->left.p1.y) / 65536; - - if (ptrap->left.p1.x == ptrap->left.p2.x) { - left_slope = 0.0; - params[3] = 1.0; - } else { - left_slope = ((float)(ptrap->left.p1.y - ptrap->left.p2.y)) - / ((float)(ptrap->left.p1.x - ptrap->left.p2.x)); - params[3] = 0.0; - } - params[2] = left_slope; - glamor_set_const_ext(params, 4, vertices, 4, stride); - vertices += 4; - - /* Set the left params. */ - params[0] = ((float)ptrap->right.p1.x) / 65536; - params[1] = ((float)ptrap->right.p1.y) / 65536; - - if (ptrap->right.p1.x == ptrap->right.p2.x) { - right_slope = 0.0; - params[3] = 1.0; - } else { - right_slope = ((float)(ptrap->right.p1.y - ptrap->right.p2.y)) - / ((float)(ptrap->right.p1.x - ptrap->right.p2.x)); - params[3] = 0.0; - } - params[2] = right_slope; - glamor_set_const_ext(params, 4, vertices, 4, stride); - - DEBUGF("trap_top = %f, trap_bottom = %f, " - "trap_left_x = %f, trap_left_y = %f, left_slope = %f, " - "trap_right_x = %f, trap_right_y = %f, right_slope = %f\n", - ((float)ptrap->top) / 65536, ((float)ptrap->bottom) / 65536, - ((float)ptrap->left.p1.x) / 65536, ((float)ptrap->left.p1.y) / 65536, - left_slope, - ((float)ptrap->right.p1.x) / 65536, ((float)ptrap->right.p1.y) / 65536, - right_slope); - - glamor_priv->render_nr_verts += 4; - glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; - } - - i += mrect; - - /* Now rendering. */ - if (!glamor_priv->render_nr_verts) - continue; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap = NULL; + GLint trapezoid_prog; + GLfloat xscale, yscale; + float left_slope, right_slope; + xTrapezoid *ptrap; + BoxRec one_trap_bound; + int nrect_max; + int i, j; + float *vertices; + float params[4]; + + glamor_priv = glamor_get_screen_private(screen); + trapezoid_prog = glamor_priv->trapezoid_prog; + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { /* should always have here. */ + DEBUGF("GLAMOR_PIXMAP_PRIV_HAS_FBO check failed, fallback\n"); + return FALSE; + } + + /* First, clear all to zero */ + if (!glamor_solid(pixmap, 0, 0, pixmap_priv->base.pixmap->drawable.width, + pixmap_priv->base.pixmap->drawable.height, + GXclear, 0xFFFFFFFF, 0)) { + DEBUGF("glamor_solid failed, fallback\n"); + return FALSE; + } + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + pixmap_priv_get_dest_scale(pixmap_priv, (&xscale), (&yscale)); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + /* Now draw the Trapezoid mask. */ + dispatch->glUseProgram(trapezoid_prog); + + dispatch->glEnable(GL_BLEND); + dispatch->glBlendFunc(GL_ONE, GL_ONE); + + nrect_max = GLAMOR_COMPOSITE_VBO_VERT_CNT / (4 * GLAMOR_VERTEX_RIGHT_PARAM); + + for (i = 0; i < ntrap;) { + int mrect; + int stride; + + mrect = (ntrap - i) > nrect_max ? nrect_max : (ntrap - i); + glamor_setup_composite_vbo_for_trapezoid(screen, 4 * mrect); + stride = glamor_priv->vb_stride / sizeof(float); + + for (j = 0; j < mrect; j++) { + ptrap = traps + i + j; + + DEBUGF + ("--- The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" + "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" + "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", + xFixedToInt(ptrap->top), ptrap->top, + xFixedToInt(ptrap->bottom), ptrap->bottom, + xFixedToInt(ptrap->left.p1.x), ptrap->left.p1.x, + xFixedToInt(ptrap->left.p1.y), ptrap->left.p1.y, + xFixedToInt(ptrap->left.p2.x), ptrap->left.p2.x, + xFixedToInt(ptrap->left.p2.y), ptrap->left.p2.y, + xFixedToInt(ptrap->right.p1.x), ptrap->right.p1.x, + xFixedToInt(ptrap->right.p1.y), ptrap->right.p1.y, + xFixedToInt(ptrap->right.p2.x), ptrap->right.p2.x, + xFixedToInt(ptrap->right.p2.y), ptrap->right.p2.y); + + miTrapezoidBounds(1, ptrap, &one_trap_bound); + + vertices = + (float *) (glamor_priv->vb + glamor_priv->vbo_offset) + 2; + glamor_set_tcoords_ext((pixmap_priv->base.pixmap->drawable.width), + (pixmap_priv->base.pixmap->drawable.height), + (one_trap_bound.x1), (one_trap_bound.y1), + (one_trap_bound.x2), (one_trap_bound.y2), + glamor_priv->yInverted, vertices, stride); + DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", vertices[0], + vertices[1], vertices[1 * stride], vertices[1 * stride + 1], + vertices[2 * stride], vertices[2 * stride + 1], + vertices[3 * stride], vertices[3 * stride + 1]); + + /* Need to rebase. */ + one_trap_bound.x1 -= bounds->x1; + one_trap_bound.x2 -= bounds->x1; + one_trap_bound.y1 -= bounds->y1; + one_trap_bound.y2 -= bounds->y1; + + vertices -= 2; + + glamor_set_normalize_vcoords_ext(pixmap_priv, xscale, yscale, + one_trap_bound.x1, + one_trap_bound.y1, + one_trap_bound.x2, + one_trap_bound.y2, + glamor_priv->yInverted, vertices, + stride); + DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", vertices[0], + vertices[1], vertices[1 * stride], vertices[1 * stride + 1], + vertices[2 * stride], vertices[2 * stride + 1], + vertices[3 * stride], vertices[3 * stride + 1]); + vertices += 4; + + /* Set the top and bottom. */ + params[0] = ((float) ptrap->top) / 65536; + params[1] = ((float) ptrap->bottom) / 65536; + glamor_set_const_ext(params, 2, vertices, 4, stride); + vertices += 2; + + /* Set the left params. */ + params[0] = ((float) ptrap->left.p1.x) / 65536; + params[1] = ((float) ptrap->left.p1.y) / 65536; + + if (ptrap->left.p1.x == ptrap->left.p2.x) { + left_slope = 0.0; + params[3] = 1.0; + } + else { + left_slope = ((float) (ptrap->left.p1.y - ptrap->left.p2.y)) + / ((float) (ptrap->left.p1.x - ptrap->left.p2.x)); + params[3] = 0.0; + } + params[2] = left_slope; + glamor_set_const_ext(params, 4, vertices, 4, stride); + vertices += 4; + + /* Set the left params. */ + params[0] = ((float) ptrap->right.p1.x) / 65536; + params[1] = ((float) ptrap->right.p1.y) / 65536; + + if (ptrap->right.p1.x == ptrap->right.p2.x) { + right_slope = 0.0; + params[3] = 1.0; + } + else { + right_slope = ((float) (ptrap->right.p1.y - ptrap->right.p2.y)) + / ((float) (ptrap->right.p1.x - ptrap->right.p2.x)); + params[3] = 0.0; + } + params[2] = right_slope; + glamor_set_const_ext(params, 4, vertices, 4, stride); + + DEBUGF("trap_top = %f, trap_bottom = %f, " + "trap_left_x = %f, trap_left_y = %f, left_slope = %f, " + "trap_right_x = %f, trap_right_y = %f, right_slope = %f\n", + ((float) ptrap->top) / 65536, + ((float) ptrap->bottom) / 65536, + ((float) ptrap->left.p1.x) / 65536, + ((float) ptrap->left.p1.y) / 65536, left_slope, + ((float) ptrap->right.p1.x) / 65536, + ((float) ptrap->right.p1.y) / 65536, right_slope); + + glamor_priv->render_nr_verts += 4; + glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; + } + + i += mrect; + + /* Now rendering. */ + if (!glamor_priv->render_nr_verts) + continue; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, - (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, 0, + glamor_priv->render_nr_verts, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawElements(GL_TRIANGLES, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #endif - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glBlendFunc(GL_ONE, GL_ZERO); - dispatch->glDisable(GL_BLEND); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return TRUE; + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glBlendFunc(GL_ONE, GL_ZERO); + dispatch->glDisable(GL_BLEND); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return TRUE; } -#endif /*GLAMOR_TRAPEZOID_SHADER */ +#endif /*GLAMOR_TRAPEZOID_SHADER */ /** * Creates an appropriate picture for temp mask use. */ static PicturePtr glamor_create_mask_picture(ScreenPtr screen, - PicturePtr dst, - PictFormatPtr pict_format, - CARD16 width, CARD16 height, int gpu) + PicturePtr dst, + PictFormatPtr pict_format, + CARD16 width, CARD16 height, int gpu) { - PixmapPtr pixmap; - PicturePtr picture; - int error; - - if (!pict_format) { - if (dst->polyEdge == PolyEdgeSharp) - pict_format = - PictureMatchFormat(screen, 1, PICT_a1); - else - pict_format = - PictureMatchFormat(screen, 8, PICT_a8); - if (!pict_format) - return 0; - } - - if (gpu) { - pixmap = glamor_create_pixmap(screen, width, height, - pict_format->depth, 0); - } else { - pixmap = glamor_create_pixmap(screen, 0, 0, - pict_format->depth, - GLAMOR_CREATE_PIXMAP_CPU); - } - - if (!pixmap) - return 0; - picture = CreatePicture(0, &pixmap->drawable, pict_format, - 0, 0, serverClient, &error); - glamor_destroy_pixmap(pixmap); - return picture; + PixmapPtr pixmap; + PicturePtr picture; + int error; + + if (!pict_format) { + if (dst->polyEdge == PolyEdgeSharp) + pict_format = PictureMatchFormat(screen, 1, PICT_a1); + else + pict_format = PictureMatchFormat(screen, 8, PICT_a8); + if (!pict_format) + return 0; + } + + if (gpu) { + pixmap = glamor_create_pixmap(screen, width, height, + pict_format->depth, 0); + } + else { + pixmap = glamor_create_pixmap(screen, 0, 0, + pict_format->depth, + GLAMOR_CREATE_PIXMAP_CPU); + } + + if (!pixmap) + return 0; + picture = CreatePicture(0, &pixmap->drawable, pict_format, + 0, 0, serverClient, &error); + glamor_destroy_pixmap(pixmap); + return picture; } static int -_glamor_trapezoid_bounds (int ntrap, xTrapezoid *traps, BoxPtr box) +_glamor_trapezoid_bounds(int ntrap, xTrapezoid *traps, BoxPtr box) { - int has_large_trapezoid = 0; - box->y1 = MAXSHORT; - box->y2 = MINSHORT; - box->x1 = MAXSHORT; - box->x2 = MINSHORT; - - for (; ntrap; ntrap--, traps++) { - INT16 x1, y1, x2, y2; - - if (!xTrapezoidValid(traps)) - continue; - y1 = xFixedToInt (traps->top); - if (y1 < box->y1) - box->y1 = y1; - - y2 = xFixedToInt (xFixedCeil (traps->bottom)); - if (y2 > box->y2) - box->y2 = y2; - - x1 = xFixedToInt (min (_glamor_linefixedX (&traps->left, traps->top, FALSE), - _glamor_linefixedX (&traps->left, traps->bottom, FALSE))); - if (x1 < box->x1) - box->x1 = x1; - - x2 = xFixedToInt (xFixedCeil (max (_glamor_linefixedX (&traps->right, traps->top, TRUE), - _glamor_linefixedX (&traps->right, traps->bottom, TRUE)))); - if (x2 > box->x2) - box->x2 = x2; - - if (!has_large_trapezoid && (x2 - x1) > 256 && (y2 - y1) > 32) - has_large_trapezoid = 1; - } - - return has_large_trapezoid; + int has_large_trapezoid = 0; + + box->y1 = MAXSHORT; + box->y2 = MINSHORT; + box->x1 = MAXSHORT; + box->x2 = MINSHORT; + + for (; ntrap; ntrap--, traps++) { + INT16 x1, y1, x2, y2; + + if (!xTrapezoidValid(traps)) + continue; + y1 = xFixedToInt(traps->top); + if (y1 < box->y1) + box->y1 = y1; + + y2 = xFixedToInt(xFixedCeil(traps->bottom)); + if (y2 > box->y2) + box->y2 = y2; + + x1 = xFixedToInt(min + (_glamor_linefixedX(&traps->left, traps->top, FALSE), + _glamor_linefixedX(&traps->left, traps->bottom, + FALSE))); + if (x1 < box->x1) + box->x1 = x1; + + x2 = xFixedToInt(xFixedCeil + (max + (_glamor_linefixedX(&traps->right, traps->top, TRUE), + _glamor_linefixedX(&traps->right, traps->bottom, + TRUE)))); + if (x2 > box->x2) + box->x2 = x2; + + if (!has_large_trapezoid && (x2 - x1) > 256 && (y2 - y1) > 32) + has_large_trapezoid = 1; + } + + return has_large_trapezoid; } /** @@ -1658,162 +1695,163 @@ static Bool _glamor_trapezoids(CARD8 op, PicturePtr src, PicturePtr dst, PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps, Bool fallback) + int ntrap, xTrapezoid *traps, Bool fallback) { - ScreenPtr screen = dst->pDrawable->pScreen; - BoxRec bounds; - PicturePtr picture; - INT16 x_dst, y_dst; - INT16 x_rel, y_rel; - int width, height, stride; - PixmapPtr pixmap; - pixman_image_t *image = NULL; - int ret = 0; - int has_large_trapezoid; - - /* If a mask format wasn't provided, we get to choose, but behavior should - * be as if there was no temporary mask the traps were accumulated into. - */ - if (!mask_format) { - if (dst->polyEdge == PolyEdgeSharp) - mask_format = - PictureMatchFormat(screen, 1, PICT_a1); - else - mask_format = - PictureMatchFormat(screen, 8, PICT_a8); - for (; ntrap; ntrap--, traps++) - glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, 1, traps); - return TRUE; - } - - has_large_trapezoid = _glamor_trapezoid_bounds(ntrap, traps, &bounds); - DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d, ---- ntrap = %d\n", bounds.x1, - bounds.x2, bounds.y1, bounds.y2, ntrap); - - if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) - return TRUE; - - x_dst = traps[0].left.p1.x >> 16; - y_dst = traps[0].left.p1.y >> 16; - - width = bounds.x2 - bounds.x1; - height = bounds.y2 - bounds.y1; - stride = PixmapBytePad(width, mask_format->depth); + ScreenPtr screen = dst->pDrawable->pScreen; + BoxRec bounds; + PicturePtr picture; + INT16 x_dst, y_dst; + INT16 x_rel, y_rel; + int width, height, stride; + PixmapPtr pixmap; + pixman_image_t *image = NULL; + int ret = 0; + int has_large_trapezoid; + + /* If a mask format wasn't provided, we get to choose, but behavior should + * be as if there was no temporary mask the traps were accumulated into. + */ + if (!mask_format) { + if (dst->polyEdge == PolyEdgeSharp) + mask_format = PictureMatchFormat(screen, 1, PICT_a1); + else + mask_format = PictureMatchFormat(screen, 8, PICT_a8); + for (; ntrap; ntrap--, traps++) + glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, 1, traps); + return TRUE; + } + + has_large_trapezoid = _glamor_trapezoid_bounds(ntrap, traps, &bounds); + DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d, ---- ntrap = %d\n", bounds.x1, + bounds.x2, bounds.y1, bounds.y2, ntrap); + + if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) + return TRUE; + + x_dst = traps[0].left.p1.x >> 16; + y_dst = traps[0].left.p1.y >> 16; + + width = bounds.x2 - bounds.x1; + height = bounds.y2 - bounds.y1; + stride = PixmapBytePad(width, mask_format->depth); #ifdef GLAMOR_TRAPEZOID_SHADER - /* We seperate the render to two paths. - Some GL implemetation do not implement the Anti-Alias for triangles - and polygen's filling. So when the edge is not vertical or horizontal, - sawtooth will be obvious. The trapezoid is widely used to render wide - lines and circles. In these case, the line or circle will be divided - into a large number of small trapezoids to approximate it, so the sawtooth - at the edge will cause the result not be acceptable. - When the depth of the mask is 1, there is no Anti-Alias needed, so we - use the clip logic to generate the result directly(fast path). - When the depth is not 1, AA is needed and we use a shader to generate - a temp mask pixmap. - */ - if (mask_format->depth == 1) { - ret = _glamor_trapezoids_with_shader(op, src, dst, mask_format, - x_src, y_src, ntrap, traps); - if(ret) - return TRUE; - } else { - if (has_large_trapezoid || ntrap > 256) { - /* The shader speed is relative slower than pixman when generating big chunk - trapezoid mask. We fallback to pixman to improve the performance. */ - ; - } else if (dst->polyMode == PolyModeImprecise) { - /* The precise mode is that we sample the trapezoid on the centre points of - an (2*n+1)x(2*n-1) subpixel grid. It is computationally expensive in shader - and we use inside area ratio to replace it if the polymode == Imprecise. */ - picture = glamor_create_mask_picture(screen, dst, mask_format, - width, height, 1); - if (!picture) - return TRUE; - - ret = _glamor_generate_trapezoid_with_shader(screen, picture, traps, ntrap, &bounds); - - if (!ret) - FreePicture(picture, 0); - } - } + /* We seperate the render to two paths. + Some GL implemetation do not implement the Anti-Alias for triangles + and polygen's filling. So when the edge is not vertical or horizontal, + sawtooth will be obvious. The trapezoid is widely used to render wide + lines and circles. In these case, the line or circle will be divided + into a large number of small trapezoids to approximate it, so the sawtooth + at the edge will cause the result not be acceptable. + When the depth of the mask is 1, there is no Anti-Alias needed, so we + use the clip logic to generate the result directly(fast path). + When the depth is not 1, AA is needed and we use a shader to generate + a temp mask pixmap. + */ + if (mask_format->depth == 1) { + ret = _glamor_trapezoids_with_shader(op, src, dst, mask_format, + x_src, y_src, ntrap, traps); + if (ret) + return TRUE; + } + else { + if (has_large_trapezoid || ntrap > 256) { + /* The shader speed is relative slower than pixman when generating big chunk + trapezoid mask. We fallback to pixman to improve the performance. */ + ; + } + else if (dst->polyMode == PolyModeImprecise) { + /* The precise mode is that we sample the trapezoid on the centre points of + an (2*n+1)x(2*n-1) subpixel grid. It is computationally expensive in shader + and we use inside area ratio to replace it if the polymode == Imprecise. */ + picture = glamor_create_mask_picture(screen, dst, mask_format, + width, height, 1); + if (!picture) + return TRUE; + + ret = + _glamor_generate_trapezoid_with_shader(screen, picture, traps, + ntrap, &bounds); + + if (!ret) + FreePicture(picture, 0); + } + } #endif - if (!ret) { - DEBUGF("Fallback to sw rasterize of trapezoid\n"); - - picture = glamor_create_mask_picture(screen, dst, mask_format, - width, height, 0); - if (!picture) - return TRUE; - - image = pixman_image_create_bits(picture->format, - width, height, NULL, stride); - if (!image) { - FreePicture(picture, 0); - return TRUE; - } - - for (; ntrap; ntrap--, traps++) - pixman_rasterize_trapezoid(image, - (pixman_trapezoid_t *) traps, - -bounds.x1, -bounds.y1); - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - - screen->ModifyPixmapHeader(pixmap, width, height, - mask_format->depth, - BitsPerPixel(mask_format->depth), - PixmapBytePad(width, - mask_format->depth), - pixman_image_get_data(image)); - } - - x_rel = bounds.x1 + x_src - x_dst; - y_rel = bounds.y1 + y_src - y_dst; - DEBUGF("x_src = %d, y_src = %d, x_dst = %d, y_dst = %d, " - "x_rel = %d, y_rel = %d\n", x_src, y_src, x_dst, - y_dst, x_rel, y_rel); - - CompositePicture(op, src, picture, dst, - x_rel, y_rel, - 0, 0, - bounds.x1, bounds.y1, - bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); - - if (image) - pixman_image_unref(image); - - FreePicture(picture, 0); - return TRUE; + if (!ret) { + DEBUGF("Fallback to sw rasterize of trapezoid\n"); + + picture = glamor_create_mask_picture(screen, dst, mask_format, + width, height, 0); + if (!picture) + return TRUE; + + image = pixman_image_create_bits(picture->format, + width, height, NULL, stride); + if (!image) { + FreePicture(picture, 0); + return TRUE; + } + + for (; ntrap; ntrap--, traps++) + pixman_rasterize_trapezoid(image, + (pixman_trapezoid_t *) traps, + -bounds.x1, -bounds.y1); + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + + screen->ModifyPixmapHeader(pixmap, width, height, + mask_format->depth, + BitsPerPixel(mask_format->depth), + PixmapBytePad(width, + mask_format->depth), + pixman_image_get_data(image)); + } + + x_rel = bounds.x1 + x_src - x_dst; + y_rel = bounds.y1 + y_src - y_dst; + DEBUGF("x_src = %d, y_src = %d, x_dst = %d, y_dst = %d, " + "x_rel = %d, y_rel = %d\n", x_src, y_src, x_dst, + y_dst, x_rel, y_rel); + + CompositePicture(op, src, picture, dst, + x_rel, y_rel, + 0, 0, + bounds.x1, bounds.y1, + bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); + + if (image) + pixman_image_unref(image); + + FreePicture(picture, 0); + return TRUE; } void glamor_trapezoids(CARD8 op, PicturePtr src, PicturePtr dst, PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + int ntrap, xTrapezoid *traps) { - DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); + DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); - _glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, ntrap, traps, TRUE); + _glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, ntrap, traps, TRUE); } Bool glamor_trapezoids_nf(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps) { - DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); + DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); - return _glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, ntrap, traps, FALSE); + return _glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, ntrap, traps, FALSE); } -#endif /* RENDER */ - +#endif /* RENDER */ diff --git a/xorg-server/glamor/glamor_triangles.c b/xorg-server/glamor/glamor_triangles.c index e0f4a9708..693eef10f 100644 --- a/xorg-server/glamor/glamor_triangles.c +++ b/xorg-server/glamor/glamor_triangles.c @@ -30,51 +30,48 @@ static Bool _glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris, Bool fallback) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris, + Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDst->pDrawable) - && (!pSrc->pDrawable - || glamor_ddx_fallback_check_pixmap(pSrc->pDrawable))) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDst->pDrawable) + && (!pSrc->pDrawable + || glamor_ddx_fallback_check_pixmap(pSrc->pDrawable))) + return FALSE; - if (glamor_prepare_access_picture(pDst, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_picture(pSrc, - GLAMOR_ACCESS_RO)) { + if (glamor_prepare_access_picture(pDst, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_picture(pSrc, GLAMOR_ACCESS_RO)) { - fbTriangles(op, pSrc, pDst, maskFormat, xSrc, - ySrc, ntris, tris); + fbTriangles(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntris, tris); - glamor_finish_access_picture(pSrc, GLAMOR_ACCESS_RO); - } + glamor_finish_access_picture(pSrc, GLAMOR_ACCESS_RO); + } - glamor_finish_access_picture(pDst, GLAMOR_ACCESS_RW); - } - return TRUE; + glamor_finish_access_picture(pDst, GLAMOR_ACCESS_RW); + } + return TRUE; } void glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) { - _glamor_triangles(op, pSrc, pDst, maskFormat, - xSrc, ySrc, ntris, tris, TRUE); + _glamor_triangles(op, pSrc, pDst, maskFormat, + xSrc, ySrc, ntris, tris, TRUE); } Bool glamor_triangles_nf(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) { - return _glamor_triangles(op, pSrc, pDst, maskFormat, - xSrc, ySrc, ntris, tris, FALSE); + return _glamor_triangles(op, pSrc, pDst, maskFormat, + xSrc, ySrc, ntris, tris, FALSE); } - diff --git a/xorg-server/glamor/glamor_utils.h b/xorg-server/glamor/glamor_utils.h index d30783826..ea827df3b 100644 --- a/xorg-server/glamor/glamor_utils.h +++ b/xorg-server/glamor/glamor_utils.h @@ -59,7 +59,7 @@ #define PIXMAP_PRIV_GET_ACTUAL_SIZE(priv, w, h) \ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ w = priv->large.box.x2 - priv->large.box.x1; \ h = priv->large.box.y2 - priv->large.box.y1; \ } else { \ @@ -80,7 +80,7 @@ #define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_) \ do { \ - if (unlikely(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \ *(_xoff_) = - (_priv_)->large.box.x1; \ *(_yoff_) = - (_priv_)->large.box.y1; \ } else { \ @@ -254,7 +254,6 @@ } \ } while(0) - /* _x1_ ... _y2_ may has fractional. */ #define glamor_get_repeat_transform_coords(priv, repeat_type, tx1, \ ty1, _x1_, _y1_) \ @@ -315,7 +314,7 @@ texcoord, yInverted) \ do { \ (texcoord)[0] = t_from_x_coord_x(xscale, _tx_); \ - if (likely(yInverted)) \ + if (_X_LIKELY(yInverted)) \ (texcoord)[1] = t_from_x_coord_y_inverted(yscale, _ty_);\ else \ (texcoord)[1] = t_from_x_coord_y(yscale, _ty_); \ @@ -338,7 +337,7 @@ tx += fbo_x_off; \ ty += fbo_y_off; \ (texcoord)[0] = t_from_x_coord_x(xscale, tx); \ - if (likely(yInverted)) \ + if (_X_LIKELY(yInverted)) \ (texcoord)[1] = t_from_x_coord_y_inverted(yscale, ty); \ else \ (texcoord)[1] = t_from_x_coord_y(yscale, ty); \ @@ -402,8 +401,6 @@ 2); \ } while (0) - - #define glamor_set_normalize_tri_tcoords(xscale, \ yscale, \ vtx, \ @@ -435,7 +432,7 @@ texcoords, \ stride) \ do { \ - if (likely(priv->type != GLAMOR_TEXTURE_LARGE)) { \ + if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { \ glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, \ yscale, _x1_, _y1_, \ _x2_, _y2_, yInverted, \ @@ -475,7 +472,6 @@ } \ } while (0) - #define glamor_set_repeat_transformed_normalize_tcoords( priv, \ repeat_type, \ matrix, \ @@ -509,7 +505,7 @@ (vertices)[1 * stride] = _t2_ = t_from_x_coord_x(xscale, tx2); \ (vertices)[2 * stride] = _t2_; \ (vertices)[3 * stride] = _t0_; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = _t1_ = t_from_x_coord_y_inverted(yscale, ty1); \ (vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y_inverted(yscale, ty2);\ } \ @@ -525,7 +521,7 @@ x1, y1, x2, y2, \ yInverted, vertices, stride) \ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ float tx1, tx2, ty1, ty2; \ int fbo_x_off, fbo_y_off; \ pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \ @@ -541,7 +537,6 @@ x2, y2, yInverted, vertices, stride);\ } while(0) - #define glamor_set_normalize_tcoords(priv, xscale, yscale, \ x1, y1, x2, y2, \ yInverted, vertices) \ @@ -556,7 +551,7 @@ _x1_, _y1_, _x2_, _y2_, \ yInverted, vertices, stride)\ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ float tx1, tx2, ty1, ty2; \ if (repeat_type == RepeatPad) { \ tx1 = _x1_ - priv->large.box.x1; \ @@ -577,7 +572,6 @@ stride); \ } while(0) - #define glamor_set_repeat_normalize_tcoords(priv, repeat_type, \ xscale, yscale, \ _x1_, _y1_, _x2_, _y2_, \ @@ -597,7 +591,7 @@ (vertices)[2] = t_from_x_coord_x(xscale, x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = t_from_x_coord_y_inverted(yscale, y1); \ (vertices)[7] = t_from_x_coord_y_inverted(yscale, y2); \ } \ @@ -616,7 +610,7 @@ (vertices)[2] = (x2); \ (vertices)[4] = (vertices)[2]; \ (vertices)[6] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[5] = (y2); \ } \ @@ -635,7 +629,7 @@ (vertices)[1*stride] = (x2); \ (vertices)[2*stride] = (vertices)[1*stride]; \ (vertices)[3*stride] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[2*stride + 1] = (y2); \ } \ @@ -651,7 +645,7 @@ yInverted, vertices) \ do { \ (vertices)[0] = v_from_x_coord_x(xscale, x); \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = v_from_x_coord_y_inverted(yscale, y); \ } else { \ (vertices)[1] = v_from_x_coord_y(yscale, y); \ @@ -679,7 +673,7 @@ (vertices)[2] = (x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[7] = (y2); \ } \ @@ -705,7 +699,7 @@ x2 + fbo_x_off); \ (vertices)[2 * stride] = _t2_; \ (vertices)[3 * stride] = _t0_; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = _t1_ = v_from_x_coord_y_inverted(yscale, \ y1 + fbo_y_off); \ (vertices)[2 * stride + 1] = _t5_ = \ @@ -721,7 +715,6 @@ (vertices)[3 * stride + 1] = _t5_; \ } while(0) - #define glamor_set_normalize_vcoords(priv, xscale, yscale, \ x1, y1, x2, y2, \ yInverted, vertices) \ @@ -749,7 +742,7 @@ (vertices)[2] = v_from_x_coord_x(xscale, x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = v_from_x_coord_y_inverted(yscale, y1); \ (vertices)[7] = v_from_x_coord_y_inverted(yscale, y2); \ } \ @@ -765,7 +758,7 @@ yInverted, pt) \ do { \ (pt)[0] = t_from_x_coord_x(xscale, x); \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (pt)[1] = t_from_x_coord_y_inverted(yscale, y); \ } else { \ (pt)[1] = t_from_x_coord_y(yscale, y); \ @@ -776,7 +769,7 @@ yInverted, c) \ do { \ (c)[0] = (float)x; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (c)[1] = (float)y; \ } else { \ (c)[1] = (float)height - (float)y; \ @@ -786,44 +779,40 @@ inline static void glamor_calculate_boxes_bound(BoxPtr bound, BoxPtr boxes, int nbox) { - int x_min, y_min; - int x_max, y_max; - int i; - x_min = y_min = MAXSHORT; - x_max = y_max = MINSHORT; - for (i = 0; i < nbox; i++) { - if (x_min > boxes[i].x1) - x_min = boxes[i].x1; - if (y_min > boxes[i].y1) - y_min = boxes[i].y1; - - if (x_max < boxes[i].x2) - x_max = boxes[i].x2; - if (y_max < boxes[i].y2) - y_max = boxes[i].y2; - } - bound->x1 = x_min; - bound->y1 = y_min; - bound->x2 = x_max; - bound->y2 = y_max; + int x_min, y_min; + int x_max, y_max; + int i; + + x_min = y_min = MAXSHORT; + x_max = y_max = MINSHORT; + for (i = 0; i < nbox; i++) { + if (x_min > boxes[i].x1) + x_min = boxes[i].x1; + if (y_min > boxes[i].y1) + y_min = boxes[i].y1; + + if (x_max < boxes[i].x2) + x_max = boxes[i].x2; + if (y_max < boxes[i].y2) + y_max = boxes[i].y2; + } + bound->x1 = x_min; + bound->y1 = y_min; + bound->x2 = x_max; + bound->y2 = y_max; } inline static void glamor_translate_boxes(BoxPtr boxes, int nbox, int dx, int dy) { - int i; - for (i = 0; i < nbox; i++) { - boxes[i].x1 += dx; - boxes[i].y1 += dy; - boxes[i].x2 += dx; - boxes[i].y2 += dy; - } -} - -static inline Bool -region_is_empty(pixman_region16_t *region) -{ - return region->data && region->data->numRects == 0; + int i; + + for (i = 0; i < nbox; i++) { + boxes[i].x1 += dx; + boxes[i].y1 += dy; + boxes[i].x2 += dx; + boxes[i].y2 += dy; + } } #ifndef ARRAY_SIZE @@ -857,58 +846,58 @@ region_is_empty(pixman_region16_t *region) static inline CARD32 format_for_depth(int depth) { - switch (depth) { - case 1: - return PICT_a1; - case 4: - return PICT_a4; - case 8: - return PICT_a8; - case 15: - return PICT_x1r5g5b5; - case 16: - return PICT_r5g6b5; - default: - case 24: - return PICT_x8r8g8b8; + switch (depth) { + case 1: + return PICT_a1; + case 4: + return PICT_a4; + case 8: + return PICT_a8; + case 15: + return PICT_x1r5g5b5; + case 16: + return PICT_r5g6b5; + default: + case 24: + return PICT_x8r8g8b8; #if XORG_VERSION_CURRENT >= 10699900 - case 30: - return PICT_x2r10g10b10; + case 30: + return PICT_x2r10g10b10; #endif - case 32: - return PICT_a8r8g8b8; - } + case 32: + return PICT_a8r8g8b8; + } } static inline void gl_iformat_for_depth(int depth, GLenum * format) { - switch (depth) { + switch (depth) { #ifndef GLAMOR_GLES2 - case 1: - case 8: - *format = GL_ALPHA; - break; + case 1: + case 8: + *format = GL_ALPHA; + break; #endif - default: - *format = GL_RGBA; - break; - } + default: + *format = GL_RGBA; + break; + } } static inline CARD32 format_for_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - PictFormatShort pict_format; + glamor_pixmap_private *pixmap_priv; + PictFormatShort pict_format; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) - pict_format = pixmap_priv->base.picture->format; - else - pict_format = format_for_depth(pixmap->drawable.depth); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) + pict_format = pixmap_priv->base.picture->format; + else + pict_format = format_for_depth(pixmap->drawable.depth); - return pict_format; + return pict_format; } #define REVERT_NONE 0 @@ -939,114 +928,112 @@ format_for_pixmap(PixmapPtr pixmap) #ifndef GLAMOR_GLES2 static inline int glamor_get_tex_format_type_from_pictformat(PictFormatShort format, - GLenum * tex_format, - GLenum * tex_type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) - + GLenum * tex_format, + GLenum * tex_type, + int *no_alpha, + int *revert, + int *swap_rb, int is_upload) { - *no_alpha = 0; - *revert = REVERT_NONE; - *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; - switch (format) { - case PICT_a1: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; - break; - case PICT_b8g8r8x8: - *no_alpha = 1; - case PICT_b8g8r8a8: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8; - break; - - case PICT_x8r8g8b8: - *no_alpha = 1; - case PICT_a8r8g8b8: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - case PICT_x8b8g8r8: - *no_alpha = 1; - case PICT_a8b8g8r8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - case PICT_x2r10g10b10: - *no_alpha = 1; - case PICT_a2r10g10b10: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; - break; - case PICT_x2b10g10r10: - *no_alpha = 1; - case PICT_a2b10g10r10: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; - break; - - case PICT_r5g6b5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - break; - case PICT_b5g6r5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5_REV; - break; - case PICT_x1b5g5r5: - *no_alpha = 1; - case PICT_a1b5g5r5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; - break; - - case PICT_x1r5g5b5: - *no_alpha = 1; - case PICT_a1r5g5b5: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; - break; - case PICT_a8: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - break; - case PICT_x4r4g4b4: - *no_alpha = 1; - case PICT_a4r4g4b4: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; - break; - - case PICT_x4b4g4r4: - *no_alpha = 1; - case PICT_a4b4g4r4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; - break; - - default: - LogMessageVerb(X_INFO, 0, - "fail to get matched format for %x \n", - format); - return -1; - } - return 0; + *no_alpha = 0; + *revert = REVERT_NONE; + *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; + switch (format) { + case PICT_a1: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; + break; + case PICT_b8g8r8x8: + *no_alpha = 1; + case PICT_b8g8r8a8: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8; + break; + + case PICT_x8r8g8b8: + *no_alpha = 1; + case PICT_a8r8g8b8: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; + break; + case PICT_x8b8g8r8: + *no_alpha = 1; + case PICT_a8b8g8r8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; + break; + case PICT_x2r10g10b10: + *no_alpha = 1; + case PICT_a2r10g10b10: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; + break; + case PICT_x2b10g10r10: + *no_alpha = 1; + case PICT_a2b10g10r10: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; + break; + + case PICT_r5g6b5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + break; + case PICT_b5g6r5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5_REV; + break; + case PICT_x1b5g5r5: + *no_alpha = 1; + case PICT_a1b5g5r5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; + break; + + case PICT_x1r5g5b5: + *no_alpha = 1; + case PICT_a1r5g5b5: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; + break; + case PICT_a8: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + break; + case PICT_x4r4g4b4: + *no_alpha = 1; + case PICT_a4r4g4b4: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; + break; + + case PICT_x4b4g4r4: + *no_alpha = 1; + case PICT_a4b4g4r4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; + break; + + default: + LogMessageVerb(X_INFO, 0, + "fail to get matched format for %x \n", format); + return -1; + } + return 0; } /* Currently, we use RGBA to represent all formats. */ -inline static int cache_format(GLenum format) +inline static int +cache_format(GLenum format) { - switch (format) { - case GL_ALPHA: - return 1; - case GL_RGBA: - return 0; - default: - return -1; - } + switch (format) { + case GL_ALPHA: + return 1; + case GL_RGBA: + return 0; + default: + return -1; + } } #else @@ -1054,782 +1041,807 @@ inline static int cache_format(GLenum format) static inline int glamor_get_tex_format_type_from_pictformat(PictFormatShort format, - GLenum * tex_format, - GLenum * tex_type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) + GLenum * tex_format, + GLenum * tex_type, + int *no_alpha, + int *revert, + int *swap_rb, int is_upload) { - int need_swap_rb = 0; - - *no_alpha = 0; - *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; - - switch (format) { - case PICT_b8g8r8x8: - *no_alpha = 1; - case PICT_b8g8r8a8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - need_swap_rb = 1; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - break; - - case PICT_x8r8g8b8: - *no_alpha = 1; - case PICT_a8r8g8b8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - need_swap_rb = 1; - break; - - case PICT_x8b8g8r8: - *no_alpha = 1; - case PICT_a8b8g8r8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - break; - - case PICT_x2r10g10b10: - *no_alpha = 1; - case PICT_a2r10g10b10: - *tex_format = GL_RGBA; - /* glReadPixmap doesn't support GL_UNSIGNED_INT_10_10_10_2. - * we have to use GL_UNSIGNED_BYTE and do the conversion in - * shader latter.*/ - *tex_type = GL_UNSIGNED_BYTE; - if (is_upload == 1) { - if (!IS_LITTLE_ENDIAN) - *revert = REVERT_UPLOADING_10_10_10_2; - else - *revert = REVERT_UPLOADING_2_10_10_10; - } - else { - if (!IS_LITTLE_ENDIAN) { - *revert = REVERT_DOWNLOADING_10_10_10_2; - } - else { - *revert = REVERT_DOWNLOADING_2_10_10_10; - } - } - need_swap_rb = 1; - - break; - - case PICT_x2b10g10r10: - *no_alpha = 1; - case PICT_a2b10g10r10: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - if (is_upload == 1) { - if (!IS_LITTLE_ENDIAN) - *revert = REVERT_UPLOADING_10_10_10_2; - else - *revert = REVERT_UPLOADING_2_10_10_10; - } - else { - if (!IS_LITTLE_ENDIAN) { - *revert = REVERT_DOWNLOADING_10_10_10_2; - } - else { - *revert = REVERT_DOWNLOADING_2_10_10_10; - } - } - break; - - case PICT_r5g6b5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; - - break; - - case PICT_b5g6r5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - need_swap_rb = IS_LITTLE_ENDIAN ? 1 : 0;; - break; - - case PICT_x1b5g5r5: - *no_alpha = 1; - case PICT_a1b5g5r5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; - if (IS_LITTLE_ENDIAN) { - *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5; - } else - *revert = REVERT_NONE; - break; - - case PICT_x1r5g5b5: - *no_alpha = 1; - case PICT_a1r5g5b5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; - if (IS_LITTLE_ENDIAN) { - *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5; - } else - *revert = REVERT_NONE; - need_swap_rb = 1; - break; - - case PICT_a1: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; - break; - - case PICT_a8: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = REVERT_NONE; - break; - - case PICT_x4r4g4b4: - *no_alpha = 1; - case PICT_a4r4g4b4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - need_swap_rb = 1; - break; - - case PICT_x4b4g4r4: - *no_alpha = 1; - case PICT_a4b4g4r4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - break; - - default: - LogMessageVerb(X_INFO, 0, - "fail to get matched format for %x \n", - format); - return -1; - } - - if (need_swap_rb) - *swap_rb = is_upload ? SWAP_UPLOADING : SWAP_DOWNLOADING; - else - *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; - return 0; + int need_swap_rb = 0; + + *no_alpha = 0; + *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; + + switch (format) { + case PICT_b8g8r8x8: + *no_alpha = 1; + case PICT_b8g8r8a8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + need_swap_rb = 1; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + break; + + case PICT_x8r8g8b8: + *no_alpha = 1; + case PICT_a8r8g8b8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + need_swap_rb = 1; + break; + + case PICT_x8b8g8r8: + *no_alpha = 1; + case PICT_a8b8g8r8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + break; + + case PICT_x2r10g10b10: + *no_alpha = 1; + case PICT_a2r10g10b10: + *tex_format = GL_RGBA; + /* glReadPixmap doesn't support GL_UNSIGNED_INT_10_10_10_2. + * we have to use GL_UNSIGNED_BYTE and do the conversion in + * shader latter.*/ + *tex_type = GL_UNSIGNED_BYTE; + if (is_upload == 1) { + if (!IS_LITTLE_ENDIAN) + *revert = REVERT_UPLOADING_10_10_10_2; + else + *revert = REVERT_UPLOADING_2_10_10_10; + } + else { + if (!IS_LITTLE_ENDIAN) { + *revert = REVERT_DOWNLOADING_10_10_10_2; + } + else { + *revert = REVERT_DOWNLOADING_2_10_10_10; + } + } + need_swap_rb = 1; + + break; + + case PICT_x2b10g10r10: + *no_alpha = 1; + case PICT_a2b10g10r10: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + if (is_upload == 1) { + if (!IS_LITTLE_ENDIAN) + *revert = REVERT_UPLOADING_10_10_10_2; + else + *revert = REVERT_UPLOADING_2_10_10_10; + } + else { + if (!IS_LITTLE_ENDIAN) { + *revert = REVERT_DOWNLOADING_10_10_10_2; + } + else { + *revert = REVERT_DOWNLOADING_2_10_10_10; + } + } + break; + + case PICT_r5g6b5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; + + break; + + case PICT_b5g6r5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + need_swap_rb = IS_LITTLE_ENDIAN ? 1 : 0;; + break; + + case PICT_x1b5g5r5: + *no_alpha = 1; + case PICT_a1b5g5r5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; + if (IS_LITTLE_ENDIAN) { + *revert = + is_upload ? REVERT_UPLOADING_1_5_5_5 : + REVERT_DOWNLOADING_1_5_5_5; + } + else + *revert = REVERT_NONE; + break; + + case PICT_x1r5g5b5: + *no_alpha = 1; + case PICT_a1r5g5b5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; + if (IS_LITTLE_ENDIAN) { + *revert = + is_upload ? REVERT_UPLOADING_1_5_5_5 : + REVERT_DOWNLOADING_1_5_5_5; + } + else + *revert = REVERT_NONE; + need_swap_rb = 1; + break; + + case PICT_a1: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; + break; + + case PICT_a8: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = REVERT_NONE; + break; + + case PICT_x4r4g4b4: + *no_alpha = 1; + case PICT_a4r4g4b4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + need_swap_rb = 1; + break; + + case PICT_x4b4g4r4: + *no_alpha = 1; + case PICT_a4b4g4r4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + break; + + default: + LogMessageVerb(X_INFO, 0, + "fail to get matched format for %x \n", format); + return -1; + } + + if (need_swap_rb) + *swap_rb = is_upload ? SWAP_UPLOADING : SWAP_DOWNLOADING; + else + *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; + return 0; } -inline static int cache_format(GLenum format) +inline static int +cache_format(GLenum format) { - switch (format) { - case GL_ALPHA: - return 2; - case GL_RGB: - return 1; - case GL_RGBA: - return 0; - default: - return -1; - } + switch (format) { + case GL_ALPHA: + return 2; + case GL_RGB: + return 1; + case GL_RGBA: + return 0; + default: + return -1; + } } #endif - static inline int glamor_get_tex_format_type_from_pixmap(PixmapPtr pixmap, - GLenum * format, - GLenum * type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) + GLenum * format, + GLenum * type, + int *no_alpha, + int *revert, int *swap_rb, int is_upload) { - glamor_pixmap_private *pixmap_priv; - PictFormatShort pict_format; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) - pict_format = pixmap_priv->base.picture->format; - else - pict_format = format_for_depth(pixmap->drawable.depth); - - return glamor_get_tex_format_type_from_pictformat(pict_format, - format, type, - no_alpha, - revert, - swap_rb, - is_upload); + glamor_pixmap_private *pixmap_priv; + PictFormatShort pict_format; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) + pict_format = pixmap_priv->base.picture->format; + else + pict_format = format_for_depth(pixmap->drawable.depth); + + return glamor_get_tex_format_type_from_pictformat(pict_format, + format, type, + no_alpha, + revert, + swap_rb, is_upload); } - /* borrowed from uxa */ static inline Bool glamor_get_rgba_from_pixel(CARD32 pixel, - float *red, - float *green, - float *blue, float *alpha, CARD32 format) + float *red, + float *green, + float *blue, float *alpha, CARD32 format) { - int rbits, bbits, gbits, abits; - int rshift, bshift, gshift, ashift; - - rbits = PICT_FORMAT_R(format); - gbits = PICT_FORMAT_G(format); - bbits = PICT_FORMAT_B(format); - abits = PICT_FORMAT_A(format); - - if (PICT_FORMAT_TYPE(format) == PICT_TYPE_A) { - rshift = gshift = bshift = ashift = 0; - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) { - bshift = 0; - gshift = bbits; - rshift = gshift + gbits; - ashift = rshift + rbits; - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) { - rshift = 0; - gshift = rbits; - bshift = gshift + gbits; - ashift = bshift + bbits; + int rbits, bbits, gbits, abits; + int rshift, bshift, gshift, ashift; + + rbits = PICT_FORMAT_R(format); + gbits = PICT_FORMAT_G(format); + bbits = PICT_FORMAT_B(format); + abits = PICT_FORMAT_A(format); + + if (PICT_FORMAT_TYPE(format) == PICT_TYPE_A) { + rshift = gshift = bshift = ashift = 0; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) { + bshift = 0; + gshift = bbits; + rshift = gshift + gbits; + ashift = rshift + rbits; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) { + rshift = 0; + gshift = rbits; + bshift = gshift + gbits; + ashift = bshift + bbits; #if XORG_VERSION_CURRENT >= 10699900 - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) { - ashift = 0; - rshift = abits; - if (abits == 0) - rshift = PICT_FORMAT_BPP(format) - (rbits + gbits + - bbits); - gshift = rshift + rbits; - bshift = gshift + gbits; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) { + ashift = 0; + rshift = abits; + if (abits == 0) + rshift = PICT_FORMAT_BPP(format) - (rbits + gbits + bbits); + gshift = rshift + rbits; + bshift = gshift + gbits; #endif - } else { - return FALSE; - } + } + else { + return FALSE; + } #define COLOR_INT_TO_FLOAT(_fc_, _p_, _s_, _bits_) \ *_fc_ = (((_p_) >> (_s_)) & (( 1 << (_bits_)) - 1)) \ / (float)((1<<(_bits_)) - 1) - if (rbits) - COLOR_INT_TO_FLOAT(red, pixel, rshift, rbits); - else - *red = 0; + if (rbits) + COLOR_INT_TO_FLOAT(red, pixel, rshift, rbits); + else + *red = 0; - if (gbits) - COLOR_INT_TO_FLOAT(green, pixel, gshift, gbits); - else - *green = 0; + if (gbits) + COLOR_INT_TO_FLOAT(green, pixel, gshift, gbits); + else + *green = 0; - if (bbits) - COLOR_INT_TO_FLOAT(blue, pixel, bshift, bbits); - else - *blue = 0; + if (bbits) + COLOR_INT_TO_FLOAT(blue, pixel, bshift, bbits); + else + *blue = 0; - if (abits) - COLOR_INT_TO_FLOAT(alpha, pixel, ashift, abits); - else - *alpha = 1; + if (abits) + COLOR_INT_TO_FLOAT(alpha, pixel, ashift, abits); + else + *alpha = 1; - return TRUE; + return TRUE; } -inline static Bool glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth) +inline static Bool +glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth) { - GLenum iformat; - - gl_iformat_for_depth(depth, &iformat); - switch (iformat) { - case GL_RGBA: - return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8); - case GL_ALPHA: - return (pict_format == PICT_a8); - default: - return FALSE; - } + GLenum iformat; + + gl_iformat_for_depth(depth, &iformat); + switch (iformat) { + case GL_RGBA: + return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8); + case GL_ALPHA: + return (pict_format == PICT_a8); + default: + return FALSE; + } } /* return TRUE if we can access this pixmap at DDX driver. */ -inline static Bool glamor_ddx_fallback_check_pixmap(DrawablePtr drawable) +inline static Bool +glamor_ddx_fallback_check_pixmap(DrawablePtr drawable) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - return (!pixmap_priv - || (pixmap_priv->type == GLAMOR_TEXTURE_DRM - || pixmap_priv->type == GLAMOR_MEMORY - || pixmap_priv->type == GLAMOR_DRM_ONLY)); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + + return (!pixmap_priv + || (pixmap_priv->type == GLAMOR_TEXTURE_DRM + || pixmap_priv->type == GLAMOR_MEMORY + || pixmap_priv->type == GLAMOR_DRM_ONLY)); } -inline static Bool glamor_ddx_fallback_check_gc(GCPtr gc) +inline static Bool +glamor_ddx_fallback_check_gc(GCPtr gc) { - PixmapPtr pixmap; - if (!gc) - return TRUE; - switch (gc->fillStyle) { - case FillStippled: - case FillOpaqueStippled: - pixmap = gc->stipple; - break; - case FillTiled: - pixmap = gc->tile.pixmap; - break; - default: - pixmap = NULL; - } - return (!pixmap || glamor_ddx_fallback_check_pixmap(&pixmap->drawable)); + PixmapPtr pixmap; + + if (!gc) + return TRUE; + switch (gc->fillStyle) { + case FillStippled: + case FillOpaqueStippled: + pixmap = gc->stipple; + break; + case FillTiled: + pixmap = gc->tile.pixmap; + break; + default: + pixmap = NULL; + } + return (!pixmap || glamor_ddx_fallback_check_pixmap(&pixmap->drawable)); } -inline static Bool glamor_is_large_pixmap(PixmapPtr pixmap) + +inline static Bool +glamor_is_large_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *priv; + glamor_pixmap_private *priv; - priv = glamor_get_pixmap_private(pixmap); - return (priv->type == GLAMOR_TEXTURE_LARGE); + priv = glamor_get_pixmap_private(pixmap); + return (priv->type == GLAMOR_TEXTURE_LARGE); } -inline static Bool glamor_is_large_picture(PicturePtr picture) +inline static Bool +glamor_is_large_picture(PicturePtr picture) { - PixmapPtr pixmap; + PixmapPtr pixmap; - if (picture->pDrawable) { - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - return glamor_is_large_pixmap(pixmap); - } - return FALSE; + if (picture->pDrawable) { + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + return glamor_is_large_pixmap(pixmap); + } + return FALSE; } -inline static Bool glamor_tex_format_is_readable(GLenum format) +inline static Bool +glamor_tex_format_is_readable(GLenum format) { - return ((format == GL_RGBA || format == GL_RGB || format == GL_ALPHA)); + return ((format == GL_RGBA || format == GL_RGB || format == GL_ALPHA)); } -static inline void _glamor_dump_pixmap_bits(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_bits(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned char * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2d ", (p[j/8] & (1 << (j%8)))>>(j%8)); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned char *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2d ", (p[j / 8] & (1 << (j % 8))) >> (j % 8)); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned char * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned char *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned short * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind / 2; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned short *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind / 2; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned int * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind / 4; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned int *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind / 4; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h) { - w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w; - h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h; - - glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO); - switch (pixmap->drawable.depth) { - case 8: - _glamor_dump_pixmap_byte(pixmap, x, y, w, h); - break; - case 15: - case 16: - _glamor_dump_pixmap_sword(pixmap, x, y, w, h); - break; - - case 24: - case 32: - _glamor_dump_pixmap_word(pixmap, x, y, w, h); - break; - case 1: - _glamor_dump_pixmap_bits(pixmap, x, y, w, h); - break; - default: - ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth); - } - glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w; + h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h; + + glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + switch (pixmap->drawable.depth) { + case 8: + _glamor_dump_pixmap_byte(pixmap, x, y, w, h); + break; + case 15: + case 16: + _glamor_dump_pixmap_sword(pixmap, x, y, w, h); + break; + + case 24: + case 32: + _glamor_dump_pixmap_word(pixmap, x, y, w, h); + break; + case 1: + _glamor_dump_pixmap_bits(pixmap, x, y, w, h); + break; + default: + ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth); + } + glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); } -static inline void _glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, - int x, int y, int w, int h, - PictFormatShort short_format, - int all, int diffs) +static inline void +_glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, + int x, int y, int w, int h, + PictFormatShort short_format, int all, int diffs) { - int i, j; - unsigned char * p1 = pixmap1->devPrivate.ptr; - unsigned char * p2 = pixmap2->devPrivate.ptr; - int line_need_printed = 0; - int test_code = 0xAABBCCDD; - int little_endian = 0; - unsigned char *p_test; - int bpp = pixmap1->drawable.depth == 8 ? 1 : 4; - int stride = pixmap1->devKind; - - assert(pixmap1->devKind == pixmap2->devKind); - - ErrorF("stride:%d, width:%d, height:%d\n", stride, w, h); - - p1 = p1 + y * stride + x; - p2 = p2 + y * stride + x; - - if (all) { - for (i = 0; i < h; i++) { - ErrorF("line %3d: ", i); - - for (j = 0; j < stride; j++) { - if (j % bpp == 0) - ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); - else - ErrorF("%2x:%2x ", p1[j], p2[j]); - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } else { - if (short_format == PICT_a8r8g8b8) { - p_test = (unsigned char *) & test_code; - little_endian = (*p_test == 0xDD); - bpp = 4; - - for (i = 0; i < h; i++) { - line_need_printed = 0; - - for (j = 0; j < stride; j++) { - if (p1[j] != p2[j] && (p1[j] - p2[j] > diffs || p2[j] - p1[j] > diffs)) { - if (line_need_printed) { - if (little_endian) { - switch (j % 4) { - case 2: - ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 1: - ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 0: - ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 3: - ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - } - } else { - switch (j % 4) { - case 1: - ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 2: - ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 3: - ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 0: - ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - } - } - } else { - line_need_printed = 1; - j = -1; - ErrorF("line %3d: ", i); - continue; - } - } - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } //more format can be added here. - else { // the default format, just print. - for (i = 0; i < h; i++) { - line_need_printed = 0; - - for (j = 0; j < stride; j++) { - if (p1[j] != p2[j]) { - if (line_need_printed) { - ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); - } else { - line_need_printed = 1; - j = -1; - ErrorF("line %3d: ", i); - continue; - } - } - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } - } + int i, j; + unsigned char *p1 = pixmap1->devPrivate.ptr; + unsigned char *p2 = pixmap2->devPrivate.ptr; + int line_need_printed = 0; + int test_code = 0xAABBCCDD; + int little_endian = 0; + unsigned char *p_test; + int bpp = pixmap1->drawable.depth == 8 ? 1 : 4; + int stride = pixmap1->devKind; + + assert(pixmap1->devKind == pixmap2->devKind); + + ErrorF("stride:%d, width:%d, height:%d\n", stride, w, h); + + p1 = p1 + y * stride + x; + p2 = p2 + y * stride + x; + + if (all) { + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + + for (j = 0; j < stride; j++) { + if (j % bpp == 0) + ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); + else + ErrorF("%2x:%2x ", p1[j], p2[j]); + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } + else { + if (short_format == PICT_a8r8g8b8) { + p_test = (unsigned char *) &test_code; + little_endian = (*p_test == 0xDD); + bpp = 4; + + for (i = 0; i < h; i++) { + line_need_printed = 0; + + for (j = 0; j < stride; j++) { + if (p1[j] != p2[j] && + (p1[j] - p2[j] > diffs || p2[j] - p1[j] > diffs)) { + if (line_need_printed) { + if (little_endian) { + switch (j % 4) { + case 2: + ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 1: + ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 0: + ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 3: + ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + } + } + else { + switch (j % 4) { + case 1: + ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 2: + ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 3: + ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 0: + ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + } + } + } + else { + line_need_printed = 1; + j = -1; + ErrorF("line %3d: ", i); + continue; + } + } + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } //more format can be added here. + else { // the default format, just print. + for (i = 0; i < h; i++) { + line_need_printed = 0; + + for (j = 0; j < stride; j++) { + if (p1[j] != p2[j]) { + if (line_need_printed) { + ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); + } + else { + line_need_printed = 1; + j = -1; + ErrorF("line %3d: ", i); + continue; + } + } + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } + } } -static inline void glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, - int x, int y, int w, int h, int all, int diffs) +static inline void +glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, + int x, int y, int w, int h, int all, int diffs) { - assert(pixmap1->drawable.depth == pixmap2->drawable.depth); + assert(pixmap1->drawable.depth == pixmap2->drawable.depth); - glamor_prepare_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); - glamor_prepare_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); - _glamor_compare_pixmaps(pixmap1, pixmap2, x, y, w, h, -1, all, diffs); + _glamor_compare_pixmaps(pixmap1, pixmap2, x, y, w, h, -1, all, diffs); - glamor_finish_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); - glamor_finish_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); } /* This function is used to compare two pictures. If the picture has no drawable, we use fb functions to generate it. */ -static inline void glamor_compare_pictures( ScreenPtr screen, - PicturePtr fst_picture, - PicturePtr snd_picture, - int x_source, int y_source, - int width, int height, - int all, int diffs) +static inline void +glamor_compare_pictures(ScreenPtr screen, + PicturePtr fst_picture, + PicturePtr snd_picture, + int x_source, int y_source, + int width, int height, int all, int diffs) { - PixmapPtr fst_pixmap; - PixmapPtr snd_pixmap; - int fst_generated, snd_generated; - int error; - int fst_type = -1; - int snd_type = -1; // -1 represent has drawable. - - if (fst_picture->format != snd_picture->format) { - ErrorF("Different picture format can not compare!\n"); - return; - } - - if (!fst_picture->pDrawable) { - fst_type = fst_picture->pSourcePict->type; - } - - if (!snd_picture->pDrawable) { - snd_type = snd_picture->pSourcePict->type; - } - - if ((fst_type != -1) && (snd_type != -1) && (fst_type != snd_type)) { - ErrorF("Different picture type will never be same!\n"); - return; - } - - fst_generated = snd_generated = 0; - - if (!fst_picture->pDrawable) { - PicturePtr pixman_pic; - PixmapPtr pixmap = NULL; - PictFormatShort format; - - format = fst_picture->format; - - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - pixman_pic = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - fbComposite(PictOpSrc, fst_picture, NULL, pixman_pic, - x_source, y_source, - 0, 0, - 0, 0, - width, height); - - glamor_destroy_pixmap(pixmap); - - fst_picture = pixman_pic; - fst_generated = 1; - } - - if (!snd_picture->pDrawable) { - PicturePtr pixman_pic; - PixmapPtr pixmap = NULL; - PictFormatShort format; - - format = snd_picture->format; - - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - pixman_pic = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - fbComposite(PictOpSrc, snd_picture, NULL, pixman_pic, - x_source, y_source, - 0, 0, - 0, 0, - width, height); - - glamor_destroy_pixmap(pixmap); - - snd_picture = pixman_pic; - snd_generated = 1; - } - - fst_pixmap = glamor_get_drawable_pixmap(fst_picture->pDrawable); - snd_pixmap = glamor_get_drawable_pixmap(snd_picture->pDrawable); - - if (fst_pixmap->drawable.depth != snd_pixmap->drawable.depth) { - if (fst_generated) - glamor_destroy_picture(fst_picture); - if (snd_generated) - glamor_destroy_picture(snd_picture); - - ErrorF("Different pixmap depth can not compare!\n"); - return; - } - - glamor_prepare_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); - glamor_prepare_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); - - if ((fst_type == SourcePictTypeLinear) || - (fst_type == SourcePictTypeRadial) || - (fst_type == SourcePictTypeConical) || - (snd_type == SourcePictTypeLinear) || - (snd_type == SourcePictTypeRadial) || - (snd_type == SourcePictTypeConical)) { - x_source = y_source = 0; - } - - _glamor_compare_pixmaps(fst_pixmap, snd_pixmap, - x_source, y_source, - width, height, - fst_picture->format, all, diffs); - - glamor_finish_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); - glamor_finish_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); - - if (fst_generated) - glamor_destroy_picture(fst_picture); - if (snd_generated) - glamor_destroy_picture(snd_picture); - - return; + PixmapPtr fst_pixmap; + PixmapPtr snd_pixmap; + int fst_generated, snd_generated; + int error; + int fst_type = -1; + int snd_type = -1; // -1 represent has drawable. + + if (fst_picture->format != snd_picture->format) { + ErrorF("Different picture format can not compare!\n"); + return; + } + + if (!fst_picture->pDrawable) { + fst_type = fst_picture->pSourcePict->type; + } + + if (!snd_picture->pDrawable) { + snd_type = snd_picture->pSourcePict->type; + } + + if ((fst_type != -1) && (snd_type != -1) && (fst_type != snd_type)) { + ErrorF("Different picture type will never be same!\n"); + return; + } + + fst_generated = snd_generated = 0; + + if (!fst_picture->pDrawable) { + PicturePtr pixman_pic; + PixmapPtr pixmap = NULL; + PictFormatShort format; + + format = fst_picture->format; + + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + pixman_pic = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH + (format), format), 0, 0, + serverClient, &error); + + fbComposite(PictOpSrc, fst_picture, NULL, pixman_pic, + x_source, y_source, 0, 0, 0, 0, width, height); + + glamor_destroy_pixmap(pixmap); + + fst_picture = pixman_pic; + fst_generated = 1; + } + + if (!snd_picture->pDrawable) { + PicturePtr pixman_pic; + PixmapPtr pixmap = NULL; + PictFormatShort format; + + format = snd_picture->format; + + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + pixman_pic = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH + (format), format), 0, 0, + serverClient, &error); + + fbComposite(PictOpSrc, snd_picture, NULL, pixman_pic, + x_source, y_source, 0, 0, 0, 0, width, height); + + glamor_destroy_pixmap(pixmap); + + snd_picture = pixman_pic; + snd_generated = 1; + } + + fst_pixmap = glamor_get_drawable_pixmap(fst_picture->pDrawable); + snd_pixmap = glamor_get_drawable_pixmap(snd_picture->pDrawable); + + if (fst_pixmap->drawable.depth != snd_pixmap->drawable.depth) { + if (fst_generated) + glamor_destroy_picture(fst_picture); + if (snd_generated) + glamor_destroy_picture(snd_picture); + + ErrorF("Different pixmap depth can not compare!\n"); + return; + } + + glamor_prepare_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); + + if ((fst_type == SourcePictTypeLinear) || + (fst_type == SourcePictTypeRadial) || + (fst_type == SourcePictTypeConical) || + (snd_type == SourcePictTypeLinear) || + (snd_type == SourcePictTypeRadial) || + (snd_type == SourcePictTypeConical)) { + x_source = y_source = 0; + } + + _glamor_compare_pixmaps(fst_pixmap, snd_pixmap, + x_source, y_source, + width, height, fst_picture->format, all, diffs); + + glamor_finish_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); + + if (fst_generated) + glamor_destroy_picture(fst_picture); + if (snd_generated) + glamor_destroy_picture(snd_picture); + + return; } #ifdef __i386__ -static inline unsigned long __fls(unsigned long x) +static inline unsigned long +__fls(unsigned long x) { - asm("bsr %1,%0" - : "=r" (x) - : "rm" (x)); - return x; + asm("bsr %1,%0":"=r"(x) + : "rm"(x)); + return x; } #else -static inline unsigned long __fls(unsigned long x) +static inline unsigned long +__fls(unsigned long x) { - int n; - - if (x == 0) return(0); - n = 0; - if (x <= 0x0000FFFF) {n = n +16; x = x <<16;} - if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;} - if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;} - if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;} - if (x <= 0x7FFFFFFF) {n = n + 1;} - return 31 - n; + int n; + + if (x == 0) + return (0); + n = 0; + if (x <= 0x0000FFFF) { + n = n + 16; + x = x << 16; + } + if (x <= 0x00FFFFFF) { + n = n + 8; + x = x << 8; + } + if (x <= 0x0FFFFFFF) { + n = n + 4; + x = x << 4; + } + if (x <= 0x3FFFFFFF) { + n = n + 2; + x = x << 2; + } + if (x <= 0x7FFFFFFF) { + n = n + 1; + } + return 31 - n; } #endif -static inline void glamor_make_current(ScreenPtr screen) +static inline void +glamor_make_current(ScreenPtr screen) { - glamor_egl_make_current(screen); + glamor_egl_make_current(screen); } -static inline void glamor_restore_current(ScreenPtr screen) +static inline void +glamor_restore_current(ScreenPtr screen) { - glamor_egl_restore_context(screen); + glamor_egl_restore_context(screen); } -#ifdef GLX_USE_SHARED_DISPATCH static inline glamor_gl_dispatch * -glamor_get_dispatch(glamor_screen_private *glamor_priv) +glamor_get_dispatch(glamor_screen_private * glamor_priv) { - if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) - glamor_make_current(glamor_priv->screen); - - return &glamor_priv->_dispatch; -} + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_make_current(glamor_priv->screen); -static inline void -glamor_put_dispatch(glamor_screen_private *glamor_priv) -{ - if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) - glamor_restore_current(glamor_priv->screen); -} -#else -#warning "Indirect GLX may be broken, need to implement context switch." -static inline glamor_gl_dispatch * -glamor_get_dispatch(glamor_screen_private *glamor_priv) -{ - return &glamor_priv->_dispatch; + return &glamor_priv->_dispatch; } static inline void -glamor_put_dispatch(glamor_screen_private *glamor_priv) +glamor_put_dispatch(glamor_screen_private * glamor_priv) { + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_restore_current(glamor_priv->screen); } #endif - -#endif diff --git a/xorg-server/glamor/glamor_window.c b/xorg-server/glamor/glamor_window.c index b67c72880..60647bf80 100644 --- a/xorg-server/glamor/glamor_window.c +++ b/xorg-server/glamor/glamor_window.c @@ -28,76 +28,72 @@ * Screen Change Window Attribute implementation. */ - static void -glamor_fixup_window_pixmap(DrawablePtr pDrawable, PixmapPtr * ppPixmap) +glamor_fixup_window_pixmap(DrawablePtr pDrawable, PixmapPtr *ppPixmap) { - PixmapPtr pPixmap = *ppPixmap; - glamor_pixmap_private *pixmap_priv; + PixmapPtr pPixmap = *ppPixmap; + glamor_pixmap_private *pixmap_priv; - if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { - pixmap_priv = glamor_get_pixmap_private(pPixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - glamor_fallback("pixmap %p has no fbo\n", pPixmap); - goto fail; - } - glamor_debug_output(GLAMOR_DEBUG_UNIMPL, - "To be implemented.\n"); - } - return; + if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { + pixmap_priv = glamor_get_pixmap_private(pPixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + glamor_fallback("pixmap %p has no fbo\n", pPixmap); + goto fail; + } + glamor_debug_output(GLAMOR_DEBUG_UNIMPL, "To be implemented.\n"); + } + return; - fail: - GLAMOR_PANIC - (" We can't fall back to fbFixupWindowPixmap, as the fb24_32ReformatTile" - " is broken for glamor. \n"); + fail: + GLAMOR_PANIC + (" We can't fall back to fbFixupWindowPixmap, as the fb24_32ReformatTile" + " is broken for glamor. \n"); } Bool glamor_change_window_attributes(WindowPtr pWin, unsigned long mask) { - if (mask & CWBackPixmap) { - if (pWin->backgroundState == BackgroundPixmap) - glamor_fixup_window_pixmap(&pWin->drawable, - &pWin-> - background.pixmap); - } + if (mask & CWBackPixmap) { + if (pWin->backgroundState == BackgroundPixmap) + glamor_fixup_window_pixmap(&pWin->drawable, + &pWin->background.pixmap); + } - if (mask & CWBorderPixmap) { - if (pWin->borderIsPixel == FALSE) - glamor_fixup_window_pixmap(&pWin->drawable, - &pWin->border.pixmap); - } - return TRUE; + if (mask & CWBorderPixmap) { + if (pWin->borderIsPixel == FALSE) + glamor_fixup_window_pixmap(&pWin->drawable, &pWin->border.pixmap); + } + return TRUE; } void glamor_set_window_pixmap(WindowPtr win, PixmapPtr pPixmap) { - ScreenPtr screen = win->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - PixmapPtr old = screen->GetWindowPixmap(win); + ScreenPtr screen = win->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + PixmapPtr old = screen->GetWindowPixmap(win); - if (pPixmap != old) { - glamor_pixmap_private *pixmap_priv; - PicturePtr pic = NULL; + if (pPixmap != old) { + glamor_pixmap_private *pixmap_priv; + PicturePtr pic = NULL; - pixmap_priv = glamor_get_pixmap_private(old); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) && pixmap_priv->base.picture->pDrawable == (DrawablePtr)win) { - pic = pixmap_priv->base.picture; - pixmap_priv->base.is_picture = 0; - pixmap_priv->base.picture = NULL; - } + pixmap_priv = glamor_get_pixmap_private(old); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) && + pixmap_priv->base.picture->pDrawable == (DrawablePtr) win) { + pic = pixmap_priv->base.picture; + pixmap_priv->base.is_picture = 0; + pixmap_priv->base.picture = NULL; + } - pixmap_priv = glamor_get_pixmap_private(pPixmap); - if (pixmap_priv) { - pixmap_priv->base.is_picture = !!pic; - pixmap_priv->base.picture = pic; - } - } + pixmap_priv = glamor_get_pixmap_private(pPixmap); + if (pixmap_priv) { + pixmap_priv->base.is_picture = ! !pic; + pixmap_priv->base.picture = pic; + } + } - screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; - (screen->SetWindowPixmap)(win, pPixmap); - glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; - screen->SetWindowPixmap = glamor_set_window_pixmap; + screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; + (screen->SetWindowPixmap) (win, pPixmap); + glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = glamor_set_window_pixmap; } diff --git a/xorg-server/glamor/glamor_xv.c b/xorg-server/glamor/glamor_xv.c index a89b4cd3f..cbe07c8b1 100644 --- a/xorg-server/glamor/glamor_xv.c +++ b/xorg-server/glamor/glamor_xv.c @@ -39,15 +39,14 @@ #include #include "fourcc.h" /* Reference color space transform data */ -typedef struct tagREF_TRANSFORM -{ - float RefLuma; - float RefRCb; - float RefRCr; - float RefGCb; - float RefGCr; - float RefBCb; - float RefBCr; +typedef struct tagREF_TRANSFORM { + float RefLuma; + float RefRCb; + float RefRCr; + float RefGCb; + float RefGCr; + float RefBCb; + float RefBCr; } REF_TRANSFORM; #define RTFSaturation(a) (1.0 + ((a)*1.0)/1000.0) @@ -56,590 +55,583 @@ typedef struct tagREF_TRANSFORM #define RTFContrast(a) (1.0 + ((a)*1.0)/1000.0) #define RTFHue(a) (((a)*3.1416)/1000.0) -static const char *xv_vs= "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 tcs;\n" - "void main()\n" "{\n" " gl_Position = v_position;\n" - "tcs = v_texcoord0.xy;\n" - "}\n"; +static const char *xv_vs = "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 tcs;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + "tcs = v_texcoord0.xy;\n" + "}\n"; static const char *xv_ps = GLAMOR_DEFAULT_PRECISION - "uniform sampler2D y_sampler;\n" - "uniform sampler2D u_sampler;\n" - "uniform sampler2D v_sampler;\n" - "uniform vec4 offsetyco;\n" - "uniform vec4 ucogamma;\n" - "uniform vec4 vco;\n" - "varying vec2 tcs;\n" - "float sample;\n" - "vec4 temp1;\n" - "void main()\n" "{\n" - "sample = texture2D(y_sampler, tcs).w;\n" - "temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n" - "sample = texture2D(u_sampler, tcs).w;\n" - "temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n" - "sample = texture2D(v_sampler, tcs).w;\n" - "temp1.xyz = clamp(vco.xyz * vec3(sample) + temp1.xyz, 0.0, 1.0);\n" - "temp1.w = 1.0;\n" - "gl_FragColor = temp1;\n" - "}\n"; + "uniform sampler2D y_sampler;\n" + "uniform sampler2D u_sampler;\n" + "uniform sampler2D v_sampler;\n" + "uniform vec4 offsetyco;\n" + "uniform vec4 ucogamma;\n" + "uniform vec4 vco;\n" + "varying vec2 tcs;\n" + "float sample;\n" + "vec4 temp1;\n" + "void main()\n" + "{\n" + "sample = texture2D(y_sampler, tcs).w;\n" + "temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n" + "sample = texture2D(u_sampler, tcs).w;\n" + "temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n" + "sample = texture2D(v_sampler, tcs).w;\n" + "temp1.xyz = clamp(vco.xyz * vec3(sample) + temp1.xyz, 0.0, 1.0);\n" + "temp1.w = 1.0;\n" + "gl_FragColor = temp1;\n" + "}\n"; void glamor_init_xv_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - GLint fs_prog, vs_prog; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->xv_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, xv_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, xv_ps); - dispatch->glAttachShader(glamor_priv->xv_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->xv_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->xv_prog, - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->xv_prog, - GLAMOR_VERTEX_SOURCE, "v_texcoord0"); - glamor_link_glsl_prog(dispatch, glamor_priv->xv_prog); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + GLint fs_prog, vs_prog; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->xv_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, xv_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, xv_ps); + dispatch->glAttachShader(glamor_priv->xv_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->xv_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->xv_prog, + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->xv_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->xv_prog); + + glamor_put_dispatch(glamor_priv); } void glamor_fini_xv_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->xv_prog); - glamor_put_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->xv_prog); + glamor_put_dispatch(glamor_priv); } #define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v)) #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) -static Atom xvBrightness, xvContrast, xvSaturation, xvHue, xvColorspace, xvGamma; +static Atom xvBrightness, xvContrast, xvSaturation, xvHue, xvColorspace, + xvGamma; #define NUM_ATTRIBUTES 5 -static XF86AttributeRec Attributes_glamor[NUM_ATTRIBUTES+1] = -{ +static XF86AttributeRec Attributes_glamor[NUM_ATTRIBUTES + 1] = { {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"}, {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}, {XvSettable | XvGettable, -1000, 1000, "XV_HUE"}, {XvSettable | XvGettable, 0, 1, "XV_COLORSPACE"}, {0, 0, 0, NULL} - }; +}; #define NUM_FORMATS 3 -static XF86VideoFormatRec Formats[NUM_FORMATS] = -{ +static XF86VideoFormatRec Formats[NUM_FORMATS] = { {15, TrueColor}, {16, TrueColor}, {24, TrueColor} - }; +}; #define NUM_IMAGES 2 -static XF86ImageRec Images[NUM_IMAGES] = -{ -XVIMAGE_YV12, - XVIMAGE_I420, - }; +static XF86ImageRec Images[NUM_IMAGES] = { + XVIMAGE_YV12, + XVIMAGE_I420, +}; static void -glamor_xv_stop_video(ScrnInfoPtr pScrn, pointer data, Bool cleanup) +glamor_xv_stop_video(ScrnInfoPtr pScrn, void *data, Bool cleanup) { -glamor_port_private *port_priv = (glamor_port_private *)data; -int i; -if (!cleanup) - return; - -for (i = 0; i < 3; i++) { -if (port_priv->src_pix[i]) { -glamor_destroy_pixmap(port_priv->src_pix[i]); -port_priv->src_pix[i] = NULL; -} -} + glamor_port_private *port_priv = (glamor_port_private *) data; + int i; + + if (!cleanup) + return; + + for (i = 0; i < 3; i++) { + if (port_priv->src_pix[i]) { + glamor_destroy_pixmap(port_priv->src_pix[i]); + port_priv->src_pix[i] = NULL; + } + } } static int -glamor_xv_set_port_attribute(ScrnInfoPtr pScrn, - Atom attribute, - INT32 value, - pointer data) +glamor_xv_set_port_attribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 value, void *data) { -glamor_port_private *port_priv = (glamor_port_private *)data; -if (attribute == xvBrightness) - port_priv->brightness = ClipValue(value, -1000, 1000); -else if (attribute == xvHue) - port_priv->hue = ClipValue(value, -1000, 1000); -else if (attribute == xvContrast) - port_priv->contrast = ClipValue(value, -1000, 1000); -else if (attribute == xvSaturation) - port_priv->saturation = ClipValue(value, -1000, 1000); -else if (attribute == xvGamma) - port_priv->gamma = ClipValue (value, 100, 10000); -else if(attribute == xvColorspace) - port_priv->transform_index = ClipValue (value, 0, 1); -else - return BadMatch; -return Success; + glamor_port_private *port_priv = (glamor_port_private *) data; + + if (attribute == xvBrightness) + port_priv->brightness = ClipValue(value, -1000, 1000); + else if (attribute == xvHue) + port_priv->hue = ClipValue(value, -1000, 1000); + else if (attribute == xvContrast) + port_priv->contrast = ClipValue(value, -1000, 1000); + else if (attribute == xvSaturation) + port_priv->saturation = ClipValue(value, -1000, 1000); + else if (attribute == xvGamma) + port_priv->gamma = ClipValue(value, 100, 10000); + else if (attribute == xvColorspace) + port_priv->transform_index = ClipValue(value, 0, 1); + else + return BadMatch; + return Success; } static int -glamor_xv_get_port_attribute(ScrnInfoPtr pScrn, - Atom attribute, - INT32 *value, - pointer data) +glamor_xv_get_port_attribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 *value, void *data) { -glamor_port_private *port_priv = (glamor_port_private *)data; -if (attribute == xvBrightness) - *value = port_priv->brightness; -else if (attribute == xvHue) - *value = port_priv->hue; -else if (attribute == xvContrast) - *value = port_priv->contrast; -else if (attribute == xvSaturation) - *value = port_priv->saturation; -else if (attribute == xvGamma) - *value = port_priv->gamma; -else if(attribute == xvColorspace) - *value = port_priv->transform_index; -else - return BadMatch; - -return Success; + glamor_port_private *port_priv = (glamor_port_private *) data; + + if (attribute == xvBrightness) + *value = port_priv->brightness; + else if (attribute == xvHue) + *value = port_priv->hue; + else if (attribute == xvContrast) + *value = port_priv->contrast; + else if (attribute == xvSaturation) + *value = port_priv->saturation; + else if (attribute == xvGamma) + *value = port_priv->gamma; + else if (attribute == xvColorspace) + *value = port_priv->transform_index; + else + return BadMatch; + + return Success; } static void glamor_xv_query_best_size(ScrnInfoPtr pScrn, - Bool motion, - short vid_w, short vid_h, - short drw_w, short drw_h, - unsigned int *p_w, unsigned int *p_h, - pointer data) + Bool motion, + short vid_w, short vid_h, + short drw_w, short drw_h, + unsigned int *p_w, unsigned int *p_h, void *data) { -*p_w = drw_w; -*p_h = drw_h; + *p_w = drw_w; + *p_h = drw_h; } static int glamor_xv_query_image_attributes(ScrnInfoPtr pScrn, - int id, - unsigned short *w, unsigned short *h, - int *pitches, int *offsets) + int id, + unsigned short *w, unsigned short *h, + int *pitches, int *offsets) { -int size = 0, tmp; - -if (offsets) offsets[0] = 0; -switch (id) { -case FOURCC_YV12: -case FOURCC_I420: -*h = *h; -*w = *w; -size = *w; -if (pitches) pitches[0] = size; -size *= *h; -if (offsets) offsets[1] = size; -tmp = *w >> 1; -if (pitches) pitches[1] = pitches[2] = tmp; -tmp *= (*h >> 1); -size += tmp; -if (offsets) offsets[2] = size; -size += tmp; -break; -} -return size; + int size = 0, tmp; + + if (offsets) + offsets[0] = 0; + switch (id) { + case FOURCC_YV12: + case FOURCC_I420: + *h = *h; + *w = *w; + size = *w; + if (pitches) + pitches[0] = size; + size *= *h; + if (offsets) + offsets[1] = size; + tmp = *w >> 1; + if (pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if (offsets) + offsets[2] = size; + size += tmp; + break; + } + return size; } + /* Parameters for ITU-R BT.601 and ITU-R BT.709 colour spaces note the difference to the parameters used in overlay are due to 10bit vs. float calcs */ -static REF_TRANSFORM trans[2] = -{ - {1.1643, 0.0, 1.5960, -0.3918, -0.8129, 2.0172, 0.0}, /* BT.601 */ - {1.1643, 0.0, 1.7927, -0.2132, -0.5329, 2.1124, 0.0} /* BT.709 */ - }; +static REF_TRANSFORM trans[2] = { + {1.1643, 0.0, 1.5960, -0.3918, -0.8129, 2.0172, 0.0}, /* BT.601 */ + {1.1643, 0.0, 1.7927, -0.2132, -0.5329, 2.1124, 0.0} /* BT.709 */ +}; static void glamor_display_textured_video(glamor_port_private *port_priv) { -ScreenPtr screen = port_priv->pPixmap->drawable.pScreen; -glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); -glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(port_priv->pPixmap); -glamor_pixmap_private *src_pixmap_priv[3]; -glamor_gl_dispatch *dispatch; -float vertices[32], texcoords[8]; -BoxPtr box = REGION_RECTS(&port_priv->clip); -int nBox = REGION_NUM_RECTS(&port_priv->clip); -int dst_x_off, dst_y_off; -GLfloat dst_xscale, dst_yscale; -GLfloat src_xscale[3], src_yscale[3]; -int i; -const float Loff = -0.0627; -const float Coff = -0.502; -float uvcosf, uvsinf; -float yco; -float uco[3], vco[3], off[3]; -float bright, cont, gamma; -int ref = port_priv->transform_index; -GLint uloc, sampler_loc; - -cont = RTFContrast(port_priv->contrast); -bright = RTFBrightness(port_priv->brightness); -gamma = (float)port_priv->gamma / 1000.0; -uvcosf = RTFSaturation(port_priv->saturation) * cos(RTFHue(port_priv->hue)); -uvsinf = RTFSaturation(port_priv->saturation) * sin(RTFHue(port_priv->hue)); + ScreenPtr screen = port_priv->pPixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv = + glamor_get_pixmap_private(port_priv->pPixmap); + glamor_pixmap_private *src_pixmap_priv[3]; + glamor_gl_dispatch *dispatch; + float vertices[32], texcoords[8]; + BoxPtr box = REGION_RECTS(&port_priv->clip); + int nBox = REGION_NUM_RECTS(&port_priv->clip); + int dst_x_off, dst_y_off; + GLfloat dst_xscale, dst_yscale; + GLfloat src_xscale[3], src_yscale[3]; + int i; + const float Loff = -0.0627; + const float Coff = -0.502; + float uvcosf, uvsinf; + float yco; + float uco[3], vco[3], off[3]; + float bright, cont, gamma; + int ref = port_priv->transform_index; + GLint uloc, sampler_loc; + + cont = RTFContrast(port_priv->contrast); + bright = RTFBrightness(port_priv->brightness); + gamma = (float) port_priv->gamma / 1000.0; + uvcosf = RTFSaturation(port_priv->saturation) * cos(RTFHue(port_priv->hue)); + uvsinf = RTFSaturation(port_priv->saturation) * sin(RTFHue(port_priv->hue)); /* overlay video also does pre-gamma contrast/sat adjust, should we? */ -yco = trans[ref].RefLuma * cont; -uco[0] = -trans[ref].RefRCr * uvsinf; -uco[1] = trans[ref].RefGCb * uvcosf - trans[ref].RefGCr * uvsinf; -uco[2] = trans[ref].RefBCb * uvcosf; -vco[0] = trans[ref].RefRCr * uvcosf; -vco[1] = trans[ref].RefGCb * uvsinf + trans[ref].RefGCr * uvcosf; -vco[2] = trans[ref].RefBCb * uvsinf; -off[0] = Loff * yco + Coff * (uco[0] + vco[0]) + bright; -off[1] = Loff * yco + Coff * (uco[1] + vco[1]) + bright; -off[2] = Loff * yco + Coff * (uco[2] + vco[2]) + bright; -gamma = 1.0; - -pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); -glamor_get_drawable_deltas(port_priv->pDraw, port_priv->pPixmap, &dst_x_off, - &dst_y_off); -glamor_set_destination_pixmap_priv_nc(pixmap_priv); - -for (i = 0; i < 3; i++) { -if (port_priv->src_pix[i]) { -src_pixmap_priv[i] = glamor_get_pixmap_private(port_priv->src_pix[i]); -pixmap_priv_get_scale(src_pixmap_priv[i], &src_xscale[i], &src_yscale[i]); -} -} -dispatch = glamor_get_dispatch(glamor_priv); -dispatch->glUseProgram(glamor_priv->xv_prog); - -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "offsetyco"); -dispatch->glUniform4f(uloc, off[0], off[1], off[2], yco); -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "ucogamma"); -dispatch->glUniform4f(uloc, uco[0], uco[1], uco[2], gamma); -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "vco"); -dispatch->glUniform4f(uloc, vco[0], vco[1], vco[2], 0); - -dispatch->glActiveTexture(GL_TEXTURE0); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -dispatch->glActiveTexture(GL_TEXTURE1); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -dispatch->glActiveTexture(GL_TEXTURE2); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "y_sampler"); -dispatch->glUniform1i(sampler_loc, 0); -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "u_sampler"); -dispatch->glUniform1i(sampler_loc, 1); -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "v_sampler"); -dispatch->glUniform1i(sampler_loc, 2); - -dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - texcoords); -dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - -dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - -dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); -for (i = 0; i < nBox; i++) { -float off_x = box[i].x1 - port_priv->drw_x; -float off_y = box[i].y1 - port_priv->drw_y; -float diff_x = (float)port_priv->src_w / (float)port_priv->dst_w; -float diff_y = (float)port_priv->src_h / (float)port_priv->dst_h; -float srcx, srcy, srcw, srch; -int dstx, dsty, dstw, dsth; - - -dstx = box[i].x1 + dst_x_off; -dsty = box[i].y1 + dst_y_off; -dstw = box[i].x2 - box[i].x1; -dsth = box[i].y2 - box[i].y1; - -srcx = port_priv->src_x + off_x * diff_x; -srcy = port_priv->src_y + off_y * diff_y; -srcw = (port_priv->src_w * dstw) / (float)port_priv->dst_w; -srch = (port_priv->src_h * dsth) / (float)port_priv->dst_h; - -glamor_set_normalize_vcoords(pixmap_priv, - dst_xscale, dst_yscale, - dstx, - dsty, - dstx + dstw, - dsty + dsth, - glamor_priv->yInverted, - vertices); - -glamor_set_normalize_tcoords(src_pixmap_priv[0], - src_xscale[0], - src_yscale[0], - srcx, - srcy, - srcx + srcw, - srcy + srch, - glamor_priv->yInverted, - texcoords); - -dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); -} - -dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); -dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - -dispatch->glUseProgram(0); -glamor_put_dispatch(glamor_priv); -DamageDamageRegion(port_priv->pDraw, &port_priv->clip); + yco = trans[ref].RefLuma * cont; + uco[0] = -trans[ref].RefRCr * uvsinf; + uco[1] = trans[ref].RefGCb * uvcosf - trans[ref].RefGCr * uvsinf; + uco[2] = trans[ref].RefBCb * uvcosf; + vco[0] = trans[ref].RefRCr * uvcosf; + vco[1] = trans[ref].RefGCb * uvsinf + trans[ref].RefGCr * uvcosf; + vco[2] = trans[ref].RefBCb * uvsinf; + off[0] = Loff * yco + Coff * (uco[0] + vco[0]) + bright; + off[1] = Loff * yco + Coff * (uco[1] + vco[1]) + bright; + off[2] = Loff * yco + Coff * (uco[2] + vco[2]) + bright; + gamma = 1.0; + + pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); + glamor_get_drawable_deltas(port_priv->pDraw, port_priv->pPixmap, &dst_x_off, + &dst_y_off); + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + for (i = 0; i < 3; i++) { + if (port_priv->src_pix[i]) { + src_pixmap_priv[i] = + glamor_get_pixmap_private(port_priv->src_pix[i]); + pixmap_priv_get_scale(src_pixmap_priv[i], &src_xscale[i], + &src_yscale[i]); + } + } + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->xv_prog); + + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "offsetyco"); + dispatch->glUniform4f(uloc, off[0], off[1], off[2], yco); + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "ucogamma"); + dispatch->glUniform4f(uloc, uco[0], uco[1], uco[2], gamma); + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "vco"); + dispatch->glUniform4f(uloc, vco[0], vco[1], vco[2], 0); + + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + dispatch->glActiveTexture(GL_TEXTURE2); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "y_sampler"); + dispatch->glUniform1i(sampler_loc, 0); + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "u_sampler"); + dispatch->glUniform1i(sampler_loc, 1); + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "v_sampler"); + dispatch->glUniform1i(sampler_loc, 2); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + for (i = 0; i < nBox; i++) { + float off_x = box[i].x1 - port_priv->drw_x; + float off_y = box[i].y1 - port_priv->drw_y; + float diff_x = (float) port_priv->src_w / (float) port_priv->dst_w; + float diff_y = (float) port_priv->src_h / (float) port_priv->dst_h; + float srcx, srcy, srcw, srch; + int dstx, dsty, dstw, dsth; + + dstx = box[i].x1 + dst_x_off; + dsty = box[i].y1 + dst_y_off; + dstw = box[i].x2 - box[i].x1; + dsth = box[i].y2 - box[i].y1; + + srcx = port_priv->src_x + off_x * diff_x; + srcy = port_priv->src_y + off_y * diff_y; + srcw = (port_priv->src_w * dstw) / (float) port_priv->dst_w; + srch = (port_priv->src_h * dsth) / (float) port_priv->dst_h; + + glamor_set_normalize_vcoords(pixmap_priv, + dst_xscale, dst_yscale, + dstx, + dsty, + dstx + dstw, + dsty + dsth, + glamor_priv->yInverted, vertices); + + glamor_set_normalize_tcoords(src_pixmap_priv[0], + src_xscale[0], + src_yscale[0], + srcx, + srcy, + srcx + srcw, + srcy + srch, + glamor_priv->yInverted, texcoords); + + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + DamageDamageRegion(port_priv->pDraw, &port_priv->clip); } -static int glamor_xv_put_image(ScrnInfoPtr pScrn, - short src_x, short src_y, - short drw_x, short drw_y, - short src_w, short src_h, - short drw_w, short drw_h, - int id, - unsigned char *buf, - short width, - short height, - Bool sync, - RegionPtr clipBoxes, - pointer data, - DrawablePtr pDrawable) +static int +glamor_xv_put_image(ScrnInfoPtr pScrn, + short src_x, short src_y, + short drw_x, short drw_y, + short src_w, short src_h, + short drw_w, short drw_h, + int id, + unsigned char *buf, + short width, + short height, + Bool sync, + RegionPtr clipBoxes, void *data, DrawablePtr pDrawable) { - ScreenPtr screen = xf86ScrnToScreen(pScrn); - glamor_port_private *port_priv = (glamor_port_private *)data; - INT32 x1, x2, y1, y2; - int srcPitch, srcPitch2; - BoxRec dstBox; - int top, nlines; - int s2offset, s3offset, tmp; - - s2offset = s3offset = srcPitch2 = 0; - - /* Clip */ - x1 = src_x; - x2 = src_x + src_w; - y1 = src_y; - y2 = src_y + src_h; - - dstBox.x1 = drw_x; - dstBox.x2 = drw_x + drw_w; - dstBox.y1 = drw_y; - dstBox.y2 = drw_y + drw_h; - if (!xf86XVClipVideoHelper(&dstBox, &x1, &x2, &y1, &y2, clipBoxes, width, height)) - return Success; - - if ((x1 >= x2) || (y1 >= y2)) - return Success; - - srcPitch = width; - srcPitch2 = width >> 1; - - if (!port_priv->src_pix[0] || (width != port_priv->src_pix_w || height != port_priv->src_pix_h)) { - int i; - for (i = 0; i < 3; i++) - if (port_priv->src_pix[i]) - glamor_destroy_pixmap(port_priv->src_pix[i]); - - port_priv->src_pix[0] = glamor_create_pixmap(screen, width, height, 8, 0); - port_priv->src_pix[1] = glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); - port_priv->src_pix[2] = glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); - port_priv->src_pix_w = width; - port_priv->src_pix_h = height; - - if (!port_priv->src_pix[0] || !port_priv->src_pix[1] || !port_priv->src_pix[2]) - return BadAlloc; - } - - top = (y1 >> 16) & ~1; - nlines = ((y2 + 0xffff) >> 16) - top; - - switch (id) { - case FOURCC_YV12: - case FOURCC_I420: - s2offset = srcPitch * height; - s3offset = s2offset + (srcPitch2 * ((height + 1) >> 1)); - s2offset += ((top >> 1) * srcPitch2); - s3offset += ((top >> 1) * srcPitch2); - if (id == FOURCC_YV12) { - tmp = s2offset; - s2offset = s3offset; - s3offset = tmp; - } - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[0], - 0, 0, srcPitch, nlines, - port_priv->src_pix[0]->devKind, - buf + (top * srcPitch), 0); - - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[1], - 0, 0, srcPitch2, (nlines + 1) >> 1, - port_priv->src_pix[1]->devKind, - buf + s2offset, 0); - - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[2], - 0, 0, srcPitch2, (nlines + 1) >> 1, - port_priv->src_pix[2]->devKind, - buf + s3offset, 0); - break; - default: - return BadMatch; - } - - if (pDrawable->type == DRAWABLE_WINDOW) - port_priv->pPixmap = (*screen->GetWindowPixmap)((WindowPtr)pDrawable); - else - port_priv->pPixmap = (PixmapPtr)pDrawable; - - if (!RegionEqual(&port_priv->clip, clipBoxes)) { - RegionCopy(&port_priv->clip, clipBoxes); - } - - port_priv->src_x = src_x; - port_priv->src_y = src_y; - port_priv->src_w = src_w; - port_priv->src_h = src_h; - port_priv->dst_w = drw_w; - port_priv->dst_h = drw_h; - port_priv->drw_x = drw_x; - port_priv->drw_y = drw_y; - port_priv->w = width; - port_priv->h = height; - port_priv->pDraw = pDrawable; - glamor_display_textured_video(port_priv); - return Success; + ScreenPtr screen = xf86ScrnToScreen(pScrn); + glamor_port_private *port_priv = (glamor_port_private *) data; + INT32 x1, x2, y1, y2; + int srcPitch, srcPitch2; + BoxRec dstBox; + int top, nlines; + int s2offset, s3offset, tmp; + + s2offset = s3offset = srcPitch2 = 0; + + /* Clip */ + x1 = src_x; + x2 = src_x + src_w; + y1 = src_y; + y2 = src_y + src_h; + + dstBox.x1 = drw_x; + dstBox.x2 = drw_x + drw_w; + dstBox.y1 = drw_y; + dstBox.y2 = drw_y + drw_h; + if (!xf86XVClipVideoHelper + (&dstBox, &x1, &x2, &y1, &y2, clipBoxes, width, height)) + return Success; + + if ((x1 >= x2) || (y1 >= y2)) + return Success; + + srcPitch = width; + srcPitch2 = width >> 1; + + if (!port_priv->src_pix[0] || + (width != port_priv->src_pix_w || height != port_priv->src_pix_h)) { + int i; + + for (i = 0; i < 3; i++) + if (port_priv->src_pix[i]) + glamor_destroy_pixmap(port_priv->src_pix[i]); + + port_priv->src_pix[0] = + glamor_create_pixmap(screen, width, height, 8, 0); + port_priv->src_pix[1] = + glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); + port_priv->src_pix[2] = + glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); + port_priv->src_pix_w = width; + port_priv->src_pix_h = height; + + if (!port_priv->src_pix[0] || !port_priv->src_pix[1] || + !port_priv->src_pix[2]) + return BadAlloc; + } + + top = (y1 >> 16) & ~1; + nlines = ((y2 + 0xffff) >> 16) - top; + + switch (id) { + case FOURCC_YV12: + case FOURCC_I420: + s2offset = srcPitch * height; + s3offset = s2offset + (srcPitch2 * ((height + 1) >> 1)); + s2offset += ((top >> 1) * srcPitch2); + s3offset += ((top >> 1) * srcPitch2); + if (id == FOURCC_YV12) { + tmp = s2offset; + s2offset = s3offset; + s3offset = tmp; + } + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[0], + 0, 0, srcPitch, nlines, + port_priv->src_pix[0]->devKind, + buf + (top * srcPitch), 0); + + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[1], + 0, 0, srcPitch2, (nlines + 1) >> 1, + port_priv->src_pix[1]->devKind, + buf + s2offset, 0); + + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[2], + 0, 0, srcPitch2, (nlines + 1) >> 1, + port_priv->src_pix[2]->devKind, + buf + s3offset, 0); + break; + default: + return BadMatch; + } + + if (pDrawable->type == DRAWABLE_WINDOW) + port_priv->pPixmap = (*screen->GetWindowPixmap) ((WindowPtr) pDrawable); + else + port_priv->pPixmap = (PixmapPtr) pDrawable; + + if (!RegionEqual(&port_priv->clip, clipBoxes)) { + RegionCopy(&port_priv->clip, clipBoxes); + } + + port_priv->src_x = src_x; + port_priv->src_y = src_y; + port_priv->src_w = src_w; + port_priv->src_h = src_h; + port_priv->dst_w = drw_w; + port_priv->dst_h = drw_h; + port_priv->drw_x = drw_x; + port_priv->drw_y = drw_y; + port_priv->w = width; + port_priv->h = height; + port_priv->pDraw = pDrawable; + glamor_display_textured_video(port_priv); + return Success; } -static XF86VideoEncodingRec DummyEncodingGLAMOR[1] = -{ - { - 0, - "XV_IMAGE", - 8192, 8192, - {1, 1} - } +static XF86VideoEncodingRec DummyEncodingGLAMOR[1] = { + { + 0, + "XV_IMAGE", + 8192, 8192, + {1, 1} + } }; XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr screen, int num_texture_ports) { - glamor_port_private *port_priv; - XF86VideoAdaptorPtr adapt; - int i; - - adapt = calloc(1, sizeof(XF86VideoAdaptorRec) + num_texture_ports * - (sizeof(glamor_port_private) + sizeof(DevUnion))); - if (adapt == NULL) - return NULL; - - xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); - xvContrast = MAKE_ATOM("XV_CONTRAST"); - xvSaturation = MAKE_ATOM("XV_SATURATION"); - xvHue = MAKE_ATOM("XV_HUE"); - xvGamma = MAKE_ATOM("XV_GAMMA"); - xvColorspace = MAKE_ATOM("XV_COLORSPACE"); - - adapt->type = XvWindowMask | XvInputMask | XvImageMask; - adapt->flags = 0; - adapt->name = "GLAMOR Textured Video"; - adapt->nEncodings = 1; - adapt->pEncodings = DummyEncodingGLAMOR; - - adapt->nFormats = NUM_FORMATS; - adapt->pFormats = Formats; - adapt->nPorts = num_texture_ports; - adapt->pPortPrivates = (DevUnion*)(&adapt[1]); - - adapt->pAttributes = Attributes_glamor; - adapt->nAttributes = NUM_ATTRIBUTES; - - port_priv = (glamor_port_private *)(&adapt->pPortPrivates[num_texture_ports]); - adapt->pImages = Images; - adapt->nImages = NUM_IMAGES; - adapt->PutVideo = NULL; - adapt->PutStill = NULL; - adapt->GetVideo = NULL; - adapt->GetStill = NULL; - adapt->StopVideo = glamor_xv_stop_video; - adapt->SetPortAttribute = glamor_xv_set_port_attribute; - adapt->GetPortAttribute = glamor_xv_get_port_attribute; - adapt->QueryBestSize = glamor_xv_query_best_size; - adapt->PutImage = glamor_xv_put_image; - adapt->ReputImage = NULL; - adapt->QueryImageAttributes = glamor_xv_query_image_attributes; - - for (i = 0; i < num_texture_ports; i++) { - glamor_port_private *pPriv = &port_priv[i]; - - pPriv->brightness = 0; - pPriv->contrast = 0; - pPriv->saturation = 0; - pPriv->hue = 0; - pPriv->gamma = 1000; - pPriv->transform_index = 0; - - REGION_NULL(pScreen, &pPriv->clip); - - adapt->pPortPrivates[i].ptr = (pointer)(pPriv); - } - return adapt; + glamor_port_private *port_priv; + XF86VideoAdaptorPtr adapt; + int i; + + adapt = calloc(1, sizeof(XF86VideoAdaptorRec) + num_texture_ports * + (sizeof(glamor_port_private) + sizeof(DevUnion))); + if (adapt == NULL) + return NULL; + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvContrast = MAKE_ATOM("XV_CONTRAST"); + xvSaturation = MAKE_ATOM("XV_SATURATION"); + xvHue = MAKE_ATOM("XV_HUE"); + xvGamma = MAKE_ATOM("XV_GAMMA"); + xvColorspace = MAKE_ATOM("XV_COLORSPACE"); + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = 0; + adapt->name = "GLAMOR Textured Video"; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncodingGLAMOR; + + adapt->nFormats = NUM_FORMATS; + adapt->pFormats = Formats; + adapt->nPorts = num_texture_ports; + adapt->pPortPrivates = (DevUnion *) (&adapt[1]); + + adapt->pAttributes = Attributes_glamor; + adapt->nAttributes = NUM_ATTRIBUTES; + + port_priv = + (glamor_port_private *) (&adapt->pPortPrivates[num_texture_ports]); + adapt->pImages = Images; + adapt->nImages = NUM_IMAGES; + adapt->PutVideo = NULL; + adapt->PutStill = NULL; + adapt->GetVideo = NULL; + adapt->GetStill = NULL; + adapt->StopVideo = glamor_xv_stop_video; + adapt->SetPortAttribute = glamor_xv_set_port_attribute; + adapt->GetPortAttribute = glamor_xv_get_port_attribute; + adapt->QueryBestSize = glamor_xv_query_best_size; + adapt->PutImage = glamor_xv_put_image; + adapt->ReputImage = NULL; + adapt->QueryImageAttributes = glamor_xv_query_image_attributes; + + for (i = 0; i < num_texture_ports; i++) { + glamor_port_private *pPriv = &port_priv[i]; + + pPriv->brightness = 0; + pPriv->contrast = 0; + pPriv->saturation = 0; + pPriv->hue = 0; + pPriv->gamma = 1000; + pPriv->transform_index = 0; + + REGION_NULL(pScreen, &pPriv->clip); + + adapt->pPortPrivates[i].ptr = (void *) (pPriv); + } + return adapt; } #else +#if 0 XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr screen, int num_texture_ports) { - return NULL; + return NULL; } #endif +#endif diff --git a/xorg-server/glamor/glapi.h b/xorg-server/glamor/glapi.h deleted file mode 100644 index d510dac1d..000000000 --- a/xorg-server/glamor/glapi.h +++ /dev/null @@ -1,121 +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. - */ - - -/** - * \mainpage Mesa GL API Module - * - * \section GLAPIIntroduction Introduction - * - * The Mesa GL API module is responsible for dispatching all the - * gl*() functions. All GL functions are dispatched by jumping through - * the current dispatch table (basically a struct full of function - * pointers.) - * - * A per-thread current dispatch table and per-thread current context - * pointer are managed by this module too. - * - * This module is intended to be non-Mesa-specific so it can be used - * with the X/DRI libGL also. - */ - -#ifndef _GLAPI_H -#define _GLAPI_H - -#define GL_GLEXT_PROTOTYPES - -#if GLAMOR_GLES2 -#include -#include -#else -#include -#include "GL/glext.h" -#endif - -/* Is this needed? It is incomplete anyway. */ -#ifdef USE_MGL_NAMESPACE -#define _glapi_set_dispatch _mglapi_set_dispatch -#define _glapi_get_dispatch _mglapi_get_dispatch -#define _glapi_set_context _mglapi_set_context -#define _glapi_get_context _mglapi_get_context -#define _glapi_Dispatch _mglapi_Dispatch -#define _glapi_Context _mglapi_Context -#endif - -typedef void (*_glapi_proc)(void); -struct _glapi_table; - - -#if defined (GLX_USE_TLS) - -extern __thread struct _glapi_table * _glapi_tls_Dispatch - __attribute__((tls_model("initial-exec"))); - -extern __thread void * _glapi_tls_Context - __attribute__((tls_model("initial-exec"))); - -extern const struct _glapi_table *_glapi_Dispatch; -extern const void *_glapi_Context; - -# define GET_DISPATCH() _glapi_tls_Dispatch -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_tls_Context -# define SET_CURRENT_CONTEXT(C) _glapi_tls_Context = (void*)C - -#else - -extern struct _glapi_table *_glapi_Dispatch; -extern void *_glapi_Context; - -# ifdef THREADS - -# define GET_DISPATCH() \ - (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) - -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) \ - (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) - - -# define SET_CURRENT_CONTEXT(C) do { if (likely(_glapi_Context)) \ - _glapi_Context = (void*)C; \ - else \ - _glapi_set_context(C); } while(0) - -# else - -# define GET_DISPATCH() _glapi_Dispatch -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_Context -# define SET_CURRENT_CONTEXT(C) _glapi_Context = (void*)C - -# endif - -#endif /* defined (GLX_USE_TLS) */ - - -extern void -_glapi_set_context(void *context); - -extern void * -_glapi_get_context(void); - -#endif diff --git a/xorg-server/glx/glxdri2.c b/xorg-server/glx/glxdri2.c index 8c1058613..5d1a45bff 100644 --- a/xorg-server/glx/glxdri2.c +++ b/xorg-server/glx/glxdri2.c @@ -461,7 +461,7 @@ create_driver_context(__GLXDRIcontext * context, unsigned dri_err = 0; unsigned major_ver; unsigned minor_ver; - uint32_t flags; + uint32_t flags = 0; int reset; int api = __DRI_API_OPENGL; diff --git a/xorg-server/glx/glxdricommon.c b/xorg-server/glx/glxdricommon.c index fc902729d..69d4b297e 100644 --- a/xorg-server/glx/glxdricommon.c +++ b/xorg-server/glx/glxdricommon.c @@ -226,7 +226,7 @@ glxConvertConfigs(const __DRIcoreExtension * core, } for (i = 0; configs[i]; i++) { - int renderType = 0; + unsigned int renderType = 0; if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE, &renderType)) { if (render_type_is_pbuffer_only(renderType) && diff --git a/xorg-server/hw/xfree86/common/xf86.h b/xorg-server/hw/xfree86/common/xf86.h index 89025fe11..cec31354e 100644 --- a/xorg-server/hw/xfree86/common/xf86.h +++ b/xorg-server/hw/xfree86/common/xf86.h @@ -215,6 +215,8 @@ extern _X_EXPORT xf86SetDGAModeProc xf86SetDGAMode; /* xf86Events.c */ +typedef struct _InputInfoRec *InputInfoPtr; + extern _X_EXPORT void SetTimeSinceLastInputEvent(void); extern _X_EXPORT void *xf86AddInputHandler(int fd, InputHandlerProc proc, void *data); @@ -234,6 +236,10 @@ 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); +extern _X_EXPORT void xf86VTLeave(void); +extern _X_EXPORT void xf86VTEnter(void); +extern _X_EXPORT void xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo); +extern _X_EXPORT void xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo); /* xf86Helper.c */ diff --git a/xorg-server/hw/xfree86/common/xf86Events.c b/xorg-server/hw/xfree86/common/xf86Events.c index cae78732c..7b53949fa 100644 --- a/xorg-server/hw/xfree86/common/xf86Events.c +++ b/xorg-server/hw/xfree86/common/xf86Events.c @@ -407,178 +407,193 @@ xf86ReleaseKeys(DeviceIntPtr pDev) } } -/* - * xf86VTSwitch -- - * Handle requests for switching the vt. - */ -static void -xf86VTSwitch(void) +void +xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo) +{ + if (!pInfo->dev) + return; + + if (!pInfo->dev->enabled) + pInfo->flags |= XI86_DEVICE_DISABLED; + + xf86ReleaseKeys(pInfo->dev); + ProcessInputEvents(); + DisableDevice(pInfo->dev, TRUE); +} + +void +xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo) +{ + if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) + EnableDevice(pInfo->dev, TRUE); + pInfo->flags &= ~XI86_DEVICE_DISABLED; +} + +void +xf86VTLeave(void) { int i; InputInfoPtr pInfo; IHPtr ih; - DebugF("xf86VTSwitch()\n"); - -#ifdef XFreeXDGA - if (!DGAVTSwitch()) - return; + DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", + BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); +#ifdef DPMSExtension + if (DPMSPowerLevel != DPMSModeOn) + DPMSSet(serverClient, DPMSModeOn); #endif + for (i = 0; i < xf86NumScreens; i++) { + if (!(dispatchException & DE_TERMINATE)) + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], FALSE); + } /* - * Since all screens are currently all in the same state it is sufficient - * check the first. This might change in future. + * Keep the order: Disable Device > LeaveVT + * EnterVT > EnableDevice */ - if (xf86VTOwner()) { + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86DisableInputHandler(ih); + else + xf86DisableGeneralHandler(ih); + } + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86DisableInputDeviceForVTSwitch(pInfo); - DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", - BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -#ifdef DPMSExtension - if (DPMSPowerLevel != DPMSModeOn) - DPMSSet(serverClient, DPMSModeOn); + OsBlockSIGIO(); + for (i = 0; i < xf86NumScreens; i++) + xf86Screens[i]->LeaveVT(xf86Screens[i]); + for (i = 0; i < xf86NumGPUScreens; i++) + xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + + xf86AccessLeave(); /* We need this here, otherwise */ + + if (!xf86VTSwitchAway()) + goto switch_failed; + +#ifdef XF86PM + if (xf86OSPMClose) + xf86OSPMClose(); + xf86OSPMClose = NULL; #endif - for (i = 0; i < xf86NumScreens; i++) { - if (!(dispatchException & DE_TERMINATE)) - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], FALSE); - } + for (i = 0; i < xf86NumScreens; i++) { /* - * Keep the order: Disable Device > LeaveVT - * EnterVT > EnableDevice + * zero all access functions to + * trap calls when switched away. */ - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86DisableInputHandler(ih); - else - xf86DisableGeneralHandler(ih); - } - for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) { - if (pInfo->dev) { - if (!pInfo->dev->enabled) - pInfo->flags |= XI86_DEVICE_DISABLED; - xf86ReleaseKeys(pInfo->dev); - ProcessInputEvents(); - DisableDevice(pInfo->dev, TRUE); - } - } - - OsBlockSIGIO(); - for (i = 0; i < xf86NumScreens; i++) - xf86Screens[i]->LeaveVT(xf86Screens[i]); - for (i = 0; i < xf86NumGPUScreens; i++) - xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + xf86Screens[i]->vtSema = FALSE; + } + if (xorgHWAccess) + xf86DisableIO(); - xf86AccessLeave(); /* We need this here, otherwise */ + return; - if (!xf86VTSwitchAway()) { - /* - * switch failed - */ +switch_failed: + DebugF("xf86VTSwitch: Leave failed\n"); + xf86AccessEnter(); + for (i = 0; i < xf86NumScreens; i++) { + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } + for (i = 0; i < xf86NumGPUScreens; i++) { + if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) + FatalError("EnterVT failed for gpu screen %d\n", i); + } + if (!(dispatchException & DE_TERMINATE)) { + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); + } + } + dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); + + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86EnableInputDeviceForVTSwitch(pInfo); + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86EnableInputHandler(ih); + else + xf86EnableGeneralHandler(ih); + } + OsReleaseSIGIO(); +} - DebugF("xf86VTSwitch: Leave failed\n"); - xf86AccessEnter(); - for (i = 0; i < xf86NumScreens; i++) { - if (!xf86Screens[i]->EnterVT(xf86Screens[i])) - FatalError("EnterVT failed for screen %d\n", i); - } - for (i = 0; i < xf86NumGPUScreens; i++) { - if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) - FatalError("EnterVT failed for gpu screen %d\n", i); - } - if (!(dispatchException & DE_TERMINATE)) { - for (i = 0; i < xf86NumScreens; i++) { - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); - } - } - dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); +void +xf86VTEnter(void) +{ + int i; + InputInfoPtr pInfo; + IHPtr ih; - pInfo = xf86InputDevs; - while (pInfo) { - if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) - EnableDevice(pInfo->dev, TRUE); - pInfo->flags &= ~XI86_DEVICE_DISABLED; - pInfo = pInfo->next; - } - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86EnableInputHandler(ih); - else - xf86EnableGeneralHandler(ih); - } - OsReleaseSIGIO(); + DebugF("xf86VTSwitch: Entering\n"); + if (!xf86VTSwitchTo()) + return; - } - else { #ifdef XF86PM - if (xf86OSPMClose) - xf86OSPMClose(); - xf86OSPMClose = NULL; + xf86OSPMClose = xf86OSPMOpen(); #endif - for (i = 0; i < xf86NumScreens; i++) { - /* - * zero all access functions to - * trap calls when switched away. - */ - xf86Screens[i]->vtSema = FALSE; - } - if (xorgHWAccess) - xf86DisableIO(); - } + if (xorgHWAccess) + xf86EnableIO(); + xf86AccessEnter(); + for (i = 0; i < xf86NumScreens; i++) { + xf86Screens[i]->vtSema = TRUE; + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } + for (i = 0; i < xf86NumGPUScreens; i++) { + xf86GPUScreens[i]->vtSema = TRUE; + if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) + FatalError("EnterVT failed for gpu screen %d\n", i); + } + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); } - else { - DebugF("xf86VTSwitch: Entering\n"); - if (!xf86VTSwitchTo()) - return; -#ifdef XF86PM - xf86OSPMClose = xf86OSPMOpen(); -#endif + /* Turn screen saver off when switching back */ + dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); - if (xorgHWAccess) - xf86EnableIO(); - xf86AccessEnter(); - for (i = 0; i < xf86NumScreens; i++) { - xf86Screens[i]->vtSema = TRUE; - if (!xf86Screens[i]->EnterVT(xf86Screens[i])) - FatalError("EnterVT failed for screen %d\n", i); - } - for (i = 0; i < xf86NumGPUScreens; i++) { - xf86GPUScreens[i]->vtSema = TRUE; - if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) - FatalError("EnterVT failed for gpu screen %d\n", i); - } - for (i = 0; i < xf86NumScreens; i++) { - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); - } + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86EnableInputDeviceForVTSwitch(pInfo); + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86EnableInputHandler(ih); + else + xf86EnableGeneralHandler(ih); + } +#ifdef XSERVER_PLATFORM_BUS + /* check for any new output devices */ + xf86platformVTProbe(); +#endif - /* Turn screen saver off when switching back */ - dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); + OsReleaseSIGIO(); +} - pInfo = xf86InputDevs; - while (pInfo) { - if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) - EnableDevice(pInfo->dev, TRUE); - pInfo->flags &= ~XI86_DEVICE_DISABLED; - pInfo = pInfo->next; - } +/* + * xf86VTSwitch -- + * Handle requests for switching the vt. + */ +static void +xf86VTSwitch(void) +{ + DebugF("xf86VTSwitch()\n"); - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86EnableInputHandler(ih); - else - xf86EnableGeneralHandler(ih); - } -#ifdef XSERVER_PLATFORM_BUS - /* check for any new output devices */ - xf86platformVTProbe(); +#ifdef XFreeXDGA + if (!DGAVTSwitch()) + return; #endif - OsReleaseSIGIO(); - } + /* + * Since all screens are currently all in the same state it is sufficient + * check the first. This might change in future. + */ + if (xf86VTOwner()) + xf86VTLeave(); + else + xf86VTEnter(); } /* Input handler registration */ diff --git a/xorg-server/hw/xfree86/common/xf86Helper.c b/xorg-server/hw/xfree86/common/xf86Helper.c index 2c0629d64..12a877159 100644 --- a/xorg-server/hw/xfree86/common/xf86Helper.c +++ b/xorg-server/hw/xfree86/common/xf86Helper.c @@ -217,6 +217,10 @@ xf86DeleteScreen(ScrnInfoPtr pScrn) int i; int scrnIndex; Bool is_gpu = FALSE; + + if (!pScrn) + return; + if (pScrn->is_gpu) { /* First check if the screen is valid */ if (xf86NumGPUScreens == 0 || xf86GPUScreens == NULL) @@ -228,9 +232,6 @@ xf86DeleteScreen(ScrnInfoPtr pScrn) return; } - if (!pScrn) - return; - scrnIndex = pScrn->scrnIndex; /* If a FreeScreen function is defined, call it here */ if (pScrn->FreeScreen != NULL) diff --git a/xorg-server/hw/xfree86/common/xf86Init.c b/xorg-server/hw/xfree86/common/xf86Init.c index 9c8a86a39..ff4d38f28 100644 --- a/xorg-server/hw/xfree86/common/xf86Init.c +++ b/xorg-server/hw/xfree86/common/xf86Init.c @@ -53,6 +53,7 @@ #include "scrnintstr.h" #include "site.h" #include "mi.h" +#include "dbus-core.h" #include "compiler.h" @@ -456,6 +457,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) if (xf86DoShowOptions) DoShowOptions(); + dbus_core_init(); + /* Do a general bus probe. This will be a PCI probe for x86 platforms */ xf86BusProbe(); @@ -544,7 +547,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) if (NEED_IO_ENABLED(flags)) want_hw_access = TRUE; - if (!(flags & HW_SKIP_CONSOLE)) + /* Non-seat0 X servers should not open console */ + if (!(flags & HW_SKIP_CONSOLE) && !ServerIsNotSeat0()) xorgHWOpenConsole = TRUE; } @@ -1058,6 +1062,8 @@ ddxGiveUp(enum ExitCode error) if (xorgHWOpenConsole) xf86CloseConsole(); + dbus_core_fini(); + xf86CloseLog(error); /* If an unexpected signal was caught, dump a core for debugging */ diff --git a/xorg-server/hw/xfree86/modes/xf86EdidModes.c b/xorg-server/hw/xfree86/modes/xf86EdidModes.c index a56f6ba23..6fb0f9b92 100644 --- a/xorg-server/hw/xfree86/modes/xf86EdidModes.c +++ b/xorg-server/hw/xfree86/modes/xf86EdidModes.c @@ -162,6 +162,11 @@ quirk_detailed_use_maximum_size(int scrnIndex, xf86MonPtr DDC) DDC->vendor.prod_id == 0x7f01) return TRUE; + /* Sony Vaio Pro 13 */ + if (memcmp(DDC->vendor.name, "MEI", 4) == 0 && + DDC->vendor.prod_id == 0x96a2) + return TRUE; + return FALSE; } diff --git a/xorg-server/hw/xfree86/vgahw/Makefile.am b/xorg-server/hw/xfree86/vgahw/Makefile.am index f0b65740c..4b718b489 100644 --- a/xorg-server/hw/xfree86/vgahw/Makefile.am +++ b/xorg-server/hw/xfree86/vgahw/Makefile.am @@ -1,5 +1,6 @@ module_LTLIBRARIES = libvgahw.la libvgahw_la_LDFLAGS = -avoid-version +libvgahw_la_LIBADD = $(PCIACCESS_LIBS) libvgahw_la_SOURCES = vgaHW.c vgaHWmodule.c AM_CPPFLAGS = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) diff --git a/xorg-server/include/Makefile.am b/xorg-server/include/Makefile.am index 93d8616f2..fa6da00ec 100644 --- a/xorg-server/include/Makefile.am +++ b/xorg-server/include/Makefile.am @@ -68,7 +68,7 @@ endif AM_CFLAGS = $(DIX_CFLAGS) EXTRA_DIST = \ - busfault.h \ + busfault.h dbus-core.h \ dix-config-apple-verbatim.h \ dixfontstubs.h eventconvert.h eventstr.h inpututils.h \ protocol-versions.h \ diff --git a/xorg-server/include/dbus-core.h b/xorg-server/include/dbus-core.h new file mode 100644 index 000000000..b2d6d1b9e --- /dev/null +++ b/xorg-server/include/dbus-core.h @@ -0,0 +1,56 @@ +/* + * Copyright © 2013 Red Hat, Inc. + * + * 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. + * + * Author: Hans de Goede + */ + +#ifndef DBUS_CORE_H +#define DBUS_CORE_H + +#ifdef NEED_DBUS +typedef struct DBusConnection DBusConnection; + +typedef void (*dbus_core_connect_hook) (DBusConnection * connection, + void *data); +typedef void (*dbus_core_disconnect_hook) (void *data); + +struct dbus_core_hook { + dbus_core_connect_hook connect; + dbus_core_disconnect_hook disconnect; + void *data; + + struct dbus_core_hook *next; +}; + +int dbus_core_init(void); +void dbus_core_fini(void); +int dbus_core_add_hook(struct dbus_core_hook *hook); +void dbus_core_remove_hook(struct dbus_core_hook *hook); + +#else + +#define dbus_core_init() +#define dbus_core_fini() + +#endif + +#endif diff --git a/xorg-server/include/dix-config.h.in b/xorg-server/include/dix-config.h.in index 55cfe4710..7c77956b1 100644 --- a/xorg-server/include/dix-config.h.in +++ b/xorg-server/include/dix-config.h.in @@ -199,6 +199,9 @@ /* Define to 1 if you have the `strndup' function. */ #undef HAVE_STRNDUP +/* Define to 1 if libsystemd-daemon is available */ +#undef HAVE_SYSTEMD_DAEMON + /* Define to 1 if SYSV IPC is available */ #undef HAVE_SYSV_IPC @@ -411,11 +414,8 @@ /* Use udev_enumerate_add_match_tag() */ #undef HAVE_UDEV_ENUMERATE_ADD_MATCH_TAG -/* Use D-Bus for input hotplug */ -#undef CONFIG_NEED_DBUS - -/* Support the D-Bus hotplug API */ -#undef CONFIG_DBUS_API +/* Enable D-Bus core */ +#undef NEED_DBUS /* Support HAL for hotplug */ #undef CONFIG_HAL @@ -472,7 +472,13 @@ /* Don't let Xdefs.h define 'pointer' */ #define _XTYPEDEF_POINTER 1 +/* Don't let XIproto define 'Pointer' */ +#define _XITYPEDEF_POINTER 1 + /* Ask fontsproto to make font path element names const */ #define FONT_PATH_ELEMENT_NAME_CONST 1 +/* Build GLAMOR */ +#undef GLAMOR + #endif /* _DIX_CONFIG_H_ */ diff --git a/xorg-server/pseudoramiX/pseudoramiX.c b/xorg-server/pseudoramiX/pseudoramiX.c index 23dbc7328..f47c7836d 100644 --- a/xorg-server/pseudoramiX/pseudoramiX.c +++ b/xorg-server/pseudoramiX/pseudoramiX.c @@ -98,6 +98,10 @@ static int pseudoramiXScreensAllocated = 0; static int pseudoramiXNumScreens = 0; static unsigned long pseudoramiXGeneration = 0; +static void +PseudoramiXTrace(const char *format, ...) + _X_ATTRIBUTE_PRINTF(1, 2); + static void PseudoramiXTrace(const char *format, ...) { @@ -108,6 +112,10 @@ PseudoramiXTrace(const char *format, ...) va_end(ap); } +static void +PseudoramiXDebug(const char *format, ...) + _X_ATTRIBUTE_PRINTF(1, 2); + static void PseudoramiXDebug(const char *format, ...) { diff --git a/xorg-server/test/xi2/protocol-xipassivegrabdevice.c b/xorg-server/test/xi2/protocol-xipassivegrabdevice.c index 1e2341eb7..c747ddf03 100644 --- a/xorg-server/test/xi2/protocol-xipassivegrabdevice.c +++ b/xorg-server/test/xi2/protocol-xipassivegrabdevice.c @@ -137,6 +137,7 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, { int rc; int local_modifiers; + int mask_len; rc = ProcXIPassiveGrabDevice(&client_request); assert(rc == error); @@ -153,10 +154,11 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, swaps(&req->deviceid); local_modifiers = req->num_modifiers; swaps(&req->num_modifiers); + mask_len = req->mask_len; swaps(&req->mask_len); while (local_modifiers--) { - CARD32 *mod = ((CARD32 *) (req + 1)) + local_modifiers; + CARD32 *mod = (CARD32 *) (req + 1) + mask_len + local_modifiers; swapl(mod); } @@ -228,6 +230,11 @@ test_XIPassiveGrabDevice(void) request->detail = XIAnyButton; request_XIPassiveGrabDevice(&client_request, request, Success, 0); + /* Set a few random masks to make sure we handle modifiers correctly */ + SetBit(mask, XI_ButtonPress); + SetBit(mask, XI_KeyPress); + SetBit(mask, XI_Enter); + /* some modifiers */ request->num_modifiers = N_MODS; request->length += N_MODS; diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS index c0db1c6d5..05c89d145 100644 --- a/xorg-server/xkeyboard-config/NEWS +++ b/xorg-server/xkeyboard-config/NEWS @@ -1,3 +1,6 @@ +2.11 11 bugs fixed + Continuing code formatting cleanup + Translations updated 2.10.1 Critical fix 2.10 10+ bugs fixed 37 cleanup commits by Benno Schulenberg diff --git a/xorg-server/xkeyboard-config/configure.ac b/xorg-server/xkeyboard-config/configure.ac index 51f070c68..a0886a645 100644 --- a/xorg-server/xkeyboard-config/configure.ac +++ b/xorg-server/xkeyboard-config/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(xkeyboard-config, 2.10.1) +AC_INIT(xkeyboard-config, 2.11) AC_CONFIG_SRCDIR(rules/base.xml.in) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE diff --git a/xorg-server/xkeyboard-config/keycodes/xfree86 b/xorg-server/xkeyboard-config/keycodes/xfree86 index 0c910187f..47dc8934e 100644 --- a/xorg-server/xkeyboard-config/keycodes/xfree86 +++ b/xorg-server/xkeyboard-config/keycodes/xfree86 @@ -163,9 +163,7 @@ xkb_keycodes "basic" { // The entries commented out are never generated because the raw codes // in those positions are already used for well-defined keys. - alias = ; = 130; - alias = ; = 132; alias = ; = 134; @@ -287,7 +285,9 @@ xkb_keycodes "basic" { = 250; = 251; = 252; + alias = ; = 253; + alias = ; = 254; = 255; diff --git a/xorg-server/xkeyboard-config/po/bg.po b/xorg-server/xkeyboard-config/po/bg.po index f2846c38f..bf785a69c 100644 --- a/xorg-server/xkeyboard-config/po/bg.po +++ b/xorg-server/xkeyboard-config/po/bg.po @@ -1,9 +1,11 @@ # Bulgarian translation of xkeyboard-config. # Copyright (C) 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +# Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # Alexander Shopov , 2002, 2005, 2006, 2007, 2008. # Alexander Shopov , 2009, 2010, 2011, 2012, 2013. +# Alexander Shopov , 2014. # Damyan Ivanov , 2010. # # @@ -49,12 +51,12 @@ # Предпочита се дълго тире „—“ пред скоби „()“. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 21:36+0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-17 19:19+0200\n" "Last-Translator: Alexander Shopov \n" -"Language-Team: Bulgarian \n" +"Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -861,7 +863,7 @@ msgid "English (programmer Dvorak)" msgstr "английска — Дворак за програмисти" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "Рск" @@ -933,11 +935,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "узбекска — афганистанска, OLPC" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "Арб" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "арабска" @@ -975,11 +977,11 @@ msgid "Albanian" msgstr "албанска" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "Арм" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "арменска" @@ -1055,11 +1057,11 @@ msgid "Belarusian (Latin)" msgstr "беларуска — латиница" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "Бел" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "белгийска" @@ -1091,17 +1093,17 @@ msgstr "белгийска — с „мъртви“ клавиши на Sun" msgid "Belgian (Wang model 724 azerty)" msgstr "белгийска — Wang, модел 724, azerty" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "Бнг" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "бенгалска" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "бенгалска — пробхат" #. Keyboard indicator for Indian layouts @@ -1114,27 +1116,27 @@ msgid "Indian" msgstr "индийска" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "бенгалска — индийска" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "бенгалска — индийска, пробхат" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "бенгалска — индийска, байшаки" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "бенгалска — индийска, борона" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "бенгалска — индийска, уни гитанжали" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "бенгалска — индийска, байшаки, инскрипт" #. Keyboard indicator for Gujarati layouts @@ -1318,11 +1320,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "босненска — американска с босненски букви" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "Прт" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "португалска — бразилска" @@ -1335,16 +1337,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "португалска — бразилска, Дворак" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "португалска — бразилска, нативна" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "португалска — бразилска, нативна за САЩ" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "португалска — бразилска, нативна за есперанто" +msgid "Esperanto (Brazil, Nativo)" +msgstr "есперантска — бразилска, нативна" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1498,2464 +1500,2484 @@ msgid "Tibetan (with ASCII numerals)" msgstr "тибетска — с цифри от ASCII" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "Угр" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "уйгурска" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "Хрв" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "хърватска" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "хърватска — с „«»“" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "хърватска — с хърватски диграфи" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "хърватска — американска с хърватски диграфи" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "хърватска — американска с хърватски букви" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "Чшк" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "чешка" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "чешка — с „\\|“" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "чешка — qwerty" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "чешка — qwerty с „\\“" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "чешка — UCW, само букви с надредни знаци" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "чешка — американски Дворак с поддръжка на UCW" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "Дтс" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "датска" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "датска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "датска — за Макинтош" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "датска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "датска — Дворак" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "Хлн" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "холандска" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "холандска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "холандска — за Макинтош" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "холандска — стандартна" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "Дзн" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "дзонка" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "Ест" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "естонска" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "естонска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "естонска — Дворак" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "естонска — американска с естонски букви" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "персийска" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "персийска — с персийска цифрова клавиатура" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "Крд" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "кюрдска — иранска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "кюрдска — иранска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "кюрдска — иранска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "кюрдска — иранска, арабски и латински букви" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "иракска" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "кюрдска — иракска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "кюрдска — иракска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "кюрдска — иракска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "кюрдска — иракска, арабски и латински букви" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "Фрр" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "фарьорска" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "фарьорска — без „мъртви“ клавиши" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "Фнл" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "финландска" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "финландска — класическа" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "финландска — класическа, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "северносамска — финландска" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "финландска — за Макинтош" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "френска" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "френска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "френска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "френска — алтернативна" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "френска — алтернативна, само латиница по Latin-9" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "френска — алтернативна, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "френска — алтернативна, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "френска — алтернативна, остаряла" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "френска — алтернативна, остаряла, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "френска — алтернативна, остаряла, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "френска — Дворак, bépo, ергономична" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "френска — Дворак, bépo, ергономична, само латиница по Latin-9" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "френска — Дворак" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "френска — за Макинтош" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "френска — бретонска" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "провансалска" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "грузинска — azerty на Цкапо" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "английска — ганайска" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "английска — ганайска, международна" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "Акн" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "аканска" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "Еве" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "еве" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "Фла" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "фула" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "Га " -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "га" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "Хск" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "хауска" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "Авт" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "аватимска" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "английска — ганайска, GILLBT" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "френска — гвинейска" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "Грз" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "грузинска" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "грузинска — ергономична" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "грузинска — MESS" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "руска — грузинска" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "осетинска — грузинска" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "немска" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "немска — с „мъртво“ ударение" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "немска — с „мъртво“ тежко ударение" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "немска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "немска — T3" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "румънска — немска" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "немска — немска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "немска — Дворак" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "немска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "немска — Neo 2, добавени гръцки букви" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "немска — за Макинтош" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "немска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "долно сорбска" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "долно сорбска — qwertz" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "немска — qwerty" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "руска — германска, фонетична" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "немска — остаряла" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "Грц" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "гръцка" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "гръцка — опростена" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "гръцка — разширена" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "гръцка — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "гръцка — политонална" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "Унг" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "унгарска" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "унгарска — стандартна" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "унгарска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "унгарска — qwerty" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „.“, без „мъртви“ клавиши" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "Еск" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "исландска" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "исландска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "исландска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "исландска — за Макинтош" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "исландска — Дворак" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "Ивр" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "иврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "иврит — LyX" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "иврит — фонетична" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "иврит — библейска, Тиро" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "Итл" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "италианска" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "италианска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "италианска — за Макинтош" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "италианска — американска с италиански букви" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "грузинска — италианска" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "италианска — IBM 142" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "Япн" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "японска" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "японска — кана" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "японска — кана 86" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "японска — OADG 109A" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "японска — за Макинтош" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "японска — Дворак" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "Крг" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "киргистанска" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "киргистанска — фонетична" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "Кхм" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "кхмерска — камбоджанска" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "Кзх" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "казахска" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "руска — казахстанска, за казахски" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "казахска с руски букви" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "Лск" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "лаоска" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "лаоска — стандартна подредба по STEA" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "Исп" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "испанска — латиноамериканска" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "испанска — латиноамериканска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "испанска — латиноамериканска, с мъртва „~“" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "испанска — латиноамериканска, с „мъртви“ клавиши на Sun" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "Лит" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "литовска" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "литовска — стандартна" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "литовска — американска с литовски букви" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "литовска — IBM LST 1205-92" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "литовска — LEKP" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "литовска — LEKPa" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "Лат" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "латвийска" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "латвийска — с „'“" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "латвийска — с „~“" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "латвийска — с „F“" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "латвийска — модерна" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "латвийска — ергономична, ūgjrmv" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "латвийска — адаптирана" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "Мрс" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "маорска" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "Срб" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "черногорска" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "черногорска — кирилица" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "черногорска — кирилица с разменени „З“ и „Ж“" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "черногорска — латиница за Уникод" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "черногорска — латиница, qwerty" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "черногорска — латиница за Уникод, qwerty" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "черногорска — кирилица с „«»“" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "черногорска — латиница с „«»“" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "Мкд" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "македонска" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "македонска — без „мъртви“ клавиши" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "Млт" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "малтийска" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "малтийска — американска подредба" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "Мнг" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "монголска" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "Нрв" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "норвежка" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "норвежка — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "норвежка — Дворак" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "северносамска — норвежка" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "северносамска — норвежка, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "норвежка — за Макинтош" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "норвежка — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "норвежка — Коулмак" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "Плс" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "палска" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "полска — остаряла" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "полска — qwertz" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "полска — Дворак" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "полска — Дворак, «„”» при «'\"»" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "полска — Дворак, «„”» при «1»" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "кашубска" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "руска — полска, фонетична, Дворак" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "полска — Дворак за програмисти" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "португалска" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "португалска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "португалска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "португалска — за Макинтош" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "португалска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "португалска — за Макинтош, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "португалска — нативна" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "португалска — нативна за САЩ" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "есперантска — португалска, нативна" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "Рмн" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "румънска" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "румънска — букви с „¸“" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "румънска — стандартна" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "румънска — стандартна, букви с „¸“" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "румънска — с клавиши на Windows" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "руска" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "руска — фонетична" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "руска — фонетична, с клавиши на Windows" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "руска — за пишеща машина" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "руска — остаряла" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "руска — за пишеща машина, остаряла" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "татарска" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "осетинска — остаряла" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "осетинска — с клавиши на Windows" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "чувашка" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "чувашка — латиница" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "удмуртска" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "комска" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "якутска" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "калмикска" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "руска — DOS" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "руска — за Макинтош" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "сръбска — руска" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "башкирска" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "марийска" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "сръбска" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "сръбска — кирилица с разменени „З“ и „Ж“" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "сръбска — латиница" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "сръбска — латиница за Уникод" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "сръбска — латиница, qwerty" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "сръбска — латиница за Уникод, qwerty" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "сръбска — кирилица с „«»“" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "сръбска — латиница с „«»“" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "панонска русинска — еднозвучна" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "панонска русинска" # словенска #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "Слн" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "словенска" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "словенска — с „«»“" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "словенска — американска със словенски букви" # славашка #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "Слш" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "словашка" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "словашка — с „\\“" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "словашка — qwerty" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "словашка — qwerty, с „\\“" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "испанска" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "испанска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "испанска — с „мъртва“ тилда" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "испанска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "испанска — Дворак" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "астурска — испанска с „Ḥ“ и „Ḷ“" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "каталунска — испанска с „Ŀ“" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "испанска — за Макинтош" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "Швд" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "шведска" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "шведска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "шведска — Дворак" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "руска — шведска, фонетична" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "руска — шведска, фонетична, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "северносамска — шведска" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "шведска — за Макинтош" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "шведска — шведски Дворак" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "шведска — жестомимична" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "немска — швейцарска" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "немска — швейцарска, остаряла" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "немска — швейцарска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "немска — швейцарска, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "френска — швейцарска" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "френска — швейцарска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "френска — швейцарска, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "френска — швейцарска, за Макинтош" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "немска — швейцарска, за Макинтош" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "арабска — сирийска" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "Срк" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "сириакска" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "сириакска — фонетична" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "кюрдска — сирийска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "кюрдска — сирийска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "кюрдска — сирийска, латиница, „Q“ горе-вляво, алтернативна" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "Тдж" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "таджикска" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "таджикска — остаряла" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "Снх" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "синхала — фонетична" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "тамилска — шриланкска, Уникод" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "тамилска — шриланкска, за пишеща машина, кодиране TAB" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "Тск" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "тайландска" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "тайландска — TIS-820.2538" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "тайландска — патачотска" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "Трс" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "турска" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "турска — „F“ горе-вляво" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "турска — „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "турска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "кюрдска — турска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "кюрдска — турска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "кюрдска — турска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "турска — международна, с „мъртви“ клавиши" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "Ттр" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "кримски татарски — турска, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "кримски татарски — турска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "кримски татарски — турска, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "тайванска" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "тайванска — туземна" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "Сст" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "сайсиятска — тайванска" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "Укр" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "украинска" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "украинска — фонетична" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "украинска — за пишеща машина" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "украинска — с клавиши на Windows" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "украинска — остаряла" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "украинска — републикански стандарт" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "руска — украинска, републикански стандарт" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "украинска — еднозвучна, алтернативна" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "английска — великобританска" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "английска — великобританска, разширена, с клавиши на Windows" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "английска — великобританска, международна, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "английска — великобританска, Дворак" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "английска — великобританска, с пунктуация на Обединеното кралство, Дворак" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "английска — великобританска, за Макинтош" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "английска — великобританска, за Макинтош, международна" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "английска — великобританска, Коулмак" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "узбекска" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "узбекска — латиница" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "Втн" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "виетнамска" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "Крс" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "корейска" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "корейска — съвместима със 101/104 клавиша" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "японска — серии PC-98xx" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "Ирл" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "ирландска" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "келтска латиница" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "ирландска — експертна за Уникод" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "огамска" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "огамска — IS434" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "урду — пакистанска" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "урду — пакистанска, CRULP" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "урду — пакистанска, NLA" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "арабска — пакистанска" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "Снд" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "синдхи" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "Две" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "дивеи" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "английска — южноафриканска" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "Есп" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "есперантска" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "есперантска — разменени „;“ и „\"“, остаряла" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "Нпл" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "непалска" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "английска — нигерийска" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "Игб" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "игбо" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "Йрб" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "йоруба" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "Амх" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "амхарска" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "Улф" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Уолоф" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "Брл" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "брайл" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "брайл за левичари" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "брайл за десничари" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "Трк" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "тюркменска" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "тюркменска — „Q“ горе-вляво, алтернативна" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "Бмб" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "бамбарска" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "френска — малийска, алтернативна" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "английска — малийска, американска за Макинтош" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "английска — малийска, американска международна" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "Схл" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "суахили — танзанийска" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "суахили — кенийска" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "кикуйска" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "Тсн" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "тсуанска" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "Флп" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "филипинска" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "филипинска — QWERTY за байбаин" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "филипинска — Дворак на Кейпуел за латиница" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "филипинска — Дворак на Кейпуел за байбаин" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "филипинска — QWERF 2006 на Кейпуел за латиница" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "филипинска — QWERF 2006 на Кейпуел за байбаин" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "филипинска — Коулмак за латиница" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "филипинска — Коулмак за байбаин" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "филипинска — Дворак за латиница" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "филипинска — Дворак за байбаин" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "Млд" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "молдовска" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "Ггз" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "молдовска — гагаузка" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Клавиш(и) за смяна на подредбата" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Десният Alt (докато е натиснат)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Левият Alt (докато е натиснат)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Левият Win (докато е натиснат)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Десният Win (докато е натиснат)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Всеки Win (докато е натиснат)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Десният Ctrl (докато е натиснат)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Десният Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Левият Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (към първата подредба), Shift+Caps Lock (към последната)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Левият Win (към първата подредба), десният Win/Menu (към последната)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Левият Ctrl (към първата подредба), десният Ctrl (към последната)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Двата Shift-а заедно" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Двата Alt-а заедно" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Двата Ctrl-а заедно" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Левият Ctrl+левият Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Десният Ctrl+десният Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Левият Alt+левият Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Space" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Левият Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Десният Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Левият Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Десният Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Левият Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Десният Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Левият Ctrl+левият Win (към първата подредба), десният Ctrl+Menu (към последната)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавиш за избор третото ниво" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Всеки Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Всеки Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Десният Alt, Shift+десният Alt са Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Десният Alt никога не избира третото ниво" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровата клавиатура" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Обратно наклонена черта" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "„<>“" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Обратно наклонената черта избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "„<>“ избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Положение на Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock е Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Левият Ctrl е Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Размяна на Ctrl и Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Вляво от „A“" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Долу вляво" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Десният Ctrl е десен Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu е десният Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Десният Alt е десен Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Размяна на левия Alt с левия Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Размяна на левия Win с левия Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Левият Alt е Ctrl, левият Ctrl е Win, левият Win е Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Индикация чрез клавиатурен светодиод за смяна на подредбата" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Подредба на цифровата клавиатура" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "остаряла" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Допълненията от Уникод (стрелки и математически операции)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Допълненията от Уникод (стрелки и математически операции, операциите са на стандартното ниво)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Остаряла Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Цифрова клавиатура — Wang 724, с допълненията от Уникод (стрелки и математически операции)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Цифрова клавиатура Wang 724, с допълненията от Уникод (стрелки и математически операции, операциите са на стандартното ниво)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "шестнадесетична" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Като банкомат/телефон" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Поведение на клавиша за триене на цифровата клавиатура" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Остарял клавиш с десетична точка" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Остарял клавиш с десетична запетая" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Клавиш на четири нива с десетична точка" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Клавиш на четири нива с десетична точка, само латиница по Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Клавиш на четири нива с десетична запетая" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Клавиш на четири нива с абстрактни разделители" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "„;“ на третото ниво" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведение на Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock използва вътрешна промяна на регистъра. Shift временно спира Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock използва вътрешна промяна на регистъра. Shift не влияе на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock работи като Shift със заключване. Shift временно спира Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock сменя състоянието Shift само на буквените клавиши" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Caps Lock е допълнителен Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Размяна на Esc и Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Caps Lock е допълнителен Esc" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Caps Lock е допълнителен Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Caps Lock е допълнителен Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Caps Lock е допълнителен Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock сменя състоянието Shift (за всички клавиши)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock е изключен" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Caps Lock е допълнителен Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведение на Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Добавяне на стандартното поведение на Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt-овете отговарят на Meta и на Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "И двата Win-а са Alt (както и клавишите Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "И двата Win-а са Control (както и клавишите Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "И двата Alt-а са Control, Win е Alt" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "И двата Win-а са Meta" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Левият Win е Meta" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "И двата Win-а са Hyper" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Десният Win е Alt, а Menu — Super" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt е разменен с Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Положение на Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Левият Win на 3-то ниво" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Десният Win на 3-то ниво" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Menu на 3-то ниво" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Левият Ctrl на 3-то ниво" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Десният Ctrl на 3-то ниво" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Caps Lock на 3-то ниво" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "„<>“ на 3-то ниво" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Разни настройки за съвместимост" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Стандартни клавиши на цифровата клавиатура" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Цифровата клавиатура генерира само цифри (като в Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift за цифровата клавиатура както в MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не отменя Caps Lock, а избира третото ниво" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Специалните комбинации (Ctrl+Alt+<клавиш>) се обработват от сървъра" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple Aluminium Keyboard — симулиране на клавиши за PC (Print, Scroll Lock, Pause, Num Lock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift отменя Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Допълнителни типографски знаци" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Двата Shift-а заедно превключват Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Двата Shift-а заедно включват Caps Lock, самостоятелен Shift го изключва" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Двата Shift-а заедно превключват ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift+Num Lock превключват клавишите за придвижване" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Позволяване на клавиатурно прекъсване на прихващането на устройствата (внимание: позволяването намалява сигурността)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Журнални съобщения за дървото и прихващането на прозорците" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Добавяне на знак за валута към някои клавиши" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "„€“ при „E“" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "„€“ при „2“" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "„€“ при „4“" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "„€“ при „5“" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "„₨“ при „4“" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавиш за избор петото ниво" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "„<>“ избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Десният Alt избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Левият Win избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Десният Win избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Генериране на интервал без разделяне с клавишa за интервал" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Нормален интервал на всички нива" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Интервал без разделяне на второ ниво" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Интервал без разделяне на трето ниво" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Интервал без разделяне на трето ниво и нищо на четвърто ниво" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Интервал без разделяне на трето ниво и тесен интервал без разделяне на четвърто ниво" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Интервал без разделяне на четвърто ниво" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Интервал без разделяне на четвърто ниво и тесен интервал без разделяне на шесто ниво" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Разделител с нулева широчина на второ ниво" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Разделител с нулева широчина на второ ниво и съединител с нулева широчина на трето ниво" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Разделител с нулева широчина на второ ниво и интервал без разделяне на трето ниво" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Разделител с нулева широчина на трето ниво и съединител с нулева широчина на четвърто ниво" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Настройки за японска клавиатура" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Клавишът Lock на кана заключва" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace на мястото определено от подредбата NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "„全角/半角“ (Zenkaku Hankaku) е допълнителен Esc" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Добавяне на ударенията на Esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "към съответния клавиш Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "към съответния клавиш в Дворак" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "към съответния клавиш в Коулмак" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Съвместимост със старите кодове на клавиши в Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Съвместимост с клавишите на Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Клавишна комбинация за убиването на X сървъра" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Control+Alt+Backspace" @@ -4067,146 +4089,150 @@ msgstr "селиш на кор дален" msgid "English (US, Sun Type 6/7)" msgstr "английска — американска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "английска — Норман" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "полска — международна, с „мъртви“ клавиши" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "полска — Коулмак" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "полска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "кримски татарски — „Q“ горе-вляво, Добруджа-Q" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "румънска — ергономична, десетопръстна" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "румънска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "сръбска — комбиниращи ударения вместо „мъртви“ клавиши" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "руска — с украинско-белоруска подредба" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "руска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "арменска — фонетична, OLPC" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "иврит — библейска, Сил, фонетична" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "арабска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "белгийска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "португалска — бразилска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "чешка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "датска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "холандска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "естонска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "финландска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "френска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "гръцка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "италианска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "японска — на Sun, вид 6" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "японска — на Sun, вид 7, съвместима с PC" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "японска — на Sun, вид 7, съвместима със Sun" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "норвежка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "португалска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "словашка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "испанска — с „мъртви“ клавиши на Sun" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "шведска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "немска — швейцарска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "френска — швейцарска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "турска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "украинска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "английска — великобританска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "корейска — на Sun, вид 6/7" diff --git a/xorg-server/xkeyboard-config/po/ca.po b/xorg-server/xkeyboard-config/po/ca.po index 81f4f84e2..c654458cd 100644 --- a/xorg-server/xkeyboard-config/po/ca.po +++ b/xorg-server/xkeyboard-config/po/ca.po @@ -2,13 +2,13 @@ # Copyright © 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # -# Josep Ma. Ferrer , 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Josep Ma. Ferrer , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 17:58+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 22:38+0100\n" "Last-Translator: Josep Ma. Ferrer \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -817,7 +817,7 @@ msgid "English (programmer Dvorak)" msgstr "Anglès (dvorak de programador)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -889,11 +889,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbec (Afganistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Àrab" @@ -931,11 +931,11 @@ msgid "Albanian" msgstr "Albanès" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeni" @@ -1011,11 +1011,11 @@ msgid "Belarusian (Latin)" msgstr "Bielorús (llatí)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1047,17 +1047,17 @@ msgstr "Belga (tecles mortes de Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengalí" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalí (Probhat)" #. Keyboard indicator for Indian layouts @@ -1070,27 +1070,27 @@ msgid "Indian" msgstr "Indi" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalí (Índia)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalí (Índia, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalí (Índia, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalí (Índia, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalí (Índia, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalí (Índia, Inscript Baishakhi)" #. Keyboard indicator for Gujarati layouts @@ -1274,11 +1274,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnià (teclat EUA amb lletres bosnianes)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portuguès (Brasil)" @@ -1291,16 +1291,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portuguès (Brasil, dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portuguès (Brasil, natiu)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portuguès (Brasil, natiu per als teclats EUA)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portuguès (Brasil, natiu per a l'esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Portugal, natiu)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1454,2463 +1454,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetà (amb nombres ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croat" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croat (usa cometes angulars per les cometes)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croat (usa dígrafs croats)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croat (teclat EUA amb dígrafs croats)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croat (teclat EUA amb lletres croates)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Txec" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Txec (amb la tecla <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Txec (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Txec (qwerty, barra inversa ampliada)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Txec (disposició UCW, només lletres accentuades)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Txec (dvorak EUA que permet UCW CZ)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Danès" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Danès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Danès (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Danès (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Danès (dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holandès" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holandès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holandès (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holandès (estàndard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estonià" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estonià (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estonià (dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estonià (teclat EUA amb lletres estonianes)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (amb teclat persa)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurd (Iran, llatí Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurd (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurd (Iran, llatí Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurd (Iran, àrab-llatí)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraquià" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurd (Iraq, llatí Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurd (Iraq, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurd (Iraq, llatí Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurd (Iraq, àrab-llatí)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feroès" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroès (elimina les tecles mortes)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finès" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finès (clàssic)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finès (clàssic, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Sami Nord (Finlàndia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finès (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francès" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francès (alternatiu)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francès (alternatiu, només llatí-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francès (alternatiu, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francès (alternatiu, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francès (antic, alternatiu)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francès (antic, alternatiu, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francès (antic, alternatiu, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francès (Bepo, ergonòmic, tipus dvorak)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francès (Bepo, ergonòmic, tipus dvorak, només llatí-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francès (dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francès (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francès (Bretó)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occità" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgià (França, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Anglès (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Anglès (Ghana, multilingüe)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Anglès (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francès (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgià" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgià (ergonòmic)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgià (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rus (Geòrgia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osset (Geòrgia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Alemany" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Alemany (accent mort)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Alemany (accent greu mort)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Alemany (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Alemany (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Romanès (Alemanya)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Romanès (Alemanya, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Alemany (dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Alemany (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Alemany (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Alemany (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Alemany (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Baix sòrab" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Baix sòrab (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Alemany (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rus (alemany, fonètic)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Alemany (antic)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grec" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grec (senzill)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grec (ampliat)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grec (politònic)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongarès" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongarès (estàndard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongarès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongarès (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongarès (101/qwertz/coma/tecles mortes)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongarès (101/qwertz/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongarès (101/qwertz/punt/tecles mortes)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongarès (101/qwertz/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongarès (101/qwerty/coma/tecles mortes)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongarès (101/qwerty/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongarès (101/qwerty/punt/tecles mortes)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongarès (101/qwerty/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongarès (102/qwertz/coma/tecles mortes)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongarès (102/qwertz/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongarès (102/qwertz/punt/tecles mortes)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongarès (102/qwertz/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongarès (102/qwerty/coma/tecles mortes)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongarès (102/qwerty/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongarès (102/qwerty/punt/tecles mortes)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandès" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandès (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandès (dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebreu" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebreu (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebreu (fonètic)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebreu (bíblic, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italià" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italià (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italià (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italià (teclat EUA amb lletres italianes)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgià (Itàlia)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italià (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonès" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonès (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonès (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonès (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonès (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonès (dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirguís" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirguís (fonètic)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambotja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazakh" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rus (Kazakhstan amb Kazakh)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazakh (amb rus)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laosià" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laosià (disposició estàndard proposada per STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espanyol (llatinoamericà)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espanyol (llatinoamericà, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espanyol (llatinoamericà, inclou la titlla morta)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Espanyol (llatinoamericà, tecles mortes de Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituà" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituà (estàndard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituà (teclat EUA amb lletres lituanes)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituà (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituà (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituà (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letó" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letó (variant amb apòstrof)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letó (variant titlla)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letó (variant F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letó (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letó (ergonòmic, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letó (adaptat)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrí" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrí (ciríl·lic)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrí (ciríl·lic, Z i ZHE intercanviades)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrí (llatí Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrí (llatí qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrí (llatí Unicode qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrí (ciríl·lic amb cometes angulars)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrí (llatí amb cometes angulars)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedoni" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoni (elimina les tecles mortes)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltès" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltès (amb disposició EUA)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Noruec" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Noruec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Noruec (dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Sami Nord (Noruega)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Sami Nord (Noruega, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Noruec (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Noruec (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Noruec (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonès" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonès (antic)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonès (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polonès (dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonès (dvorak, cometes poloneses a la tecla cometes)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polonès (dvorak, cometes poloneses a la tecla 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Caixubi" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rus (Polònia, fonètic dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonès (dvorak de programador)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portuguès" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portuguès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portuguès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portuguès (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portuguès (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portuguès (Macintosh, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portuguès (natiu)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portuguès (natiu per als teclats EUA)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, natiu)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Romanès" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Romanès (ce trencada)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Romanès (estàndard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Romanès (ce trencada estàndard)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Romanès (tecles Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rus" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rus (fonètic)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rus (fonètic tecles Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rus (màquina d'escriure)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rus (antic)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rus (màquina d'escriure, antic)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tàtar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osset (antic)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osset (tecles Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Chuvash (llatí)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Iacut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Calmuc" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rus (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rus (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbi (Rússia)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baixkir" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbi" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbi (ciríl·lic, Z i ZHE intercanviades)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbi (llatí)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbi (llatí Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbi (llatí qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbi (llatí Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbi (ciríl·lic amb cometes angulars)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbi (llatí amb cometes angulars)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Rutè Pannònic (homofònic)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Rutè Pannònic" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Eslovè" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Eslovè (usa cometes angulars per les cometes)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Eslovè (teclat EUA amb lletres eslovenes)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovac" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovac (barra inversa ampliada)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslovac (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovac (qwerty, barra inversa ampliada)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espanyol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espanyol (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espanyol (inclou la titlla morta)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espanyol (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espanyol (dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 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:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Català (Espanya, L amb punt volat)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espanyol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suec" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Suec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Suec (dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rus (Suècia, fonètic)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rus (Suècia, fonètic, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Sami del nord (Suècia)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Suec (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Suec (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Idioma de signes suec" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Alemany (Suïssa)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Alemany (Suïssa, antic)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Alemany (Suïssa, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Alemany (Suïssa, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francès (Suïssa)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francès (Suïssa, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francès (Suïssa, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francès (Suïssa, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Alemany (Suïssa, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Àrab (Síria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Siri" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Siríac (fonètic)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurd (Síria, llatí Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurd (Síria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurd (Síria, llatí Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjik (antic)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalès (fonètic)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tàmil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 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:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tai (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turc" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turc (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turc (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turc (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurd (Turquia, llatí Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurd (Turquia, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurd (Turquia, llatí Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turc (internacional amb tecles mortes)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Tàtar de Crimea (Turc Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Tàtar de Crimea (Turc F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Tàtar de Crimea (Turc Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanès" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanès (indígena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ucraïnès" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ucraïnès (fonètic)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ucraïnès (màquina d'escriure)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ucraïnès (tecles Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ucraïnès (antic)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ucraïnès (estàndard RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rus (Ucraïna, estàndard RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ucraïnès (homofònic)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Anglès (RU)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Anglès (RU, tecles Win ampliades)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Anglès (RU, internacional amb tecles mortes)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Anglès (RU, dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Anglès (RU, dvorak amb puntuació RU)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Anglès (RU, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Anglès (RU, Macintosh internacional)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Anglès (RU, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbec" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbec (llatí)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamita" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coreà" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coreà (compatible de 101/104 tecles)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonès (sèries PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandès" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandès (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdú (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdú (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdú (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Àrab (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Diveí" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Anglès (Sud-àfrica)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 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:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalès" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Anglès (Nigèria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Ioruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhàric" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (ma esquerra)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (ma dretà)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turcman" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turcman (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francès (Mali, alternatiu)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Anglès (Mali, Macintosh EUA)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Anglès (Mali, internacional EUA)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suahili (Tanzània)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suahili (Kenya)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipí" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipí (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipí (Capewell-dvorak llatí)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipí (Capewell-dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipí (Capewell-QWERF 2006 llatí)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipí (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipí (Colemak llatí)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipí (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipí (dvorak llatí)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipí (dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldau" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldau (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Canvi a una altra disposició" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt esquerra (mentre està premuda)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Win esquerra (mentre està premuda)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Win dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Qualsevol tecla Win (mentre estan premudes)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt dreta" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt esquerra" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Bloq Majús" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Maj+Bloq Maj" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Bloq Maj" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Les dues tecles Maj juntes" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Les dues tecles Alt juntes" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Les dues tecles Ctrl juntes" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Maj" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl esquerra+Maj esquerra" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl dreta+Maj dreta" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Maj" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt esquerra+Maj esquerra" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espai" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menú" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Win esquerra" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Win dreta" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maj esquerra" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Maj dreta" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl esquerra" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl dreta" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Bloq Despl" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tecla per a seleccionar el 3r nivell" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Qualsevol tecla Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Qualsevol tecla Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt dreta, Maj+Alt dreta és la «Compose»" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "La tecla Alt dreta mai selecciona el 3r nivell" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Retorn en el teclat numèric" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barra inversa" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Més petit/Més gran>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Més petit/Més gran> selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Posició de la tecla Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Bloq Majús com a Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl esquerra com a Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Intercanvia Ctrl i Bloq Maj" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "A l'esquerra d'«A»" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "A baix esquerra" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl dreta com a Alt dreta" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menú com a Ctrl dreta" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt dreta com a Ctrl dreta" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Intercanvia la tecla Alt esquerra per la tecla Ctrl esquerra" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Intercanvia la tecla Win esquerra per la tecla Ctrl esquerra" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt esquerra com a Ctrl, Ctrl esquerra com a Win, Win esquerra com a Alt" + +#: ../rules/base.xml.in.h:943 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:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Bloq Núm" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposició del teclat numèric" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Antic" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Addicions Unicode (fletxes i operadors matemàtics)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 antic" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Estil ATM/telèfon" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Comportament de la tecla de supressió del teclat numèric" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Tecla antiga amb punt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Tecla antiga amb coma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Tecla de quatre nivells amb punt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Tecla de quatre nivells amb punt, només llatí-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Tecla de quatre nivells amb coma" # Què collons és momayyez? jm -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Tecla de quatre nivells amb separadors abstractes" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Punt i coma al tercer nivell" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportament de la tecla Bloq Maj" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 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:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Converteix Bloq Maj en un Bloq Núm addicional" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Intercanvia Esc i Bloq Maj" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Converteix Bloq Maj en un Esc addicional" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Converteix Bloq Maj en un Retrocés addicional" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Converteix Bloq Maj en un Super addicional" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Converteix Bloq Maj en un Hyper addicional" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Bloq Maj commuta Maj (afecta a totes les tecles)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Bloq Maj està deshabilitat" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Converteix Bloq Maj en un Ctrl addicional" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportament de la tecla Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Afegeix el comportament estàndard a la tecla Menú" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt i Meta són a les tecles Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl s'assigna a les tecles Win (i a les tecles Ctrl habituals)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl s'assigna a les tecles Alt, Alt s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta s'assigna a la tecla Win esquerra" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 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:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt està intercanviada amb la tecla Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Posició de la tecla «Compose»" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3r nivell de Win esquerra" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3r nivell de Win dreta" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3r nivell de Menú" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3r nivell de Ctrl esquerra" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3r nivell de Ctrl dreta" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3r nivell de Bloq Maj" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3r nivell de <Més petit/Més gran>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pausa" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "ImprPant" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Opcions de compatibilitat diverses" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Tecles del teclat numèric per defecte" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Tecles especials (Ctrl+Alt+<tecla>) gestionades en un servidor" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Maj cancel·la Bloq Maj" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Habilita els caràcters tipogràfics extres" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Les dues tecles Maj juntes commuten Bloq Maj" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 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:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Les dues tecles Maj juntes commuten Bloq Maj" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Maj + BloqNúm commuta les tecles de cursor" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 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:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permetre l'enregistrament de captura i de l'arbre de finestres" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "S'afegeix el signe de moneda a certes tecles" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro en la E " -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro en el 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro en el 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro en el 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia en el 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tecla per a seleccionar el 5è nivell" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Més petit/Més gran> selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Espai normal en qualsevol nivell" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 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:1026 +#: ../rules/base.xml.in.h:1031 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:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Caràcter d'espai sense salt al nivell quart" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Caràcter separador d'amplada zero al nivell segon" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Opcions del teclat japonès" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "La tecla de bloqueig Kana està blocant" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Retrocés estil NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Converteix Zenkaku Hankaku en un Esc addicional" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "S'afegeix les lletres amb diacrític l'esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "A la tecla corresponent en una disposició qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "A la tecla corresponent en una disposició dvorak" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "A la tecla corresponent en una disposició Coleman" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 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:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilitat amb les tecles Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Seqüència de tecles per a matar el servidor X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Retrocés" @@ -4022,150 +4042,160 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Anglès (EUA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Anglès (Normand)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonès (internacional amb tecles mortes)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonès (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tàtar de Crimea (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Romanès (ergonòmic Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Romanès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbi (combinació d'accents en lloc de tecles mortes)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rus (amb disposició ucraïnesa-bielorussa)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rus (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeni (fonètic OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebreu (bíblic, SIL fonètic)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Àrab (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portuguès (Brasil, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Txec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Danès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holandès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estonià (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italià (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonès (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonès (Sun Type 7 - Compatible PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonès (Sun Type 7 - Compatible Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Noruec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portuguès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Eslovac (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espanyol (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Suec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Alemany (Suïssa, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francès (Suïssa, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turc (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ucraïnès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Anglès (RU, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coreà (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengalí" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portuguès (Brasil, natiu per a l'esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Anglès (commutació de disposició en la tecla de multiplicació/divisió)" @@ -4436,9 +4466,6 @@ msgstr "Coreà (Sun Type 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladesh" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/da.po b/xorg-server/xkeyboard-config/po/da.po index 67053c6c9..ec2dbd4d5 100644 --- a/xorg-server/xkeyboard-config/po/da.po +++ b/xorg-server/xkeyboard-config/po/da.po @@ -31,10 +31,10 @@ # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.8.99\n" +"Project-Id-Version: xkeyboard-config-2.10.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-19 23:06+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-18 23:06+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -842,7 +842,7 @@ msgid "English (programmer Dvorak)" msgstr "Engelsk (programmørdvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -859,8 +859,8 @@ msgid "English (international AltGr dead keys)" msgstr "Engelsk (international AltGr døde taster)" #: ../rules/base.xml.in.h:207 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Engelsk (skift layout på gange-/divideretast)" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Engelsk (divison og gange-tasterne skifter layout)" #: ../rules/base.xml.in.h:208 msgid "Serbo-Croatian (US)" @@ -914,11 +914,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbekisk (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisk" @@ -956,11 +956,11 @@ msgid "Albanian" msgstr "Albansk" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armensk" @@ -994,166 +994,166 @@ msgid "German (Austria)" msgstr "Tysk (Østrig)" #: ../rules/base.xml.in.h:246 -msgid "German (legacy)" -msgstr "Tysk (forældet)" - -#: ../rules/base.xml.in.h:247 msgid "German (Austria, eliminate dead keys)" msgstr "Tysk (Østrig, slå døde taster fra)" -#: ../rules/base.xml.in.h:248 +#: ../rules/base.xml.in.h:247 msgid "German (Austria, Sun dead keys)" msgstr "Tysk (Østrig, Sun døde taster)" -#: ../rules/base.xml.in.h:249 +#: ../rules/base.xml.in.h:248 msgid "German (Austria, Macintosh)" msgstr "Tysk (Østrig, Macintosh)" #. Keyboard indicator for Azerbaijani layouts -#: ../rules/base.xml.in.h:251 +#: ../rules/base.xml.in.h:250 msgid "az" msgstr "az" -#: ../rules/base.xml.in.h:252 +#: ../rules/base.xml.in.h:251 msgid "Azerbaijani" msgstr "Aserbajdsjansk" -#: ../rules/base.xml.in.h:253 +#: ../rules/base.xml.in.h:252 msgid "Azerbaijani (Cyrillic)" msgstr "Aserbajdsjansk (kyrillisk)" #. Keyboard indicator for Belarusian layouts -#: ../rules/base.xml.in.h:255 +#: ../rules/base.xml.in.h:254 msgid "by" msgstr "by" -#: ../rules/base.xml.in.h:256 +#: ../rules/base.xml.in.h:255 msgid "Belarusian" msgstr "Hviderussisk" -#: ../rules/base.xml.in.h:257 +#: ../rules/base.xml.in.h:256 msgid "Belarusian (legacy)" msgstr "Hviderussisk (forældet)" -#: ../rules/base.xml.in.h:258 +#: ../rules/base.xml.in.h:257 msgid "Belarusian (Latin)" msgstr "Hviderussisk (latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisk" -#: ../rules/base.xml.in.h:262 +#: ../rules/base.xml.in.h:261 msgid "Belgian (alternative)" msgstr "Belgisk (alternativ)" -#: ../rules/base.xml.in.h:263 -msgid "Belgian (alternative, latin-9 only)" +#: ../rules/base.xml.in.h:262 +msgid "Belgian (alternative, Latin-9 only)" msgstr "Belgisk (alternativ, kun latin-9)" -#: ../rules/base.xml.in.h:264 +#: ../rules/base.xml.in.h:263 msgid "Belgian (alternative, Sun dead keys)" msgstr "Belgisk (alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:265 +#: ../rules/base.xml.in.h:264 msgid "Belgian (ISO alternate)" msgstr "Belgisk (ISO-alternativ)" -#: ../rules/base.xml.in.h:266 +#: ../rules/base.xml.in.h:265 msgid "Belgian (eliminate dead keys)" msgstr "Belgisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:267 +#: ../rules/base.xml.in.h:266 msgid "Belgian (Sun dead keys)" msgstr "Belgisk (Sun døde taster)" -#: ../rules/base.xml.in.h:268 +#: ../rules/base.xml.in.h:267 msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisk (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts -#: ../rules/base.xml.in.h:270 +#. Keyboard indicator for Bangla layouts +#: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" -#: ../rules/base.xml.in.h:271 -msgid "Bengali" +#: ../rules/base.xml.in.h:270 +msgid "Bangla" msgstr "Bengali" -#: ../rules/base.xml.in.h:272 -msgid "Bengali (Probhat)" +#: ../rules/base.xml.in.h:271 +msgid "Bangla (Probhat)" msgstr "Bengali (probhat)" #. Keyboard indicator for Indian layouts -#: ../rules/base.xml.in.h:274 +#: ../rules/base.xml.in.h:273 msgid "in" msgstr "in" -#: ../rules/base.xml.in.h:275 +#: ../rules/base.xml.in.h:274 msgid "Indian" msgstr "Indisk" -#: ../rules/base.xml.in.h:276 -msgid "Bengali (India)" +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" msgstr "Bengali (Indien)" -#: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Probhat)" +#: ../rules/base.xml.in.h:276 +msgid "Bangla (India, Probhat)" msgstr "Bengali (Indien, probhat)" -#: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Baishakhi)" +#: ../rules/base.xml.in.h:277 +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Indien, baishakhi)" -#: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Bornona)" +#: ../rules/base.xml.in.h:278 +msgid "Bangla (India, Bornona)" msgstr "Bengali (Indien, bornona)" -#: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Uni Gitanjali)" +#: ../rules/base.xml.in.h:279 +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Indien, uni gitanjali)" # http://en.wikipedia.org/wiki/InScript_keyboard -#: ../rules/base.xml.in.h:281 -msgid "Bengali (India, Baishakhi Inscript)" +#: ../rules/base.xml.in.h:280 +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Indien, baishakhi inscript)" #. Keyboard indicator for Gujarati layouts -#: ../rules/base.xml.in.h:283 +#: ../rules/base.xml.in.h:282 msgid "gu" msgstr "gu" -#: ../rules/base.xml.in.h:284 +#: ../rules/base.xml.in.h:283 msgid "Gujarati" msgstr "Gujarati" #. Keyboard indicator for Punjabi layouts -#: ../rules/base.xml.in.h:286 +#: ../rules/base.xml.in.h:285 msgid "pa" msgstr "pa" -#: ../rules/base.xml.in.h:287 +#: ../rules/base.xml.in.h:286 msgid "Punjabi (Gurmukhi)" msgstr "Punjabi (Gurmukhi)" -#: ../rules/base.xml.in.h:288 +#: ../rules/base.xml.in.h:287 msgid "Punjabi (Gurmukhi Jhelum)" msgstr "Punjabi (Gurmukhi Jhelum)" #. Keyboard indicator for Kannada layouts -#: ../rules/base.xml.in.h:290 +#: ../rules/base.xml.in.h:289 msgid "kn" msgstr "kn" -#: ../rules/base.xml.in.h:291 +#: ../rules/base.xml.in.h:290 msgid "Kannada" msgstr "Kannada" +#: ../rules/base.xml.in.h:291 +msgid "Kannada (KaGaPa phonetic)" +msgstr "Kannada (KaGaPa fonetisk)" + #. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 msgid "ml" @@ -1214,1445 +1214,1479 @@ msgstr "te" msgid "Telugu" msgstr "Telugu" +#: ../rules/base.xml.in.h:310 +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (KaGaPa fonetisk)" + #. Keyboard indicator for Urdu layouts -#: ../rules/base.xml.in.h:311 +#: ../rules/base.xml.in.h:312 msgid "ur" msgstr "ur" -#: ../rules/base.xml.in.h:312 +#: ../rules/base.xml.in.h:313 msgid "Urdu (phonetic)" msgstr "Urdu (fonetisk)" -#: ../rules/base.xml.in.h:313 +#: ../rules/base.xml.in.h:314 msgid "Urdu (alternative phonetic)" msgstr "Urdu (alternativ fonetisk)" -#: ../rules/base.xml.in.h:314 +#: ../rules/base.xml.in.h:315 msgid "Urdu (WinKeys)" msgstr "Urdu (Win-taster)" #. Keyboard indicator for Hindi layouts -#: ../rules/base.xml.in.h:316 +#: ../rules/base.xml.in.h:317 msgid "hi" msgstr "hi" -#: ../rules/base.xml.in.h:317 +#: ../rules/base.xml.in.h:318 msgid "Hindi (Bolnagri)" msgstr "Hindi (bolnagri)" -#: ../rules/base.xml.in.h:318 +#: ../rules/base.xml.in.h:319 msgid "Hindi (Wx)" msgstr "Hindi (wx)" -#: ../rules/base.xml.in.h:319 +#: ../rules/base.xml.in.h:320 +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (KaGaPa fonetisk)" + +#. Keyboard indicator for Sanskrit layouts +#: ../rules/base.xml.in.h:322 +msgid "sa" +msgstr "sa" + +#: ../rules/base.xml.in.h:323 +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sanskrit (KaGaPa fonetisk)" + +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" + +#: ../rules/base.xml.in.h:326 +msgid "Marathi (KaGaPa phonetic)" +msgstr "Marathi (KaGaPa fonetisk)" + +#: ../rules/base.xml.in.h:327 msgid "English (India, with RupeeSign)" msgstr "Engelsk (Indien, med rupeetegn)" #. Keyboard indicator for Bosnian layouts -#: ../rules/base.xml.in.h:321 +#: ../rules/base.xml.in.h:329 msgid "bs" msgstr "bs" -#: ../rules/base.xml.in.h:322 +#: ../rules/base.xml.in.h:330 msgid "Bosnian" msgstr "Bosnisk" -#: ../rules/base.xml.in.h:323 +#: ../rules/base.xml.in.h:331 msgid "Bosnian (use guillemets for quotes)" msgstr "Bosnisk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:324 +#: ../rules/base.xml.in.h:332 msgid "Bosnian (use Bosnian digraphs)" msgstr "Bosnisk (anvend bosniske digrafer)" -#: ../rules/base.xml.in.h:325 +#: ../rules/base.xml.in.h:333 msgid "Bosnian (US keyboard with Bosnian digraphs)" msgstr "Bosnisk (US-tastatur med bosniske digrafer)" -#: ../rules/base.xml.in.h:326 +#: ../rules/base.xml.in.h:334 msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisk (US-tastatur med bosniske bogstaver)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:328 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:329 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugisisk (brasiliansk)" -#: ../rules/base.xml.in.h:330 +#: ../rules/base.xml.in.h:338 msgid "Portuguese (Brazil, eliminate dead keys)" msgstr "Portugisisk (brasiliansk, slå døde taster fra)" -#: ../rules/base.xml.in.h:331 +#: ../rules/base.xml.in.h:339 msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugisisk (brasiliansk, dvorak)" -#: ../rules/base.xml.in.h:332 -msgid "Portuguese (Brazil, nativo)" +#: ../rules/base.xml.in.h:340 +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugisisk (brasiliansk, nativo)" -#: ../rules/base.xml.in.h:333 -msgid "Portuguese (Brazil, nativo for USA keyboards)" +#: ../rules/base.xml.in.h:341 +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugisisk (brasiliansk, nativo for USA-tastaturer)" -#: ../rules/base.xml.in.h:334 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugisisk (brasiliansk, nativo for esperanto)" +#: ../rules/base.xml.in.h:342 +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (brasiliansk, nativo)" #. Keyboard indicator for Bulgarian layouts -#: ../rules/base.xml.in.h:336 +#: ../rules/base.xml.in.h:344 msgid "bg" msgstr "bg" -#: ../rules/base.xml.in.h:337 +#: ../rules/base.xml.in.h:345 msgid "Bulgarian" msgstr "Bulgarsk" -#: ../rules/base.xml.in.h:338 +#: ../rules/base.xml.in.h:346 msgid "Bulgarian (traditional phonetic)" msgstr "Bulgarsk (traditionel fonetisk)" -#: ../rules/base.xml.in.h:339 +#: ../rules/base.xml.in.h:347 msgid "Bulgarian (new phonetic)" msgstr "Bulgarsk (ny fonetisk)" -#: ../rules/base.xml.in.h:340 +#: ../rules/base.xml.in.h:348 msgid "Arabic (Morocco)" msgstr "Arabisk (Marokko)" #. Keyboard indicator for French layouts -#: ../rules/base.xml.in.h:342 ../rules/base.extras.xml.in.h:3 +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 msgid "fr" msgstr "fr" -#: ../rules/base.xml.in.h:343 +#: ../rules/base.xml.in.h:351 msgid "French (Morocco)" msgstr "Fransk (Marokko)" #. Keyboard indicator for Berber layouts -#: ../rules/base.xml.in.h:345 +#: ../rules/base.xml.in.h:353 msgid "ber" msgstr "ber" -#: ../rules/base.xml.in.h:346 +#: ../rules/base.xml.in.h:354 msgid "Berber (Morocco, Tifinagh)" msgstr "Berbisk (Marokko, Tifinagh)" -#: ../rules/base.xml.in.h:347 +#: ../rules/base.xml.in.h:355 msgid "Berber (Morocco, Tifinagh alternative)" msgstr "Berbisk (Marokko, Tifinagh alternativ)" # http://retskrivningsordbogen.dk/ro/ro.htm?q=berb -#: ../rules/base.xml.in.h:348 +#: ../rules/base.xml.in.h:356 msgid "Berber (Morocco, Tifinagh alternative phonetic)" msgstr "Berbisk (Marokko, tifinagh alternativ fonetisk)" -#: ../rules/base.xml.in.h:349 +#: ../rules/base.xml.in.h:357 msgid "Berber (Morocco, Tifinagh extended)" msgstr "Berbisk (Marokko, Tifinagh udvidet)" -#: ../rules/base.xml.in.h:350 +#: ../rules/base.xml.in.h:358 msgid "Berber (Morocco, Tifinagh phonetic)" msgstr "Berbisk (Marokko, Tifinagh fonetisk)" -#: ../rules/base.xml.in.h:351 +#: ../rules/base.xml.in.h:359 msgid "Berber (Morocco, Tifinagh extended phonetic)" msgstr "Berbisk (Marokko, Tifinagh udvidet fonetisk)" #. Keyboard indicator for Cameroon layouts -#: ../rules/base.xml.in.h:353 +#: ../rules/base.xml.in.h:361 msgid "cm" msgstr "cm" -#: ../rules/base.xml.in.h:354 +#: ../rules/base.xml.in.h:362 msgid "English (Cameroon)" msgstr "Engelsk (camerounsk)" -#: ../rules/base.xml.in.h:355 +#: ../rules/base.xml.in.h:363 msgid "French (Cameroon)" msgstr "Fransk (camerounsk)" -#: ../rules/base.xml.in.h:356 +#: ../rules/base.xml.in.h:364 msgid "Cameroon Multilingual (qwerty)" msgstr "Camerounsk flersproget (qwerty)" -#: ../rules/base.xml.in.h:357 +#: ../rules/base.xml.in.h:365 msgid "Cameroon Multilingual (azerty)" msgstr "Camerounsk flersproget (azerty)" -#: ../rules/base.xml.in.h:358 +#: ../rules/base.xml.in.h:366 msgid "Cameroon Multilingual (Dvorak)" msgstr "Camerounsk flersproget (dvorak)" #. Keyboard indicator for Burmese layouts -#: ../rules/base.xml.in.h:360 +#: ../rules/base.xml.in.h:368 msgid "my" msgstr "my" -#: ../rules/base.xml.in.h:361 +#: ../rules/base.xml.in.h:369 msgid "Burmese" msgstr "Burmesisk" -#: ../rules/base.xml.in.h:362 ../rules/base.extras.xml.in.h:4 +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 msgid "French (Canada)" msgstr "Fransk (Canada)" -#: ../rules/base.xml.in.h:363 +#: ../rules/base.xml.in.h:371 msgid "French (Canada, Dvorak)" msgstr "Fransk (Canada, dvorak)" -#: ../rules/base.xml.in.h:364 +#: ../rules/base.xml.in.h:372 msgid "French (Canada, legacy)" msgstr "Fransk (Canada, forældet)" -#: ../rules/base.xml.in.h:365 +#: ../rules/base.xml.in.h:373 msgid "Canadian Multilingual" msgstr "Canadisk flersproget" -#: ../rules/base.xml.in.h:366 +#: ../rules/base.xml.in.h:374 msgid "Canadian Multilingual (first part)" msgstr "Canadisk flersproget (første del)" -#: ../rules/base.xml.in.h:367 +#: ../rules/base.xml.in.h:375 msgid "Canadian Multilingual (second part)" msgstr "Canadisk flersproget (anden del)" #. Keyboard indicator for Inuktikut layouts -#: ../rules/base.xml.in.h:369 +#: ../rules/base.xml.in.h:377 msgid "ike" msgstr "ike" -#: ../rules/base.xml.in.h:370 +#: ../rules/base.xml.in.h:378 msgid "Inuktitut" msgstr "Inuktitut" -#: ../rules/base.xml.in.h:371 +#: ../rules/base.xml.in.h:379 msgid "English (Canada)" msgstr "Engelsk (Canada)" -#: ../rules/base.xml.in.h:372 +#: ../rules/base.xml.in.h:380 msgid "French (Democratic Republic of the Congo)" msgstr "Fransk (Congo, Den Demokratiske Republik)" #. Keyboard indicator for Taiwanese layouts -#: ../rules/base.xml.in.h:374 +#: ../rules/base.xml.in.h:382 msgid "zh" msgstr "zh" -#: ../rules/base.xml.in.h:375 +#: ../rules/base.xml.in.h:383 msgid "Chinese" msgstr "Kinesisk" -#: ../rules/base.xml.in.h:376 +#: ../rules/base.xml.in.h:384 msgid "Tibetan" msgstr "Tibetansk" -#: ../rules/base.xml.in.h:377 +#: ../rules/base.xml.in.h:385 msgid "Tibetan (with ASCII numerals)" msgstr "Tibetansk (med ASCII-numre)" -#: ../rules/base.xml.in.h:378 +#: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uyghur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:380 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:381 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisk" -#: ../rules/base.xml.in.h:382 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:383 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisk (anvend kroatiske digrafer)" -#: ../rules/base.xml.in.h:384 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisk (US-tastatur med kroatiske digrafer)" -#: ../rules/base.xml.in.h:385 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisk (US-tastatur med kroatiske bogstaver)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:387 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:388 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tjekkisk" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tjekkisk (med <\\|>-tast)" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tjekkisk (qwerty)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tjekkisk (qwerty, udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tjekkisk (UCW-layout, kun bogstaver med accent)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tjekkisk (US Dvorak med CZ UCW-understøttelse)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dansk" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dansk (slå døde taster fra)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dansk (Macintosh)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dansk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dansk (dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:402 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Hollandsk" -#: ../rules/base.xml.in.h:404 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Hollandsk (Sun døde taster)" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Hollandsk (Macintosh)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Hollandsk (standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:409 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estisk" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estisk (dvorak)" -#: ../rules/base.xml.in.h:415 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estisk (US-tastatur med estiske bogstaver)" -#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisk" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisk (med persisk numerisk tastatur)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:419 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:420 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdisk (Iran, latin Q)" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdisk (Iran, F)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdisk (Iran, latin Alt-Q)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdisk (Iran, arabisk-latin)" -#: ../rules/base.xml.in.h:424 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakisk" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdisk (Irak, latin Q)" -#: ../rules/base.xml.in.h:426 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdisk (Irak, F)" -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdisk (Irak, latin Alt-Q)" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdisk (Irak, arabisk-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Færøsk" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Færøsk (slå døde taster fra)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:434 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:435 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finsk" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finsk (klassisk)" -#: ../rules/base.xml.in.h:437 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finsk (klassisk, slå døde taster fra)" -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Nordligt samisk (Finland)" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finsk (Macintosh)" -#: ../rules/base.xml.in.h:440 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Fransk" -#: ../rules/base.xml.in.h:441 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Fransk (slå døde taster fra)" -#: ../rules/base.xml.in.h:442 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Fransk (Sun døde taster)" -#: ../rules/base.xml.in.h:443 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Fransk (alternativ)" -#: ../rules/base.xml.in.h:444 -msgid "French (alternative, latin-9 only)" +#: ../rules/base.xml.in.h:453 +msgid "French (alternative, Latin-9 only)" msgstr "Fransk (alternativ, kun latin-9)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Fransk (alternativ, slå døde taster fra)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Fransk (alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Fransk (forældet, alternativ)" -#: ../rules/base.xml.in.h:448 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Fransk (forældet, alternativ, slå døde taster fra)" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Fransk (forældet, alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Fransk (Bepo, ergonomisk, dvorakmåde)" -#: ../rules/base.xml.in.h:451 -msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)" +#: ../rules/base.xml.in.h:460 +msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Fransk (Bepo, ergonomisk, dvorakmåde, kun latin-9)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Fransk (dvorak)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Fransk (Macintosh)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Fransk (bretonsk)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitansk" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Geogrisk (Frankrig, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Engelsk (Ghana)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Engelsk (Ghana, flersproget)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:467 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:470 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:473 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" # The Avatime are an Akan people who live in Volta region of Ghana. History has it # that they are Ahanta people who migrated to the Volta region. -#: ../rules/base.xml.in.h:476 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Engelsk (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Fransk (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisk" -#: ../rules/base.xml.in.h:482 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisk (ergonomisk)" -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisk (MESS)" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisk (georgisk)" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Occitansk (Georgien)" -#: ../rules/base.xml.in.h:486 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Tysk" -#: ../rules/base.xml.in.h:487 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Tysk (død accent)" -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Tysk (død accent grave)" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Tysk (slå døde taster fra)" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Tysk (T3)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumænsk (Tyskland)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumænsk (Tyskland, slå døde taster fra)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Tysk (dvorak)" -#: ../rules/base.xml.in.h:494 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Tysk (Sun døde taster)" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Tysk (Neo 2)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Tysk (Macintosh)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Tysk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Nedersorbisk" # nedersorbisk, tror jeg # (el. nedre Lausitz) -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Nedersorbisk (qwertz)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Tysk (qwerty)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisk (Tyskland, fonetisk)" +#: ../rules/base.xml.in.h:511 +msgid "German (legacy)" +msgstr "Tysk (forældet)" + #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Græsk" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Græsk (simpel)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Græsk (udvidet)" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Græsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Græsk (polytonisk)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:511 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Ungarsk" -#: ../rules/base.xml.in.h:512 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Ungarsk (standard)" -#: ../rules/base.xml.in.h:513 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Ungarsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Ungarsk (qwerty)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Ungarsk (101/qwertz/komma/døde taster)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Ungarsk (101/qwertz/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Ungarsk (101/qwertz/punktum/døde taster)" -#: ../rules/base.xml.in.h:518 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Ungarsk (101/qwertz/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Ungarsk (101/qwerty/komma/døde taster)" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Ungarsk (101/qwerty/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Ungarsk (101/qwerty/punktum/døde taster)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Ungarsk (101/qwerty/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Ungarsk (102/qwertz/komma/døde taster)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Ungarsk (102/qwertz/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Ungarsk (102/qwertz/punktum/døde taster)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Ungarsk (102/qwertz/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Ungarsk (102/qwerty/komma/døde taster)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Ungarsk (102/qwerty/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Ungarsk (102/qwerty/punktum/døde taster)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:540 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:532 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandsk" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandsk (Sun døde taster)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandsk (Macintosh)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandsk (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebraisk" -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebraisk (lyx)" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebraisk (fonetisk)" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebraisk (bibelsk, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiensk" -#: ../rules/base.xml.in.h:547 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiensk (slå døde taster fra)" -#: ../rules/base.xml.in.h:548 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiensk (Macintosh)" -#: ../rules/base.xml.in.h:549 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiensk (US-tastatur med italienske bogstaver)" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisk (Italien)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiensk (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japansk" -#: ../rules/base.xml.in.h:555 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japansk (Kana)" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japansk (Kana 86)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japansk (OADG 109A)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japansk (Macintosh)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japansk (dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:561 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:562 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgisisk" -#: ../rules/base.xml.in.h:563 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgisisk (fonetisk)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmerisk (Cambodja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:569 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kasakhisk" -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisk (Kasakhstan, med kazakhisk)" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kasakhisk (med russisk)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:573 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA-foreslået standardlayout)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spansk (latinamerikansk)" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spansk (latinamerikansk, slå døde taster fra)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spansk (latinamerikansk, inkluder død tilde)" -#: ../rules/base.xml.in.h:581 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spansk (latinamerikansk, Sun døde taster)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litauisk" -#: ../rules/base.xml.in.h:585 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litauisk (standard)" -#: ../rules/base.xml.in.h:586 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litauisk (US-tastatur med litauiske bogstaver)" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litauisk (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litauisk (LEKP)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litauisk (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lettisk" -#: ../rules/base.xml.in.h:593 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lettisk (apostrofvariant)" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lettisk (tildevariant)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lettisk (F-variant)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lettisk (moderne)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lettisk (ergonomisk, ŪGJRMV)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lettisk (adapteret)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:600 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:601 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrinsk" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrinsk (kyrillisk)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrinsk (kyrillisk, Z og ZHE ombyttet)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrinsk (latin Unicode)" -#: ../rules/base.xml.in.h:608 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrinsk (latin qwerty)" -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrinsk (latin Unicode qwerty)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrinsk (kyrillisk med anførelsestegnene »«)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:611 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrinsk (latin med anførelsestegnene »«)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Makedonsk" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Makedonsk (slå døde taster fra)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltesisk" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltesisk (med US-layout)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:621 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolsk" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norsk" -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norsk (dvorak)" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Nordligt samisk (Norge)" -#: ../rules/base.xml.in.h:629 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Nordligt samisk (Norge, slå døde taster fra)" -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norsk (Macintosh)" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norsk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:632 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norsk (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polsk" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polsk (forældet)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polsk (qwertz)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polsk (dvorak)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polsk (dvorak, polske anførelsestegn på anførelsestast)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polsk (dvorak, polske anførelsestegn på tast 1)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kashubian" -#: ../rules/base.xml.in.h:642 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisk (Polen, fonetisk dvorak)" -#: ../rules/base.xml.in.h:643 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polsk (programmørdvorak)" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugisisk" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugisisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugisisk (Sun døde taster)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugisisk (Macintosh)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugisisk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugisisk (Macintosh, Sun døde taster)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugisisk (nativo)" -#: ../rules/base.xml.in.h:651 -msgid "Portuguese (Nativo for USA keyboards)" +#: ../rules/base.xml.in.h:661 +msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugisisk (nativo for USA-tastaturer)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:662 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 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumænsk" # http://da.wikipedia.org/wiki/%C3%87 -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumænsk (cedille)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumænsk (standard)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumænsk (standardcedille)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumænsk (Wintaster)" -#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisk" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisk (fonetisk)" -#: ../rules/base.xml.in.h:662 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisk (fonetisk Wintaster)" -#: ../rules/base.xml.in.h:663 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisk (skrivemaskine)" -#: ../rules/base.xml.in.h:664 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisk (forældet)" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisk (skrivemaskine, forældet)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Occitansk (forældet)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Occitansk (Wintaster)" -#: ../rules/base.xml.in.h:669 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Chuvash (latin)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Yakut" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisk (DOS)" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisk (Macintosh)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbisk (Rusland)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bashkirisk" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbisk" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbisk (kyrillisk, Z og ZHE ombyttet)" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbisk (latin)" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbisk (latin unicode)" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbisk (latin qwerty)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbisk (latin unicode qwerty)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbisk (kyrillisk med anførelsestegnene »«)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:697 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:688 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisk rusyn (homofonisk)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisk rusyn" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovensk" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovensk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovensk (US-tastatur med slovenske bogstaver)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovakisk" -#: ../rules/base.xml.in.h:697 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovakisk (udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:698 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovakisk (qwerty)" -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovakisk (qwerty, udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spansk" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spansk (slå døde taster fra)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spansk (inkluder død tilde)" -#: ../rules/base.xml.in.h:703 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spansk (Sun døde taster)" -#: ../rules/base.xml.in.h:704 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spansk (dvorak)" @@ -2660,1123 +2694,1139 @@ 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:705 +#: ../rules/base.xml.in.h:715 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:706 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalansk (Spanien, med midterpunktum L)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spansk (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Svensk" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Svensk (slå døde taster fra)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Svensk (dvorak)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisk (Sverige, fonetisk)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisk (Sverige, fonetisk, slå døde taster fra)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Nordligt samisk (Sverige)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Svensk (Macintosh)" -#: ../rules/base.xml.in.h:717 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Svensk (svdvorak)" -#: ../rules/base.xml.in.h:718 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Svensk tegnsprog" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Tysk (Schweiz)" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Tysk (Schweiz, forældet)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Tysk (Schweiz, slå døde taster fra)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Tysk (Schweiz, Sun døde taster)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Fransk (Schweiz)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Fransk (Schweiz, slå døde taster fra)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Fransk (Schweiz, Sun døde taster)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Fransk (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Tysk (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:728 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisk (Syrien)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisk" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisk (fonetisk)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdisk (Syrien, latin Q)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdisk (Syrien, F)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdisk (Syrien, latin Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:738 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadsjikisk" -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadsjikisk (forældet)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalesisk (fonetisk)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilsk (Sri Lanka, unicode)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilsk (Sri Lanka, TAB-skrivemaskine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" -#: ../rules/base.xml.in.h:749 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Tyrkisk" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Tyrkisk (F)" -#: ../rules/base.xml.in.h:754 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Tyrkisk (Alt-Q)" -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Tyrkisk (Sun døde taster)" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdisk (Tyrkiet, latin Q)" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdisk (Tyrkiet, F)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdisk (Tyrkiet, latin Alt-Q)" -#: ../rules/base.xml.in.h:759 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Tyrkisk (international med døde taster)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krimtatarsk (tyrkisk Q)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krimtatarsk (tyrkisk F)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krimtatarsk (tyrkisk Alt-Q)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanesisk" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanesisk (indfødte)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:769 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainsk" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainsk (fonetisk)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainsk (skrivemaskine)" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainsk (Wintaster)" -#: ../rules/base.xml.in.h:776 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainsk (forældet)" -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainsk (standard RSTU)" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:788 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:779 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainsk (homofonisk)" -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Engelsk (UK)" -#: ../rules/base.xml.in.h:781 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Engelsk (UK, udvidede Wintaster)" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Engelsk (UK, international med døde taster)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Engelsk (UK, Dvorak)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Engelsk (UK, Dvorak med UK-tegnsætning)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Engelsk (UK, Macintosh)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Engelsk (UK, Macintosh international)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Engelsk (UK, Colemak)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbekisk" -#: ../rules/base.xml.in.h:789 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbekisk (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamesisk" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreansk" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreansk (101/104 tastkompatibel)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japansk (pc-98xx-serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:799 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irsk" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:802 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irsk (UnicodeExpert)" -#: ../rules/base.xml.in.h:803 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:804 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:807 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisk (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Engelsk (Sydafrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:818 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:829 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:821 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalesisk" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Engelsk (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:825 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:829 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" # http://da.wikipedia.org/wiki/Amharisk -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharisk" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Blindeskrift" -#: ../rules/base.xml.in.h:839 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Blindeskrift (venstre hånd)" -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Blindeskrift (højre hånd)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:842 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmensk" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmensk (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Fransk (Mali, alternativ)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Engelsk (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:850 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Engelsk (Mali, US international)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzania)" -#: ../rules/base.xml.in.h:854 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenya)" -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:860 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filippinsk" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filippinsk (QWERTY baybayin)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filippinsk (Capewell-dvorak latin)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filippinsk (Capewell-dvorak baybayin)" -#: ../rules/base.xml.in.h:865 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filippinsk (Capewell-QWERF 2006 latin)" -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filippinsk (Capewell-QWERF 2006 baybayin)" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filippinsk (Colemak latin)" # http://en.wikipedia.org/wiki/Baybayin -#: ../rules/base.xml.in.h:868 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filippinsk (Colemak baybayin)" -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filippinsk (Dvorak latin)" # http://en.wikipedia.org/wiki/Baybayin -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filippinsk (Dvorak baybayin)" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldavisk" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" # http://www.denstoredanske.dk/Sprog,_religion_og_filosofi/Sprog/Alle_lande_-_sprogoversigt/Altaiske_sprog/gagausisk -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldavisk (gagausisk)" -#: ../rules/base.xml.in.h:875 -msgid "Key(s) to change layout" -msgstr "Tast(er) for at skifte layout" +#: ../rules/base.xml.in.h:885 +msgid "Switching to another layout" +msgstr "Skifter til et andet layout" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Højre Alt (mens trykket ned)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Venstre Alt (mens trykket ned)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Venstre Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Højre Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Enhver Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:891 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:882 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Højre Ctrl-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Højre Alt" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Venstre Alt" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Skift+Caps Lock" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:897 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:888 +#: ../rules/base.xml.in.h:898 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:889 +#: ../rules/base.xml.in.h:899 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:890 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Begge skift-taster sammen" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Begge Alt-taster sammen" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Begge Ctrl-taster sammen" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Skift" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Venstre Ctrl+Venstre Skift" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Højre Ctrl+Højre Skift" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Skift" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Venstre Alt+Venstre Skift" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Mellemrum" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Venstre Win" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Højre Win" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Venstre Skift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Højre Skift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Venstre Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Højre Ctrl" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:919 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:910 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tast for at vælge tredje niveau" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Enhver Win-tast" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Enhver Alt-tast" -#: ../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:923 +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "Højre Alt-tast, Skift+højre Alt-tast er sammensat (compose)" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Højre Alt-tast vælger aldrig tredje niveau" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Retur på numerisk tastatur" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Omvendt skråstreg" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Mindre end/Større end>" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:928 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:919 +#: ../rules/base.xml.in.h:929 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:920 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Mindre end/Større end> (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Ctrl-tast placering" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock som Ctrl" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Venstre Ctrl som Meta" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ombyt Ctrl og Caps Lock" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Til venstre for 'A'" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Nederst til venstre" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Højre Ctrl-tast virker som højre Alt" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu som højre Ctrl" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Højre Alt-tast virker som højre Ctrl" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Byt venstre Alt-tast om med venstre Ctrl-tast" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Byt venstre Win-tast om med venstre Ctrl-tast" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Venstre Alt som Ctrl, venstre Ctrl som Win, venstre Win som Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Brug tastatur-LED til at vise alternativ layout" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:932 -msgid "Numeric keypad layout selection" -msgstr "Numerisk tastatur layout udvælgelse" +#: ../rules/base.xml.in.h:945 +msgid "Layout of numeric keypad" +msgstr "Layout for numerisk tastatur" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Forældet" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode tilføjelser (pile og matematiske tegn)" -#: ../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:948 +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:936 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Forældet Wang 724" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:950 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: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:951 +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:939 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Sekstentals" # ATM = hæveautomat, måske skal det oversættes. -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefonstil" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Numerisk tastatur slettetast opførsel" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:955 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:944 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Forældet tast med komma" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Niveau fire tast med punktum" -#: ../rules/base.xml.in.h:946 -msgid "Four-level key with dot, latin-9 restriction" +#: ../rules/base.xml.in.h:959 +msgid "Four-level key with dot, Latin-9 only" msgstr "Niveau fire tast med punktum, latin-9 begrænsning" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Niveau fire tast med komma" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:961 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:951 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Niveau fire tast med abstrakt adskillelser" -#: ../rules/base.xml.in.h:952 -msgid "Semi-colon on third level" +#: ../rules/base.xml.in.h:965 +msgid "Semicolon on third level" msgstr "Semikolon på tredje niveau" -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Opførsel for Caps Lock-tast" -#: ../rules/base.xml.in.h:954 -msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock" +#: ../rules/base.xml.in.h:967 +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:955 -msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock" +#: ../rules/base.xml.in.h:968 +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:956 -msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock" +#: ../rules/base.xml.in.h:969 +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:957 -msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock" +#: ../rules/base.xml.in.h:970 +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:958 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock slår små/store bogstaver til/fra" -#: ../rules/base.xml.in.h:959 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Gør Caps Lock til en ekstra NumLock" -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Ombyt ESC og Caps Lock" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Gør Caps Lock til en ekstra Esc" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Gør Caps Lock til en ekstra rettelsestast" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Gør Caps Lock til en ekstra Super" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Gør Caps Lock til en ekstra Hyper" -#: ../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:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Caps Lock ændrer SkiftLock (påvirker alle taster)" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock er slået fra" -#: ../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:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Gør Caps Lock til en ekstra Ctrl" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Alt/Win-tasteopførsel" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Tilføj standardopførslen til menutasten" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt og Meta er på Alt-tasterne" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:984 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:985 +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Ctrl ligger på Win-tasterne (og de normale Ctrl-taster)" -#: ../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:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Ctrl ligger på Alt-tasterne, Alt ligger på Win-tasterne" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta ligger på Win-tasterne" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta ligger på venstre Win-tast" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper ligger på Win-tasterne" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:990 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:978 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt-tast ombyttes med Win-tast" -#: ../rules/base.xml.in.h:979 -msgid "Compose key position" -msgstr "Placering af Composetast" +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Position for sammensat (compose) tast" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Tredje niveau for venstre Win" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Tredje niveau for højre Win" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Tredje niveau for Menu" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Tredje niveau for venstre Ctrl" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Tredje niveau for højre Ctrl" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Tredje niveau for Caps Lock (lås skift)" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Tredje niveau for <Mindre end/Større end>" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Prtsc" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Diverse kompatibilitetsvalg" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Standard numerisk tastatur taster" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:1004 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:992 +#: ../rules/base.xml.in.h:1005 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:993 +#: ../rules/base.xml.in.h:1006 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:994 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Specialtaster (Ctrl+Alt+<key>) håndteret i en server" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:1008 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:996 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Skift afbryder Caps Lock" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Slå ekstra typografiske karakterer til" -#: ../rules/base.xml.in.h:998 -msgid "Both Shift-Keys together toggle Caps Lock" +#: ../rules/base.xml.in.h:1011 +msgid "Both Shift keys together toggle Caps Lock" msgstr "Begge skift-taster sammen skifter Caps Lock" -#: ../rules/base.xml.in.h:999 -msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates" +#: ../rules/base.xml.in.h:1012 +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:1000 -msgid "Both Shift-Keys together toggle ShiftLock" +#: ../rules/base.xml.in.h:1013 +msgid "Both Shift keys together toggle ShiftLock" msgstr "Begge skift-taster sammen skifter SkiftLock" -#: ../rules/base.xml.in.h:1001 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Skift pegetaster med Skift + NumLock." +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Skift + NumLock skifter PointerKeys" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Tillader afbrydelsesgreb med tastaturhandlinger (advarsel: sikkerhedsrisiko)" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Tillader afbrydelsesgreb med vinduestrælogning" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Tilføjelse af valutategn til bestemte taster" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro på E" @@ -3785,75 +3835,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:1005 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro på 2" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro på 4" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro på 5" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupee på 4" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tast for at vælge femte niveau" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Mindre end/Større end> vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1025 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:1012 +#: ../rules/base.xml.in.h:1026 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:1013 +#: ../rules/base.xml.in.h:1027 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:1014 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Normal mellemrum på alle niveauer" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Ubrydelig mellemrumskarakter på andet niveau" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Ubrydelig mellemrumskarakter på tredje niveau" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1032 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:1019 +#: ../rules/base.xml.in.h:1033 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:1020 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Ubrydelig mellemrumskarakter på fjerde niveau" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1035 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:1022 +#: ../rules/base.xml.in.h:1036 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)" @@ -3865,82 +3915,86 @@ 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 ‌, ‌ or ‌. Kilde eng. # wikipedia 12. maj 2010 -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1038 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:1025 +#: ../rules/base.xml.in.h:1039 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:1026 +#: ../rules/base.xml.in.h:1040 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:1027 +#: ../rules/base.xml.in.h:1041 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:1028 +#: ../rules/base.xml.in.h:1042 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:1029 +#: ../rules/base.xml.in.h:1043 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:1030 +#: ../rules/base.xml.in.h:1044 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:1031 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanske tastaturvalg" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana låsetast låser" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F-stil rettelsestast" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Gør Zenkaku Hankaku til en ekstra Esc" -#: ../rules/base.xml.in.h:1035 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Tilføjelse af esperanto accent circonflexe (supersigno)" +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Tilføjelse af esperanto supersigned bogstaver" -#: ../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:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "Til den tilsvarende tast på et Qwertytastatur" -#: ../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:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "Til den tilsvarende tast i et Dvoraktastatur" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "Til den tilsvarende tast i et Colemaktastatur" + +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Vedligehold tastkompatibilitet med gamle tastkoder for Solaris" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Kompatibilitet med Suntast" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1055 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:1041 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Rettelsestast" +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Ctrl + Alt + Rettelsestast" #: ../rules/base.extras.xml.in.h:1 msgid "apl" @@ -4045,159 +4099,187 @@ msgstr "Atsina" # http://en.wikipedia.org/wiki/Interior_Salish_languages #: ../rules/base.extras.xml.in.h:38 -msgid "Couer D'alene Salish" -msgstr "Couer D'alene Salish" +msgid "Coeur d'Alene Salish" +msgstr "Couer d'alene Salish" #: ../rules/base.extras.xml.in.h:39 msgid "English (US, Sun Type 6/7)" msgstr "Engelsk (US, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Engelsk (norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polsk (international med døde taster)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polsk (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krimtatarsk (Dobruja Q)" # touchtype = blindskrift (altså at skrive uden at kigge) -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumænsk (ergonomisk maskinskrivning)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumænsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbisk (sammensætte accenter frem for døde taster)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisk (med ukrainsk-hviderussisk layout)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armensk (OLPC-fonetisk)" # Er lidt usikker på betydningen af SIL, men antager at det drejer sig om: # http://www.sil.org/sil/ -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebraisk (bibelsk, SIL-fonetik)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugisisk (brasiliansk, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tjekkisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dansk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Hollandsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Fransk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Græsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiensk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japansk (Sun type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japansk (Sun type 7 - pc-kompatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japansk (Sun type 7 - sun-kompatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugisisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovakisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spansk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Svensk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Tysk (Schweiz, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Fransk (Schweiz, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Tyrkisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Engelsk (UK, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreansk (Sun type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugisisk (brasiliansk, nativo for esperanto)" + +#~ msgid "English (layout toggle on multiply/divide key)" +#~ msgstr "Engelsk (skift layout på gange-/divideretast)" + +#~ msgid "Key(s) to change layout" +#~ msgstr "Tast(er) for at skifte layout" + +#~ msgid "Numeric keypad layout selection" +#~ msgstr "Numerisk tastatur layout udvælgelse" + +#~ 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" + +#~ msgid "Compose key position" +#~ msgstr "Placering af Composetast" + +#~ msgid "Toggle PointerKeys with Shift + NumLock." +#~ msgstr "Skift pegetaster med Skift + NumLock." + #~ 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 3781e6ec8..d50787623 100644 --- a/xorg-server/xkeyboard-config/po/de.po +++ b/xorg-server/xkeyboard-config/po/de.po @@ -1,14 +1,14 @@ # German translation of xkeyboard-config. # This file is distributed under the same license as the xkeyboard-config package. # Christian Kirbach , 2009. -# Mario Blättermann , 2009, 2010, 2011, 2012, 2013. +# Mario Blättermann , 2009, 2010, 2011, 2012, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 19:15+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 20:53+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "Englisch (Dvorak für Programmierer)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbekisch (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisch" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "Albanisch" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armenisch" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "Weißrussisch (Lateinisch)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisch" @@ -1046,17 +1046,17 @@ msgstr "Belgisch (Sun-Akzenttasten)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisch (Wang Modell 724, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" -msgstr "Bengalisch" +msgid "Bangla" +msgstr "Bangla" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalisch (Probhat)" #. Keyboard indicator for Indian layouts @@ -1069,27 +1069,27 @@ msgid "Indian" msgstr "Indisch" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalisch (Indien)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalisch (Indien, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalisch (Indien, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalisch (Indien, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalisch (Indien, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalisch (Indien, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisch (US-Tastatur mit bosnischen Buchstaben)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" @@ -1290,16 +1290,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugiesisch (Brasilien, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugiesisch (Brasilien, nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugiesisch (Brasilien, Nativo für US-Tastaturen)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugiesisch (Brasilien, Nativo für Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Portugiesisch (Brasilien, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1453,2463 +1453,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetanisch (mit ASCII-Ziffern)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigurisch" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisch" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisch (Anführungszeichen für Zitate verwenden)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisch (Kroatische Digraphen verwenden)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisch (US-Tastatur mit kroatischen Digraphen)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisch (US-Tastatur mit kroatischen Buchstaben)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tschechisch" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tschechisch (mit <\\|>-Taste)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tschechisch (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tschechisch (qwerty, erweiterter Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tschechisch (UCW-Belegung, nur akzentuierte Buchstaben)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tschechisch (US Dvorak mit CZ-UCW-Unterstützung)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dänisch" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dänisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dänisch (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dänisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dänisch (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Niederländisch" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Niederländisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Niederländisch (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Niederländisch (Standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estnisch" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estnisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estnisch (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estnisch (US-Tastatur mit estnischen Buchstaben)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisch" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisch (mit persischem Nummernblock)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdisch (Iran, Lateinisches Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdisch (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdisch (Iran, Lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdisch (Iran, Arabisch-Lateinisch)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakisch" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdisch (Irak, lateinisches Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdisch (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdisch (Irak, Lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdisch (Irak, Arabisch-Lateinisch)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Färöisch" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Färöisch (ohne Akzenttasten)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finnisch" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finnisch (klassisch)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finnisch (klassisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Nördliches Saami (Finnland)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finnisch (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Französisch" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Französisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Französisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Französisch (alternativ)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Französisch (Alternative, nur latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Französisch (Alternative, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Französisch (Alternative, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Französisch (Alternative, veraltet)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Französisch (Alternative, veraltet, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Französisch (Alternative, veraltet, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Französich (Bepo, ergonomisch, Dvorak-ähnlich)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Französisch (Bepo, ergonomisch, Dvorak-ähnlich, nur latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Französisch (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Französisch (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Französisch (Bretonisch)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okzitanisch" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgisch (Frankreich, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Englisch (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Englisch (Ghana, mehrsprachig)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Englisch (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Französisch (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisch" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisch (ergonomisch)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisch (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisch (Georgien)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossetisch (Georgien)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Deutsch" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Deutsch (Nur Acute-(')Akzentzeichen)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Deutsch (Nur Grave-(`) und Acute-(')Akzentzeichen)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Deutsch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Deutsch (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumänisch (Deutschland)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumänisch (Deutschland, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Deutsch (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Deutsch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Deutsch (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Deutsch (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Deutsch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Niedersorbisch" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Niedersorbisch (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Deutsch (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisch (Deutschland, phonetisch)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Deutsch (veraltet)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Griechisch" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Griechisch (vereinfacht)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Griechisch (erweitert)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Griechisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Griechisch (polytonisch)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Ungarisch" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Ungarisch (Standard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Ungarisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Ungarisch (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Ungarisch (101/qwertz/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Ungarisch (101/qwertz/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Ungarisch (101/qwertz/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Ungarisch (101/qwertz/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Ungarisch (101/qwerty/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Ungarisch (101/qwerty/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Ungarisch (101/qwerty/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Ungarisch (101/qwerty/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Ungarisch (102/qwertz/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Ungarisch (102/qwertz/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Ungarisch (102/qwertz/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Ungarisch (102/qwertz/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Ungarisch (102/qwerty/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Ungarisch (102/qwerty/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Ungarisch (102/qwerty/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Isländisch" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Isländisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Isländisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Isländisch (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Isländisch (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebräisch" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebräisch (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebräisch (phonetisch)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebräisch (Biblisch, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italienisch" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italienisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italienisch (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italienisch (US-Tastatur mit italienischen Buchstaben)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisch (Italien)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italienisch (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japanisch" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japanisch (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japanisch (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japanisch (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japanisch (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japanisch (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgisisch" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgisisch (phonetisch)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Kambodscha)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kasachisch" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisch (Kasachstan, mit Kasachisch)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kasachisch (mit russischer Belegung)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laotisch (durch STEA vorgeschlagene Standardbelegung)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spabisch (Lateinamerikanisch)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spanisch (Lateinamerikanisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spanisch (Lateinamerikanisch, Akzent-Tilde einschließen)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spanisch (Lateinamerikanisch, Sun-Akzenttasten)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litauisch" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litauisch (Standard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litauisch (US-Tastatur mit litauischen Buchstaben)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litauisch (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litauisch (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litauisch (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lettisch" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lettisch, (Apostroph-Variante)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lettisch (Tilde-Variante)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lettisch (F-Variante)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lettisch (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Georgisch (ergonomisch, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lettisch (angepasst)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrinisch" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrinisch (kyrillisch)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrinisch, (Kyrillisch, »З« und »Ж« vertauscht)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrinisch (lateinisch, Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrinisch (lateinische qwerty-Tastatur)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrinisch (lateinische qwerty-Tastatur, Unicode)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrinisch (Kyrillisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrinisch (lateinisch mit Anführungszeichen)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Mazedonisch" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Mazedonisch (ohne Akzenttasten)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltesisch" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltesisch (mit US-Belegung)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolisch" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norwegisch" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norwegisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norwegisch (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Nördliches Saami (Norwegen)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Nördliches Saami (Norwegen, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norwegisch (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norwegisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norwegisch (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polnisch" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polnisch (veraltet)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polnisch (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polnisch (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaschubisch" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisch (Polen, phonetisch, Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polnisch (Dvorak für Programmierer)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugiesisch" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugiesisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugiesisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugiesisch (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugiesisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugiesisch (Macintosh, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugiesisch (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugiesisch (Nativo für US-Tastaturen)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumänisch" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumänisch (Cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumänisch (Standard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumänisch (Standard Cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumänisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisch" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisch (phonetisch)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisch (phonetisch mit Windows-Tasten)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisch (Schreibmaschine)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisch (veraltet)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisch (Schreibmaschine, veraltet)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatarisch" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossetisch (veraltet)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossetisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tschuwaschisch" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tschuwaschisch (lateinische Schrift)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurtisch" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakutisch" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmykisch" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisch (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisch (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbisch (Russland)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baschkirisch" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbisch" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbisch, (Kyrillisch, »З« und »Ж« vertauscht)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbisch (Lateinisch)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbisch (Lateinisch Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbisch (Lateinische qwerty-Tastatur)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbisch (lateinische qwerty-Tastatur, Unicode)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbisch (Kyrillisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbisch (Lateinisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisches Russinisch (homophon)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisches Russinisch" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slowenisch" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slowenisch (Anführungszeichen für Zitate verwenden)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slowenisch (US-Tastatur mit slowenischen Buchstaben)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slowakisch" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slowakisch (erweiterter Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slowakisch (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slowakisch (qwerty, erweiterter Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spanisch" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spanisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spanisch (Akzent-Tilde einschließen)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spanisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spanisch (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturisch (Spanien, mit unterpunktetem L und H)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Katalanisch (Spanische Variante mit mittelpunktiertem L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spanisch (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Schwedisch" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Schwedisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Schwedisch (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisch (Schweden, phonetisch)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisch (Schweden, phonetisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Nördliches Saami (Schweden)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Schwedisch (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Schwedisch (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Schwedische Gebärdensprache" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Deutsch (Schweiz)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Deutsch (Schweiz, veraltet)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Deutsch (Schweiz, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Deutsch (Schweiz, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Französisch (Schweiz)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Französisch (Schweiz, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Französisch (Schweiz, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Französisch (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Deutsch (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisch (Syrien)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisch" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisch (phonetisch)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdisch (Syrien, lateinisches Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdisch (Syrien, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdisch (Syrien, lateinisches Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadschikisch" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadschikisch (veraltet)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (phonetisch)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilisch (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilisch (Sri Lanka, TAB Schreibmaschine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thailändisch" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thailändisch (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thailändisch (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Türkisch" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Türkisch, (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Türkisch (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Türkisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdisch (Türkei, lateinisches Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdisch (Türkei, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdisch (Türkei, lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Türkisch (International, mit Akzenttasten)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krimtatarisch (Türkisch Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krimtatarisch (Türkisch F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krimtatarisch (Türkisch Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanesisch" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanesisch (indigen)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainisch" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainisch (phonetisch)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainisch (Schreibmaschine)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainisch (veraltet)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainisch (Standard-RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russisch (Ukraine, Standard-RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainisch (homophon)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Englisch (Britisch)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Englisch (Britisch erweitert, Windows-Tasten)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Englisch (Britisch international, mit Akzenttasten)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Englisch (Britisch, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Englisch (Dvorak mit britischer Punktierung)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Englisch (Britisch, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Englisch (Britisch, Macintosh international)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "English (Britisch, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbekisch" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbekisch (lateinische Schrift)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamesisch" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreanisch" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreanisch (101/104-Tasten kompatibel)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japanisch (PC-98xx-Serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irisch" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irisch (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisch (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Englisch (Südafrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 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:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalesisch" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Englisch (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharisch" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (linkshändig)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (rechtshändig)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmenisch" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmenisch (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Französisch (Mali, Alternative)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Englisch (Mali, USA Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Englisch (Mali, USA International)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tansania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Philippinisch" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Philippinisch (QWERTY, Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Philippinisch (Capewell-Dvorak, Lateinisch)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Philippinisch (Capewell-Dvorak, Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Philippinisch (Capewell-QWERF 2006, lateinisch)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Philippinisch (Capewell-QWERF 2006, Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Philippinisch (Colemak, lateinisch)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Philippinisch (Colemak, Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Philippinisch (Dvorak, lateinisch)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Philippinisch (Dvorak, Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldawisch" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldauisch (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Wechseln in eine andere Belegung" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Rechte Alt-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Linke Alt-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Linke Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Rechte Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Beliebige Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Rechte Strg-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Rechte Alt-Taste" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Linke Alt-Taste" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Feststelltaste" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Umschalt-+Feststelltaste" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Feststelltaste" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Beide Umschalttasten gleichzeitig" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Beide Alt-Tasten gleichzeitig" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Beide Steuerungstasten gleichzeitig" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Strg+Umschalttaste" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Linke Strg-Taste+Linke Umschalttaste" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Rechte Strg-Taste und rechte Umschalttaste" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Strg" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Umschalttaste" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Linke Alt-Taste+Linke Umschalttaste" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Leertaste" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menü" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Linke Windows-Taste" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Rechte Windows-Taste" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Linke Umschalttaste" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Rechte Umschalttaste" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Linke Strg-Taste" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Rechte Strg-Taste" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Rollen" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Taste zum Wechsel in die dritte Tastaturebene" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Beliebige Windows-Taste" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Beliebige Alt-Taste" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Rechte Alt-Taste, Umschalttaste + rechte Alt-Taste ist Compose-Taste" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene." -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Eingabetaste im Nummernblock" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kleiner als/größer als>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kleiner als/Größer als> 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:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Position der Strg-Taste" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Feststelltaste als Strg-Taste" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Linke Strg-Taste als Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Strg-Taste und Feststelltaste vertauschen" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Links von »A«" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Unten links" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Rechte Strg-Taste wie rechte Alt-Taste" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menü als rechte Strg-Taste" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Rechte Alt-Taste als rechte Strg-Taste" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Linke Alt-Taste und linke Strg-Taste vertauschen" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Linke Win-Taste und linke Strg-Taste vertauschen" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Linke Alt als Strg, linke Strg als Win, linke Win als Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Belegung des Nummernblocks" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Veraltet" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 (veraltet)" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadezimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/Telefonstil" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Verhalten der Löschtaste des Nummernblocks" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Veraltete Taste mit Punkt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Veraltete Taste mit Komma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Taste der vierten Ebene mit Punkt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Taste der vierten Ebene mit Punkt, Latin-9-Einschränkung" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Taste der vierten Ebene mit Komma" # momayyez? Was ist das? -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Taste der vierten Ebene mit abstrakten Trennern" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Semikolon in der dritten Tastaturebene" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Verhalten der Feststelltaste" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc und Feststelltaste vertauschen" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Feststelltaste als zusätzliche Löschtaste verwenden" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Feststelltaste als zusätzliche Super-Taste verwenden" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Feststelltaste ist deaktiviert" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Verhalten der Alt/Windows-Tasten" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Standardverhalten zur Menütaste hinzufügen" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt und Meta befinden sich auf den Alt-Tasten." -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Strg ist den Windows-Tasten zugeordnet (und den üblichen Strg-Tasten)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl 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:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta ist den Windows-Tasten zugeordnet" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta ist der linken Windows-Taste zugeordnet" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper ist den Windows-Tasten zugeordnet" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt ist der rechten Windows-Taste zugeordnet und Super der Menü-Taste." -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt-Taste ist gegen Windows-Taste vertauscht" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Position der Compose-Taste" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Dritte Ebene der linken Windows-Taste" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Dritte Ebene der rechten Windows-Taste" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Dritte Ebene der Menü-Taste" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Dritte Ebene der linken Strg-Taste" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Dritte Ebene der rechten Strg-Taste" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Dritte Ebene der Feststelltaste" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Dritte Ebene von <Kleiner als/größer als>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Druck" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Verschiedene Optionen zur Kompatibilität" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Vorgegebene Nummernblocktasten" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Spezialtasten für Server (Strg+Alt+<Taste>)" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Umschalttaste deaktiviert Feststelltaste" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Typographische Sonderzeichen aktivieren" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein, eine Umschalttaste deaktiviert" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Beide Umschalttasten gleichzeitig schalten ShiftLock ein und aus" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Umschalttaste + NumLock schaltet Tastaturmaus ein und aus" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Erlauben, Grabs mit Tastaturaktionen abzubrechen (Achtung: Sicherheitsrisiko)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Protokollieren von Grabs und Baumansichtsaktionen erlauben" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro auf E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro auf 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro auf 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro auf 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupie-Symbol auf 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Taste zum Wechsel in die fünfte Tastaturebene" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kleiner als/Größer als> 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:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" 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:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" 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:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 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:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanische Tastaturoptionen" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana-Sperrtaste ist gesperrt" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Löschtaste wie NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Zenkaku Hankaku als zusätzliche Esc-Taste verwenden" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Zeichen mit Esperanto-Circumflex hinzufügen" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Zur entsprechenden Taste einer Qwerty-Belegung." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Zur entsprechenden Taste einer Dvorak-Belegung." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Zur entsprechenden Taste einer Colemak-Belegung." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Tastenkompatibilität mit veralteten Solaris-Tastencodes sicher stellen" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun-Tastenkompatibilität" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Strg + Alt + Löschtaste" @@ -4021,182 +4041,150 @@ msgstr "Couer D'alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Englisch (USA, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Englisch (Normannisch)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polnisch (International, mit Akzenttasten)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polnisch (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polnisch (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krimtatarisch (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumänisch (ergonomische Bedienung)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumänisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbisch (Akzente kombinieren anstelle von Akzenttasten)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisch (mit ukrainisch-weißrussischer Belegung)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russische (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armenisch (OLPC-phonetisch)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebräisch (Biblisch, SIL phonetisch)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugiesisch (Brasilien, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tschechisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dänisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Niederländisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estnisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finnisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Französisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Griechisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italienisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japanisch (Sun Typ 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japanisch (Sun Typ 7 - PC-kompatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japanisch (Sun Typ 7 - Sun-kompatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norwegisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugiesisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slowakisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spanisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Schwedisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Deutsch (Schweiz, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Französisch (Schweiz, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Türkisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Englisch (Großbritannien, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreanisch (Sun Typ 6/7)" - -#~ msgid "English (layout toggle on multiply/divide key)" -#~ msgstr "Englisch (Belegungsumschalter auf der Multiplikations-/Divisionstaste)" - -#~ msgid "Key(s) to change layout" -#~ msgstr "Taste(n) zum Wechseln der Belegung" - -#~ msgid "Numeric keypad layout selection" -#~ msgstr "Belegungsauswahl des Nummernblocks" - -#~ 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" - -#~ msgid "Compose key position" -#~ msgstr "Position der Compose-Taste" - -#~ msgid "Toggle PointerKeys with Shift + NumLock." -#~ msgstr "Zeigertasten mit Umschalttaste + NumLock umschalten" - -#~ msgid ">German (Switzerland)" -#~ msgstr ">Deutsch (Schweiz)" - -#~ msgid "ca" -#~ msgstr "ca" - -#~ msgid "Catalan" -#~ msgstr "Katalanisch" - -#~ msgid "Serbian (Cyrillic)" -#~ msgstr "Serbisch (Kyrillisch)" - -#~ msgid "Gagauz" -#~ msgstr "Gagauz" - -#~ msgid "Hebrew (Biblical SIL)" -#~ msgstr "Hebräisch (Biblisch, SIL)" diff --git a/xorg-server/xkeyboard-config/po/eo.po b/xorg-server/xkeyboard-config/po/eo.po index 9460fe1c8..d956c0e9e 100644 --- a/xorg-server/xkeyboard-config/po/eo.po +++ b/xorg-server/xkeyboard-config/po/eo.po @@ -1,14 +1,14 @@ # Esperanta traduko por 'xkeyboard-config' -# Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 The Free Software Foundation, Inc. +# Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 The Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. -# Felipe Castro , 2008, 2009, 2010, 2011, 2012, 2013. +# Felipe Castro , 2008, 2009, 2010, 2011, 2012, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-16 08:38-0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 10:58-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "Angla (Dvorako por programistoj)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Uzbeka (Afganujo, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Araba" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "Albana" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armena" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "Belorusa (Latina)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1046,17 +1046,17 @@ msgstr "Belga (senpaŝaj klavoj de Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang modelo 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengala" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengala (Probhat)" #. Keyboard indicator for Indian layouts @@ -1066,31 +1066,31 @@ msgstr "in" #: ../rules/base.xml.in.h:274 msgid "Indian" -msgstr "Hinda" +msgstr "Barata" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" -msgstr "Bengala (Hindujo)" +msgid "Bangla (India)" +msgstr "Bengala (Barato)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" -msgstr "Bengala (Hindujo, Probhat)" +msgid "Bangla (India, Probhat)" +msgstr "Bengala (Barato, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" -msgstr "Bengala (Hindujo, Baishakhi)" +msgid "Bangla (India, Baishakhi)" +msgstr "Bengala (Barato, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" -msgstr "Bengala (Hindujo, Bornona)" +msgid "Bangla (India, Bornona)" +msgstr "Bengala (Barato, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Bengala (Hindujo, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bengala (Barato, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Bengala (Hindujo, Baishakhi InScript)" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bengala (Barato, Baishakhi InScript)" #. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 @@ -1245,7 +1245,7 @@ msgstr "Marata (KaGaPa fonetika)" #: ../rules/base.xml.in.h:327 msgid "English (India, with RupeeSign)" -msgstr "Angla (Hindujo, kun RupiSigno)" +msgstr "Angla (Barato, kun RupiSigno)" #. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosna (usona klavaro kun bosnaj literoj)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugala (Brazilo)" @@ -1290,16 +1290,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugala (Brazilo, Dvorako)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugala (Brazilo, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugala (Brazilo, Nativo por usonaj klavaroj)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugala (Brazilo, Nativo por Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazilo, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1453,2463 +1453,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibeta (kun ciferoj ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgura" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroata" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroata (uzi angul-citilojn por citiloj)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroata (uzi kroatajn duliteraĵojn)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroata (Usona klavaro kun kroataj duliteraĵoj)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroata (Usona klavaro kun kroataj literoj)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Ĉeĥa" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Ĉeĥa (kun klavo <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Ĉeĥa (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Ĉeĥa (qwerty, etendita Retroklino)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Ĉeĥa (aranĝo UCW, nur diakritaĵoj)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Ĉeĥa (usona Dvorako kun subteno al CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dana" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dana (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dana (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dana (Dvorako)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Nederlanda" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Nederlanda (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Nederlanda (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Nederlanda (norma)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzonka" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estona" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estona (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estona (Dvorako)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estona (Usona klavaro kun estonaj literoj)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (kun persa ciferklavaro)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurda (Irano, Latina Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurda (Irano, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurda (Irano, Latina Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurda (Irano, Araba-Latina)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraka" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurda (Irako, Latina Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurda, (Irako, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurda (Irako, Latina Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurda (Irako, Araba-Latina)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feroa" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroa (forigi senpaŝajn klavojn)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finna" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finna (klasika)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finna (klasika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Norda Samea (Finlando)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finna (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Franca" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Franca (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Franca (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Franca (alternativa)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Franca (alternativa, nur Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Franca (alternativa, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Franca (alternava, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Franca (malmoderna, alternativa)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Franca (malmoderna, alternativa, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Franca (malmoderna, alternativa, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Franca (Bepo, komforteca, dvorake)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Franca (Bepo, komforteca, dvorake, nur Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Franca (Dvorako)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Franca (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Franca (Bretona)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcitana" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Kartvela (Franca, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angla (Ganao)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angla (Ganao, plurlingva)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haŭsa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angla (Ganao, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Franca (Gvineo)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Kartvela" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Kartvela (komforteca)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Kartvela (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rusa (Kartvela)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Oseta (Kartvelujo)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Germana" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Germana (senpaŝa dekstra korno)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Germana (senpaŝa maldekstra/dekstra korno)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Germana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Germana (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumana (Germanujo)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumana (Germanujo, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Germana (Dvorako)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Germana (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Germana (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Germana (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Germana (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Malsupra Soraba" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Malsupra Soraba (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Germana (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rusa (Germana, fonetika)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Germana (malmoderna)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Greka" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Greka (simpla)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Greka (etendita)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Greka (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Greka (plurtona)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hungara" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hungara (norma)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hungara (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hungara (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hungara (101/qwertz/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hungara (101/qwertz/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hungara (101/qwertz/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hungara (101/qwertz/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hungara (101/qwerty/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hungara (101/qwerty/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hungara (101/qwerty/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hungara (101/qwerty/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hungara (102/qwertz/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hungara (102/qwertz/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hungara (102/qwertz/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hungara (102/qwertz/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hungara (102/qwerty/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hungara (102/qwerty/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hungara (102/qwerty/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islanda" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islanda (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islanda (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islanda (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islanda (Dvorako)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebrea" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebrea (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebrea (fonetika)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebrea (Biblia, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Itala" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Itala (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Itala (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Itala (usona klavaro kun italaj literoj)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Kartvela (Italujo)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Itala (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japana" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japana (Kanao)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japana (Kanao 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japana (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japana (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japana (Dvorako)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiza" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiza (fonetika)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Kmera (Kamboĝo)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazaĥa" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rusa (Kazaĥujo, kun Kazaĥa)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazaĥa (kun Rusa)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (norma aranĝo proponita de STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Hispana (Latin-amerika)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Hispana (Latin-amerika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Hispana (Latin-amerika, inkluzive senpaŝa tildo)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 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:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litova" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litova (norma)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litova (Usona klavaro kun litovaj literoj)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litova (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litova (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litova (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Latva" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Latva (citila variaĵo)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Latva (tilda variaĵo)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Latva (variaĵo F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Latva (moderna)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Latva (komforteca, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Latva (adaptita)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maoria" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegra" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegra (Cirila)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegra (Cirila, Z kaj ZHE interŝanĝita)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegra (Latina Unikodo)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegra (Latina qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegra (Latina Unikodo qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegra (Cirila kun angul-citiloj)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegra (Latina kun angul-citiloj)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Makedona" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Makedona (forigi senpaŝajn klavojn)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Malta" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Malta (kun usona aranĝo)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongola" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvega" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvega (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvega (Dvorako)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Norda Samea (Norvegujo)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Norda Samea (Norvegujo, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvega (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvega (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvega (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Pola" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Pola (malmoderna)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Pola (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Pola (Dvorako)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Pola (Dvorako, polaj citiloj ĉe citila klavo)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Pola (Dvorako, polaj citiloj ĉe klavo 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaŝuba" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rusa (Polujo, fonetika Dvorako)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Pola (Dvorako por programistoj)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugala" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugala (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugala (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugala (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugala (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugala (Macintosh, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugala (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugala (Nativo por usonaj klavaroj)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugalujo, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumana" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumana (subhoko)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumana (norma)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumana (norma subhoko)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumana (WinKeys)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rusa" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rusa (fonetika)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rusa (fonetika WinKeys)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rusa (skribmaŝina)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rusa (malmoderna)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rusa (skribmaŝina, malmoderna)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatara" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Oseta (malmoderna)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Oseta (WinKeys)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Ĉuvaŝa" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Ĉuvaŝa (Latina)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurta" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komia" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakuta" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rusa (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rusa (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serba (Rusujo)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baŝkira" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Maria" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serba" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serba (Cirila, Z kaj ZHE interŝanĝita)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serba (Latina)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serba (Latina Unikoda)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serba (Latina qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serba (Latina Unikoda qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serba (Cirila kun angul-citiloj)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serba (Latina kun angul-citiloj)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Panona Rusina (homofonia)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Panona Rusina" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovena" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovena (uzi angul-citilojn por citiloj)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovena (Usona klavaro kun slovenaj literoj)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovaka" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovaka (etendita Retroklino)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovaka (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovaka (qwerty, etendita Retroklino)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Hispana" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Hispana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Hispana (inkluzive senpaŝa tildo)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Hispana (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Hispana (Dvorako)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 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:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Kataluna (Hispanujo, kun centro-punktita L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Hispana (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Sveda" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Sveda (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Sveda (Dvorako)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rusa (Svedujo, fonetika)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rusa (Svedujo, fonetika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Norda Samea (Svedujo)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Sveda (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sveda (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Sveda gestlingvo" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Germana (Svislando)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Germana (Svislando, malmoderna)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Germana (Svislando, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Germana (Svislando, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Franca (Svislando)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Franca (Svislando, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Franca (Svislando, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Franca (Svislando, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Germana (Svislando, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Araba (Sirio)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Siria" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Siria (fonetika)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurda, (Sirio, Latina Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurda (Sirio, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurda (Sirio, Latina Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Taĝika" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Taĝika (malmoderna)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (fonetika)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamila (Sri-lanko, Unikodo)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamila (Sri-lanko, Skribmaŝino TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Taja" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Taja (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Taja (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turka" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turka (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turka (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turka (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurda (Turkujo, Latina Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurda, (Turkujo, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurda (Turkujo, Latina Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turka (internacia kun senpaŝaj klavoj)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krime-tatara (Turka Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krime-tatara (Turka F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krime-tatara (Turka Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajvana" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajvana (indiĝena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajvano)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrajna" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrajna (fonetika)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrajna (skribmaŝino)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrajna (WinKeys)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrajna (malmoderna)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrajna (norma RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rusa (Ukrajnujo, norma RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrajna (homofonia)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angla (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angla (UK, etenditaj WinKeys)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angla (UK, internacia kun senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angla (UK, Dvorako)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angla (UK, Dvorako kun interpunkcio de UK)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angla (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angla (UK, internacia Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angla (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbeka" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbeka (Latina)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vjetnama" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Korea" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Korea (kongrua al 101/104 klavoj)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japana (Serio PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlanda" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlanda (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogamo" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogamo (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdua (Pakistano)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdua (Pakistano, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdua (Pakistano, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Araba (Pakistano)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sinda" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Mahla" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angla (Sud-Afriko)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (translokitaj punktokomo kaj citilo, malaktuale)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepala" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angla (Niĝerio)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhara" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Volofa" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Brajla" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Brajla (maldekstra mano)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Brajla (dekstra mano)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmena" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmena (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Franca (Malio, alternativa)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angla (Malio , usona Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angla (Malio, usona internacia)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Svahila (Tanzanio)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Svahila (Kenjo)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Cvana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipina" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipina (QWERTY, Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipina (Capewell-Dvorako, Latina)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipina (Capewell-Dvorako, Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipina (Capewell-QWERF 2006, Latina)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipina (Capewell-QWERF 2006, Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipina (Colemak, latina)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipina (Colemak, Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipina (Dvorako, latina)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipina (Dvorako Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldava" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldava (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Ni alternigas al alia aranĝo." -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Dekstra Alt (dum premata)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Maldekstra Alt (dum premata)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Maldekstra Win (dum premata)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Dekstra Win (dum premata)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Iu ajn Win-klavo (dum premata)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Dekstra Ctrl (dum premata)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Dekstra Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Maldekstra Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Ambaŭ klavoj Shift kune" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Ambaŭ klavoj Alt kune" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Ambaŭ klavoj Ctrl kune" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Maldekstra Ctrl+maldekstra Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Dekstra Ctrl+dekstra Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Maldekstra Alt+maldekstra Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Space" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Maldekstra Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Dekstra Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maldekstra Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Dekstra Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Maldekstra Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Dekstra Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Ruluma Baskulo" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Klavo por elekti 3-an nivelon" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Iu ajn Win-klavo" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Iu ajn klavo Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Dekstra Alt, Shift+dekstra Alt estas Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Dekstra Alt neniam elektas la 3-an nivelon" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enen-klavo en ciferklavaro" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Retroklino" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Malpli-signo/Pli-signo>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Malpli-signo/Pli-signo> elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Pozicio de la klavo Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock kiel Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Maldekstra Ctrl kiel Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Permuti Ctrl kaj Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Maldekstre de 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Malsupre maldekstre" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Dekstra Ctrl kiel dekstran Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu kiel dekstran Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Dekstra Alt kiel dekstran Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Interŝanĝi la maldekstrajn klavojn Alt kun Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Interŝanĝi la maldekstrajn klavojn Win kun Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Maldekstra Alt kiel Ctrl, maldekstra Ctrl kiel Win, maldekstra Win kiel Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Uzi la LED de klavaro por indiki alternativan aranĝon" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Aranĝo de ciferklavaro" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Malmoderna" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj; operaci-simboloj en la apriora nivelo)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Malmoderna Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Ciferklavaro Wang 724 kun Unikodaj aldonoj (sagoj kaj operaci-simboloj; operaci-simboloj en la apriora nivelo)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Deksesume" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefon-stilo" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Funkciado de la forig-klavo de la ciferklavaro" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Malmoderna klavo kun punkto" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Malmoderna klavo kun komo" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Kvar-nivela klavo kun punkto" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Kvar-nivela klavo kun punkto, limigite al Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Kvar-nivela klavo kun komo" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Kvar-nivela klavo kun abstraktaj apartigiloj" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Punktokomo ĉe la 3-a nivelo" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Funkciado de la klavo Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock uzas internan uskligon; Shift ne influas Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock alternigas la ordinaran uskligon de alfabetaj signoj" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Igi Caps Lock kroman Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Permuti ESC kaj Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Igi Caps Lock kroman ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Igi Caps Lock kroman Retroklavon" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Igi Caps Lock kroman Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Igi Caps Lock kroman Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock alternigas Shift (influante ĉiujn klavojn)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock estas malebligita" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Igi Caps Lock kroman Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Alt/Win, klava funkciado" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Aldoni laŭnorman funkciadon al la klavo Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt kaj Meta estas ĉe la klavoj Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl estas mapita al Win-klavoj (kaj al la kutimaj klavoj Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl estas mapita al klavoj Alt, Alt estas mapita al Win-klavoj" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta estas mapita al la Win-klavoj" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta estas mapita al la maldekstra Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper estas mapita al la Win-klavoj" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 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:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt estas permutita kun Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Pozicio de la klavo Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-a nivelo de maldekstra Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-a nivelo de dekstra Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-a nivelo de Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-a nivelo de maldekstra Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-a nivelo de dekstra Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-a nivelo de Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-a nivelo de <Malpli/Pli-signo>" # La klavo plej ofte estas markita "Pause". -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Ceteraj kongruaj opcioj" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Aprioraj klavoj en ciferklavaro" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift funkcias kun la ciferklavaro same kiel en MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift ne nuligas Num Lock, sed elektas 3-an nivelon" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Specialaj klavoj (Ctrl+Alt+<klavo>) traktotas en servilo" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift nuligas Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Ebligi kromajn tipografiajn signojn" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Ambaŭ klavoj Shift kune alternigas Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 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:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Ambaŭ klavoj Shift kune alternigas ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock alternigas PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 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:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Ebligi registradon de ŝlosoj kaj fenestro-arboj" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Aldono de valut-signoj al iuj klavoj" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Eŭro-signo ĉe E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Eŭro-signo ĉe 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Eŭro-signo ĉe 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Eŭro-signo ĉe 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupio ĉe 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Klavo por elekti 5-an nivelon" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Malpli-signo/Pli-signo> elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Kutima spaco-signo ĉe iu ajn nivelo" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Ne-rompebla spaco-signo ĉe la 2-a nivelo" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nul-larĝa ne-kuniga signo ĉe dua nivelo" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Elektebloj de japana klavaro" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kanaa klavo Lock ŝlosigas" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Retropaŝo laŭ estilo NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Igi Zenkaku Hankaku kroman ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Aldono de Esperantaj literoj kun supersignoj" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Al la ekvivalenta klavo en aranĝo Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Al la ekvivalenta klavo en dvoraka aranĝo." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Al la ekvivalenta klavo en dvoraka aranĝo." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Teni klav-kongrueco kun malnovaj klavkodoj de Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Kongrueco kun klavoj de Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Klav-sekvo por formortigi la X-servilon" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4021,150 +4041,160 @@ msgstr "Couer d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angla (US, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angla (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Pola (internacia kun senpaŝaj klavoj)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Pola (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Pola (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krime-tatara (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumana (komforteca Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serba (kunmiksado de diakritaĵoj anstataŭ senpaŝaj klavoj)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rusa (kun aranĝo ukrainia-belorusa)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rusa (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armena (fonetika OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebrea (Biblia, fonetika SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Araba (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugala (Brazilo, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Ĉeĥa (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Nederlanda (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estona (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fina (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Franca (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Greka (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Itala (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japana (Sun Tipo 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japana (Sun Tipo 7 - kongrua kun pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japana (Sun Tipo 7 - kongrua kun Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvega (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugala (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovaka (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Hispana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Sveda (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Germana (Svislando, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Franca (Svislando, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turka (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrajna (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angla (UK, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Kore (Sun Tipo 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengala" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugala (Brazilo, Nativo por Esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Angla (alternigi aranĝon per la klavo multipliko/divido)" @@ -4435,9 +4465,6 @@ msgstr "Kore (Sun Tipo 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladeŝo" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/es.po b/xorg-server/xkeyboard-config/po/es.po index 4f7bb3156..a784d6043 100644 --- a/xorg-server/xkeyboard-config/po/es.po +++ b/xorg-server/xkeyboard-config/po/es.po @@ -1,3778 +1,4253 @@ -# translation of xkeyboard-config-2.3.99.po to Spanish +# translation of xkeyboard-config-2.10.99.po to Spanish # This file is distributed under the same license as the xkeyboard-config package. # Copyright (C) 2006 The free software foundation # Francisco Javier F. Serrador , 2006. # Jorge González , 2009, 2010, 2011. +# Facundo Dario Illanes , 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.3.99\n" +"Project-Id-Version: xkeyboard-config-2.10.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-10-02 15:54+0200\n" -"Last-Translator: Jorge González González \n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-27 17:13-0300\n" +"Last-Translator: Facundo Dario Illanes \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.9.1\n" +"X-Generator: Gtranslator 2.91.6\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: ../rules/base.xml.in.h:1 -msgid "<Less/Greater>" -msgstr "<Menor que/Mayor que>" +msgid "Generic 101-key PC" +msgstr "PC genérico 101 teclas" #: ../rules/base.xml.in.h:2 -msgid "<Less/Greater> (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)" -msgstr "<Menor que/Mayor que> (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)" +msgid "Generic 102-key (Intl) PC" +msgstr "PC genérico 102 teclas (intl)" #: ../rules/base.xml.in.h:3 -msgid "<Less/Greater> chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "<Menor que/Mayor que> elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Generic 104-key PC" +msgstr "PC genérico 104 teclas" #: ../rules/base.xml.in.h:4 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Generic 105-key (Intl) PC" +msgstr "PC genérico 105 teclas (intl)" #: ../rules/base.xml.in.h:5 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Dell 101-key PC" +msgstr "Dell PC 101 teclas" #: ../rules/base.xml.in.h:6 -msgid "A4Tech KB-21" -msgstr "A4Tech KB-21" +msgid "Dell Latitude series laptop" +msgstr "Portátil 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 Wireless Desktop RFKB-23" +msgid "Everex STEPnote" +msgstr "Everex STEPnote" #: ../rules/base.xml.in.h:9 -msgid "ATM/phone-style" -msgstr "Cajero automático/estilo teléfono" +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 Model XP5" #: ../rules/base.xml.in.h:13 -msgid "Acer Laptop" -msgstr "Portátil Acer" +msgid "PC-98xx Series" +msgstr "PC-98xx Series" #: ../rules/base.xml.in.h:14 -msgid "Add the standard behavior to Menu key" -msgstr "Añadir el comportamiento estándar a la tecla Menú." +msgid "A4Tech KB-21" +msgstr "A4Tech KB-21" #: ../rules/base.xml.in.h:15 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Añadir las tildes circunflejas del esperanto (supersigno)" +msgid "A4Tech KBS-8" +msgstr "A4Tech KBS-8" #: ../rules/base.xml.in.h:16 -msgid "Adding currency signs to certain keys" -msgstr "Añadir símbolo de divisa a algunas teclas" +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "A4Tech Wireless Desktop 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 "Afgano" +msgid "Azona RF2300 wireless Internet Keyboard" +msgstr "Azona RF2300 wireless Internet Keyboard" #: ../rules/base.xml.in.h:19 -msgid "Akan" -msgstr "Akan" +msgid "Advance Scorpius KI" +msgstr "Advance Scorpius KI" #: ../rules/base.xml.in.h:20 -msgid "Albanian" -msgstr "Albanés" +msgid "Brother Internet Keyboard" +msgstr "Brother Internet Keyboard" #: ../rules/base.xml.in.h:21 -msgid "Alt and Meta are on Alt keys" -msgstr "Alt y Meta están en las teclas Alt" +msgid "BTC 5113RF Multimedia" +msgstr "BTC 5113RF Multimedia" #: ../rules/base.xml.in.h:22 -msgid "Alt is mapped to Right Win, Super to Menu" -msgstr "Alt está mapeada a la tecla Windows derecho y Super a la tecla Menú" +msgid "BTC 5126T" +msgstr "BTC 5126T" #: ../rules/base.xml.in.h:23 -msgid "Alt+Caps Lock" -msgstr "Alt+Bloq Mayús" +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+Mayús" +msgid "BTC 9000A" +msgstr "BTC 9000A" #: ../rules/base.xml.in.h:26 -msgid "Alt+Space" -msgstr "Alt+Espacio" +msgid "BTC 9001AH" +msgstr "BTC 9001AH" #: ../rules/base.xml.in.h:27 -msgid "Alt/Win key behavior" -msgstr "Comportamiento de la tecla Alt/Windows" +msgid "BTC 5090" +msgstr "BTC 5090" #: ../rules/base.xml.in.h:28 -msgid "Amharic" -msgstr "Amharico" +msgid "BTC 9019U" +msgstr "BTC 9019U" #: ../rules/base.xml.in.h:29 -msgid "Any Alt key" -msgstr "Cualquier tecla Alt" +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "BTC 9116U Mini Wireless Internet and Gaming" #: ../rules/base.xml.in.h:30 -msgid "Any Win key" -msgstr "Cualquier tecla Windows" +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 "Cualquier tecla Windows (al pulsarla)" +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 (opción alternativa)" #: ../rules/base.xml.in.h:33 -msgid "Apple Aluminium Keyboard (ANSI)" -msgstr "Teclado de aluminio de 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 "Teclado de aluminio de Apple (ISO)" +msgid "Cherry CyMotion Expert" +msgstr "Cherry CyMotion Expert" #: ../rules/base.xml.in.h:35 -msgid "Apple Aluminium Keyboard (JIS)" -msgstr "Teclado de aluminio de 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 "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Num)" +msgid "Chicony Internet Keyboard" +msgstr "Chicony Internet Keyboard" #: ../rules/base.xml.in.h:37 -msgid "Apple Laptop" -msgstr "Portátil Apple" +msgid "Chicony KU-0108" +msgstr "Chicony KU-0108" #: ../rules/base.xml.in.h:38 -msgid "Arabic" -msgstr "Árabe" +msgid "Chicony KU-0420" +msgstr "Chicony KU-0420" #: ../rules/base.xml.in.h:39 -msgid "Arabic (Buckwalter)" -msgstr "Árabe (Buckwalter)" +msgid "Chicony KB-9885" +msgstr "Chicony KB-9885" #: ../rules/base.xml.in.h:40 -msgid "Arabic (Morocco)" -msgstr "Árabbe (Marruecos)" +msgid "Compaq Easy Access Keyboard" +msgstr "Compaq Easy Access Keyboard" #: ../rules/base.xml.in.h:41 -msgid "Arabic (Pakistan)" -msgstr "Árabe (Pakistán)" +msgid "Compaq Internet Keyboard (7 keys)" +msgstr "Compaq Internet Keyboard (7 teclas)" #: ../rules/base.xml.in.h:42 -msgid "Arabic (Syria)" -msgstr "Árabe (Siria)" +msgid "Compaq Internet Keyboard (13 keys)" +msgstr "Compaq Internet Keyboard (13 teclas)" #: ../rules/base.xml.in.h:43 -msgid "Arabic (azerty)" -msgstr "Árabe (azerty)" +msgid "Compaq Internet Keyboard (18 keys)" +msgstr "Compaq Internet Keyboard (18 teclas)" #: ../rules/base.xml.in.h:44 -msgid "Arabic (azerty/digits)" -msgstr "Árabe (azerty/dígitos)" +msgid "Cherry CyMotion Master Linux" +msgstr "Cherry CyMotion Master Linux" #: ../rules/base.xml.in.h:45 -msgid "Arabic (digits)" -msgstr "Árabe (dígitos)" +msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" #: ../rules/base.xml.in.h:46 -msgid "Arabic (qwerty)" -msgstr "Árabe (qwery)" +msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" #: ../rules/base.xml.in.h:47 -msgid "Arabic (qwerty/digits)" -msgstr "Árabe (qwerty/dígitos)" +msgid "Compaq iPaq Keyboard" +msgstr "Compaq iPaq Keyboard" -#: ../rules/base.xml.in.h:48 ../rules/base.extras.xml.in.h:2 -msgid "Armenian" -msgstr "Armenio" +#: ../rules/base.xml.in.h:48 +msgid "Dell" +msgstr "Dell" #: ../rules/base.xml.in.h:49 -msgid "Armenian (alternative eastern)" -msgstr "Armenio (alternativa oriental)" +msgid "Dell SK-8125" +msgstr "Dell SK-8125" #: ../rules/base.xml.in.h:50 -msgid "Armenian (alternative phonetic)" -msgstr "Armenio (alternativa fonética)" +msgid "Dell SK-8135" +msgstr "Dell SK-8135" #: ../rules/base.xml.in.h:51 -msgid "Armenian (eastern)" -msgstr "Armenio (oriental)" +msgid "Dell USB Multimedia Keyboard" +msgstr "Dell USB Multimedia Keyboard" #: ../rules/base.xml.in.h:52 -msgid "Armenian (phonetic)" -msgstr "Armenio (fonético)" +msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" #: ../rules/base.xml.in.h:53 -msgid "Armenian (western)" -msgstr "Armenio (occidental)" +msgid "Dell Laptop/notebook Precision M series" +msgstr "Dell Laptop/notebook Precision M series" #: ../rules/base.xml.in.h:54 -msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" -msgstr "Asturiano (español, con H de medio punto y L de medio punto)" +msgid "Dexxa Wireless Desktop Keyboard" +msgstr "Dexxa Wireless Desktop Keyboard" #: ../rules/base.xml.in.h:55 -msgid "Asus Laptop" -msgstr "Portátil Asus" +msgid "Diamond 9801 / 9802 series" +msgstr "Diamond 9801 / 9802 series" #: ../rules/base.xml.in.h:56 -msgid "At bottom left" -msgstr "En la parte inferior izquierdo" +msgid "DTK2000" +msgstr "DTK2000" #: ../rules/base.xml.in.h:57 -msgid "At left of 'A'" -msgstr "A la izquierdo de la «A»" +msgid "Ennyah DKB-1008" +msgstr "Ennyah DKB-1008" #: ../rules/base.xml.in.h:58 -msgid "Avatime" -msgstr "Avatime" +msgid "Fujitsu-Siemens Computers AMILO laptop" +msgstr "Portátil Fujitsu-Siemens Computers AMILO" #: ../rules/base.xml.in.h:59 -msgid "Azerbaijani" -msgstr "Azerbaijaní" +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 "Azerbaijani (Cyrillic)" -msgstr "Azerbajaní (cirílico)" +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 wireless Internet Keyboard" +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 Multimedia" +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, teclado genérico" #: ../rules/base.xml.in.h:68 -msgid "BTC 9001AH" -msgstr "BTC 9001AH" +msgid "Logitech G15 extra keys via G15daemon" +msgstr "Logitech G15 extra keys via G15daemon" #: ../rules/base.xml.in.h:69 -msgid "BTC 9019U" -msgstr "BTC 9019U" +msgid "Hewlett-Packard Internet Keyboard" +msgstr "Hewlett-Packard Internet Keyboard" #: ../rules/base.xml.in.h:70 -msgid "BTC 9116U Mini Wireless Internet and Gaming" -msgstr "BTC 9116U Mini Wireless Internet and Gaming" +msgid "Hewlett-Packard SK-250x Multimedia Keyboard" +msgstr "Hewlett-Packard SK-250x Multimedia Keyboard" #: ../rules/base.xml.in.h:71 -msgid "Backslash" -msgstr "Contrabarra" +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 "Contrabarra (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)" +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "Hewlett-Packard Omnibook XE3 GF" #: ../rules/base.xml.in.h:73 -msgid "Bambara" -msgstr "Bambara" +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "Hewlett-Packard Omnibook XT1000" #: ../rules/base.xml.in.h:74 -msgid "Bashkirian" -msgstr "Bashkiriano" +msgid "Hewlett-Packard Pavilion dv5" +msgstr "Hewlett-Packard Pavilion dv5" #: ../rules/base.xml.in.h:75 -msgid "Belarusian" -msgstr "Bielorruso" +msgid "Hewlett-Packard Pavilion ZT11xx" +msgstr "Hewlett-Packard Pavilion ZT11xx" #: ../rules/base.xml.in.h:76 -msgid "Belarusian (Latin)" -msgstr "Bielorruso (latino)" +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "Hewlett-Packard Omnibook 500 FA" #: ../rules/base.xml.in.h:77 -msgid "Belarusian (legacy)" -msgstr "Bielorruso (heredado)" +msgid "Hewlett-Packard Omnibook 5xx" +msgstr "Hewlett-Packard Omnibook 5xx" #: ../rules/base.xml.in.h:78 -msgid "Belgian" -msgstr "Belga" +msgid "Hewlett-Packard nx9020" +msgstr "Hewlett-Packard nx9020" #: ../rules/base.xml.in.h:79 -msgid "Belgian (ISO alternate)" -msgstr "Belga (alternativa 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 "Belga (teclas muertas de Sun)" +msgid "Honeywell Euroboard" +msgstr "Honeywell Euroboard" #: ../rules/base.xml.in.h:81 -msgid "Belgian (Wang model 724 azerty)" -msgstr "Belga (modelo azerty 724 de Wang)" +msgid "Hewlett-Packard Mini 110 Notebook" +msgstr "Hewlett-Packard Mini 110 Notebook" #: ../rules/base.xml.in.h:82 -msgid "Belgian (alternative)" -msgstr "Belga (alternativa)" +msgid "IBM Rapid Access" +msgstr "IBM Rapid Access" #: ../rules/base.xml.in.h:83 -msgid "Belgian (alternative, Sun dead keys)" -msgstr "Belga (alternativa, teclas muertas de Sun)" +msgid "IBM Rapid Access II" +msgstr "IBM Rapid Access II" #: ../rules/base.xml.in.h:84 -msgid "Belgian (alternative, latin-9 only)" -msgstr "Belga (alternativa, sólo 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 "Belga (eliminar teclas muertas)" +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 Keyboard" #: ../rules/base.xml.in.h:89 -msgid "Bengali" -msgstr "Bengalí" +msgid "Logitech Cordless Desktop LX-300" +msgstr "Logitech Cordless Desktop LX-300" #: ../rules/base.xml.in.h:90 -msgid "Bengali (Baishakhi Inscript)" -msgstr "Bengalí (Inscript Baishakhi)" +msgid "Logitech Internet 350 Keyboard" +msgstr "Logitech Internet 350 Keyboard" #: ../rules/base.xml.in.h:91 -msgid "Bengali (Baishakhi)" -msgstr "Bengalí (Baishakhi)" +msgid "Logitech Media Elite Keyboard" +msgstr "Logitech Media Elite Keyboard" #: ../rules/base.xml.in.h:92 -msgid "Bengali (Bornona)" -msgstr "Bengalí (Bornona)" +msgid "Logitech Cordless Desktop" +msgstr "Logitech Cordless Desktop" #: ../rules/base.xml.in.h:93 -msgid "Bengali (Probhat)" -msgstr "Bengalí (Probhat)" +msgid "Logitech Cordless Desktop iTouch" +msgstr "Logitech Cordless Desktop iTouch" #: ../rules/base.xml.in.h:94 -msgid "Bengali (Uni Gitanjali)" -msgstr "Bengalí (Uni Gitanjali)" +msgid "Logitech Cordless Desktop Navigator" +msgstr "Logitech Cordless Desktop Navigator" #: ../rules/base.xml.in.h:95 -msgid "Berber (Morocco, Tifinagh alternative phonetic)" -msgstr "Bereber (Marruecos, alternativa fonética tifinagh)" +msgid "Logitech Cordless Desktop Optical" +msgstr "Logitech Cordless Desktop Optical" #: ../rules/base.xml.in.h:96 -msgid "Berber (Morocco, Tifinagh alternative)" -msgstr "Bereber (Marruecos, alternativa tifinagh)" +msgid "Logitech Cordless Desktop (alternate option)" +msgstr "Logitech Cordless Desktop Pro (opción alternativa)" #: ../rules/base.xml.in.h:97 -msgid "Berber (Morocco, Tifinagh extended phonetic)" -msgstr "Bereber (Marruecos, tifinagh fonético extendido)" +msgid "Logitech Cordless Desktop Pro (alternate option 2)" +msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)" #: ../rules/base.xml.in.h:98 -msgid "Berber (Morocco, Tifinagh extended)" -msgstr "Bereber (Marruecos, tifinagh extendido)" +msgid "Logitech Cordless Freedom/Desktop Navigator" +msgstr "Logitech Cordless Freedom/Desktop Navigator" #: ../rules/base.xml.in.h:99 -msgid "Berber (Morocco, Tifinagh phonetic)" -msgstr "Bereber (Marruecos, tifinagh fonético)" +msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)" #: ../rules/base.xml.in.h:100 -msgid "Berber (Morocco, Tifinagh)" -msgstr "Bereber (Marruecos, Tifinagh)" +msgid "Logitech Internet Keyboard" +msgstr "Logitech Internet Keyboard" #: ../rules/base.xml.in.h:101 -msgid "Bosnian" -msgstr "Bosnio" +msgid "Logitech iTouch" +msgstr "Logitech iTouch" #: ../rules/base.xml.in.h:102 -msgid "Bosnian (US keyboard with Bosnian digraphs)" -msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)" +msgid "Logitech Internet Navigator Keyboard" +msgstr "Logitech Internet Navigator Keyboard" #: ../rules/base.xml.in.h:103 -msgid "Bosnian (US keyboard with Bosnian letters)" -msgstr "Bosnio (teclado de EE. UU. con letras bosnias)" +msgid "Logitech Cordless Desktop EX110" +msgstr "Logitech Cordless Desktop EX110" #: ../rules/base.xml.in.h:104 -msgid "Bosnian (use Bosnian digraphs)" -msgstr "Bosnio (usar dígrafos bosnios)" +msgid "Logitech iTouch Internet Navigator Keyboard SE" +msgstr "Logitech iTouch Internet Navigator Keyboard SE" #: ../rules/base.xml.in.h:105 -msgid "Bosnian (use guillemets for quotes)" -msgstr "Bosnio (usar guillemots para comillas)" +msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" #: ../rules/base.xml.in.h:106 -msgid "Both Alt keys together" -msgstr "Ambas teclas Alt juntas" +msgid "Logitech Ultra-X Keyboard" +msgstr "Logitech Ultra-X Keyboard" #: ../rules/base.xml.in.h:107 -msgid "Both Ctrl keys together" -msgstr "Ambas teclas Ctrl juntas" +msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard" #: ../rules/base.xml.in.h:108 -msgid "Both Shift keys together" -msgstr "Ambas teclas Mayús juntas" +msgid "Logitech diNovo Keyboard" +msgstr "Logitech diNovo Keyboard" #: ../rules/base.xml.in.h:109 -msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates" -msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús, una tecla Mayús lo desactiva" +msgid "Logitech diNovo Edge Keyboard" +msgstr "Logitech diNovo Edge Keyboard" #: ../rules/base.xml.in.h:110 -msgid "Both Shift-Keys together toggle Caps Lock" -msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" +msgid "Memorex MX1998" +msgstr "Memorex MX1998" #: ../rules/base.xml.in.h:111 -msgid "Both Shift-Keys together toggle ShiftLock" -msgstr "Ambas teclas Mayús juntas conmutan Bloq Despl" +msgid "Memorex MX2500 EZ-Access Keyboard" +msgstr "Memorex MX2500 EZ-Access Keyboard" #: ../rules/base.xml.in.h:112 -msgid "Braille" -msgstr "Braille" +msgid "Memorex MX2750" +msgstr "Memorex MX2750" #: ../rules/base.xml.in.h:113 -msgid "Braille (left hand)" -msgstr "Braille (zurdo)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000" #: ../rules/base.xml.in.h:114 -msgid "Braille (right hand)" -msgstr "Braille (diestro)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" #: ../rules/base.xml.in.h:115 -msgid "Brother Internet Keyboard" -msgstr "Brother Internet Keyboard" +msgid "Microsoft Internet Keyboard" +msgstr "Microsoft Internet Keyboard" #: ../rules/base.xml.in.h:116 -msgid "Bulgarian" -msgstr "Búlgaro" +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 "Bulgarian (new phonetic)" -msgstr "Búlgaro (fonética nueva)" +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 "Bulgarian (traditional phonetic)" -msgstr "Búlgaro (fonética tradicional)" +msgid "Microsoft Natural Keyboard Pro OEM" +msgstr "Microsoft Natural Keyboard Pro OEM" #: ../rules/base.xml.in.h:119 -msgid "Burmese" -msgstr "Burmese" +msgid "ViewSonic KU-306 Internet Keyboard" +msgstr "Teclado para internet ViewSonic KU-306" #: ../rules/base.xml.in.h:120 -msgid "Cameroon Multilingual (azerty)" -msgstr "Camerunés multilingüe (azerty)" +msgid "Microsoft Internet Keyboard Pro, Swedish" +msgstr "Microsoft Internet Keyboard Pro, sueco" #: ../rules/base.xml.in.h:121 -msgid "Cameroon Multilingual (qwerty)" -msgstr "Camerunés multilingüe (qwerty)" +msgid "Microsoft Office Keyboard" +msgstr "Microsoft Office Keyboard" #: ../rules/base.xml.in.h:122 -msgid "Canadian Multilingual" -msgstr "Canadiense multilingüe" +msgid "Microsoft Wireless Multimedia Keyboard 1.0A" +msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" #: ../rules/base.xml.in.h:123 -msgid "Canadian Multilingual (first part)" -msgstr "Canadiense multilingüe (primera parte)" +msgid "Microsoft Natural Keyboard Elite" +msgstr "Microsoft Natural Keyboard Elite" #: ../rules/base.xml.in.h:124 -msgid "Canadian Multilingual (second part)" -msgstr "Canadiense multilingüe (segunda parte)" +msgid "Microsoft Comfort Curve Keyboard 2000" +msgstr "Microsoft Comfort Curve Keyboard 2000" #: ../rules/base.xml.in.h:125 -msgid "Caps Lock" -msgstr "Bloqueo de mayúsculas" +msgid "Ortek MCK-800 MM/Internet keyboard" +msgstr "Teclado Oretec MCK-800 MM/Internet" #: ../rules/base.xml.in.h:126 -msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)" -msgstr "Bloq Mayús (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)" +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 "Bloq Mayús (a la primera distribución), Mayús+Bloq Mayús (a la última distribución)" +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 "Bloq Mayús (al pulsarse), Alt+Bloq Mayús realiza la acción original de bloqueo de mayúsculas" +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 "Bloq Mayús actúa como Mayús con bloqueo; Mayús «pausa» Bloq Mayús" +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 "Bloq Mayús actúa como Mayús con bloqueo; Mayús no afecta a Bloq Mayús" +msgid "Sanwa Supply SKB-KG3" +msgstr "Sanwa Supply SKB-KG3" #: ../rules/base.xml.in.h:131 -msgid "Caps Lock as Ctrl" -msgstr "Bloq Mayús como Ctrl" +msgid "SK-1300" +msgstr "SK-1300" #: ../rules/base.xml.in.h:132 -msgid "Caps Lock is disabled" -msgstr "Bloq Mayús está desactivado" +msgid "SK-2500" +msgstr "SK-2500" #: ../rules/base.xml.in.h:133 -msgid "Caps Lock key behavior" -msgstr "Comportamiento de Bloq Mayús" +msgid "SK-6200" +msgstr "SK-6200" #: ../rules/base.xml.in.h:134 -msgid "Caps Lock toggles Shift so all keys are affected" -msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas" +msgid "SK-7100" +msgstr "SK-7100" #: ../rules/base.xml.in.h:135 -msgid "Caps Lock toggles normal capitalization of alphabetic characters" -msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos" +msgid "Super Power Multimedia Keyboard" +msgstr "Super Power Multimedia Keyboard" #: ../rules/base.xml.in.h:136 -msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock" -msgstr "Bloq Mayús usa la capitalización interna; Mayús «pausa» el Bloq Mayús" +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 "Bloq Mayús usa la capitalización interna; Mayús no afecta a Bloq Mayús" +msgid "SVEN Slim 303" +msgstr "SVEN Slim 303" #: ../rules/base.xml.in.h:138 -msgid "Catalan" -msgstr "Catalán" +msgid "Symplon PaceBook (tablet PC)" +msgstr "Symplon PaceBook (tablet PC)" #: ../rules/base.xml.in.h:139 -msgid "Catalan (Spain, with middle-dot L)" -msgstr "Catalán (español, con L de medio punto)" +msgid "Toshiba Satellite S3000" +msgstr "Toshiba Satellite S3000" #: ../rules/base.xml.in.h:140 -msgid "Cherokee" -msgstr "Cherokee" +msgid "Trust Wireless Keyboard Classic" +msgstr "Trust Wireless Keyboard Classic" #: ../rules/base.xml.in.h:141 -msgid "Cherry B.UNLIMITED" -msgstr "Cherry B.UNLIMITED" +msgid "Trust Direct Access Keyboard" +msgstr "Trust Direct Access Keyboard" #: ../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 (opción alternativa)" +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:modo 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:modo JP)" #: ../rules/base.xml.in.h:148 -msgid "Chicony Internet Keyboard" -msgstr "Chicony Internet Keyboard" +msgid "Yahoo! Internet Keyboard" +msgstr "Yahoo! Internet Keyboard" #: ../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 "Chino" +msgid "Macintosh Old" +msgstr "Macintosh antiguo" #: ../rules/base.xml.in.h:153 -msgid "Chuvash" -msgstr "Chuvash" +msgid "Happy Hacking Keyboard for Mac" +msgstr "Happy Hacking Keyboard para Mac" #: ../rules/base.xml.in.h:154 -msgid "Chuvash (Latin)" -msgstr "Cuvash (latino)" +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 "Cló Gaelach" +msgid "Acer Laptop" +msgstr "Portátil Acer" #: ../rules/base.xml.in.h:157 -msgid "Compaq Easy Access Keyboard" -msgstr "Compaq Easy Access Keyboard" +msgid "Asus Laptop" +msgstr "Portátil Asus" #: ../rules/base.xml.in.h:158 -msgid "Compaq Internet Keyboard (13 keys)" -msgstr "Compaq Internet Keyboard (13 teclas)" +msgid "Apple" +msgstr "Apple" #: ../rules/base.xml.in.h:159 -msgid "Compaq Internet Keyboard (18 keys)" -msgstr "Compaq Internet Keyboard (18 teclas)" +msgid "Apple Laptop" +msgstr "Portátil Apple" #: ../rules/base.xml.in.h:160 -msgid "Compaq Internet Keyboard (7 keys)" -msgstr "Compaq Internet Keyboard (7 teclas)" +msgid "Apple Aluminium Keyboard (ANSI)" +msgstr "Teclado de aluminio de Apple (ANSI)" #: ../rules/base.xml.in.h:161 -msgid "Compaq iPaq Keyboard" -msgstr "Compaq iPaq Keyboard" +msgid "Apple Aluminium Keyboard (ISO)" +msgstr "Teclado de aluminio de Apple (ISO)" #: ../rules/base.xml.in.h:162 -msgid "Compose key position" -msgstr "Posición de la tecla Componer" +msgid "Apple Aluminium Keyboard (JIS)" +msgstr "Teclado de aluminio de Apple (JIS)" #: ../rules/base.xml.in.h:163 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Retroceso" +msgid "SILVERCREST Multimedia Wireless Keyboard" +msgstr "SILVERCREST Multimedia Wireless Keyboard" #: ../rules/base.xml.in.h:164 -msgid "Control is mapped to Alt keys, Alt is mapped to Win keys" -msgstr "Control está mapeada a las teclas Alt, Alt está mapeado a las teclas Windows" +msgid "Laptop/notebook eMachines m68xx" +msgstr "Laptop/notebook eMachines m68xx" #: ../rules/base.xml.in.h:165 -msgid "Control is mapped to Win keys (and the usual Ctrl keys)" -msgstr "Control está mapeada a las teclas Windows (y las teclas Ctrl usuales)" +msgid "BenQ X-Touch" +msgstr "BenQ X-Touch" #: ../rules/base.xml.in.h:166 -msgid "Creative Desktop Wireless 7000" -msgstr "Creative Desktop Wireless 7000" +msgid "BenQ X-Touch 730" +msgstr "BenQ X-Touch 730" #: ../rules/base.xml.in.h:167 -msgid "Crimean Tatar (Turkish Alt-Q)" -msgstr "Tártaro de Crimea (turco Alt-Q)" +msgid "BenQ X-Touch 800" +msgstr "BenQ X-Touch 800" #: ../rules/base.xml.in.h:168 -msgid "Crimean Tatar (Turkish F)" -msgstr "Tártaro de Crimea (F turca)" +msgid "Happy Hacking Keyboard" +msgstr "Happy Hacking Keyboard" #: ../rules/base.xml.in.h:169 -msgid "Crimean Tatar (Turkish Q)" -msgstr "Tártaro de Crimea (Q turca)" +msgid "Classmate PC" +msgstr "Classmate PC" #: ../rules/base.xml.in.h:170 -msgid "Croatian" -msgstr "Croata" +msgid "OLPC" +msgstr "OLPC" #: ../rules/base.xml.in.h:171 -msgid "Croatian (US keyboard with Croatian digraphs)" -msgstr "Croata (teclado de EE. UU. con dígrafos croatas)" +msgid "Sun Type 7 USB" +msgstr "Sun tipo 7 USB" #: ../rules/base.xml.in.h:172 -msgid "Croatian (US keyboard with Croatian letters)" -msgstr "Croata (teclado de EE. UU. con letras croatas)" +msgid "Sun Type 7 USB (European layout)" +msgstr "Sun tipo 7 USB (Distribución Europea)" #: ../rules/base.xml.in.h:173 -msgid "Croatian (use Croatian digraphs)" -msgstr "Croata (usar dígrafos croatas)" +msgid "Sun Type 7 USB (Unix layout)" +msgstr "Sun tipo 7 USB (Distribución Unix)" #: ../rules/base.xml.in.h:174 -msgid "Croatian (use guillemets for quotes)" -msgstr "Croata (usar guillemots para comillas)" +msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key" +msgstr "Sun tipo 7 USB (Distribución Japonesa) / Japonesa 106 teclas" #: ../rules/base.xml.in.h:175 -msgid "Ctrl key position" -msgstr "Posición de la tecla Ctrl" +msgid "Sun Type 6/7 USB" +msgstr "Sun tipo 6/7 USB" #: ../rules/base.xml.in.h:176 -msgid "Ctrl+Shift" -msgstr "Ctrl+Mayús" +msgid "Sun Type 6/7 USB (European layout)" +msgstr "Sun tipo 6/7 USB (Distribución Europea)" #: ../rules/base.xml.in.h:177 -msgid "Czech" -msgstr "Checo" +msgid "Sun Type 6 USB (Unix layout)" +msgstr "Sun tipo 6 USB (Distribución Unix)" #: ../rules/base.xml.in.h:178 -msgid "Czech (UCW layout, accented letters only)" -msgstr "Checo (distribución UCW, sólo teclas con tilde)" +msgid "Sun Type 6 USB (Japanese layout)" +msgstr "Sun tipo 6 USB (Distribución Japonesa)" #: ../rules/base.xml.in.h:179 -msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)" +msgid "Sun Type 6 (Japanese layout)" +msgstr "Sun tipo 6 (Distribución Japonesa)" #: ../rules/base.xml.in.h:180 -msgid "Czech (qwerty)" -msgstr "Checo (qwery)" +msgid "Targa Visionary 811" +msgstr "Targa Visionary 811" #: ../rules/base.xml.in.h:181 -msgid "Czech (qwerty, extended Backslash)" -msgstr "Checo (qwerty, contrabarra extendida)" +msgid "Unitek KB-1925" +msgstr "Unitek KB-1925" #: ../rules/base.xml.in.h:182 -msgid "Czech (with <\\|> key)" -msgstr "Checo (con tecla «\\|»)" +msgid "FL90" +msgstr "FL90" #: ../rules/base.xml.in.h:183 -msgid "DTK2000" -msgstr "DTK2000" +msgid "Creative Desktop Wireless 7000" +msgstr "Creative Desktop Wireless 7000" #: ../rules/base.xml.in.h:184 -msgid "Danish" -msgstr "Danés" - -#: ../rules/base.xml.in.h:185 -msgid "Danish (Dvorak)" -msgstr "Danés (Dvorak)" - -#: ../rules/base.xml.in.h:186 -msgid "Danish (Macintosh)" -msgstr "Danés (Macintosh)" +msgid "Htc Dream phone" +msgstr "Teléfono HTC Dream" -#: ../rules/base.xml.in.h:187 -msgid "Danish (Macintosh, eliminate dead keys)" -msgstr "Danés (Macintosh, eliminar teclas muertas)" +#. 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 "Danés (eliminar teclas muertas)" +#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34 +msgid "English (US)" +msgstr "Inglés (EE. UU.)" +#. Keyboard indicator for Cherokee layouts #: ../rules/base.xml.in.h:189 -msgid "Default numeric keypad keys" -msgstr "Teclas del teclado numérico predeterminado" +msgid "chr" +msgstr "chr" #: ../rules/base.xml.in.h:190 -msgid "Dell" -msgstr "Dell" +msgid "Cherokee" +msgstr "Cherokee" #: ../rules/base.xml.in.h:191 -msgid "Dell 101-key PC" -msgstr "Dell PC 101 teclas" +msgid "English (US, with euro on 5)" +msgstr "Inglés (EE. UU. con euro en el 5)" #: ../rules/base.xml.in.h:192 -msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" -msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgid "English (US, international with dead keys)" +msgstr "Inglés (EE. UU. internacional con teclas muertas)" #: ../rules/base.xml.in.h:193 -msgid "Dell Laptop/notebook Precision M series" -msgstr "Dell Laptop/notebook Precision M series" +msgid "English (US, alternative international)" +msgstr "Inglés (EE. UU. alternativo internacional)" #: ../rules/base.xml.in.h:194 -msgid "Dell Latitude series laptop" -msgstr "Portátil Dell Latitude" +msgid "English (Colemak)" +msgstr "Inglés (Colemak)" #: ../rules/base.xml.in.h:195 -msgid "Dell Precision M65" -msgstr "Dell Precision M65" +msgid "English (Dvorak)" +msgstr "Inglés (Dvorak)" #: ../rules/base.xml.in.h:196 -msgid "Dell SK-8125" -msgstr "Dell SK-8125" +msgid "English (Dvorak, international with dead keys)" +msgstr "Inglés (Dvorak, internacional con teclas muertas)" #: ../rules/base.xml.in.h:197 -msgid "Dell SK-8135" -msgstr "Dell SK-8135" +msgid "English (Dvorak alternative international no dead keys)" +msgstr "Inglés (alternativo Dvorak internacional sin teclas muertas)" #: ../rules/base.xml.in.h:198 -msgid "Dell USB Multimedia Keyboard" -msgstr "Dell USB Multimedia Keyboard" +msgid "English (left handed Dvorak)" +msgstr "Inglés (Dvorak para zurdos)" #: ../rules/base.xml.in.h:199 -msgid "Dexxa Wireless Desktop Keyboard" -msgstr "Dexxa Wireless Desktop Keyboard" +msgid "English (right handed Dvorak)" +msgstr "Inglés (Dvorak para diestros)" #: ../rules/base.xml.in.h:200 -msgid "Dhivehi" -msgstr "Dhivehi" +msgid "English (classic Dvorak)" +msgstr "Inglés (Dvorak clásico)" #: ../rules/base.xml.in.h:201 -msgid "Diamond 9801 / 9802 series" -msgstr "Diamond 9801 / 9802 series" - -#: ../rules/base.xml.in.h:202 -msgid "Dutch" -msgstr "Holandés" +msgid "English (programmer Dvorak)" +msgstr "Inglés (Dvorak de programador)" -#: ../rules/base.xml.in.h:203 -msgid "Dutch (Macintosh)" -msgstr "Holandés (Macintosh)" +#. Keyboard indicator for Russian layouts +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 +msgid "ru" +msgstr "ru" #: ../rules/base.xml.in.h:204 -msgid "Dutch (Sun dead keys)" -msgstr "Holandés (teclas muertas de Sun)" +msgid "Russian (US, phonetic)" +msgstr "Ruso (EE. UU., fonético)" #: ../rules/base.xml.in.h:205 -msgid "Dutch (standard)" -msgstr "Holandés (estándar)" +msgid "English (Macintosh)" +msgstr "Inglés (Macintosh)" #: ../rules/base.xml.in.h:206 -msgid "Dzongkha" -msgstr "Dzongkha" +msgid "English (international AltGr dead keys)" +msgstr "Inglés (internacional con teclas muertas por AltGr)" #: ../rules/base.xml.in.h:207 -msgid "Enable extra typographic characters" -msgstr "Activar caracteres tipográficos adicionales" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Inglés (las teclas dividir/multiplicar cambian la distribución)" #: ../rules/base.xml.in.h:208 -msgid "English (Cameroon Dvorak)" -msgstr "Inglés (Dvorak de Camerún)" +msgid "Serbo-Croatian (US)" +msgstr "Serbocroata (EE. UU.)" #: ../rules/base.xml.in.h:209 -msgid "English (Cameroon)" -msgstr "Inglés (Camerún)" +msgid "English (Workman)" +msgstr "Inglés (Workman)" #: ../rules/base.xml.in.h:210 -msgid "English (Canada)" -msgstr "Inglés (Canadá)" - -#: ../rules/base.xml.in.h:211 -msgid "English (Colemak)" -msgstr "Inglés (Colemark)" +msgid "English (Workman, international with dead keys)" +msgstr "Inglés (Workman, internacional con teclas muertas)" -#: ../rules/base.xml.in.h:212 -msgid "English (Dvorak alternative international no dead keys)" -msgstr "Inglés (alternativa Dvorak internacional sin teclas muertas)" +#. 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 "Inglés (Dvorak internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:214 -msgid "English (Dvorak)" -msgstr "Inglés (Dvorak)" +msgid "Afghani" +msgstr "Afgano" +#. Keyboard indicator for Pashto layouts #: ../rules/base.xml.in.h:215 -msgid "English (Ghana)" -msgstr "Inglés (Ghana)" +msgid "ps" +msgstr "ps" #: ../rules/base.xml.in.h:216 -msgid "English (Ghana, GILLBT)" -msgstr "Inglés (Ghana, GILLBT)" - -#: ../rules/base.xml.in.h:217 -msgid "English (Ghana, multilingual)" -msgstr "Inglés (Ghana, multilingue)" +msgid "Pashto" +msgstr "Pashto" +#. Keyboard indicator for Uzbek layouts #: ../rules/base.xml.in.h:218 -msgid "English (India, with RupeeSign)" -msgstr "Inglés (India, con signo de rupia)" +msgid "uz" +msgstr "uz" #: ../rules/base.xml.in.h:219 -msgid "English (Macintosh)" -msgstr "Inglés (Macintosh)" +msgid "Uzbek (Afghanistan)" +msgstr "Uzbeco (Afganistán)" #: ../rules/base.xml.in.h:220 -msgid "English (Mali, US Macintosh)" -msgstr "Inglés (Malí, Macintosh de EE. UU.)" +msgid "Pashto (Afghanistan, OLPC)" +msgstr "Pashto (Afganistán, OLPC)" #: ../rules/base.xml.in.h:221 -msgid "English (Mali, US international)" -msgstr "Inglés (Malí, EE. UU. internacional)" +msgid "Persian (Afghanistan, Dari OLPC)" +msgstr "Persa (Afganistán, OLPC dari)" #: ../rules/base.xml.in.h:222 -msgid "English (Nigeria)" -msgstr "Inglés (Nigeria)" - -#: ../rules/base.xml.in.h:223 -msgid "English (South Africa)" -msgstr "Inglés (Sudáfrica)" +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "Uzbeco (Afganistán, OLPC)" -#: ../rules/base.xml.in.h:224 -msgid "English (UK)" -msgstr "Inglés (RU)" +#. Keyboard indicator for Arabic layouts +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 +msgid "ar" +msgstr "ar" -#: ../rules/base.xml.in.h:225 -msgid "English (UK, Colemak)" -msgstr "Inglés (RU, Colemark)" +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 +msgid "Arabic" +msgstr "Árabe" #: ../rules/base.xml.in.h:226 -msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Inglés (RU, Dvorak con puntuación para RU)" +msgid "Arabic (azerty)" +msgstr "Árabe (azerty)" #: ../rules/base.xml.in.h:227 -msgid "English (UK, Dvorak)" -msgstr "Inglés (RU, Dvorak)" +msgid "Arabic (azerty/digits)" +msgstr "Árabe (azerty/dígitos)" #: ../rules/base.xml.in.h:228 -msgid "English (UK, Macintosh international)" -msgstr "Inglés (RU, Macintosh internacional)" +msgid "Arabic (digits)" +msgstr "Árabe (dígitos)" #: ../rules/base.xml.in.h:229 -msgid "English (UK, Macintosh)" -msgstr "Inglés (RU, Macintosh)" +msgid "Arabic (qwerty)" +msgstr "Árabe (qwery)" #: ../rules/base.xml.in.h:230 -msgid "English (UK, extended WinKeys)" -msgstr "Inglés (RU, extendido con teclas Windows)" +msgid "Arabic (qwerty/digits)" +msgstr "Árabe (qwerty/dígitos)" #: ../rules/base.xml.in.h:231 -msgid "English (UK, international with dead keys)" -msgstr "Inglés (RU, internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:232 ../rules/base.extras.xml.in.h:8 -msgid "English (US)" -msgstr "Inglés (EE. UU.)" +msgid "Arabic (Buckwalter)" +msgstr "Árabe (Buckwalter)" +#. Keyboard indicator for Albanian layouts #: ../rules/base.xml.in.h:233 -msgid "English (US, alternative international)" -msgstr "Inglés (EE. UU. alternativa internacional)" +msgid "sq" +msgstr "sq" #: ../rules/base.xml.in.h:234 -msgid "English (US, international with dead keys)" -msgstr "Inglés (EE. UU. internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:235 -msgid "English (US, with euro on 5)" -msgstr "Inglés (EE. UU. con euro en el 5)" +msgid "Albanian" +msgstr "Albanés" -#: ../rules/base.xml.in.h:236 -msgid "English (classic Dvorak)" -msgstr "Inglés (Dvorak clásico)" +#. Keyboard indicator for Armenian layouts +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 +msgid "hy" +msgstr "hy" -#: ../rules/base.xml.in.h:237 -msgid "English (international AltGr dead keys)" -msgstr "Inglés (internacional con teclas muertas Alt Gr)" +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 +msgid "Armenian" +msgstr "Armenio" #: ../rules/base.xml.in.h:238 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Inglés (cambio de distribución en la tecla multiplicar/dividir)" +msgid "Armenian (phonetic)" +msgstr "Armenio (fonético)" #: ../rules/base.xml.in.h:239 -msgid "English (left handed Dvorak)" -msgstr "Inglés (Dvorak para zurdos)" +msgid "Armenian (alternative phonetic)" +msgstr "Armenio (alternativo fonético)" #: ../rules/base.xml.in.h:240 -msgid "English (programmer Dvorak)" -msgstr "Inglés (Dvorak de programador)" +msgid "Armenian (eastern)" +msgstr "Armenio (oriental)" #: ../rules/base.xml.in.h:241 -msgid "English (right handed Dvorak)" -msgstr "Inglés (Dvorak para diestros)" +msgid "Armenian (western)" +msgstr "Armenio (occidental)" #: ../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 "Intro en el teclado numérico" +msgid "Armenian (alternative eastern)" +msgstr "Armenio (alternativo oriental)" -#: ../rules/base.xml.in.h:244 -msgid "Esperanto" -msgstr "Esperanto" +#. 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 "Esperanto (Portugal, Nativo)" +msgid "German (Austria)" +msgstr "Alemán (Austria)" #: ../rules/base.xml.in.h:246 -msgid "Esperanto (displaced semicolon and quote, obsolete)" -msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)" +msgid "German (Austria, eliminate dead keys)" +msgstr "Alemán (Austria, eliminar teclas muertas)" #: ../rules/base.xml.in.h:247 -msgid "Estonian" -msgstr "Estonio" +msgid "German (Austria, Sun dead keys)" +msgstr "Alemán (Austria, teclas muertas de Sun)" #: ../rules/base.xml.in.h:248 -msgid "Estonian (Dvorak)" -msgstr "Estonio (Dvorak)" - -#: ../rules/base.xml.in.h:249 -msgid "Estonian (US keyboard with Estonian letters)" -msgstr "Estonio (teclado EE. UU. con letras estonias)" +msgid "German (Austria, Macintosh)" +msgstr "Alemán (Austria, Macintosh)" +#. Keyboard indicator for Azerbaijani layouts #: ../rules/base.xml.in.h:250 -msgid "Estonian (eliminate dead keys)" -msgstr "Estonio (eliminar teclas muertas)" +msgid "az" +msgstr "az" #: ../rules/base.xml.in.h:251 -msgid "Euro on 2" -msgstr "Euro en el 2" +msgid "Azerbaijani" +msgstr "Azerbaijaní" #: ../rules/base.xml.in.h:252 -msgid "Euro on 4" -msgstr "Euro en el 4" - -#: ../rules/base.xml.in.h:253 -msgid "Euro on 5" -msgstr "Euro en el 5" +msgid "Azerbaijani (Cyrillic)" +msgstr "Azerbajaní (cirílico)" +#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:254 -msgid "Euro on E" -msgstr "Euro en la E" +msgid "by" +msgstr "by" #: ../rules/base.xml.in.h:255 -msgid "Everex STEPnote" -msgstr "Everex STEPnote" +msgid "Belarusian" +msgstr "Bielorruso" #: ../rules/base.xml.in.h:256 -msgid "Ewe" -msgstr "Ewe" +msgid "Belarusian (legacy)" +msgstr "Bielorruso (arcaico)" #: ../rules/base.xml.in.h:257 -msgid "FL90" -msgstr "FL90" - -#: ../rules/base.xml.in.h:258 -msgid "Faroese" -msgstr "Faroés" +msgid "Belarusian (Latin)" +msgstr "Bielorruso (latino)" -#: ../rules/base.xml.in.h:259 -msgid "Faroese (eliminate dead keys)" -msgstr "Faroés (eliminar teclas muertas)" +#. Keyboard indicator for Belgian layouts +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 +msgid "be" +msgstr "be" -#: ../rules/base.xml.in.h:260 -msgid "Filipino" -msgstr "Filipino" +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 +msgid "Belgian" +msgstr "Belga" #: ../rules/base.xml.in.h:261 -msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Filipino (Capewell-Dvorak baybayin)" +msgid "Belgian (alternative)" +msgstr "Belga (alternativo)" #: ../rules/base.xml.in.h:262 -msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Filipino (Capewell-Dvorak latino)" +msgid "Belgian (alternative, Latin-9 only)" +msgstr "Belga (alternativo, sólo latin-9)" #: ../rules/base.xml.in.h:263 -msgid "Filipino (Capewell-QWERF 2006 Baybayin)" -msgstr "Filipino (Capewell-QWERF 2006 baybayin)" +msgid "Belgian (alternative, Sun dead keys)" +msgstr "Belga (alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:264 -msgid "Filipino (Capewell-QWERF 2006 Latin)" -msgstr "Filipino (Capewell-QWERF 2006 latino)" +msgid "Belgian (ISO alternate)" +msgstr "Belga (alternativo ISO)" #: ../rules/base.xml.in.h:265 -msgid "Filipino (Colemak Baybayin)" -msgstr "Filipino (Colemak baybayin)" +msgid "Belgian (eliminate dead keys)" +msgstr "Belga (eliminar teclas muertas)" #: ../rules/base.xml.in.h:266 -msgid "Filipino (Colemak Latin)" -msgstr "Filipino (Colemak latino)" +msgid "Belgian (Sun dead keys)" +msgstr "Belga (teclas muertas de Sun)" #: ../rules/base.xml.in.h:267 -msgid "Filipino (Dvorak Baybayin)" -msgstr "Filipino (Dvorak baybayin)" - -#: ../rules/base.xml.in.h:268 -msgid "Filipino (Dvorak Latin)" -msgstr "Filipino (Dvorak latino)" +msgid "Belgian (Wang model 724 azerty)" +msgstr "Belga (modelo azerty 724 de Wang)" +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 -msgid "Filipino (QWERTY Baybayin)" -msgstr "Filipino (QWERTY baybayin)" +msgid "bn" +msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Finnish" -msgstr "Finlandés" +msgid "Bangla" +msgstr "Bangladesh" #: ../rules/base.xml.in.h:271 -msgid "Finnish (Macintosh)" -msgstr "Finlandés (Macintosh)" - -#: ../rules/base.xml.in.h:272 -msgid "Finnish (classic)" -msgstr "Finlandés (clásico)" +msgid "Bangla (Probhat)" +msgstr "Bengalí (Probhat)" +#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 -msgid "Finnish (classic, eliminate dead keys)" -msgstr "Finlandés (clásico, eliminar teclas muertas)" +msgid "in" +msgstr "in" + +#: ../rules/base.xml.in.h:274 +msgid "Indian" +msgstr "Indio" + +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" +msgstr "Bengalí (India)" -#. 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" -msgstr "Tecla de cuarto nivel con separadores abstractos" +msgid "Bangla (India, Probhat)" +msgstr "Bengalí (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Four-level key with comma" -msgstr "Tecla de cuarto nivel con coma" +msgid "Bangla (India, Baishakhi)" +msgstr "Bengalí (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Four-level key with dot" -msgstr "Tecla de cuarto nivel con punto" +msgid "Bangla (India, Bornona)" +msgstr "Bengalí (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Four-level key with dot, latin-9 restriction" -msgstr "Tecla de cuarto nivel con punto, restricción latin-9" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bengalí (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Four-level key with momayyez" -msgstr "Tecla de cuarto nivel con momayyez" - -#: ../rules/base.xml.in.h:281 -msgid "French" -msgstr "Francés" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bengalí (India, Inscript Baishakhi)" +#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 -msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Francés (bepo, ergonómico, forma Dvorak)" +msgid "gu" +msgstr "gu" #: ../rules/base.xml.in.h:283 -msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)" -msgstr "Francés (bepo, ergonómico, forma Dvorak, sólo latin-9)" - -#: ../rules/base.xml.in.h:284 -msgid "French (Breton)" -msgstr "Francés (bretón)" +msgid "Gujarati" +msgstr "Gujarati" +#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:285 -msgid "French (Cameroon)" -msgstr "Francés (Camerún)" +msgid "pa" +msgstr "pa" -#: ../rules/base.xml.in.h:286 ../rules/base.extras.xml.in.h:11 -msgid "French (Canada)" -msgstr "Francés (Canadá)" +#: ../rules/base.xml.in.h:286 +msgid "Punjabi (Gurmukhi)" +msgstr "Panyabí (gurmukhi)" #: ../rules/base.xml.in.h:287 -msgid "French (Canada, Dvorak)" -msgstr "Francés (Canadá, Dvorak)" - -#: ../rules/base.xml.in.h:288 -msgid "French (Canada, legacy)" -msgstr "Francés (Canadá, heredado)" +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "Panyabí (gurmukhi jhelum)" +#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:289 -msgid "French (Democratic Republic of the Congo)" -msgstr "Francés (República Democrática del Congo)" +msgid "kn" +msgstr "kn" #: ../rules/base.xml.in.h:290 -msgid "French (Dvorak)" -msgstr "Francés (Dvorak)" +msgid "Kannada" +msgstr "Kannada" #: ../rules/base.xml.in.h:291 -msgid "French (Guinea)" -msgstr "Francés (Guinea)" - -#: ../rules/base.xml.in.h:292 -msgid "French (Macintosh)" -msgstr "Francés (Macintosh)" +msgid "Kannada (KaGaPa phonetic)" +msgstr "Canarés (fonético KaGaPa)" +#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 -msgid "French (Mali, alternative)" -msgstr "Francés (Malí, alternativa)" +msgid "ml" +msgstr "ml" #: ../rules/base.xml.in.h:294 -msgid "French (Morocco)" -msgstr "Francés (Marruecos)" - +msgid "Malayalam" +msgstr "Malayalam" + #: ../rules/base.xml.in.h:295 -msgid "French (Sun dead keys)" -msgstr "Francés (teclas muertas de Sun)" +msgid "Malayalam (Lalitha)" +msgstr "Malayalam (lalitha)" #: ../rules/base.xml.in.h:296 -msgid "French (Switzerland)" -msgstr "Francés (Suiza)" - -#: ../rules/base.xml.in.h:297 -msgid "French (Switzerland, Macintosh)" -msgstr "Francés (Suiza, Macintosh)" +msgid "Malayalam (enhanced Inscript with Rupee Sign)" +msgstr "Malayam (Inscript mejorado con signo de rupia)" +#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:298 -msgid "French (Switzerland, Sun dead keys)" -msgstr "Francés (Suiza, teclas muertas de Sun)" +msgid "or" +msgstr "or" #: ../rules/base.xml.in.h:299 -msgid "French (Switzerland, eliminate dead keys)" -msgstr "Francés (Suiza, eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:300 -msgid "French (alternative)" -msgstr "Francés (alternativa)" +msgid "Oriya" +msgstr "Oriya" +#. Keyboard indicator for Tamil layouts #: ../rules/base.xml.in.h:301 -msgid "French (alternative, Sun dead keys)" -msgstr "Francés (alternativa, teclas muertas de Sun)" +msgid "ta" +msgstr "ta" #: ../rules/base.xml.in.h:302 -msgid "French (alternative, eliminate dead keys)" -msgstr "Francés (alternativa, eliminar teclas muertas)" +msgid "Tamil (Unicode)" +msgstr "Tamil (Unicode)" #: ../rules/base.xml.in.h:303 -msgid "French (alternative, latin-9 only)" -msgstr "Francés (alternativa, sólo latin-9)" +msgid "Tamil (keyboard with numerals)" +msgstr "Tamil (teclado con números)" #: ../rules/base.xml.in.h:304 -msgid "French (eliminate dead keys)" -msgstr "Francés (eliminar teclas muertas)" +msgid "Tamil (TAB typewriter)" +msgstr "Tamil (máquina de escribir TAB)" #: ../rules/base.xml.in.h:305 -msgid "French (legacy, alternative)" -msgstr "Francés (heredado, alternativa)" +msgid "Tamil (TSCII typewriter)" +msgstr "Tamil (máquina de escribir TSCII)" #: ../rules/base.xml.in.h:306 -msgid "French (legacy, alternative, Sun dead keys)" -msgstr "Francés (heredado, alternativa, teclas muertas de Sun)" - -#: ../rules/base.xml.in.h:307 -msgid "French (legacy, alternative, eliminate dead keys)" -msgstr "Francés (heredado, alternativa, eliminar teclas muertas)" +msgid "Tamil" +msgstr "Tamil" +#. Keyboard indicator for Telugu layouts #: ../rules/base.xml.in.h:308 -msgid "Fujitsu-Siemens Computers AMILO laptop" -msgstr "Portátil Fujitsu-Siemens Computers AMILO" +msgid "te" +msgstr "te" #: ../rules/base.xml.in.h:309 -msgid "Fula" -msgstr "Fula" +msgid "Telugu" +msgstr "Telugu" #: ../rules/base.xml.in.h:310 -msgid "Ga" -msgstr "Ga" - -#: ../rules/base.xml.in.h:311 -msgid "Generic 101-key PC" -msgstr "PC genérico 101 teclas" +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (fonético KaPaGa)" +#. Keyboard indicator for Urdu layouts #: ../rules/base.xml.in.h:312 -msgid "Generic 102-key (Intl) PC" -msgstr "PC genérico 102 teclas (intl)" +msgid "ur" +msgstr "ur" #: ../rules/base.xml.in.h:313 -msgid "Generic 104-key PC" -msgstr "PC genérico 104 teclas" +msgid "Urdu (phonetic)" +msgstr "Urdu (fonético)" #: ../rules/base.xml.in.h:314 -msgid "Generic 105-key (Intl) PC" -msgstr "PC genérico 105 teclas (intl)" +msgid "Urdu (alternative phonetic)" +msgstr "Urdu (fonético alternativo)" #: ../rules/base.xml.in.h:315 -msgid "Genius Comfy KB-12e" -msgstr "Genius Comfy KB-12e" - -#: ../rules/base.xml.in.h:316 -msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" -msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" +msgid "Urdu (WinKeys)" +msgstr "Urdu (teclas Windows)" +#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:317 -msgid "Genius Comfy KB-21e-Scroll" -msgstr "Genius Comfy KB-21e-Scroll" +msgid "hi" +msgstr "hi" #: ../rules/base.xml.in.h:318 -msgid "Genius KB-19e NB" -msgstr "Genius KB-19e NB" +msgid "Hindi (Bolnagri)" +msgstr "Hindi (bolnagri)" #: ../rules/base.xml.in.h:319 -msgid "Genius KKB-2050HS" -msgstr "Genius KKB-2050HS" +msgid "Hindi (Wx)" +msgstr "Hindi (Wx)" #: ../rules/base.xml.in.h:320 -msgid "Georgian" -msgstr "Georgiano" - -#: ../rules/base.xml.in.h:321 -msgid "Georgian (France, AZERTY Tskapo)" -msgstr "Georgiano (Francia, AZERTY tskapo)" +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (fonético KaGaPa)" +#. Keyboard indicator for Sanskrit layouts #: ../rules/base.xml.in.h:322 -msgid "Georgian (Italy)" -msgstr "Georgiano (Italia)" +msgid "sa" +msgstr "sa" #: ../rules/base.xml.in.h:323 -msgid "Georgian (MESS)" -msgstr "Georgiano (MESS)" - -#: ../rules/base.xml.in.h:324 -msgid "Georgian (ergonomic)" -msgstr "Georgiano (ergonómico)" +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sánscrito (fonético KaGaPa)" -#: ../rules/base.xml.in.h:325 ../rules/base.extras.xml.in.h:12 -msgid "German" -msgstr "Alemán" +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" #: ../rules/base.xml.in.h:326 -msgid "German (Austria)" -msgstr "Alemán (Austria)" +msgid "Marathi (KaGaPa phonetic)" +msgstr "Maratí (fonético KaGaPa)" #: ../rules/base.xml.in.h:327 -msgid "German (Austria, Macintosh)" -msgstr "Alemán (Austria, Macintosh)" - -#: ../rules/base.xml.in.h:328 -msgid "German (Austria, Sun dead keys)" -msgstr "Alemán (Austria, teclas muertas de Sun)" +msgid "English (India, with RupeeSign)" +msgstr "Inglés (India, con signo de rupia)" +#. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 -msgid "German (Austria, eliminate dead keys)" -msgstr "Alemán (Austria, eliminar teclas muertas)" +msgid "bs" +msgstr "bs" #: ../rules/base.xml.in.h:330 -msgid "German (Dvorak)" -msgstr "Alemán (Dvorak)" +msgid "Bosnian" +msgstr "Bosnio" #: ../rules/base.xml.in.h:331 -msgid "German (Macintosh)" -msgstr "Alemán (Macintosh)" +msgid "Bosnian (use guillemets for quotes)" +msgstr "Bosnio (usar guillemots para comillas)" #: ../rules/base.xml.in.h:332 -msgid "German (Macintosh, eliminate dead keys)" -msgstr "Alemán (Macintosh, eliminar teclas muertas)" +msgid "Bosnian (use Bosnian digraphs)" +msgstr "Bosnio (usar dígrafos bosnios)" #: ../rules/base.xml.in.h:333 -msgid "German (Neo 2)" -msgstr "Alemán (Neo 2)" +msgid "Bosnian (US keyboard with Bosnian digraphs)" +msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)" #: ../rules/base.xml.in.h:334 -msgid "German (Sun dead keys)" -msgstr "Alemán (teclas muertas de Sun)" - -#: ../rules/base.xml.in.h:335 -msgid "German (Switzerland)" -msgstr "Alemán (Suiza)" +msgid "Bosnian (US keyboard with Bosnian letters)" +msgstr "Bosnio (teclado de EE. UU. con letras bosnias)" -#: ../rules/base.xml.in.h:336 -msgid "German (Switzerland, Macintosh)" -msgstr "Alemán (Suiza, Macintosh)" +#. Keyboard indicator for Portuguese layouts +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 +msgid "pt" +msgstr "pt" -#: ../rules/base.xml.in.h:337 -msgid "German (Switzerland, Sun dead keys)" -msgstr "Alemán (Suiza, teclas muertas de Sun)" +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 +msgid "Portuguese (Brazil)" +msgstr "Portugués (Brasil)" #: ../rules/base.xml.in.h:338 -msgid "German (Switzerland, eliminate dead keys)" -msgstr "Alemán (Suiza, eliminar teclas muertas)" +msgid "Portuguese (Brazil, eliminate dead keys)" +msgstr "Portugués (Brasil, eliminar teclas muertas)" #: ../rules/base.xml.in.h:339 -msgid "German (Switzerland, legacy)" -msgstr "Alemán (Suiza, heredado)" +msgid "Portuguese (Brazil, Dvorak)" +msgstr "Portugués (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "German (dead acute)" -msgstr "Alemán (acento muerto)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugués (Brasil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "German (dead grave acute)" -msgstr "Alemán (acento grave muerto)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugués (Brasil, Nativo para teclados de EE. UU.)" #: ../rules/base.xml.in.h:342 -msgid "German (eliminate dead keys)" -msgstr "Alemán (eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:343 -msgid "Greek" -msgstr "Griego" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brasil, Nativo)" +#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 -msgid "Greek (eliminate dead keys)" -msgstr "Griego (eliminar teclas muertas)" +msgid "bg" +msgstr "bg" #: ../rules/base.xml.in.h:345 -msgid "Greek (extended)" -msgstr "Griego (extendido)" +msgid "Bulgarian" +msgstr "Búlgaro" #: ../rules/base.xml.in.h:346 -msgid "Greek (polytonic)" -msgstr "Griego (politónico)" +msgid "Bulgarian (traditional phonetic)" +msgstr "Búlgaro (fonética tradicional)" #: ../rules/base.xml.in.h:347 -msgid "Greek (simple)" -msgstr "Griego (simple)" +msgid "Bulgarian (new phonetic)" +msgstr "Búlgaro (fonética nueva)" #: ../rules/base.xml.in.h:348 -msgid "Gujarati" -msgstr "Gujarati" - -#: ../rules/base.xml.in.h:349 -msgid "Gyration" -msgstr "Gyration" +msgid "Arabic (Morocco)" +msgstr "Árabbe (Marruecos)" -#: ../rules/base.xml.in.h:350 -msgid "HTC Dream" -msgstr "HTC Dream" +#. Keyboard indicator for French layouts +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 +msgid "fr" +msgstr "fr" #: ../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 para Mac" +msgid "French (Morocco)" +msgstr "Francés (Marruecos)" +#. Keyboard indicator for Berber layouts #: ../rules/base.xml.in.h:353 -msgid "Hausa" -msgstr "Hausa" +msgid "ber" +msgstr "ber" #: ../rules/base.xml.in.h:354 -msgid "Hebrew" -msgstr "Hebreo" +msgid "Berber (Morocco, Tifinagh)" +msgstr "Bereber (Marruecos, tifinagh)" #: ../rules/base.xml.in.h:355 -msgid "Hebrew (Biblical, Tiro)" -msgstr "Hebreo (bíblico, tiro)" +msgid "Berber (Morocco, Tifinagh alternative)" +msgstr "Bereber (Marruecos, alternativo tifinagh)" #: ../rules/base.xml.in.h:356 -msgid "Hebrew (lyx)" -msgstr "Hebreo (lyx)" +msgid "Berber (Morocco, Tifinagh alternative phonetic)" +msgstr "Bereber (Marruecos, alternativo fonético tifinagh)" #: ../rules/base.xml.in.h:357 -msgid "Hebrew (phonetic)" -msgstr "Hebreo (fonético)" +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "Bereber (Marruecos, tifinagh extendido)" #: ../rules/base.xml.in.h:358 -msgid "Hewlett-Packard Internet Keyboard" -msgstr "Hewlett-Packard Internet Keyboard" +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "Bereber (Marruecos, tifinagh fonético)" #: ../rules/base.xml.in.h:359 -msgid "Hewlett-Packard Mini 110 Notebook" -msgstr "Hewlett-Packard Mini 110 Notebook" - -#: ../rules/base.xml.in.h:360 -msgid "Hewlett-Packard Omnibook 500 FA" -msgstr "Hewlett-Packard Omnibook 500 FA" +msgid "Berber (Morocco, Tifinagh extended phonetic)" +msgstr "Bereber (Marruecos, tifinagh fonético extendido)" +#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:361 -msgid "Hewlett-Packard Omnibook 5xx" -msgstr "Hewlett-Packard Omnibook 5xx" +msgid "cm" +msgstr "cm" #: ../rules/base.xml.in.h:362 -msgid "Hewlett-Packard Omnibook 6000/6100" -msgstr "Hewlett-Packard Omnibook 6000/6100" +msgid "English (Cameroon)" +msgstr "Inglés (Camerún)" #: ../rules/base.xml.in.h:363 -msgid "Hewlett-Packard Omnibook XE3 GC" -msgstr "Hewlett-Packard Omnibook XE3 GC" +msgid "French (Cameroon)" +msgstr "Francés (Camerún)" #: ../rules/base.xml.in.h:364 -msgid "Hewlett-Packard Omnibook XE3 GF" -msgstr "Hewlett-Packard Omnibook XE3 GF" +msgid "Cameroon Multilingual (qwerty)" +msgstr "Camerunés multilingüe (qwerty)" #: ../rules/base.xml.in.h:365 -msgid "Hewlett-Packard Omnibook XT1000" -msgstr "Hewlett-Packard Omnibook XT1000" +msgid "Cameroon Multilingual (azerty)" +msgstr "Camerunés multilingüe (azerty)" #: ../rules/base.xml.in.h:366 -msgid "Hewlett-Packard Pavilion ZT11xx" -msgstr "Hewlett-Packard Pavilion ZT11xx" - -#: ../rules/base.xml.in.h:367 -msgid "Hewlett-Packard Pavilion dv5" -msgstr "Hewlett-Packard Pavilion dv5" +msgid "Cameroon Multilingual (Dvorak)" +msgstr "Camerunés multilingüe (Dvorak)" +#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 -msgid "Hewlett-Packard SK-250x Multimedia Keyboard" -msgstr "Hewlett-Packard SK-250x Multimedia Keyboard" +msgid "my" +msgstr "my" #: ../rules/base.xml.in.h:369 -msgid "Hewlett-Packard nx9020" -msgstr "Hewlett-Packard nx9020" - -#: ../rules/base.xml.in.h:370 -msgid "Hexadecimal" -msgstr "Hexadecimal" +msgid "Burmese" +msgstr "Burmese" + +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 +msgid "French (Canada)" +msgstr "Francés (Canadá)" #: ../rules/base.xml.in.h:371 -msgid "Hindi (Bolnagri)" -msgstr "Hindi (bolnagri)" +msgid "French (Canada, Dvorak)" +msgstr "Francés (Canadá, Dvorak)" #: ../rules/base.xml.in.h:372 -msgid "Hindi (Wx)" -msgstr "Hindi (Wx)" +msgid "French (Canada, legacy)" +msgstr "Francés (Canadá, arcaico)" #: ../rules/base.xml.in.h:373 -msgid "Honeywell Euroboard" -msgstr "Honeywell Euroboard" +msgid "Canadian Multilingual" +msgstr "Canadiense multilingüe" #: ../rules/base.xml.in.h:374 -msgid "Htc Dream phone" -msgstr "Teléfono HTC Dream" +msgid "Canadian Multilingual (first part)" +msgstr "Canadiense multilingüe (primera parte)" #: ../rules/base.xml.in.h:375 -msgid "Hungarian" -msgstr "Húngaro" - -#: ../rules/base.xml.in.h:376 -msgid "Hungarian (101/qwerty/comma/dead keys)" -msgstr "Húngaro (101/qwerty/coma/teclas muertas)" +msgid "Canadian Multilingual (second part)" +msgstr "Canadiense multilingüe (segunda parte)" +#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:377 -msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" -msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)" +msgid "ike" +msgstr "ike" #: ../rules/base.xml.in.h:378 -msgid "Hungarian (101/qwerty/dot/dead keys)" -msgstr "Húngaro (101/qwerty/punto/teclas muertas)" +msgid "Inuktitut" +msgstr "Inuktitut" #: ../rules/base.xml.in.h:379 -msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" -msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)" +msgid "English (Canada)" +msgstr "Inglés (Canadá)" #: ../rules/base.xml.in.h:380 -msgid "Hungarian (101/qwertz/comma/dead keys)" -msgstr "Húngaro (101/qwertz/coma/teclas muertas)" - -#: ../rules/base.xml.in.h:381 -msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" -msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)" +msgid "French (Democratic Republic of the Congo)" +msgstr "Francés (República Democrática del Congo)" +#. Keyboard indicator for Taiwanese layouts #: ../rules/base.xml.in.h:382 -msgid "Hungarian (101/qwertz/dot/dead keys)" -msgstr "Húngaro (101/qwertz/punto/teclas muertas)" +msgid "zh" +msgstr "zh" #: ../rules/base.xml.in.h:383 -msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" -msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)" +msgid "Chinese" +msgstr "Chino" #: ../rules/base.xml.in.h:384 -msgid "Hungarian (102/qwerty/comma/dead keys)" -msgstr "Húngaro (102/qwerty/coma/teclas muertas)" +msgid "Tibetan" +msgstr "Tibetano" #: ../rules/base.xml.in.h:385 -msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" -msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)" +msgid "Tibetan (with ASCII numerals)" +msgstr "Tibetano (con numerales ASCII)" #: ../rules/base.xml.in.h:386 -msgid "Hungarian (102/qwerty/dot/dead keys)" -msgstr "Húngaro (102/qwerty/punto/teclas muertas)" +msgid "ug" +msgstr "ug" #: ../rules/base.xml.in.h:387 -msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" -msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:388 -msgid "Hungarian (102/qwertz/comma/dead keys)" -msgstr "Húngaro (102/qwertz/coma/teclas muertas)" +msgid "Uyghur" +msgstr "Uigur" +#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:389 -msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" -msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)" +msgid "hr" +msgstr "hr" #: ../rules/base.xml.in.h:390 -msgid "Hungarian (102/qwertz/dot/dead keys)" -msgstr "Húngaro (102/qwertz/punto/teclas muertas)" +msgid "Croatian" +msgstr "Croata" #: ../rules/base.xml.in.h:391 -msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" -msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)" +msgid "Croatian (use guillemets for quotes)" +msgstr "Croata (usar guillemots para comillas)" #: ../rules/base.xml.in.h:392 -msgid "Hungarian (eliminate dead keys)" -msgstr "Húngaro (eliminar teclas muertas)" +msgid "Croatian (use Croatian digraphs)" +msgstr "Croata (usar dígrafos croatas)" #: ../rules/base.xml.in.h:393 -msgid "Hungarian (qwerty)" -msgstr "Húngaro (qwerty)" +msgid "Croatian (US keyboard with Croatian digraphs)" +msgstr "Croata (teclado de EE. UU. con dígrafos croatas)" #: ../rules/base.xml.in.h:394 -msgid "Hungarian (standard)" -msgstr "Húngaro (estándar)" - -#: ../rules/base.xml.in.h:395 -msgid "Hyper is mapped to Win-keys" -msgstr "Hyper está mapeada a las teclas Windows" +msgid "Croatian (US keyboard with Croatian letters)" +msgstr "Croata (teclado de EE. UU. con letras croatas)" -#: ../rules/base.xml.in.h:396 -msgid "IBM Rapid Access" -msgstr "IBM Rapid Access" +#. Keyboard indicator for Chech layouts +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +msgid "cs" +msgstr "cs" -#: ../rules/base.xml.in.h:397 -msgid "IBM Rapid Access II" -msgstr "IBM Rapid Access II" +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 +msgid "Czech" +msgstr "Checo" #: ../rules/base.xml.in.h:398 -msgid "IBM Space Saver" -msgstr "IBM Space Saver" +msgid "Czech (with <\\|> key)" +msgstr "Checo (con tecla «\\|»)" #: ../rules/base.xml.in.h:399 -msgid "IBM ThinkPad 560Z/600/600E/A22E" -msgstr "IBM ThinkPad 560Z/600/600E/A22E" +msgid "Czech (qwerty)" +msgstr "Checo (qwery)" #: ../rules/base.xml.in.h:400 -msgid "IBM ThinkPad R60/T60/R61/T61" -msgstr "IBM ThinkPad R60/T60/R61/T61" +msgid "Czech (qwerty, extended Backslash)" +msgstr "Checo (qwerty, contrabarra extendida)" #: ../rules/base.xml.in.h:401 -msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" -msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgid "Czech (UCW layout, accented letters only)" +msgstr "Checo (distribución UCW, sólo teclas con tilde)" #: ../rules/base.xml.in.h:402 -msgid "Icelandic" -msgstr "Islandés" - -#: ../rules/base.xml.in.h:403 -msgid "Icelandic (Dvorak)" -msgstr "Islandés (Dvorak)" +msgid "Czech (US Dvorak with CZ UCW support)" +msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)" -#: ../rules/base.xml.in.h:404 -msgid "Icelandic (Macintosh)" -msgstr "Islandés (Macintosh)" +#. Keyboard indicator for Danish layouts +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +msgid "da" +msgstr "da" -#: ../rules/base.xml.in.h:405 -msgid "Icelandic (Sun dead keys)" -msgstr "Islandés (teclas muertas de Sun)" +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 +msgid "Danish" +msgstr "Danés" #: ../rules/base.xml.in.h:406 -msgid "Icelandic (eliminate dead keys)" -msgstr "Islandés (eliminar teclas muertas)" +msgid "Danish (eliminate dead keys)" +msgstr "Danés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:407 -msgid "Igbo" -msgstr "Igbo" +msgid "Danish (Macintosh)" +msgstr "Danés (Macintosh)" #: ../rules/base.xml.in.h:408 -msgid "Indian" -msgstr "Indio" +msgid "Danish (Macintosh, eliminate dead keys)" +msgstr "Danés (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:409 -msgid "Inuktitut" -msgstr "Inuktitut" - -#: ../rules/base.xml.in.h:410 -msgid "Iraqi" -msgstr "Iraquí" +msgid "Danish (Dvorak)" +msgstr "Danés (Dvorak)" -#: ../rules/base.xml.in.h:411 -msgid "Irish" -msgstr "Irlandés" +#. Keyboard indicator for Dutch layouts +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +msgid "nl" +msgstr "nl" -#: ../rules/base.xml.in.h:412 -msgid "Irish (UnicodeExpert)" -msgstr "Irlandés (UnicodeExperto)" +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 +msgid "Dutch" +msgstr "Holandés" #: ../rules/base.xml.in.h:413 -msgid "Italian" -msgstr "Italiano" +msgid "Dutch (Sun dead keys)" +msgstr "Holandés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:414 -msgid "Italian (Macintosh)" -msgstr "Italiano (Macintosh)" +msgid "Dutch (Macintosh)" +msgstr "Holandés (Macintosh)" #: ../rules/base.xml.in.h:415 -msgid "Italian (US keyboard with Italian letters)" -msgstr "Italiano (teclado EE. UU. con letras italianas)" - -#: ../rules/base.xml.in.h:416 -msgid "Italian (eliminate dead keys)" -msgstr "Italiano (eliminar teclas muertas)" +msgid "Dutch (standard)" +msgstr "Holandés (estándar)" +#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:417 -msgid "Japanese" -msgstr "Japones" +msgid "dz" +msgstr "dz" #: ../rules/base.xml.in.h:418 -msgid "Japanese (Kana 86)" -msgstr "Japonés (kana 86)" - -#: ../rules/base.xml.in.h:419 -msgid "Japanese (Kana)" -msgstr "Japonés (kana)" +msgid "Dzongkha" +msgstr "Dzongkha" -#: ../rules/base.xml.in.h:420 -msgid "Japanese (Macintosh)" -msgstr "Japonés (Macintosh)" +#. Keyboard indicator for Estonian layouts +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +msgid "et" +msgstr "et" -#: ../rules/base.xml.in.h:421 -msgid "Japanese (OADG 109A)" -msgstr "Japonés (OADG 109A)" +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 +msgid "Estonian" +msgstr "Estonio" #: ../rules/base.xml.in.h:422 -msgid "Japanese (PC-98xx Series)" -msgstr "Japonés (series PC-98xx)" +msgid "Estonian (eliminate dead keys)" +msgstr "Estonio (eliminar teclas muertas)" #: ../rules/base.xml.in.h:423 -msgid "Japanese keyboard options" -msgstr "Opciones de teclado japonés" +msgid "Estonian (Dvorak)" +msgstr "Estonio (Dvorak)" #: ../rules/base.xml.in.h:424 -msgid "Kalmyk" -msgstr "Calmuco" +msgid "Estonian (US keyboard with Estonian letters)" +msgstr "Estonio (teclado EE. UU. con letras estonias)" -#: ../rules/base.xml.in.h:425 -msgid "Kana Lock key is locking" -msgstr "La tecla Bloq Kana está bloqueando" +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 +msgid "Persian" +msgstr "Persa" #: ../rules/base.xml.in.h:426 -msgid "Kannada" -msgstr "Kannada" - -#: ../rules/base.xml.in.h:427 -msgid "Kashubian" -msgstr "Casubio" +msgid "Persian (with Persian Keypad)" +msgstr "Persa (con teclado numérico persa)" +#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:428 -msgid "Kazakh" -msgstr "Kazajo" +msgid "ku" +msgstr "ku" #: ../rules/base.xml.in.h:429 -msgid "Kazakh (with Russian)" -msgstr "Kazajo (con ruso)" +msgid "Kurdish (Iran, Latin Q)" +msgstr "Kurdo (Irán latino Q)" #: ../rules/base.xml.in.h:430 -msgid "Key sequence to kill the X server" -msgstr "Secuencia de teclas para matar el servidor X" +msgid "Kurdish (Iran, F)" +msgstr "Kurdo (Irán, F)" #: ../rules/base.xml.in.h:431 -msgid "Key to choose 3rd level" -msgstr "Tecla para seleccionar el 3er nivel" +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "Kurdo (Irán, latino Alt-Q)" #: ../rules/base.xml.in.h:432 -msgid "Key to choose 5th level" -msgstr "Tecla para seleccionar el 5o nivel" +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "Kurdo (Irán, arábigolatino)" #: ../rules/base.xml.in.h:433 -msgid "Key(s) to change layout" -msgstr "Tecla(s) para cambiar la distribución" +msgid "Iraqi" +msgstr "Iraquí" #: ../rules/base.xml.in.h:434 -msgid "Keytronic FlexPro" -msgstr "Keytronic FlexPro" +msgid "Kurdish (Iraq, Latin Q)" +msgstr "Kurdo (Irak, latino Q)" #: ../rules/base.xml.in.h:435 -msgid "Khmer (Cambodia)" -msgstr "Khmer (Camboya)" +msgid "Kurdish (Iraq, F)" +msgstr "Kurdo (Irak, F)" #: ../rules/base.xml.in.h:436 -msgid "Kikuyu" -msgstr "kikuyu" +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "Kurdo (Irak, latino Alt-Q)" #: ../rules/base.xml.in.h:437 -msgid "Kinesis" -msgstr "Kinesis" - -#: ../rules/base.xml.in.h:438 -msgid "Komi" -msgstr "Komi" +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "Kurdo (Irak, arábigolatino)" +#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:439 -msgid "Korean" -msgstr "Coreano" +msgid "fo" +msgstr "fo" #: ../rules/base.xml.in.h:440 -msgid "Korean (101/104 key compatible)" -msgstr "Coreano (101/104 teclas compatible)" +msgid "Faroese" +msgstr "Faroés" #: ../rules/base.xml.in.h:441 -msgid "Kurdish (Iran, Arabic-Latin)" -msgstr "Kurdo (Irán, arábigolatino)" - -#: ../rules/base.xml.in.h:442 -msgid "Kurdish (Iran, F)" -msgstr "Kurdo (Irán, F)" +msgid "Faroese (eliminate dead keys)" +msgstr "Faroés (eliminar teclas muertas)" -#: ../rules/base.xml.in.h:443 -msgid "Kurdish (Iran, Latin Alt-Q)" -msgstr "Kurdo (Irán, latino Alt-Q)" +#. Keyboard indicator for Finnish layouts +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +msgid "fi" +msgstr "fi" -#: ../rules/base.xml.in.h:444 -msgid "Kurdish (Iran, Latin Q)" -msgstr "Kurdo (Irán latino Q)" +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 +msgid "Finnish" +msgstr "Finlandés" #: ../rules/base.xml.in.h:445 -msgid "Kurdish (Iraq, Arabic-Latin)" -msgstr "Kurdo (Irak, arábigolatino)" +msgid "Finnish (classic)" +msgstr "Finlandés (clásico)" #: ../rules/base.xml.in.h:446 -msgid "Kurdish (Iraq, F)" -msgstr "Kurdo (Irak, F)" +msgid "Finnish (classic, eliminate dead keys)" +msgstr "Finlandés (clásico, eliminar teclas muertas)" #: ../rules/base.xml.in.h:447 -msgid "Kurdish (Iraq, Latin Alt-Q)" -msgstr "Kurdo (Irak, latino Alt-Q)" +msgid "Northern Saami (Finland)" +msgstr "Lapón del norte (Finlandia)" #: ../rules/base.xml.in.h:448 -msgid "Kurdish (Iraq, Latin Q)" -msgstr "Kurdo (Irak, latino Q)" +msgid "Finnish (Macintosh)" +msgstr "Finlandés (Macintosh)" -#: ../rules/base.xml.in.h:449 -msgid "Kurdish (Syria, F)" -msgstr "Kurdo (Siria, F)" +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 +msgid "French" +msgstr "Francés" #: ../rules/base.xml.in.h:450 -msgid "Kurdish (Syria, Latin Alt-Q)" -msgstr "Kurdo (Siria, latino Alt-Q)" +msgid "French (eliminate dead keys)" +msgstr "Francés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:451 -msgid "Kurdish (Syria, Latin Q)" -msgstr "Kurdo (Siria, latino Q)" +msgid "French (Sun dead keys)" +msgstr "Francés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:452 -msgid "Kurdish (Turkey, F)" -msgstr "Kurdo (Turquía, F)" +msgid "French (alternative)" +msgstr "Francés (alternativo)" #: ../rules/base.xml.in.h:453 -msgid "Kurdish (Turkey, Latin Alt-Q)" -msgstr "Kurdo (Turquía, latino Alt-Q)" +msgid "French (alternative, Latin-9 only)" +msgstr "Francés (alternativo, sólo latin-9)" #: ../rules/base.xml.in.h:454 -msgid "Kurdish (Turkey, Latin Q)" -msgstr "Kurdo (Turquía, latino Q)" +msgid "French (alternative, eliminate dead keys)" +msgstr "Francés (alternativo, eliminar teclas muertas)" #: ../rules/base.xml.in.h:455 -msgid "Kyrgyz" -msgstr "Kirguí" +msgid "French (alternative, Sun dead keys)" +msgstr "Francés (alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:456 -msgid "Kyrgyz (phonetic)" -msgstr "Kirguí (fonético)" +msgid "French (legacy, alternative)" +msgstr "Francés (arcaico, alternativo)" #: ../rules/base.xml.in.h:457 -msgid "Lao" -msgstr "Lao" +msgid "French (legacy, alternative, eliminate dead keys)" +msgstr "Francés (arcaico, alternativo, eliminar teclas muertas)" #: ../rules/base.xml.in.h:458 -msgid "Lao (STEA proposed standard layout)" -msgstr "Lao (distribución propuesta STEA estándar)" +msgid "French (legacy, alternative, Sun dead keys)" +msgstr "Francés (arcaico, alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:459 -msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way)" +msgstr "Francés (bepo, ergonómico, forma Dvorak)" #: ../rules/base.xml.in.h:460 -msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" -msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" +msgstr "Francés (bepo, ergonómico, forma Dvorak, sólo latin-9)" #: ../rules/base.xml.in.h:461 -msgid "Laptop/notebook eMachines m68xx" -msgstr "Laptop/notebook eMachines m68xx" +msgid "French (Dvorak)" +msgstr "Francés (Dvorak)" -#: ../rules/base.xml.in.h:462 ../rules/base.extras.xml.in.h:16 -msgid "Latvian" -msgstr "Letón" +#: ../rules/base.xml.in.h:462 +msgid "French (Macintosh)" +msgstr "Francés (Macintosh)" #: ../rules/base.xml.in.h:463 -msgid "Latvian (F variant)" -msgstr "Letón (variante de letra F)" +msgid "French (Breton)" +msgstr "Francés (bretón)" #: ../rules/base.xml.in.h:464 -msgid "Latvian (adapted)" -msgstr "Letón (adaptado)" +msgid "Occitan" +msgstr "Occitano" #: ../rules/base.xml.in.h:465 -msgid "Latvian (apostrophe variant)" -msgstr "Letón (variante con apóstrofo)" +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "Georgiano (Francia, AZERTY tskapo)" #: ../rules/base.xml.in.h:466 -msgid "Latvian (ergonomic, ŪGJRMV)" -msgstr "Letón (ergonómico, ŪGJRMV)" +msgid "English (Ghana)" +msgstr "Inglés (Ghana)" #: ../rules/base.xml.in.h:467 -msgid "Latvian (modern)" -msgstr "Letón (moderno)" - -#: ../rules/base.xml.in.h:468 -msgid "Latvian (tilde variant)" -msgstr "Letón (variante virgulilla)" +msgid "English (Ghana, multilingual)" +msgstr "Inglés (Ghana, multilingüe)" +#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:469 -msgid "Left Alt" -msgstr "Alt izquierdo" +msgid "ak" +msgstr "ak" #: ../rules/base.xml.in.h:470 -msgid "Left Alt (while pressed)" -msgstr "Alt izquierdo (mientras está pulsado)" - -#: ../rules/base.xml.in.h:471 -msgid "Left Alt is swapped with Left Win" -msgstr "Alt izquierdo está cambiado con Windows izquierdo" +msgid "Akan" +msgstr "Akan" +#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:472 -msgid "Left Ctrl" -msgstr "Ctrl izquierdo" +msgid "ee" +msgstr "ee" #: ../rules/base.xml.in.h:473 -msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" -msgstr "Ctrl izquierdo (a la primera distribución), Ctrl derecho (a la última distribución)" - -#: ../rules/base.xml.in.h:474 -msgid "Left Ctrl as Meta" -msgstr "Ctrl izquierdo como Meta" +msgid "Ewe" +msgstr "Ewe" +#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:475 -msgid "Left Ctrl+Left Shift" -msgstr "Ctrl izquierdo + Mayús izquierdo" +msgid "ff" +msgstr "ff" #: ../rules/base.xml.in.h:476 -msgid "Left Shift" -msgstr "Mayús izquierdo" - -#: ../rules/base.xml.in.h:477 -msgid "Left Win" -msgstr "Win izquierdo" +msgid "Fula" +msgstr "Fula" +#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:478 -msgid "Left Win (to first layout), Right Win/Menu (to last layout)" -msgstr "Win izquierdo (a la primera distribución), Win/Menu derecho (a la última distribución)" +msgid "gaa" +msgstr "gaa" #: ../rules/base.xml.in.h:479 -msgid "Left Win (while pressed)" -msgstr "Tecla Windows izquierdo (al pulsarla)" - -#: ../rules/base.xml.in.h:480 -msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Ga" +msgstr "Ga" +#. Keyboard indicator for Hausa layouts #: ../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 izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "ha" +msgstr "ha" #: ../rules/base.xml.in.h:482 -msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" -msgstr "Ctrl izquierdo + Ctrl derecho (a la primera distribución), Ctrl derecho + Menú (a la segunda distribución)" - -#: ../rules/base.xml.in.h:483 -msgid "Legacy" -msgstr "Heredado" +msgid "Hausa" +msgstr "Hausa" +#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:484 -msgid "Legacy Wang 724" -msgstr "Wang 724 heredado" +msgid "avn" +msgstr "avn" + +#: ../rules/base.xml.in.h:485 +msgid "Avatime" +msgstr "Avatime" -#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:486 -msgid "Legacy key with comma" -msgstr "Tecla heredada con coma" +msgid "English (Ghana, GILLBT)" +msgstr "Inglés (Ghana, GILLBT)" #: ../rules/base.xml.in.h:487 -msgid "Legacy key with dot" -msgstr "Tecla heredada con punto" - -#: ../rules/base.xml.in.h:488 ../rules/base.extras.xml.in.h:25 -msgid "Lithuanian" -msgstr "Lituano" +msgid "French (Guinea)" +msgstr "Francés (Guinea)" +#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:489 -msgid "Lithuanian (IBM LST 1205-92)" -msgstr "Lituano (IBM LST 1205-92)" +msgid "ka" +msgstr "ka" #: ../rules/base.xml.in.h:490 -msgid "Lithuanian (LEKP)" -msgstr "Lituano (LEKP)" +msgid "Georgian" +msgstr "Georgiano" #: ../rules/base.xml.in.h:491 -msgid "Lithuanian (LEKPa)" -msgstr "Lituano (LEKPa)" +msgid "Georgian (ergonomic)" +msgstr "Georgiano (ergonómico)" #: ../rules/base.xml.in.h:492 -msgid "Lithuanian (US keyboard with Lithuanian letters)" -msgstr "Lituano (teclado de EE. UU. con letras lituanas)" +msgid "Georgian (MESS)" +msgstr "Georgiano (MESS)" #: ../rules/base.xml.in.h:493 -msgid "Lithuanian (standard)" -msgstr "Lituano (estándar)" +msgid "Russian (Georgia)" +msgstr "Ruso (Georgia)" #: ../rules/base.xml.in.h:494 -msgid "Logitech Access Keyboard" -msgstr "Logitech Access Keyboard" +msgid "Ossetian (Georgia)" +msgstr "Osetio (Georgia)" -#: ../rules/base.xml.in.h:495 -msgid "Logitech Cordless Desktop" -msgstr "Logitech Cordless Desktop" +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 +msgid "German" +msgstr "Alemán" #: ../rules/base.xml.in.h:496 -msgid "Logitech Cordless Desktop (alternate option)" -msgstr "Logitech Cordless Desktop Pro (opción alternativa)" +msgid "German (dead acute)" +msgstr "Alemán (acento muerto)" #: ../rules/base.xml.in.h:497 -msgid "Logitech Cordless Desktop EX110" -msgstr "Logitech Cordless Desktop EX110" +msgid "German (dead grave acute)" +msgstr "Alemán (acento grave muerto)" #: ../rules/base.xml.in.h:498 -msgid "Logitech Cordless Desktop LX-300" -msgstr "Logitech Cordless Desktop LX-300" +msgid "German (eliminate dead keys)" +msgstr "Alemán (eliminar teclas muertas)" #: ../rules/base.xml.in.h:499 -msgid "Logitech Cordless Desktop Navigator" -msgstr "Logitech Cordless Desktop Navigator" +msgid "German (T3)" +msgstr "Alemán (T3)" #: ../rules/base.xml.in.h:500 -msgid "Logitech Cordless Desktop Optical" -msgstr "Logitech Cordless Desktop Optical" +msgid "Romanian (Germany)" +msgstr "Rumano (Alemania)" #: ../rules/base.xml.in.h:501 -msgid "Logitech Cordless Desktop Pro (alternate option 2)" -msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)" +msgid "Romanian (Germany, eliminate dead keys)" +msgstr "Rumano (Alemania, eliminar teclas muertas)" #: ../rules/base.xml.in.h:502 -msgid "Logitech Cordless Desktop iTouch" -msgstr "Logitech Cordless Desktop iTouch" +msgid "German (Dvorak)" +msgstr "Alemán (Dvorak)" #: ../rules/base.xml.in.h:503 -msgid "Logitech Cordless Freedom/Desktop Navigator" -msgstr "Logitech Cordless Freedom/Desktop Navigator" +msgid "German (Sun dead keys)" +msgstr "Alemán (teclas muertas de Sun)" #: ../rules/base.xml.in.h:504 -msgid "Logitech G15 extra keys via G15daemon" -msgstr "Logitech G15 extra keys via G15daemon" +msgid "German (Neo 2)" +msgstr "Alemán (Neo 2)" #: ../rules/base.xml.in.h:505 -msgid "Logitech Generic Keyboard" -msgstr "Logitech, teclado genérico" +msgid "German (Macintosh)" +msgstr "Alemán (Macintosh)" #: ../rules/base.xml.in.h:506 -msgid "Logitech Internet 350 Keyboard" -msgstr "Logitech Internet 350 Keyboard" +msgid "German (Macintosh, eliminate dead keys)" +msgstr "Alemán (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:507 -msgid "Logitech Internet Keyboard" -msgstr "Logitech Internet Keyboard" +msgid "Lower Sorbian" +msgstr "Bajo sorbio" #: ../rules/base.xml.in.h:508 -msgid "Logitech Internet Navigator Keyboard" -msgstr "Logitech Internet Navigator Keyboard" - +msgid "Lower Sorbian (qwertz)" +msgstr "Bajo sorbio (qwertz)" + #: ../rules/base.xml.in.h:509 -msgid "Logitech Media Elite Keyboard" -msgstr "Logitech Media Elite Keyboard" +msgid "German (qwerty)" +msgstr "Alemán (qwerty)" #: ../rules/base.xml.in.h:510 -msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" -msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgid "Russian (Germany, phonetic)" +msgstr "Ruso (Alemania, fonético)" #: ../rules/base.xml.in.h:511 -msgid "Logitech Ultra-X Keyboard" -msgstr "Logitech Ultra-X Keyboard" - -#: ../rules/base.xml.in.h:512 -msgid "Logitech diNovo Edge Keyboard" -msgstr "Logitech diNovo Edge Keyboard" +msgid "German (legacy)" +msgstr "Alemán (arcaico)" -#: ../rules/base.xml.in.h:513 -msgid "Logitech diNovo Keyboard" -msgstr "Logitech diNovo Keyboard" +#. Keyboard indicator for Greek layouts +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +msgid "gr" +msgstr "gr" -#: ../rules/base.xml.in.h:514 -msgid "Logitech iTouch" -msgstr "Logitech iTouch" +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 +msgid "Greek" +msgstr "Griego" #: ../rules/base.xml.in.h:515 -msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" -msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)" +msgid "Greek (simple)" +msgstr "Griego (simple)" #: ../rules/base.xml.in.h:516 -msgid "Logitech iTouch Internet Navigator Keyboard SE" -msgstr "Logitech iTouch Internet Navigator Keyboard SE" +msgid "Greek (extended)" +msgstr "Griego (extendido)" #: ../rules/base.xml.in.h:517 -msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" -msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgid "Greek (eliminate dead keys)" +msgstr "Griego (eliminar teclas muertas)" #: ../rules/base.xml.in.h:518 -msgid "Lower Sorbian" -msgstr "Bajo sorbio" - -#: ../rules/base.xml.in.h:519 -msgid "Lower Sorbian (qwertz)" -msgstr "Bajo sorbio (qwertz)" +msgid "Greek (polytonic)" +msgstr "Griego (politónico)" +#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:520 -msgid "MacBook/MacBook Pro" -msgstr "MacBook/MacBook Pro" +msgid "hu" +msgstr "hu" #: ../rules/base.xml.in.h:521 -msgid "MacBook/MacBook Pro (Intl)" -msgstr "MacBook/MacBook Pro (Intl)" +msgid "Hungarian" +msgstr "Húngaro" #: ../rules/base.xml.in.h:522 -msgid "Macedonian" -msgstr "Macedonio" +msgid "Hungarian (standard)" +msgstr "Húngaro (estándar)" #: ../rules/base.xml.in.h:523 -msgid "Macedonian (eliminate dead keys)" -msgstr "Macedonio (eliminar teclas muertas)" +msgid "Hungarian (eliminate dead keys)" +msgstr "Húngaro (eliminar teclas muertas)" #: ../rules/base.xml.in.h:524 -msgid "Macintosh" -msgstr "Macintosh" +msgid "Hungarian (qwerty)" +msgstr "Húngaro (qwerty)" #: ../rules/base.xml.in.h:525 -msgid "Macintosh Old" -msgstr "Macintosh antiguo" +msgid "Hungarian (101/qwertz/comma/dead keys)" +msgstr "Húngaro (101/qwertz/coma/teclas muertas)" #: ../rules/base.xml.in.h:526 -msgid "Make Caps Lock an additional Backspace" -msgstr "Hacer de Bloq Mayús un Retroceso adicional" +msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" +msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:527 -msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym" -msgstr "Hacer de Bloq Mayús un Control adicional pero mantener el símbolo de tecla Caps_Lock" +msgid "Hungarian (101/qwertz/dot/dead keys)" +msgstr "Húngaro (101/qwertz/punto/teclas muertas)" #: ../rules/base.xml.in.h:528 -msgid "Make Caps Lock an additional ESC" -msgstr "Hacer de Bloq Mayús un Esc adicional" +msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" +msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:529 -msgid "Make Caps Lock an additional Hyper" -msgstr "Hacer de Bloq Mayús un Hyper adicional" +msgid "Hungarian (101/qwerty/comma/dead keys)" +msgstr "Húngaro (101/qwerty/coma/teclas muertas)" #: ../rules/base.xml.in.h:530 -msgid "Make Caps Lock an additional Num Lock" -msgstr "Hacer de Bloq Mayús un Bloq Num adicional" +msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" +msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:531 -msgid "Make Caps Lock an additional Super" -msgstr "Hacer de Bloq Mayús un Super adicional" +msgid "Hungarian (101/qwerty/dot/dead keys)" +msgstr "Húngaro (101/qwerty/punto/teclas muertas)" #: ../rules/base.xml.in.h:532 -msgid "Malayalam" -msgstr "Malayalam" +msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" +msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:533 -msgid "Malayalam (Lalitha)" -msgstr "Malayalam (lalitha)" +msgid "Hungarian (102/qwertz/comma/dead keys)" +msgstr "Húngaro (102/qwertz/coma/teclas muertas)" #: ../rules/base.xml.in.h:534 -msgid "Malayalam (enhanced Inscript with Rupee Sign)" -msgstr "Malayam (Inscript mejorado con signo de rupia)" +msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" +msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:535 -msgid "Maltese" -msgstr "Maltés" +msgid "Hungarian (102/qwertz/dot/dead keys)" +msgstr "Húngaro (102/qwertz/punto/teclas muertas)" #: ../rules/base.xml.in.h:536 -msgid "Maltese (with US layout)" -msgstr "Maltés (con distribución para EE. UU.)" +msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" +msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:537 -msgid "Maori" -msgstr "Maorí" +msgid "Hungarian (102/qwerty/comma/dead keys)" +msgstr "Húngaro (102/qwerty/coma/teclas muertas)" #: ../rules/base.xml.in.h:538 -msgid "Mari" -msgstr "Mari" +msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" +msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:539 -msgid "Memorex MX1998" -msgstr "Memorex MX1998" +msgid "Hungarian (102/qwerty/dot/dead keys)" +msgstr "Húngaro (102/qwerty/punto/teclas muertas)" #: ../rules/base.xml.in.h:540 -msgid "Memorex MX2500 EZ-Access Keyboard" -msgstr "Memorex MX2500 EZ-Access Keyboard" - -#: ../rules/base.xml.in.h:541 -msgid "Memorex MX2750" -msgstr "Memorex MX2750" +msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" +msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)" +#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:542 -msgid "Menu" -msgstr "Menu" +msgid "is" +msgstr "is" #: ../rules/base.xml.in.h:543 -msgid "Menu as Right Ctrl" -msgstr "Menú como Ctrl derecho" +msgid "Icelandic" +msgstr "Islandés" #: ../rules/base.xml.in.h:544 -msgid "Meta is mapped to Left Win" -msgstr "Meta está mapeada a la tecla Windows izquierdo" +msgid "Icelandic (Sun dead keys)" +msgstr "Islandés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:545 -msgid "Meta is mapped to Win keys" -msgstr "Meta está mapeada a las teclas Windows" +msgid "Icelandic (eliminate dead keys)" +msgstr "Islandés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:546 -msgid "Microsoft Comfort Curve Keyboard 2000" -msgstr "Microsoft Comfort Curve Keyboard 2000" +msgid "Icelandic (Macintosh)" +msgstr "Islandés (Macintosh)" #: ../rules/base.xml.in.h:547 -msgid "Microsoft Internet Keyboard" -msgstr "Microsoft Internet Keyboard" - -#: ../rules/base.xml.in.h:548 -msgid "Microsoft Internet Keyboard Pro, Swedish" -msgstr "Microsoft Internet Keyboard Pro, sueco" +msgid "Icelandic (Dvorak)" +msgstr "Islandés (Dvorak)" -#: ../rules/base.xml.in.h:549 -msgid "Microsoft Natural" -msgstr "Microsoft Natural" +#. Keyboard indicator for Hebrew layouts +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +msgid "he" +msgstr "he" -#: ../rules/base.xml.in.h:550 -msgid "Microsoft Natural Keyboard Elite" -msgstr "Microsoft Natural Keyboard Elite" +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 +msgid "Hebrew" +msgstr "Hebreo" #: ../rules/base.xml.in.h:551 -msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgid "Hebrew (lyx)" +msgstr "Hebreo (lyx)" #: ../rules/base.xml.in.h:552 -msgid "Microsoft Natural Keyboard Pro OEM" -msgstr "Microsoft Natural Keyboard Pro OEM" +msgid "Hebrew (phonetic)" +msgstr "Hebreo (fonético)" #: ../rules/base.xml.in.h:553 -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:554 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgid "Hebrew (Biblical, Tiro)" +msgstr "Hebreo (bíblico, tiro)" -#: ../rules/base.xml.in.h:555 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" +#. Keyboard indicator for Italian layouts +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +msgid "it" +msgstr "it" -#: ../rules/base.xml.in.h:556 -msgid "Microsoft Office Keyboard" -msgstr "Microsoft Office Keyboard" +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 +msgid "Italian" +msgstr "Italiano" #: ../rules/base.xml.in.h:557 -msgid "Microsoft Wireless Multimedia Keyboard 1.0A" -msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" +msgid "Italian (eliminate dead keys)" +msgstr "Italiano (eliminar teclas muertas)" #: ../rules/base.xml.in.h:558 -msgid "Miscellaneous compatibility options" -msgstr "Opciones misceláneas de compatiblidad" +msgid "Italian (Macintosh)" +msgstr "Italiano (Macintosh)" #: ../rules/base.xml.in.h:559 -msgid "Mongolian" -msgstr "Mongol" +msgid "Italian (US keyboard with Italian letters)" +msgstr "Italiano (teclado EE. UU. con letras italianas)" #: ../rules/base.xml.in.h:560 -msgid "Montenegrin" -msgstr "Montenegrino" +msgid "Georgian (Italy)" +msgstr "Georgiano (Italia)" #: ../rules/base.xml.in.h:561 -msgid "Montenegrin (Cyrillic with guillemets)" -msgstr "Montenegrino (cirílico con guillemots)" - -#: ../rules/base.xml.in.h:562 -msgid "Montenegrin (Cyrillic)" -msgstr "Montenegrino (cirílico)" +msgid "Italian (IBM 142)" +msgstr "Italiano (IBM 142)" -#: ../rules/base.xml.in.h:563 -msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" -msgstr "Montenegrino (cirílico, Z y ZHE intercambiados)" +#. Keyboard indicator for Japanese layouts +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +msgid "ja" +msgstr "ja" -#: ../rules/base.xml.in.h:564 -msgid "Montenegrin (Latin Unicode qwerty)" -msgstr "Montenegrino (latino Unicode qwerty)" +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 +msgid "Japanese" +msgstr "Japones" #: ../rules/base.xml.in.h:565 -msgid "Montenegrin (Latin Unicode)" -msgstr "Montenegrino (latino Unicode)" +msgid "Japanese (Kana)" +msgstr "Japonés (kana)" #: ../rules/base.xml.in.h:566 -msgid "Montenegrin (Latin qwerty)" -msgstr "Montenegrino (latino qwerty)" +msgid "Japanese (Kana 86)" +msgstr "Japonés (kana 86)" #: ../rules/base.xml.in.h:567 -msgid "Montenegrin (Latin with guillemets)" -msgstr "Montenegrino (latino con guillemots)" +msgid "Japanese (OADG 109A)" +msgstr "Japonés (OADG 109A)" #: ../rules/base.xml.in.h:568 -msgid "NICOLA-F style Backspace" -msgstr "Retroceso estilo NICOLA-F" +msgid "Japanese (Macintosh)" +msgstr "Japonés (Macintosh)" #: ../rules/base.xml.in.h:569 -msgid "Nepali" -msgstr "Nepalí" - -#: ../rules/base.xml.in.h:570 -msgid "Non-breakable space character at fourth level" -msgstr "Carácter de espacio no separable en el cuarto nivel" +msgid "Japanese (Dvorak)" +msgstr "Japonés (Dvorak)" +#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:571 -msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" -msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel" +msgid "ki" +msgstr "ki" #: ../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 "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel (a través de Ctrl+Mayús)" +msgid "Kyrgyz" +msgstr "Kirguí" #: ../rules/base.xml.in.h:573 -msgid "Non-breakable space character at second level" -msgstr "Carácter de espacio no separable en el segundo nivel" - -#: ../rules/base.xml.in.h:574 -msgid "Non-breakable space character at third level" -msgstr "Carácter de espacio no separable en el tercer nivel" +msgid "Kyrgyz (phonetic)" +msgstr "Kirguí (fonético)" +#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:575 -msgid "Non-breakable space character at third level, nothing at fourth level" -msgstr "Carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel" +msgid "km" +msgstr "km" #: ../rules/base.xml.in.h:576 -msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" -msgstr "Carácter de espacio no separable en el tercer nivel, carácter de espacio estrecho no separable en el cuarto nivel" - -#: ../rules/base.xml.in.h:577 -msgid "Northern Saami (Finland)" -msgstr "Lapón del norte (Finlandia)" +msgid "Khmer (Cambodia)" +msgstr "Khmer (Camboya)" +#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:578 -msgid "Northern Saami (Norway)" -msgstr "Lapón del norte (Noruega)" +msgid "kk" +msgstr "kk" #: ../rules/base.xml.in.h:579 -msgid "Northern Saami (Norway, eliminate dead keys)" -msgstr "Lapón del norte (Noruego, eliminar teclas muertas)" +msgid "Kazakh" +msgstr "Kazajo" #: ../rules/base.xml.in.h:580 -msgid "Northern Saami (Sweden)" -msgstr "Lapón del norte (Suecia)" +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "Ruso (Kazajstán, con kazajo)" #: ../rules/base.xml.in.h:581 -msgid "Northgate OmniKey 101" -msgstr "Northgate OmniKey 101" - -#: ../rules/base.xml.in.h:582 -msgid "Norwegian" -msgstr "Noruego" +msgid "Kazakh (with Russian)" +msgstr "Kazajo (con ruso)" +#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:583 -msgid "Norwegian (Dvorak)" -msgstr "Noruego (Dvorak)" +msgid "lo" +msgstr "lo" #: ../rules/base.xml.in.h:584 -msgid "Norwegian (Macintosh)" -msgstr "Noruego (Macintosh)" +msgid "Lao" +msgstr "Lao" #: ../rules/base.xml.in.h:585 -msgid "Norwegian (Macintosh, eliminate dead keys)" -msgstr "Noruego (Macintosh, eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:586 -msgid "Norwegian (eliminate dead keys)" -msgstr "Noruego (eliminar teclas muertas)" +msgid "Lao (STEA proposed standard layout)" +msgstr "Lao (distribución propuesta STEA estándar)" -#: ../rules/base.xml.in.h:587 -msgid "Num Lock" -msgstr "Bloq Num" +#. Keyboard indicator for Spanish layouts +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 +msgid "es" +msgstr "es" #: ../rules/base.xml.in.h:588 -msgid "Numeric keypad delete key behaviour" -msgstr "Comportamiento de la tecla Supr del teclado numérico" +msgid "Spanish (Latin American)" +msgstr "Español (latinoamericano)" #: ../rules/base.xml.in.h:589 -msgid "Numeric keypad keys work as with Macintosh" -msgstr "Las teclas del teclado numérico funcionan como en un Macintosh" +msgid "Spanish (Latin American, eliminate dead keys)" +msgstr "Español (latinoamericano, eliminar teclas muertas)" #: ../rules/base.xml.in.h:590 -msgid "Numeric keypad layout selection" -msgstr "Selección de distribución de teclado numérico" +msgid "Spanish (Latin American, include dead tilde)" +msgstr "Español (latinoamericano, incluir tilde muerta)" #: ../rules/base.xml.in.h:591 -msgid "OLPC" -msgstr "OLPC" - -#: ../rules/base.xml.in.h:592 -msgid "Occitan" -msgstr "Occitano" +msgid "Spanish (Latin American, Sun dead keys)" +msgstr "Español (latinoamericano, teclas muertas de Sun)" -#: ../rules/base.xml.in.h:593 -msgid "Ogham" -msgstr "Ogham" +#. Keyboard indicator for Lithuanian layouts +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 +msgid "lt" +msgstr "lt" -#: ../rules/base.xml.in.h:594 -msgid "Ogham (IS434)" -msgstr "Ogam (IS434)" +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 +msgid "Lithuanian" +msgstr "Lituano" #: ../rules/base.xml.in.h:595 -msgid "Oriya" -msgstr "Oriya" +msgid "Lithuanian (standard)" +msgstr "Lituano (estándar)" #: ../rules/base.xml.in.h:596 -msgid "Ortek MCK-800 MM/Internet keyboard" -msgstr "Teclado Oretec MCK-800 MM/Internet" +msgid "Lithuanian (US keyboard with Lithuanian letters)" +msgstr "Lituano (teclado de EE. UU. con letras lituanas)" #: ../rules/base.xml.in.h:597 -msgid "Ossetian (Georgia)" -msgstr "Osetio (Georgia)" +msgid "Lithuanian (IBM LST 1205-92)" +msgstr "Lituano (IBM LST 1205-92)" #: ../rules/base.xml.in.h:598 -msgid "Ossetian (WinKeys)" -msgstr "Osetio (teclas Windows)" +msgid "Lithuanian (LEKP)" +msgstr "Lituano (LEKP)" #: ../rules/base.xml.in.h:599 -msgid "Ossetian (legacy)" -msgstr "Osetio (heredado)" - -#: ../rules/base.xml.in.h:600 -msgid "PC-98xx Series" -msgstr "PC-98xx Series" +msgid "Lithuanian (LEKPa)" +msgstr "Lituano (LEKPa)" -#: ../rules/base.xml.in.h:601 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Rusino de Panonia (homofónico)" +#. Keyboard indicator for Latvian layouts +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 +msgid "lv" +msgstr "lv" -#: ../rules/base.xml.in.h:602 -msgid "Pashto" -msgstr "Pashto" +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 +msgid "Latvian" +msgstr "Letón" #: ../rules/base.xml.in.h:603 -msgid "Pashto (Afghanistan, OLPC)" -msgstr "Pashto (Afganistán, OLPC)" +msgid "Latvian (apostrophe variant)" +msgstr "Letón (variante con apóstrofo)" #: ../rules/base.xml.in.h:604 -msgid "Pause" -msgstr "Pausa" +msgid "Latvian (tilde variant)" +msgstr "Letón (variante virgulilla)" -#: ../rules/base.xml.in.h:605 ../rules/base.extras.xml.in.h:27 -msgid "Persian" -msgstr "Persa" +#: ../rules/base.xml.in.h:605 +msgid "Latvian (F variant)" +msgstr "Letón (variante de letra F)" #: ../rules/base.xml.in.h:606 -msgid "Persian (Afghanistan, Dari OLPC)" -msgstr "Persa (Afganistán, OLPC dari)" +msgid "Latvian (modern)" +msgstr "Letón (moderno)" #: ../rules/base.xml.in.h:607 -msgid "Persian (with Persian Keypad)" -msgstr "Persa (con teclado persa)" - -#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:28 -msgid "Polish" -msgstr "Polaco" +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "Letón (ergonómico, ŪGJRMV)" -#: ../rules/base.xml.in.h:609 -msgid "Polish (Dvorak)" -msgstr "Polaco (Dvorak)" +#: ../rules/base.xml.in.h:608 +msgid "Latvian (adapted)" +msgstr "Letón (adaptado)" +#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:610 -msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)" +msgid "mi" +msgstr "mi" #: ../rules/base.xml.in.h:611 -msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)" - -#: ../rules/base.xml.in.h:612 -msgid "Polish (programmer Dvorak)" -msgstr "Polaco (Dvorak de programador)" +msgid "Maori" +msgstr "Maorí" -#: ../rules/base.xml.in.h:613 -msgid "Polish (qwertz)" -msgstr "Polaco (qwertz)" +#. Keyboard indicator for Serbian layouts +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 +msgid "sr" +msgstr "sr" #: ../rules/base.xml.in.h:614 -msgid "Portuguese" -msgstr "Portugués" +msgid "Montenegrin" +msgstr "Montenegrino" #: ../rules/base.xml.in.h:615 -msgid "Portuguese (Brazil)" -msgstr "Portugués (Brasil)" +msgid "Montenegrin (Cyrillic)" +msgstr "Montenegrino (cirílico)" #: ../rules/base.xml.in.h:616 -msgid "Portuguese (Brazil, Dvorak)" -msgstr "Portugués (Brasil, Dvorak)" +msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" +msgstr "Montenegrino (cirílico, Z y ZHE intercambiados)" #: ../rules/base.xml.in.h:617 -msgid "Portuguese (Brazil, eliminate dead keys)" -msgstr "Portugués (Brasil, eliminar teclas muertas)" +msgid "Montenegrin (Latin Unicode)" +msgstr "Montenegrino (latino Unicode)" #: ../rules/base.xml.in.h:618 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugués (Brasil, nativo para esperanto)" +msgid "Montenegrin (Latin qwerty)" +msgstr "Montenegrino (latino qwerty)" #: ../rules/base.xml.in.h:619 -msgid "Portuguese (Brazil, nativo for USA keyboards)" -msgstr "Portugués (Brasil, nativo para teclados de EE. UU.)" +msgid "Montenegrin (Latin Unicode qwerty)" +msgstr "Montenegrino (latino Unicode qwerty)" #: ../rules/base.xml.in.h:620 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugués (Brasil, nativo)" +msgid "Montenegrin (Cyrillic with guillemets)" +msgstr "Montenegrino (cirílico con guillemots)" #: ../rules/base.xml.in.h:621 -msgid "Portuguese (Macintosh)" -msgstr "Portugués (Macintosh)" - -#: ../rules/base.xml.in.h:622 -msgid "Portuguese (Macintosh, Sun dead keys)" -msgstr "Portugués (Macintosh, teclas muertas de Sun)" +msgid "Montenegrin (Latin with guillemets)" +msgstr "Montenegrino (latino con guillemots)" +#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:623 -msgid "Portuguese (Macintosh, eliminate dead keys)" -msgstr "Portugués (Macintosh, eliminar teclas muertas)" +msgid "mk" +msgstr "mk" #: ../rules/base.xml.in.h:624 -msgid "Portuguese (Nativo for USA keyboards)" -msgstr "Portugués (nativo para teclados de EE. UU.)" +msgid "Macedonian" +msgstr "Macedonio" #: ../rules/base.xml.in.h:625 -msgid "Portuguese (Nativo)" -msgstr "Portugués (nativo)" - -#: ../rules/base.xml.in.h:626 -msgid "Portuguese (Sun dead keys)" -msgstr "Portugués (teclas muertas de Sun)" +msgid "Macedonian (eliminate dead keys)" +msgstr "Macedonio (eliminar teclas muertas)" +#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:627 -msgid "Portuguese (eliminate dead keys)" -msgstr "Portugués (eliminar teclas muertas)" +msgid "mt" +msgstr "mt" #: ../rules/base.xml.in.h:628 -msgid "Propeller Voyager (KTEZ-1000)" -msgstr "Propeller Voyager (KTEZ-1000)" +msgid "Maltese" +msgstr "Maltés" #: ../rules/base.xml.in.h:629 -msgid "PrtSc" -msgstr "PrtSc" - -#: ../rules/base.xml.in.h:630 -msgid "Punjabi (Gurmukhi Jhelum)" -msgstr "Panyabí (gurmukhi jhelum)" +msgid "Maltese (with US layout)" +msgstr "Maltés (con distribución para EE. UU.)" +#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:631 -msgid "Punjabi (Gurmukhi)" -msgstr "Panyabí (gurmukhi)" +msgid "mn" +msgstr "mn" #: ../rules/base.xml.in.h:632 -msgid "QTronix Scorpius 98N+" -msgstr "QTronix Scorpius 98N+" - -#: ../rules/base.xml.in.h:633 -msgid "Right Alt" -msgstr "Alt derecho" +msgid "Mongolian" +msgstr "Mongol" -#: ../rules/base.xml.in.h:634 -msgid "Right Alt (while pressed)" -msgstr "Alt derecho (mientras está pulsado)" +#. Keyboard indicator for Norwegian layouts +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +msgid "no" +msgstr "no" -#: ../rules/base.xml.in.h:635 -msgid "Right Alt as Right Ctrl" -msgstr "Alt derecho como Ctrl derecho" +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 +msgid "Norwegian" +msgstr "Noruego" #: ../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 "Alt derecho elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Norwegian (eliminate dead keys)" +msgstr "Noruego (eliminar teclas muertas)" #: ../rules/base.xml.in.h:637 -msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Norwegian (Dvorak)" +msgstr "Noruego (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 derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Northern Saami (Norway)" +msgstr "Lapón del norte (Noruega)" #: ../rules/base.xml.in.h:639 -msgid "Right Alt key never chooses 3rd level" -msgstr "La tecla Alt derecho nunca elige el 3er nivel" +msgid "Northern Saami (Norway, eliminate dead keys)" +msgstr "Lapón del norte (Noruego, eliminar teclas muertas)" #: ../rules/base.xml.in.h:640 -msgid "Right Alt, Shift+Right Alt key is Multi_Key" -msgstr "La tecla Alt derecho, Mayús+Alt derecho es tecla Multi" +msgid "Norwegian (Macintosh)" +msgstr "Noruego (Macintosh)" #: ../rules/base.xml.in.h:641 -msgid "Right Ctrl" -msgstr "Ctrl derecho" +msgid "Norwegian (Macintosh, eliminate dead keys)" +msgstr "Noruego (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:642 -msgid "Right Ctrl (while pressed)" -msgstr "Ctrl derecho (mientras está pulsado)" +msgid "Norwegian (Colemak)" +msgstr "Noruego (Colemak)" -#: ../rules/base.xml.in.h:643 -msgid "Right Ctrl as Right Alt" -msgstr "Ctrl derecho como Alt derecho" - -#: ../rules/base.xml.in.h:644 -msgid "Right Ctrl+Right Shift" -msgstr "Ctrl derecho + Mayús derecho" +#. Keyboard indicator for Polish layouts +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +msgid "pl" +msgstr "pl" -#: ../rules/base.xml.in.h:645 -msgid "Right Shift" -msgstr "Mayús derecho" +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 +msgid "Polish" +msgstr "Polaco" #: ../rules/base.xml.in.h:646 -msgid "Right Win" -msgstr "Windows derecho" +msgid "Polish (legacy)" +msgstr "Polaco (arcaico)" #: ../rules/base.xml.in.h:647 -msgid "Right Win (while pressed)" -msgstr "La tecla Windows (mientras está pulsada)" +msgid "Polish (qwertz)" +msgstr "Polaco (qwertz)" #: ../rules/base.xml.in.h:648 -msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Polish (Dvorak)" +msgstr "Polaco (Dvorak)" #: ../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 derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Polish (Dvorak, Polish quotes on quotemark key)" +msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)" -#: ../rules/base.xml.in.h:650 ../rules/base.extras.xml.in.h:30 -msgid "Romanian" -msgstr "Rumano" +#: ../rules/base.xml.in.h:650 +msgid "Polish (Dvorak, Polish quotes on key 1)" +msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)" #: ../rules/base.xml.in.h:651 -msgid "Romanian (Germany)" -msgstr "Rumano (Alemania)" +msgid "Kashubian" +msgstr "Casubio" #: ../rules/base.xml.in.h:652 -msgid "Romanian (Germany, eliminate dead keys)" -msgstr "Rumano (Alemania, eliminar teclas muertas)" +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "Ruso (Polonia, Dvorak fonético)" #: ../rules/base.xml.in.h:653 -msgid "Romanian (WinKeys)" -msgstr "Rumano (teclas Windows)" +msgid "Polish (programmer Dvorak)" +msgstr "Polaco (Dvorak de programador)" -#: ../rules/base.xml.in.h:654 -msgid "Romanian (cedilla)" -msgstr "Rumano (cedilla)" +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 +msgid "Portuguese" +msgstr "Portugués" #: ../rules/base.xml.in.h:655 -msgid "Romanian (standard cedilla)" -msgstr "Rumano (cedilla estándar)" +msgid "Portuguese (eliminate dead keys)" +msgstr "Portugués (eliminar teclas muertas)" #: ../rules/base.xml.in.h:656 -msgid "Romanian (standard)" -msgstr "Rumano (estándar)" +msgid "Portuguese (Sun dead keys)" +msgstr "Portugués (teclas muertas de Sun)" #: ../rules/base.xml.in.h:657 -msgid "Rupee on 4" -msgstr "Rupia en el 4" +msgid "Portuguese (Macintosh)" +msgstr "Portugués (Macintosh)" -#: ../rules/base.xml.in.h:658 ../rules/base.extras.xml.in.h:32 -msgid "Russian" -msgstr "Ruso" +#: ../rules/base.xml.in.h:658 +msgid "Portuguese (Macintosh, eliminate dead keys)" +msgstr "Portugués (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:659 -msgid "Russian (DOS)" -msgstr "Ruso (DOS)" +msgid "Portuguese (Macintosh, Sun dead keys)" +msgstr "Portugués (Macintosh, teclas muertas de Sun)" #: ../rules/base.xml.in.h:660 -msgid "Russian (Georgia)" -msgstr "Ruso (Georgia)" +msgid "Portuguese (Nativo)" +msgstr "Portugués (Nativo)" #: ../rules/base.xml.in.h:661 -msgid "Russian (Germany, phonetic)" -msgstr "Ruso (Alemania, fonético)" +msgid "Portuguese (Nativo for US keyboards)" +msgstr "Portugués (Nativo para teclados de EE. UU.)" #: ../rules/base.xml.in.h:662 -msgid "Russian (Kazakhstan, with Kazakh)" -msgstr "Ruso (Kazajstán, con kazajo)" - -#: ../rules/base.xml.in.h:663 -msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Ruso (Polonia, Dvorak fonético)" +msgid "Esperanto (Portugal, Nativo)" +msgstr "Esperanto (Portugal, Nativo)" -#: ../rules/base.xml.in.h:664 -msgid "Russian (Sweden, phonetic)" -msgstr "Ruso (sueco, fonético)" +#. Keyboard indicator for Romanian layouts +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +msgid "ro" +msgstr "ro" -#: ../rules/base.xml.in.h:665 -msgid "Russian (Sweden, phonetic, eliminate dead keys)" -msgstr "Ruso (sueco, fonético, eliminar teclas muertas)" +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 +msgid "Romanian" +msgstr "Rumano" #: ../rules/base.xml.in.h:666 -msgid "Russian (US, phonetic)" -msgstr "Ruso (EE. UU., fonético)" +msgid "Romanian (cedilla)" +msgstr "Rumano (cedilla)" #: ../rules/base.xml.in.h:667 -msgid "Russian (Ukraine, standard RSTU)" -msgstr "Ruso (ucraniano estándar RSTU)" +msgid "Romanian (standard)" +msgstr "Rumano (estándar)" #: ../rules/base.xml.in.h:668 -msgid "Russian (legacy)" -msgstr "Ruso (heredado)" +msgid "Romanian (standard cedilla)" +msgstr "Rumano (cedilla estándar)" #: ../rules/base.xml.in.h:669 -msgid "Russian (phonetic WinKeys)" -msgstr "Ruso (fonético con teclas Windows)" +msgid "Romanian (WinKeys)" +msgstr "Rumano (teclas Windows)" -#: ../rules/base.xml.in.h:670 -msgid "Russian (phonetic)" -msgstr "Ruso (fonético)" +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 +msgid "Russian" +msgstr "Ruso" #: ../rules/base.xml.in.h:671 -msgid "Russian (typewriter)" -msgstr "Ruso (máquina de escribir)" +msgid "Russian (phonetic)" +msgstr "Ruso (fonético)" #: ../rules/base.xml.in.h:672 -msgid "Russian (typewriter, legacy)" -msgstr "Ruso (máquina de escribir, heredado)" +msgid "Russian (phonetic WinKeys)" +msgstr "Ruso (fonético con teclas Windows)" #: ../rules/base.xml.in.h:673 -msgid "SILVERCREST Multimedia Wireless Keyboard" -msgstr "SILVERCREST Multimedia Wireless Keyboard" +msgid "Russian (typewriter)" +msgstr "Ruso (máquina de escribir)" #: ../rules/base.xml.in.h:674 -msgid "SK-1300" -msgstr "SK-1300" +msgid "Russian (legacy)" +msgstr "Ruso (arcaico)" #: ../rules/base.xml.in.h:675 -msgid "SK-2500" -msgstr "SK-2500" +msgid "Russian (typewriter, legacy)" +msgstr "Ruso (máquina de escribir, arcaico)" #: ../rules/base.xml.in.h:676 -msgid "SK-6200" -msgstr "SK-6200" +msgid "Tatar" +msgstr "Tatar" #: ../rules/base.xml.in.h:677 -msgid "SK-7100" -msgstr "SK-7100" +msgid "Ossetian (legacy)" +msgstr "Osetio (arcaico)" #: ../rules/base.xml.in.h:678 -msgid "SVEN Ergonomic 2500" -msgstr "SVEN Ergonomic 2500" +msgid "Ossetian (WinKeys)" +msgstr "Osetio (teclas Windows)" #: ../rules/base.xml.in.h:679 -msgid "SVEN Slim 303" -msgstr "SVEN Slim 303" +msgid "Chuvash" +msgstr "Chuvash" #: ../rules/base.xml.in.h:680 -msgid "Saisiyat (Taiwan)" -msgstr "Saisiyat (Taiwán)" +msgid "Chuvash (Latin)" +msgstr "Cuvash (latino)" #: ../rules/base.xml.in.h:681 -msgid "Samsung SDM 4500P" -msgstr "Samsung SDM 4500P" +msgid "Udmurt" +msgstr "Udmurto" #: ../rules/base.xml.in.h:682 -msgid "Samsung SDM 4510P" -msgstr "Samsung SDM 4510P" +msgid "Komi" +msgstr "Komi" #: ../rules/base.xml.in.h:683 -msgid "Sanwa Supply SKB-KG3" -msgstr "Sanwa Supply SKB-KG3" +msgid "Yakut" +msgstr "Yakuto" #: ../rules/base.xml.in.h:684 -msgid "Scroll Lock" -msgstr "Bloq Despl" +msgid "Kalmyk" +msgstr "Calmuco" #: ../rules/base.xml.in.h:685 -msgid "Semi-colon on third level" -msgstr "Punto y coma en tercer nivel" +msgid "Russian (DOS)" +msgstr "Ruso (DOS)" -#: ../rules/base.xml.in.h:686 ../rules/base.extras.xml.in.h:35 -msgid "Serbian" -msgstr "Serbio" +#: ../rules/base.xml.in.h:686 +msgid "Russian (Macintosh)" +msgstr "Ruso (Macintosh)" #: ../rules/base.xml.in.h:687 -msgid "Serbian (Latin Unicode qwerty)" -msgstr "Serbio (latino Unicode qwerty)" +msgid "Serbian (Russia)" +msgstr "Serbio (Rusia)" #: ../rules/base.xml.in.h:688 -msgid "Serbian (Latin Unicode)" -msgstr "Serbio (latino Unicode)" +msgid "Bashkirian" +msgstr "Bashkiriano" #: ../rules/base.xml.in.h:689 -msgid "Serbian (Latin qwerty)" -msgstr "Serbio (latino qwerty)" +msgid "Mari" +msgstr "Mari" -#: ../rules/base.xml.in.h:690 -msgid "Serbian (Latin with guillemets)" -msgstr "Serbio (latino con guillemots)" +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 +msgid "Serbian" +msgstr "Serbio" #: ../rules/base.xml.in.h:691 -msgid "Serbian (Latin)" -msgstr "Serbio (latino)" +msgid "Serbian (Cyrillic, Z and ZHE swapped)" +msgstr "Serbio (cirílico, Z y ZHE intercambiados)" #: ../rules/base.xml.in.h:692 -msgid "Serbian (Russia)" -msgstr "Serbio (Rusia)" +msgid "Serbian (Latin)" +msgstr "Serbio (latino)" #: ../rules/base.xml.in.h:693 -msgid "Serbian (Z and ZHE swapped)" -msgstr "Serbio (Z y ZHE intercambiados)" +msgid "Serbian (Latin Unicode)" +msgstr "Serbio (latino Unicode)" #: ../rules/base.xml.in.h:694 -msgid "Serbian (with guillemets)" -msgstr "Serbio (con guillemots)" +msgid "Serbian (Latin qwerty)" +msgstr "Serbio (latino qwerty)" #: ../rules/base.xml.in.h:695 -msgid "Serbo-Croatian (US)" -msgstr "Serbocroata (EE. UU.)" +msgid "Serbian (Latin Unicode qwerty)" +msgstr "Serbio (latino Unicode qwerty)" #: ../rules/base.xml.in.h:696 -msgid "Shift cancels Caps Lock" -msgstr "Mayús cancela Bloq Mayús" +msgid "Serbian (Cyrillic with guillemets)" +msgstr "Serbio (cirílico con guillemots)" #: ../rules/base.xml.in.h:697 -msgid "Shift does not cancel Num Lock, chooses 3rd level instead" -msgstr "Mayús no cancela Bloq Num, en su lugar elije el 3er nivel" +msgid "Serbian (Latin with guillemets)" +msgstr "Serbio (latino con guillemots)" #: ../rules/base.xml.in.h:698 -msgid "Shift with numeric keypad keys works as in MS Windows" -msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows" - -#: ../rules/base.xml.in.h:699 -msgid "Shift+Caps Lock" -msgstr "Mayús+Bloq Mayús" +msgid "Pannonian Rusyn" +msgstr "Rusino de Panonia" +#. Keyboard indicator for Slovenian layouts #: ../rules/base.xml.in.h:700 -msgid "Sindhi" -msgstr "Sindhi" +msgid "sl" +msgstr "sl" #: ../rules/base.xml.in.h:701 -msgid "Sinhala (phonetic)" -msgstr "Cingalés (fonético)" +msgid "Slovenian" +msgstr "Esloveno" #: ../rules/base.xml.in.h:702 +msgid "Slovenian (use guillemets for quotes)" +msgstr "Esloveno (usar guillemots para comillas)" + +#: ../rules/base.xml.in.h:703 +msgid "Slovenian (US keyboard with Slovenian letters)" +msgstr "Esloveno (teclado EE. UU. con letras eslovenas)" + +#. Keyboard indicator for Slovak layouts +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +msgid "sk" +msgstr "sk" + +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovaco" -#: ../rules/base.xml.in.h:703 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovaco (contrabarra extendida)" -#: ../rules/base.xml.in.h:704 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslovaco (qwerty)" -#: ../rules/base.xml.in.h:705 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovaco (qwerty, contrabarra extendida)" -#: ../rules/base.xml.in.h:706 -msgid "Slovenian" -msgstr "Esloveno" - -#: ../rules/base.xml.in.h:707 -msgid "Slovenian (US keyboard with Slovenian letters)" -msgstr "Esloveno (teclado EE. UU. con letras eslovenas)" - -#: ../rules/base.xml.in.h:708 -msgid "Slovenian (use guillemets for quotes)" -msgstr "Esloveno (usar guillemots para comillas)" - -#: ../rules/base.xml.in.h:709 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Español" -#: ../rules/base.xml.in.h:710 -msgid "Spanish (Dvorak)" -msgstr "Español (Dvorak)" - #: ../rules/base.xml.in.h:711 -msgid "Spanish (Latin American)" -msgstr "Español (latinoamericano)" +msgid "Spanish (eliminate dead keys)" +msgstr "Español (eliminar teclas muertas)" #: ../rules/base.xml.in.h:712 -msgid "Spanish (Latin American, Sun dead keys)" -msgstr "Español (latinoamericano, teclas muertas de Sun)" +msgid "Spanish (include dead tilde)" +msgstr "Español (incluir tilde muerta)" #: ../rules/base.xml.in.h:713 -msgid "Spanish (Latin American, eliminate dead keys)" -msgstr "Español (latinoamericano, eliminar teclas muertas)" +msgid "Spanish (Sun dead keys)" +msgstr "Español (teclas muertas de Sun)" #: ../rules/base.xml.in.h:714 -msgid "Spanish (Latin American, include dead tilde)" -msgstr "Español (latinoamericano, incluir tilde muerta)" +msgid "Spanish (Dvorak)" +msgstr "Español (Dvorak)" #: ../rules/base.xml.in.h:715 -msgid "Spanish (Macintosh)" -msgstr "Español (Macintosh)" +msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" +msgstr "Asturiano (España, con H y L con punto bajo)" #: ../rules/base.xml.in.h:716 -msgid "Spanish (Sun dead keys)" -msgstr "Español (teclas muertas de Sun)" +msgid "Catalan (Spain, with middle-dot L)" +msgstr "Catalán (España, con L con punto medio)" #: ../rules/base.xml.in.h:717 -msgid "Spanish (eliminate dead keys)" -msgstr "Español (eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:718 -msgid "Spanish (include dead tilde)" -msgstr "Español (incluir tilde muerta)" +msgid "Spanish (Macintosh)" +msgstr "Español (Macintosh)" -#: ../rules/base.xml.in.h:719 -msgid "Special keys (Ctrl+Alt+<key>) handled in a server" -msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor" +#. Keyboard indicator for Swedish layouts +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +msgid "sv" +msgstr "sv" -#: ../rules/base.xml.in.h:720 -msgid "Sun Type 5/6" -msgstr "Sun tipo 5/6" +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 +msgid "Swedish" +msgstr "Sueco" #: ../rules/base.xml.in.h:721 -msgid "Super Power Multimedia Keyboard" -msgstr "Super Power Multimedia Keyboard" +msgid "Swedish (eliminate dead keys)" +msgstr "Sueco (eliminar teclas muertas)" #: ../rules/base.xml.in.h:722 -msgid "Swahili (Kenya)" -msgstr "Swahili (Kenia)" +msgid "Swedish (Dvorak)" +msgstr "Sueco (Dvorak)" #: ../rules/base.xml.in.h:723 -msgid "Swahili (Tanzania)" -msgstr "Swahili (Tanzania)" +msgid "Russian (Sweden, phonetic)" +msgstr "Ruso (sueco, fonético)" #: ../rules/base.xml.in.h:724 -msgid "Swap Ctrl and Caps Lock" -msgstr "Intercambiar Ctrl y Bloq Mayús" +msgid "Russian (Sweden, phonetic, eliminate dead keys)" +msgstr "Ruso (sueco, fonético, eliminar teclas muertas)" #: ../rules/base.xml.in.h:725 -msgid "Swap ESC and Caps Lock" -msgstr "Intercambiar ESC y Bloq Mayús" +msgid "Northern Saami (Sweden)" +msgstr "Lapón del norte (Suecia)" #: ../rules/base.xml.in.h:726 -msgid "Swedish" -msgstr "Sueco" - -#: ../rules/base.xml.in.h:727 -msgid "Swedish (Dvorak)" -msgstr "Sueco (Dvorak)" - -#: ../rules/base.xml.in.h:728 msgid "Swedish (Macintosh)" msgstr "Sueco (Macintosh)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sueco (Svdvorak)" +#: ../rules/base.xml.in.h:728 +msgid "Swedish Sign Language" +msgstr "Lenguaje de signos sueco" + +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 +msgid "German (Switzerland)" +msgstr "Alemán (Suiza)" + #: ../rules/base.xml.in.h:730 -msgid "Swedish (eliminate dead keys)" -msgstr "Sueco (eliminar teclas muertas)" +msgid "German (Switzerland, legacy)" +msgstr "Alemán (Suiza, arcaico)" #: ../rules/base.xml.in.h:731 -msgid "Swedish Sign Language" -msgstr "Lenguaje de signos sueco" +msgid "German (Switzerland, eliminate dead keys)" +msgstr "Alemán (Suiza, eliminar teclas muertas)" #: ../rules/base.xml.in.h:732 -msgid "Symplon PaceBook (tablet PC)" -msgstr "Symplon PaceBook (tablet PC)" +msgid "German (Switzerland, Sun dead keys)" +msgstr "Alemán (Suiza, teclas muertas de Sun)" #: ../rules/base.xml.in.h:733 -msgid "Syriac" -msgstr "Sirio" +msgid "French (Switzerland)" +msgstr "Francés (Suiza)" #: ../rules/base.xml.in.h:734 -msgid "Syriac (phonetic)" -msgstr "Sirio (fonético)" +msgid "French (Switzerland, eliminate dead keys)" +msgstr "Francés (Suiza, eliminar teclas muertas)" #: ../rules/base.xml.in.h:735 -msgid "Taiwanese" -msgstr "Taiwanés" +msgid "French (Switzerland, Sun dead keys)" +msgstr "Francés (Suiza, teclas muertas de Sun)" #: ../rules/base.xml.in.h:736 -msgid "Taiwanese (indigenous)" -msgstr "Taiwanés (autóctono)" +msgid "French (Switzerland, Macintosh)" +msgstr "Francés (Suiza, Macintosh)" #: ../rules/base.xml.in.h:737 -msgid "Tajik" -msgstr "Tajico" +msgid "German (Switzerland, Macintosh)" +msgstr "Alemán (Suiza, Macintosh)" #: ../rules/base.xml.in.h:738 -msgid "Tajik (legacy)" -msgstr "Tajico (heredado)" - -#: ../rules/base.xml.in.h:739 -msgid "Tamil" -msgstr "Tamil" +msgid "Arabic (Syria)" +msgstr "Árabe (Siria)" +#. Keyboard indicator for Syriac layouts #: ../rules/base.xml.in.h:740 -msgid "Tamil (Sri Lanka, TAB Typewriter)" -msgstr "Tamil (Sri Lanka, máquina de escribir TAB)" +msgid "syc" +msgstr "syc" #: ../rules/base.xml.in.h:741 -msgid "Tamil (Sri Lanka, Unicode)" -msgstr "Tamil (Sri Lanka, Unicode)" +msgid "Syriac" +msgstr "Sirio" #: ../rules/base.xml.in.h:742 -msgid "Tamil (TAB typewriter)" -msgstr "Tamil (máquina de escribir TAB)" +msgid "Syriac (phonetic)" +msgstr "Sirio (fonético)" #: ../rules/base.xml.in.h:743 -msgid "Tamil (TSCII typewriter)" -msgstr "Tamil (máquina de escribir TSCII)" +msgid "Kurdish (Syria, Latin Q)" +msgstr "Kurdo (Siria, latino Q)" #: ../rules/base.xml.in.h:744 -msgid "Tamil (Unicode)" -msgstr "Tamil (Unicode)" +msgid "Kurdish (Syria, F)" +msgstr "Kurdo (Siria, F)" #: ../rules/base.xml.in.h:745 -msgid "Tamil (keyboard with numerals)" -msgstr "Tamil (teclado con números)" - -#: ../rules/base.xml.in.h:746 -msgid "Targa Visionary 811" -msgstr "Targa Visionary 811" +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "Kurdo (Siria, latino Alt-Q)" +#. Keyboard indicator for Tajik layouts #: ../rules/base.xml.in.h:747 -msgid "Tatar" -msgstr "Tatar" +msgid "tg" +msgstr "tg" #: ../rules/base.xml.in.h:748 -msgid "Telugu" -msgstr "Telugu" +msgid "Tajik" +msgstr "Tajico" #: ../rules/base.xml.in.h:749 -msgid "Thai" -msgstr "Tailandés" - -#: ../rules/base.xml.in.h:750 -msgid "Thai (Pattachote)" -msgstr "Tailandés (Pattachote)" +msgid "Tajik (legacy)" +msgstr "Tajico (arcaico)" +#. Keyboard indicator for Sinhala layouts #: ../rules/base.xml.in.h:751 -msgid "Thai (TIS-820.2538)" -msgstr "Tailandés (TIS-820.2538)" +msgid "si" +msgstr "si" #: ../rules/base.xml.in.h:752 -msgid "Tibetan" -msgstr "Tibetano" +msgid "Sinhala (phonetic)" +msgstr "Cingalés (fonético)" #: ../rules/base.xml.in.h:753 -msgid "Tibetan (with ASCII numerals)" -msgstr "Tibetano (con numerales ASCII)" +msgid "Tamil (Sri Lanka, Unicode)" +msgstr "Tamil (Sri Lanka, Unicode)" #: ../rules/base.xml.in.h:754 -msgid "To the corresponding key in a Dvorak keyboard." -msgstr "A la tecla correspondiente en un teclado Dvorak." - -#: ../rules/base.xml.in.h:755 -msgid "To the corresponding key in a Qwerty keyboard." -msgstr "A la tecla correspondiente en un teclado Qwerty." +msgid "Tamil (Sri Lanka, TAB Typewriter)" +msgstr "Tamil (Sri Lanka, máquina de escribir TAB)" +#. Keyboard indicator for Thai layouts #: ../rules/base.xml.in.h:756 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Cambiar las teclas de flechas con Mayús + Bloq Num" +msgid "th" +msgstr "th" #: ../rules/base.xml.in.h:757 -msgid "Toshiba Satellite S3000" -msgstr "Toshiba Satellite S3000" +msgid "Thai" +msgstr "Tailandés" #: ../rules/base.xml.in.h:758 -msgid "Trust Direct Access Keyboard" -msgstr "Trust Direct Access Keyboard" +msgid "Thai (TIS-820.2538)" +msgstr "Tailandés (TIS-820.2538)" #: ../rules/base.xml.in.h:759 -msgid "Trust Slimline" -msgstr "Trust Slimline" - -#: ../rules/base.xml.in.h:760 -msgid "Trust Wireless Keyboard Classic" -msgstr "Trust Wireless Keyboard Classic" +msgid "Thai (Pattachote)" +msgstr "Tailandés (Pattachote)" -#: ../rules/base.xml.in.h:761 -msgid "Tswana" -msgstr "Tswana" +#. Keyboard indicator for Turkish layouts +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +msgid "tr" +msgstr "tr" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turco" #: ../rules/base.xml.in.h:763 -msgid "Turkish (Alt-Q)" -msgstr "Turco (Alt-Q)" - -#: ../rules/base.xml.in.h:764 msgid "Turkish (F)" msgstr "Turco (F)" +#: ../rules/base.xml.in.h:764 +msgid "Turkish (Alt-Q)" +msgstr "Turco (Alt-Q)" + #: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turco (teclas muertas de Sun)" #: ../rules/base.xml.in.h:766 -msgid "Turkish (international with dead keys)" -msgstr "Turco (internacional con teclas muertas)" +msgid "Kurdish (Turkey, Latin Q)" +msgstr "Kurdo (Turquía, latino Q)" #: ../rules/base.xml.in.h:767 -msgid "Turkmen" -msgstr "Turkmenistano" +msgid "Kurdish (Turkey, F)" +msgstr "Kurdo (Turquía, F)" #: ../rules/base.xml.in.h:768 -msgid "Turkmen (Alt-Q)" -msgstr "Turkmenistano (Alt-Q)" +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "Kurdo (Turquía, latino Alt-Q)" #: ../rules/base.xml.in.h:769 -msgid "TypeMatrix EZ-Reach 2020" -msgstr "TypeMatrix EZ-Reach 2020" - -#: ../rules/base.xml.in.h:770 -msgid "TypeMatrix EZ-Reach 2030 PS2" -msgstr "TypeMatrix EZ-Reach 2030 PS2" +msgid "Turkish (international with dead keys)" +msgstr "Turco (internacional con teclas muertas)" -#: ../rules/base.xml.in.h:771 -msgid "TypeMatrix EZ-Reach 2030 USB" -msgstr "TypeMatrix EZ-Reach 2030 USB" +#. Keyboard indicator for Crimean Tatar layouts +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 +msgid "crh" +msgstr "crh" #: ../rules/base.xml.in.h:772 -msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:modo EU)" +msgid "Crimean Tatar (Turkish Q)" +msgstr "Tártaro de Crimea (Q turca)" #: ../rules/base.xml.in.h:773 -msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)" +msgid "Crimean Tatar (Turkish F)" +msgstr "Tártaro de Crimea (F turca)" #: ../rules/base.xml.in.h:774 -msgid "Udmurt" -msgstr "Udmurto" +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "Tártaro de Crimea (Alt-Q turca)" #: ../rules/base.xml.in.h:775 -msgid "Ukrainian" -msgstr "Ucraniano" +msgid "Taiwanese" +msgstr "Taiwanés" #: ../rules/base.xml.in.h:776 -msgid "Ukrainian (WinKeys)" -msgstr "Ucraniano (teclas Windows)" - -#: ../rules/base.xml.in.h:777 -msgid "Ukrainian (homophonic)" -msgstr "Ucraniano (homofónico)" +msgid "Taiwanese (indigenous)" +msgstr "Taiwanés (autóctono)" +#. Keyboard indicator for Saisiyat layouts #: ../rules/base.xml.in.h:778 -msgid "Ukrainian (legacy)" -msgstr "Ucraniano (heredado)" +msgid "xsy" +msgstr "xsy" #: ../rules/base.xml.in.h:779 -msgid "Ukrainian (phonetic)" -msgstr "Ucraniano (fonético)" - -#: ../rules/base.xml.in.h:780 -msgid "Ukrainian (standard RSTU)" -msgstr "Ucraniano (estándar RSTU)" +msgid "Saisiyat (Taiwan)" +msgstr "Saisiyat (Taiwán)" -#: ../rules/base.xml.in.h:781 -msgid "Ukrainian (typewriter)" -msgstr "Ucraniano (máquina de escribir)" +#. Keyboard indicator for Ukranian layouts +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +msgid "uk" +msgstr "uk" -#: ../rules/base.xml.in.h:782 -msgid "Unicode additions (arrows and math operators)" -msgstr "Adiciones Unicode (flechas y operadores matemáticos)" +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 +msgid "Ukrainian" +msgstr "Ucraniano" #: ../rules/base.xml.in.h:783 -msgid "Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Adiciones Unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado" +msgid "Ukrainian (phonetic)" +msgstr "Ucraniano (fonético)" #: ../rules/base.xml.in.h:784 -msgid "Unitek KB-1925" -msgstr "Unitek KB-1925" +msgid "Ukrainian (typewriter)" +msgstr "Ucraniano (máquina de escribir)" #: ../rules/base.xml.in.h:785 -msgid "Urdu (Pakistan)" -msgstr "Urdu (Pakistán)" +msgid "Ukrainian (WinKeys)" +msgstr "Ucraniano (teclas Windows)" #: ../rules/base.xml.in.h:786 -msgid "Urdu (Pakistan, CRULP)" -msgstr "Urdu (Pakistán, CRULP)" +msgid "Ukrainian (legacy)" +msgstr "Ucraniano (arcaico)" #: ../rules/base.xml.in.h:787 -msgid "Urdu (Pakistan, NLA)" -msgstr "Urdu (Pakistán, NLA)" +msgid "Ukrainian (standard RSTU)" +msgstr "Ucraniano (estándar RSTU)" #: ../rules/base.xml.in.h:788 -msgid "Urdu (WinKeys)" -msgstr "Urdu (teclas Windows)" +msgid "Russian (Ukraine, standard RSTU)" +msgstr "Ruso (ucraniano estándar RSTU)" #: ../rules/base.xml.in.h:789 -msgid "Urdu (alternative phonetic)" -msgstr "Urdu (fonético alternativo)" +msgid "Ukrainian (homophonic)" +msgstr "Ucraniano (homofónico)" -#: ../rules/base.xml.in.h:790 -msgid "Urdu (phonetic)" -msgstr "Urdu (fonético)" +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 +msgid "English (UK)" +msgstr "Inglés (RU)" #: ../rules/base.xml.in.h:791 -msgid "Use keyboard LED to show alternative layout" -msgstr "Usar LED del teclado para mostrar la distribución alternativa" +msgid "English (UK, extended WinKeys)" +msgstr "Inglés (RU, extendido con teclas Windows)" #: ../rules/base.xml.in.h:792 -msgid "Using space key to input non-breakable space character" -msgstr "Usando la tecla espacio para introducir un carácter de espacio no separable" +msgid "English (UK, international with dead keys)" +msgstr "Inglés (RU, internacional con teclas muertas)" #: ../rules/base.xml.in.h:793 -msgid "Usual space at any level" -msgstr "Espacio usual en cualquier nivel" +msgid "English (UK, Dvorak)" +msgstr "Inglés (RU, Dvorak)" #: ../rules/base.xml.in.h:794 -msgid "Uyghur" -msgstr "Uigur" +msgid "English (UK, Dvorak with UK punctuation)" +msgstr "Inglés (RU, Dvorak con puntuación para RU)" #: ../rules/base.xml.in.h:795 -msgid "Uzbek" -msgstr "Uzbeco" +msgid "English (UK, Macintosh)" +msgstr "Inglés (RU, Macintosh)" #: ../rules/base.xml.in.h:796 -msgid "Uzbek (Afghanistan)" -msgstr "Uzbeco (Afganistán)" +msgid "English (UK, Macintosh international)" +msgstr "Inglés (RU, Macintosh internacional)" #: ../rules/base.xml.in.h:797 -msgid "Uzbek (Afghanistan, OLPC)" -msgstr "Uzbeco (Afganistán, OLPC)" +msgid "English (UK, Colemak)" +msgstr "Inglés (RU, Colemak)" #: ../rules/base.xml.in.h:798 -msgid "Uzbek (Latin)" -msgstr "Uzbeco (latino)" +msgid "Uzbek" +msgstr "Uzbeco" #: ../rules/base.xml.in.h:799 -msgid "Vietnamese" -msgstr "Vietnamita" - -#: ../rules/base.xml.in.h:800 -msgid "ViewSonic KU-306 Internet Keyboard" -msgstr "Teclado para internet ViewSonic KU-306" +msgid "Uzbek (Latin)" +msgstr "Uzbeco (latino)" +#. Keyboard indicator for Vietnamese layouts #: ../rules/base.xml.in.h:801 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" -msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos)" +msgid "vi" +msgstr "vi" #: ../rules/base.xml.in.h:802 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado" - -#: ../rules/base.xml.in.h:803 -msgid "Winbook Model XP5" -msgstr "Winbook Model XP5" +msgid "Vietnamese" +msgstr "Vietnamita" -#: ../rules/base.xml.in.h:804 -msgid "Wolof" -msgstr "Wolof" +#. Keyboard indicator for Korean layouts +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +msgid "ko" +msgstr "ko" -#: ../rules/base.xml.in.h:805 -msgid "Yahoo! Internet Keyboard" -msgstr "Yahoo! Internet Keyboard" +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 +msgid "Korean" +msgstr "Coreano" #: ../rules/base.xml.in.h:806 -msgid "Yakut" -msgstr "Yakuto" +msgid "Korean (101/104 key compatible)" +msgstr "Coreano (101/104 teclas compatible)" #: ../rules/base.xml.in.h:807 -msgid "Yoruba" -msgstr "Yoruba" - -#: ../rules/base.xml.in.h:808 -msgid "Zero-width non-joiner character at second level" -msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel" +msgid "Japanese (PC-98xx Series)" +msgstr "Japonés (series PC-98xx)" +#. Keyboard indicator for Irish layouts #: ../rules/base.xml.in.h:809 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" -msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel" +msgid "ie" +msgstr "ie" #: ../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 "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel" +msgid "Irish" +msgstr "Irlandés" #: ../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 "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio estrecho no separable en el cuarto nivel" +msgid "CloGaelach" +msgstr "Cló Gaelach" #: ../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 "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio de anchura cero rompible («ZWJ») en el cuarto nivel" +msgid "Irish (UnicodeExpert)" +msgstr "Irlandés (UnicodeExperto)" #: ../rules/base.xml.in.h:813 -msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" -msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel" +msgid "Ogham" +msgstr "Ogham" #: ../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 "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel, caracter de espacio no separable en el cuarto nivel" +msgid "Ogham (IS434)" +msgstr "Ogam (IS434)" #: ../rules/base.xml.in.h:815 -msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" -msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el tercer nivel, carácter de anchura cero rompible («ZWJ») en el cuarto nivel" +msgid "Urdu (Pakistan)" +msgstr "Urdu (Pakistán)" #: ../rules/base.xml.in.h:816 -msgid "ak" -msgstr "ak" +msgid "Urdu (Pakistan, CRULP)" +msgstr "Urdu (Pakistán, CRULP)" #: ../rules/base.xml.in.h:817 -msgid "am" -msgstr "am" +msgid "Urdu (Pakistan, NLA)" +msgstr "Urdu (Pakistán, NLA)" #: ../rules/base.xml.in.h:818 -msgid "ar" -msgstr "ar" - -#: ../rules/base.xml.in.h:819 -msgid "avn" -msgstr "avn" +msgid "Arabic (Pakistan)" +msgstr "Árabe (Pakistán)" +#. Keyboard indicator for Sindhi layouts #: ../rules/base.xml.in.h:820 -msgid "az" -msgstr "az" +msgid "sd" +msgstr "sd" #: ../rules/base.xml.in.h:821 -msgid "be" -msgstr "be" - -#: ../rules/base.xml.in.h:822 -msgid "ber" -msgstr "ber" +msgid "Sindhi" +msgstr "Sindhi" +#. Keyboard indicator for Dhivehi layouts #: ../rules/base.xml.in.h:823 -msgid "bg" -msgstr "bg" +msgid "dv" +msgstr "dv" #: ../rules/base.xml.in.h:824 -msgid "bm" -msgstr "bm" +msgid "Dhivehi" +msgstr "Dhivehi" #: ../rules/base.xml.in.h:825 -msgid "bn" -msgstr "bn" - -#: ../rules/base.xml.in.h:826 -msgid "brl" -msgstr "brl" +msgid "English (South Africa)" +msgstr "Inglés (Sudáfrica)" +#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:827 -msgid "bs" -msgstr "bs" +msgid "eo" +msgstr "eo" #: ../rules/base.xml.in.h:828 -msgid "ca" -msgstr "ca" +msgid "Esperanto" +msgstr "Esperanto" #: ../rules/base.xml.in.h:829 -msgid "chr" -msgstr "chr" - -#: ../rules/base.xml.in.h:830 -msgid "cm" -msgstr "cm" +msgid "Esperanto (displaced semicolon and quote, obsolete)" +msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)" -#: ../rules/base.xml.in.h:831 ../rules/base.extras.xml.in.h:38 -msgid "crh" -msgstr "crh" +#. Keyboard indicator for Nepali layouts +#: ../rules/base.xml.in.h:831 +msgid "ne" +msgstr "ne" #: ../rules/base.xml.in.h:832 -msgid "cs" -msgstr "cs" +msgid "Nepali" +msgstr "Nepalí" #: ../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 "English (Nigeria)" +msgstr "Inglés (Nigeria)" +#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:835 -msgid "dv" -msgstr "dv" +msgid "ig" +msgstr "ig" #: ../rules/base.xml.in.h:836 -msgid "dz" -msgstr "dz" - -#: ../rules/base.xml.in.h:837 -msgid "ee" -msgstr "ee" +msgid "Igbo" +msgstr "Igbo" -#: ../rules/base.xml.in.h:838 ../rules/base.extras.xml.in.h:40 -msgid "en" -msgstr "en" +#. Keyboard indicator for Yoruba layouts +#: ../rules/base.xml.in.h:838 +msgid "yo" +msgstr "yo" #: ../rules/base.xml.in.h:839 -msgid "eo" -msgstr "eo" - -#: ../rules/base.xml.in.h:840 -msgid "es" -msgstr "es" +msgid "Yoruba" +msgstr "Yoruba" +#. Keyboard indicator for Amharic layouts #: ../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 "am" +msgstr "am" -#: ../rules/base.xml.in.h:843 -msgid "ff" -msgstr "ff" +#: ../rules/base.xml.in.h:842 +msgid "Amharic" +msgstr "Amharico" +#. Keyboard indicator for Wolof layouts #: ../rules/base.xml.in.h:844 -msgid "fi" -msgstr "fi" +msgid "wo" +msgstr "wo" #: ../rules/base.xml.in.h:845 -msgid "fo" -msgstr "fo" - -#: ../rules/base.xml.in.h:846 ../rules/base.extras.xml.in.h:42 -msgid "fr" -msgstr "fr" +msgid "Wolof" +msgstr "Wolof" +#. Keyboard indicator for Braille layouts #: ../rules/base.xml.in.h:847 -msgid "gaa" -msgstr "gaa" +msgid "brl" +msgstr "brl" #: ../rules/base.xml.in.h:848 -msgid "gr" -msgstr "gr" +msgid "Braille" +msgstr "Braille" #: ../rules/base.xml.in.h:849 -msgid "gu" -msgstr "gu" +msgid "Braille (left hand)" +msgstr "Braille (zurdo)" #: ../rules/base.xml.in.h:850 -msgid "ha" -msgstr "ha" - -#: ../rules/base.xml.in.h:851 -msgid "he" -msgstr "he" +msgid "Braille (right hand)" +msgstr "Braille (diestro)" +#. Keyboard indicator for Turkmen layouts #: ../rules/base.xml.in.h:852 -msgid "hi" -msgstr "hi" +msgid "tk" +msgstr "tk" #: ../rules/base.xml.in.h:853 -msgid "hr" -msgstr "hr" +msgid "Turkmen" +msgstr "Turkmenistano" #: ../rules/base.xml.in.h:854 -msgid "hu" -msgstr "hu" - -#: ../rules/base.xml.in.h:855 ../rules/base.extras.xml.in.h:43 -msgid "hy" -msgstr "hy" +msgid "Turkmen (Alt-Q)" +msgstr "Turkmenistano (Alt-Q)" +#. Keyboard indicator for Bambara layouts #: ../rules/base.xml.in.h:856 -msgid "ie" -msgstr "ie" +msgid "bm" +msgstr "bm" #: ../rules/base.xml.in.h:857 -msgid "ig" -msgstr "ig" +msgid "Bambara" +msgstr "Bambara" #: ../rules/base.xml.in.h:858 -msgid "ike" -msgstr "ike" +msgid "French (Mali, alternative)" +msgstr "Francés (Malí, alternativo)" #: ../rules/base.xml.in.h:859 -msgid "in" -msgstr "in" +msgid "English (Mali, US Macintosh)" +msgstr "Inglés (Malí, Macintosh de EE. UU.)" #: ../rules/base.xml.in.h:860 -msgid "is" -msgstr "is" - -#: ../rules/base.xml.in.h:861 -msgid "it" -msgstr "it" +msgid "English (Mali, US international)" +msgstr "Inglés (Malí, EE. UU. internacional)" +#. Keyboard indicator for Swahili layouts #: ../rules/base.xml.in.h:862 -msgid "ja" -msgstr "ja" +msgid "sw" +msgstr "sw" #: ../rules/base.xml.in.h:863 -msgid "ka" -msgstr "ka" +msgid "Swahili (Tanzania)" +msgstr "Swahili (Tanzania)" #: ../rules/base.xml.in.h:864 -msgid "ki" -msgstr "ki" +msgid "Swahili (Kenya)" +msgstr "Swahili (Kenia)" #: ../rules/base.xml.in.h:865 -msgid "kk" -msgstr "kk" - -#: ../rules/base.xml.in.h:866 -msgid "km" -msgstr "km" +msgid "Kikuyu" +msgstr "kikuyu" +#. Keyboard indicator for Tswana layouts #: ../rules/base.xml.in.h:867 -msgid "kn" -msgstr "kn" +msgid "tn" +msgstr "tn" #: ../rules/base.xml.in.h:868 -msgid "ko" -msgstr "ko" - -#: ../rules/base.xml.in.h:869 -msgid "ku" -msgstr "ku" +msgid "Tswana" +msgstr "Tswana" +#. Keyboard indicator for Filipino layouts #: ../rules/base.xml.in.h:870 -msgid "lo" -msgstr "lo" +msgid "ph" +msgstr "ph" -#: ../rules/base.xml.in.h:871 ../rules/base.extras.xml.in.h:45 -msgid "lt" -msgstr "lt" +#: ../rules/base.xml.in.h:871 +msgid "Filipino" +msgstr "Filipino" -#: ../rules/base.xml.in.h:872 ../rules/base.extras.xml.in.h:46 -msgid "lv" -msgstr "lv" +#: ../rules/base.xml.in.h:872 +msgid "Filipino (QWERTY Baybayin)" +msgstr "Filipino (QWERTY baybayin)" #: ../rules/base.xml.in.h:873 -msgid "mi" -msgstr "mi" +msgid "Filipino (Capewell-Dvorak Latin)" +msgstr "Filipino (Capewell-Dvorak latino)" #: ../rules/base.xml.in.h:874 -msgid "mk" -msgstr "mk" +msgid "Filipino (Capewell-Dvorak Baybayin)" +msgstr "Filipino (Capewell-Dvorak baybayin)" #: ../rules/base.xml.in.h:875 -msgid "ml" -msgstr "ml" +msgid "Filipino (Capewell-QWERF 2006 Latin)" +msgstr "Filipino (Capewell-QWERF 2006 latino)" #: ../rules/base.xml.in.h:876 -msgid "mn" -msgstr "mn" +msgid "Filipino (Capewell-QWERF 2006 Baybayin)" +msgstr "Filipino (Capewell-QWERF 2006 baybayin)" #: ../rules/base.xml.in.h:877 -msgid "mt" -msgstr "mt" +msgid "Filipino (Colemak Latin)" +msgstr "Filipino (Colemak latino)" #: ../rules/base.xml.in.h:878 -msgid "my" -msgstr "my" +msgid "Filipino (Colemak Baybayin)" +msgstr "Filipino (Colemak baybayin)" #: ../rules/base.xml.in.h:879 -msgid "ne" -msgstr "ne" +msgid "Filipino (Dvorak Latin)" +msgstr "Filipino (Dvorak latino)" #: ../rules/base.xml.in.h:880 -msgid "nl" -msgstr "nl" +msgid "Filipino (Dvorak Baybayin)" +msgstr "Filipino (Dvorak baybayin)" #: ../rules/base.xml.in.h:881 -msgid "no" -msgstr "no" +msgid "md" +msgstr "md" #: ../rules/base.xml.in.h:882 -msgid "or" -msgstr "or" +msgid "Moldavian" +msgstr "Moldavo" #: ../rules/base.xml.in.h:883 -msgid "pa" -msgstr "pa" +msgid "gag" +msgstr "gag" #: ../rules/base.xml.in.h:884 -msgid "ph" -msgstr "ph" +msgid "Moldavian (Gagauz)" +msgstr "Moldavo (Gagauzia)" -#: ../rules/base.xml.in.h:885 ../rules/base.extras.xml.in.h:47 -msgid "pl" -msgstr "pl" +#: ../rules/base.xml.in.h:885 +msgid "Switching to another layout" +msgstr "Cambiar a otra distribución" #: ../rules/base.xml.in.h:886 -msgid "ps" -msgstr "ps" +msgid "Right Alt (while pressed)" +msgstr "Alt derecho (mientras está pulsado)" #: ../rules/base.xml.in.h:887 -msgid "pt" -msgstr "pt" +msgid "Left Alt (while pressed)" +msgstr "Alt izquierdo (mientras está pulsado)" -#: ../rules/base.xml.in.h:888 ../rules/base.extras.xml.in.h:48 -msgid "ro" -msgstr "ro" +#: ../rules/base.xml.in.h:888 +msgid "Left Win (while pressed)" +msgstr "Tecla Windows izquierda (al pulsarla)" + +#: ../rules/base.xml.in.h:889 +msgid "Right Win (while pressed)" +msgstr "La tecla Windows (mientras está pulsada)" + +#: ../rules/base.xml.in.h:890 +msgid "Any Win key (while pressed)" +msgstr "Cualquier tecla Windows (al pulsarla)" + +#: ../rules/base.xml.in.h:891 +msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" +msgstr "Bloq Mayús (al pulsarse), Alt+Bloq Mayús realiza la acción original de bloqueo de mayúsculas" + +#: ../rules/base.xml.in.h:892 +msgid "Right Ctrl (while pressed)" +msgstr "Ctrl derecho (mientras está pulsado)" + +#: ../rules/base.xml.in.h:893 +msgid "Right Alt" +msgstr "Alt derecho" + +#: ../rules/base.xml.in.h:894 +msgid "Left Alt" +msgstr "Alt izquierdo" + +#: ../rules/base.xml.in.h:895 +msgid "Caps Lock" +msgstr "Bloqueo de mayúsculas" + +#: ../rules/base.xml.in.h:896 +msgid "Shift+Caps Lock" +msgstr "Mayús+Bloq Mayús" + +#: ../rules/base.xml.in.h:897 +msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" +msgstr "Bloq Mayús (a la primera distribución), Mayús+Bloq Mayús (a la última distribución)" + +#: ../rules/base.xml.in.h:898 +msgid "Left Win (to first layout), Right Win/Menu (to last layout)" +msgstr "Win izquierdo (a la primera distribución), Win/Menu derecho (a la última distribución)" + +#: ../rules/base.xml.in.h:899 +msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" +msgstr "Ctrl izquierdo (a la primera distribución), Ctrl derecho (a la última distribución)" + +#: ../rules/base.xml.in.h:900 +msgid "Alt+Caps Lock" +msgstr "Alt+Bloq Mayús" + +#: ../rules/base.xml.in.h:901 +msgid "Both Shift keys together" +msgstr "Ambas teclas Mayús juntas" + +#: ../rules/base.xml.in.h:902 +msgid "Both Alt keys together" +msgstr "Ambas teclas Alt juntas" + +#: ../rules/base.xml.in.h:903 +msgid "Both Ctrl keys together" +msgstr "Ambas teclas Ctrl juntas" + +#: ../rules/base.xml.in.h:904 +msgid "Ctrl+Shift" +msgstr "Ctrl+Mayús" + +#: ../rules/base.xml.in.h:905 +msgid "Left Ctrl+Left Shift" +msgstr "Ctrl izquierdo + Mayús izquierdo" + +#: ../rules/base.xml.in.h:906 +msgid "Right Ctrl+Right Shift" +msgstr "Ctrl derecho + Mayús derecho" + +#: ../rules/base.xml.in.h:907 +msgid "Alt+Ctrl" +msgstr "Alt+Ctrl" + +#: ../rules/base.xml.in.h:908 +msgid "Alt+Shift" +msgstr "Alt+Mayús" + +#: ../rules/base.xml.in.h:909 +msgid "Left Alt+Left Shift" +msgstr "Alt izquierdo + Mayús izquierdo" + +#: ../rules/base.xml.in.h:910 +msgid "Alt+Space" +msgstr "Alt+Espacio" + +#: ../rules/base.xml.in.h:911 +msgid "Menu" +msgstr "Menu" + +#: ../rules/base.xml.in.h:912 +msgid "Left Win" +msgstr "Win izquierdo" + +#: ../rules/base.xml.in.h:913 +msgid "Right Win" +msgstr "Windows derecho" + +#: ../rules/base.xml.in.h:914 +msgid "Left Shift" +msgstr "Mayús izquierdo" + +#: ../rules/base.xml.in.h:915 +msgid "Right Shift" +msgstr "Mayús derecho" + +#: ../rules/base.xml.in.h:916 +msgid "Left Ctrl" +msgstr "Ctrl izquierdo" + +#: ../rules/base.xml.in.h:917 +msgid "Right Ctrl" +msgstr "Ctrl derecho" + +#: ../rules/base.xml.in.h:918 +msgid "Scroll Lock" +msgstr "Bloq Despl" + +#: ../rules/base.xml.in.h:919 +msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" +msgstr "Ctrl izquierdo + Ctrl derecho (a la primera distribución), Ctrl derecho + Menú (a la segunda distribución)" + +#: ../rules/base.xml.in.h:920 +msgid "Key to choose 3rd level" +msgstr "Tecla para seleccionar el tercer nivel" + +#: ../rules/base.xml.in.h:921 +msgid "Any Win key" +msgstr "Cualquier tecla Windows" + +#: ../rules/base.xml.in.h:922 +msgid "Any Alt key" +msgstr "Cualquier tecla Alt" + +#: ../rules/base.xml.in.h:923 +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "La tecla Alt derecho, Mayús+Alt derecho es tecla Componer" + +#: ../rules/base.xml.in.h:924 +msgid "Right Alt key never chooses 3rd level" +msgstr "La tecla Alt derecho nunca elige el tercer nivel" + +#: ../rules/base.xml.in.h:925 +msgid "Enter on keypad" +msgstr "Intro en el teclado numérico" + +#: ../rules/base.xml.in.h:926 +msgid "Backslash" +msgstr "Contrabarra" + +#: ../rules/base.xml.in.h:927 +msgid "<Less/Greater>" +msgstr "<Menor que/Mayor que>" + +#: ../rules/base.xml.in.h:928 +msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Bloq Mayús elige el tercer nivel, actúa como un bloqueo de una sola vez al pulsarse junto con otro selector de tercer nivel" + +#: ../rules/base.xml.in.h:929 +msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Contrabarra elige el tercer nivel, bloquea solo una vez al pulsarse junto con otro selector de tercer nivel" + +#: ../rules/base.xml.in.h:930 +msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "<Menor que/Mayor que> elige el 3º nivel, bloquea solo una vez al pulsarse junto con otro selector de 3º nivel" + +#: ../rules/base.xml.in.h:931 +msgid "Ctrl key position" +msgstr "Posición de la tecla Ctrl" + +#: ../rules/base.xml.in.h:932 +msgid "Caps Lock as Ctrl" +msgstr "Bloq Mayús como Ctrl" + +#: ../rules/base.xml.in.h:933 +msgid "Left Ctrl as Meta" +msgstr "Ctrl izquierdo como Meta" + +#: ../rules/base.xml.in.h:934 +msgid "Swap Ctrl and Caps Lock" +msgstr "Intercambiar Ctrl y Bloq Mayús" + +#: ../rules/base.xml.in.h:935 +msgid "At left of 'A'" +msgstr "A la izquierda de la «A»" + +#: ../rules/base.xml.in.h:936 +msgid "At bottom left" +msgstr "En la parte inferior izquierda" + +#: ../rules/base.xml.in.h:937 +msgid "Right Ctrl as Right Alt" +msgstr "Ctrl derecho como Alt derecho" + +#: ../rules/base.xml.in.h:938 +msgid "Menu as Right Ctrl" +msgstr "Menú como Ctrl derecho" + +#: ../rules/base.xml.in.h:939 +msgid "Right Alt as Right Ctrl" +msgstr "Alt derecho como Ctrl derecho" + +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Intercambiar tecla Alt Izquierda con tecla Ctrl Izquierda" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Intercambiar tecla Windows Izquierda con tecla Ctrl Izquierda" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Tecla Alt como tecla Ctrl, Tecla Ctrl izquierda como tecla Windows, tecla Windows como tecla Alt" + +#: ../rules/base.xml.in.h:943 +msgid "Use keyboard LED to show alternative layout" +msgstr "Usar LED del teclado para mostrar la distribución alternativa" + +#: ../rules/base.xml.in.h:944 +msgid "Num Lock" +msgstr "Bloq Num" + +#: ../rules/base.xml.in.h:945 +msgid "Layout of numeric keypad" +msgstr "Distribución del teclado numérico " + +#: ../rules/base.xml.in.h:946 +msgid "Legacy" +msgstr "Arcaico" + +#: ../rules/base.xml.in.h:947 +msgid "Unicode additions (arrows and math operators)" +msgstr "Adiciones Unicode (flechas y operadores matemáticos)" + +#: ../rules/base.xml.in.h:948 +msgid "Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Adiciones Unicode (flechas y operadores matemáticos; operadores matemáticos en el nivel predeterminado)" + +#: ../rules/base.xml.in.h:949 +msgid "Legacy Wang 724" +msgstr "Wang 724 arcaico" + +#: ../rules/base.xml.in.h:950 +msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" +msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos)" + +#: ../rules/base.xml.in.h:951 +msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos; operadores matemáticos en el nivel predeterminado)" + +#: ../rules/base.xml.in.h:952 +msgid "Hexadecimal" +msgstr "Hexadecimal" + +#: ../rules/base.xml.in.h:953 +msgid "ATM/phone-style" +msgstr "Estilo de cajero automático ó teléfono" + +#: ../rules/base.xml.in.h:954 +msgid "Numeric keypad delete key behaviour" +msgstr "Comportamiento de la tecla Supr del teclado numérico" + +#: ../rules/base.xml.in.h:955 +msgid "Legacy key with dot" +msgstr "Tecla arcaica con punto" + +#. Actually, with KP_SEPARATOR, as the old keypad(comma) +#: ../rules/base.xml.in.h:957 +msgid "Legacy key with comma" +msgstr "Tecla arcaica con coma" + +#: ../rules/base.xml.in.h:958 +msgid "Four-level key with dot" +msgstr "Tecla de cuarto nivel con punto" + +#: ../rules/base.xml.in.h:959 +msgid "Four-level key with dot, Latin-9 only" +msgstr "Tecla de cuarto nivel con punto, restricción latin-9" + +#: ../rules/base.xml.in.h:960 +msgid "Four-level key with comma" +msgstr "Tecla de cuarto nivel con coma" + +#: ../rules/base.xml.in.h:961 +msgid "Four-level key with momayyez" +msgstr "Tecla de cuarto nivel con momayyez" + +#. This assumes the KP_ abstract symbols are actually useful for some apps +#. The description needs to be rewritten +#: ../rules/base.xml.in.h:964 +msgid "Four-level key with abstract separators" +msgstr "Tecla de cuarto nivel con separadores abstractos" + +#: ../rules/base.xml.in.h:965 +msgid "Semicolon on third level" +msgstr "Punto y coma en tercer nivel" + +#: ../rules/base.xml.in.h:966 +msgid "Caps Lock key behavior" +msgstr "Comportamiento de Bloq Mayús" + +#: ../rules/base.xml.in.h:967 +msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" +msgstr "Bloq Mayús usa la capitalización interna; Mayús «pausa» el Bloq Mayús" + +#: ../rules/base.xml.in.h:968 +msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" +msgstr "Bloq Mayús usa la capitalización interna; Mayús no afecta a Bloq Mayús" + +#: ../rules/base.xml.in.h:969 +msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" +msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús «pausa» Bloq Mayús" + +#: ../rules/base.xml.in.h:970 +msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" +msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús no afecta a Bloq Mayús" + +#: ../rules/base.xml.in.h:971 +msgid "Caps Lock toggles normal capitalization of alphabetic characters" +msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos" + +#: ../rules/base.xml.in.h:972 +msgid "Make Caps Lock an additional Num Lock" +msgstr "Hacer de Bloq Mayús un Bloq Num adicional" + +#: ../rules/base.xml.in.h:973 +msgid "Swap ESC and Caps Lock" +msgstr "Intercambiar ESC y Bloq Mayús" + +#: ../rules/base.xml.in.h:974 +msgid "Make Caps Lock an additional ESC" +msgstr "Hacer de Bloq Mayús un Esc adicional" + +#: ../rules/base.xml.in.h:975 +msgid "Make Caps Lock an additional Backspace" +msgstr "Hacer de Bloq Mayús un Retroceso adicional" + +#: ../rules/base.xml.in.h:976 +msgid "Make Caps Lock an additional Super" +msgstr "Hacer de Bloq Mayús un Super adicional" + +#: ../rules/base.xml.in.h:977 +msgid "Make Caps Lock an additional Hyper" +msgstr "Hacer de Bloq Mayús un Hyper adicional" + +#: ../rules/base.xml.in.h:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas" + +#: ../rules/base.xml.in.h:979 +msgid "Caps Lock is disabled" +msgstr "Bloq Mayús está desactivado" + +#: ../rules/base.xml.in.h:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Hacer de Bloq Mayús un Ctrl adicional" + +#: ../rules/base.xml.in.h:981 +msgid "Alt/Win key behavior" +msgstr "Comportamiento de la tecla Alt/Windows" + +#: ../rules/base.xml.in.h:982 +msgid "Add the standard behavior to Menu key" +msgstr "Añadir el comportamiento estándar a la tecla Menú." + +#: ../rules/base.xml.in.h:983 +msgid "Alt and Meta are on Alt keys" +msgstr "Alt y Meta están en las teclas Alt" + +#: ../rules/base.xml.in.h:984 +msgid "Alt is mapped to Win keys (and the usual Alt keys)" +msgstr "Alt está mapeada en las teclas Windows (y las teclas Alt usuales)" + +#: ../rules/base.xml.in.h:985 +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Control está mapeada en las teclas Windows (y las teclas Ctrl usuales)" + +#: ../rules/base.xml.in.h:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Control está mapeada en las teclas Alt, Alt está mapeado en las teclas Windows" + +#: ../rules/base.xml.in.h:987 +msgid "Meta is mapped to Win keys" +msgstr "Meta está mapeada a las teclas Windows" + +#: ../rules/base.xml.in.h:988 +msgid "Meta is mapped to Left Win" +msgstr "Meta está mapeada a la tecla Windows izquierdo" + +#: ../rules/base.xml.in.h:989 +msgid "Hyper is mapped to Win-keys" +msgstr "Hyper está mapeada a las teclas Windows" + +#: ../rules/base.xml.in.h:990 +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "Alt está mapeada a la tecla Windows derecho y Super a la tecla Menú" + +#: ../rules/base.xml.in.h:991 +msgid "Alt is swapped with Win" +msgstr "Alt está cambiado con la tecla Windows" + +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Posición de la tecla Componer" + +#: ../rules/base.xml.in.h:993 +msgid "3rd level of Left Win" +msgstr "3er nivel de tecla windows izquierda" + +#: ../rules/base.xml.in.h:994 +msgid "3rd level of Right Win" +msgstr "3er nivel de tecla windows derecha" + +#: ../rules/base.xml.in.h:995 +msgid "3rd level of Menu" +msgstr "3er nivel de tecla Menu" + +#: ../rules/base.xml.in.h:996 +msgid "3rd level of Left Ctrl" +msgstr "3er nivel de Ctrl izquierdo" + +#: ../rules/base.xml.in.h:997 +msgid "3rd level of Right Ctrl" +msgstr "3er nivel de Control derecho" + +#: ../rules/base.xml.in.h:998 +msgid "3rd level of Caps Lock" +msgstr "3er nivel de tecla Bloq Mayús" + +#: ../rules/base.xml.in.h:999 +msgid "3rd level of <Less/Greater>" +msgstr "3er nivel de <Menor que/Mayor que>" + +#: ../rules/base.xml.in.h:1000 +msgid "Pause" +msgstr "Pausa" + +#: ../rules/base.xml.in.h:1001 +msgid "PrtSc" +msgstr "PrtSc" + +#: ../rules/base.xml.in.h:1002 +msgid "Miscellaneous compatibility options" +msgstr "Opciones misceláneas de compatiblidad" + +#: ../rules/base.xml.in.h:1003 +msgid "Default numeric keypad keys" +msgstr "Teclas del teclado numérico predeterminado" + +#: ../rules/base.xml.in.h:1004 +msgid "Numeric keypad keys always enter digits (as in Mac OS)" +msgstr "Las teclas del teclado numérico siempre introducen dígitos (como en Mac OS)" + +#: ../rules/base.xml.in.h:1005 +msgid "Shift with numeric keypad keys works as in MS Windows" +msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows" + +#: ../rules/base.xml.in.h:1006 +msgid "Shift does not cancel Num Lock, chooses 3rd level instead" +msgstr "Mayús no cancela Bloq Num, en su lugar elije el 3er nivel" + +#: ../rules/base.xml.in.h:1007 +msgid "Special keys (Ctrl+Alt+<key>) handled in a server" +msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor" + +#: ../rules/base.xml.in.h:1008 +msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" +msgstr "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Num)" + +#: ../rules/base.xml.in.h:1009 +msgid "Shift cancels Caps Lock" +msgstr "Mayús cancela Bloq Mayús" + +#: ../rules/base.xml.in.h:1010 +msgid "Enable extra typographic characters" +msgstr "Activar caracteres tipográficos adicionales" + +#: ../rules/base.xml.in.h:1011 +msgid "Both Shift keys together toggle Caps Lock" +msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" + +#: ../rules/base.xml.in.h:1012 +msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" +msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús, una tecla Mayús lo desactiva" + +#: ../rules/base.xml.in.h:1013 +msgid "Both Shift keys together toggle ShiftLock" +msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" + +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Shift + Bloq Num cambia las teclas de flechas" + +#: ../rules/base.xml.in.h:1015 +msgid "Allow breaking grabs with keyboard actions (warning: security risk)" +msgstr "Permitir tomar interrupciones con el teclado (Peligro: riesgos de seguridad)" + +# dice literalmente "árbol" he visto que se utiliza como sinónimo de servidor. +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permitir tomar y loguearse al árbol windows" + +#: ../rules/base.xml.in.h:1017 +msgid "Adding currency signs to certain keys" +msgstr "Añadir símbolo de divisa a algunas teclas" + +#: ../rules/base.xml.in.h:1018 +msgid "Euro on E" +msgstr "Euro en la E" + +#: ../rules/base.xml.in.h:1019 +msgid "Euro on 2" +msgstr "Euro en el 2" + +#: ../rules/base.xml.in.h:1020 +msgid "Euro on 4" +msgstr "Euro en el 4" + +#: ../rules/base.xml.in.h:1021 +msgid "Euro on 5" +msgstr "Euro en el 5" + +#: ../rules/base.xml.in.h:1022 +msgid "Rupee on 4" +msgstr "Rupia en el 4" + +#: ../rules/base.xml.in.h:1023 +msgid "Key to choose 5th level" +msgstr "Tecla para seleccionar el 5o nivel" + +#: ../rules/base.xml.in.h:1024 +msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1025 +msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1026 +msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1027 +msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1028 +msgid "Using space key to input non-breakable space character" +msgstr "Usar la tecla espacio para introducir un carácter de espacio no separable" + +#: ../rules/base.xml.in.h:1029 +msgid "Usual space at any level" +msgstr "Espacio usual en cualquier nivel" + +#: ../rules/base.xml.in.h:1030 +msgid "Non-breakable space character at second level" +msgstr "Carácter de espacio no separable en el segundo nivel" + +#: ../rules/base.xml.in.h:1031 +msgid "Non-breakable space character at third level" +msgstr "Carácter de espacio no separable en el tercer nivel" -#: ../rules/base.xml.in.h:889 ../rules/base.extras.xml.in.h:49 -msgid "ru" -msgstr "ru" +#: ../rules/base.xml.in.h:1032 +msgid "Non-breakable space character at third level, nothing at fourth level" +msgstr "Carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel" -#: ../rules/base.xml.in.h:890 -msgid "sd" -msgstr "sd" +#: ../rules/base.xml.in.h:1033 +msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" +msgstr "Carácter de espacio no separable en el tercer nivel, carácter de espacio estrecho no separable en el cuarto nivel" -#: ../rules/base.xml.in.h:891 -msgid "si" -msgstr "si" +#: ../rules/base.xml.in.h:1034 +msgid "Non-breakable space character at fourth level" +msgstr "Carácter de espacio no separable en el cuarto nivel" -#: ../rules/base.xml.in.h:892 -msgid "sk" -msgstr "sk" +#: ../rules/base.xml.in.h:1035 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" +msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel" -#: ../rules/base.xml.in.h:893 -msgid "sl" -msgstr "sl" +#: ../rules/base.xml.in.h:1036 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" +msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel (a través de Ctrl+Mayús)" -#: ../rules/base.xml.in.h:894 -msgid "sq" -msgstr "sq" +#: ../rules/base.xml.in.h:1037 +msgid "Zero-width non-joiner character at second level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel" -#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:51 -msgid "sr" -msgstr "sr" +#: ../rules/base.xml.in.h:1038 +msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel" -#: ../rules/base.xml.in.h:896 -msgid "sv" -msgstr "sv" +#: ../rules/base.xml.in.h:1039 +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ácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel, caracter de espacio no separable en el cuarto nivel" -#: ../rules/base.xml.in.h:897 -msgid "sw" -msgstr "sw" +#: ../rules/base.xml.in.h:1040 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel" -#: ../rules/base.xml.in.h:898 -msgid "syc" -msgstr "syc" +#: ../rules/base.xml.in.h:1041 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel" -#: ../rules/base.xml.in.h:899 -msgid "ta" -msgstr "ta" +#: ../rules/base.xml.in.h:1042 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio de anchura cero rompible («ZWJ») en el cuarto nivel" -#: ../rules/base.xml.in.h:900 -msgid "te" -msgstr "te" +#: ../rules/base.xml.in.h:1043 +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ácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio estrecho no separable en el cuarto nivel" -#: ../rules/base.xml.in.h:901 -msgid "tg" -msgstr "tg" +#: ../rules/base.xml.in.h:1044 +msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" +msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el tercer nivel, carácter de anchura cero rompible («ZWJ») en el cuarto nivel" -#: ../rules/base.xml.in.h:902 -msgid "th" -msgstr "th" +#: ../rules/base.xml.in.h:1045 +msgid "Japanese keyboard options" +msgstr "Opciones de teclado japonés" -#: ../rules/base.xml.in.h:903 -msgid "tk" -msgstr "tk" +#: ../rules/base.xml.in.h:1046 +msgid "Kana Lock key is locking" +msgstr "La tecla Bloq Kana está bloqueando" -#: ../rules/base.xml.in.h:904 -msgid "tn" -msgstr "tn" +#: ../rules/base.xml.in.h:1047 +msgid "NICOLA-F style Backspace" +msgstr "Retroceso estilo NICOLA-F" -#: ../rules/base.xml.in.h:905 -msgid "tr" -msgstr "tr" +#: ../rules/base.xml.in.h:1048 +msgid "Make Zenkaku Hankaku an additional ESC" +msgstr "Hacer de Zenkaku Hankaku un Esc adicional" -#: ../rules/base.xml.in.h:906 -msgid "uk" -msgstr "uk" +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Añadir las tildes del esperanto" -#: ../rules/base.xml.in.h:907 -msgid "ur" -msgstr "ur" +#: ../rules/base.xml.in.h:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "A la tecla correspondiente en un teclado Qwerty." -#: ../rules/base.xml.in.h:908 -msgid "uz" -msgstr "uz" +#: ../rules/base.xml.in.h:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "A la tecla correspondiente en un teclado Dvorak." -#: ../rules/base.xml.in.h:909 -msgid "vi" -msgstr "vi" +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "A la tecla correspondiente en un teclado Colemak." -#: ../rules/base.xml.in.h:910 -msgid "wo" -msgstr "wo" +#: ../rules/base.xml.in.h:1053 +msgid "Maintain key compatibility with old Solaris keycodes" +msgstr "Mantener compatibilidad de teclas con los viejos códigos de Solaris" -#: ../rules/base.xml.in.h:911 -msgid "xsy" -msgstr "xsy" +#: ../rules/base.xml.in.h:1054 +msgid "Sun Key compatibility" +msgstr "Compatibilidad con tecla Sun" -#: ../rules/base.xml.in.h:912 -msgid "yo" -msgstr "yo" +#: ../rules/base.xml.in.h:1055 +msgid "Key sequence to kill the X server" +msgstr "Secuencia de teclas para matar el servidor X" -#: ../rules/base.xml.in.h:913 -msgid "zh" -msgstr "zh" +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Control + Alt + Retroceso" #: ../rules/base.extras.xml.in.h:1 -msgid "APL Keyboard Symbols" -msgstr "Símbolos de teclado APL" - -#: ../rules/base.extras.xml.in.h:3 -msgid "Armenian (OLPC phonetic)" -msgstr "Armenio (OLPC fonético)" +msgid "apl" +msgstr "apl" -#: ../rules/base.extras.xml.in.h:4 -msgid "Atsina" -msgstr "Atsina" +#: ../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 "Avestan" -msgstr "Avéstico" +msgid "kut" +msgstr "kut" #: ../rules/base.extras.xml.in.h:6 -msgid "Couer D'alene Salish" -msgstr "Coeur d’Alene salish" +msgid "Kutenai" +msgstr "Kutenai" #: ../rules/base.extras.xml.in.h:7 -msgid "Crimean Tatar (Dobruja Q)" -msgstr "Tártaro de Crimea (Dobruca Q)" +msgid "shs" +msgstr "shs" -#: ../rules/base.extras.xml.in.h:9 -msgid "English (US, international AltGr Unicode combining)" -msgstr "Inglés (EE. UU., internacional combinando AltGr Unicode)" +#: ../rules/base.extras.xml.in.h:8 +msgid "Secwepemctsin" +msgstr "Shuswap" -#: ../rules/base.extras.xml.in.h:10 -msgid "English (US, international AltGr Unicode combining, alternative)" -msgstr "Inglés (EE. UU., internacional combinando AltGr Unicode, alternativa)" +#: ../rules/base.extras.xml.in.h:9 +msgid "Multilingual (Canada, Sun Type 6/7)" +msgstr "Multilingüe (Canada, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:13 +#: ../rules/base.extras.xml.in.h:12 msgid "German (US keyboard with German letters)" msgstr "Alemán (teclado estadounidense con letras alemanas)" -#: ../rules/base.extras.xml.in.h:14 +#: ../rules/base.extras.xml.in.h:13 msgid "German (with Hungarian letters and no dead keys)" msgstr "Alemán (con letras húngaras y sin teclas muertas)" -#: ../rules/base.extras.xml.in.h:15 -msgid "Kutenai" -msgstr "Kutenai" +#: ../rules/base.extras.xml.in.h:14 +msgid "German (Sun Type 6/7)" +msgstr "Alemán (Sun tipo 6/7)" #: ../rules/base.extras.xml.in.h:17 -msgid "Latvian (US Colemak)" -msgstr "Letón (Colemark RU)" +msgid "Avestan" +msgstr "Avéstico" -#: ../rules/base.extras.xml.in.h:18 -msgid "Latvian (US Colemak, apostrophe variant)" -msgstr "Letón (Colemark de RU, variante con apóstrofo)" +#: ../rules/base.extras.xml.in.h:20 +msgid "Lithuanian (US Dvorak with Lithuanian letters)" +msgstr "Lituano (Dvorak de EE. UU. con 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:19 +#: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" msgstr "Letón (Dvorak de EE. UU.)" -#: ../rules/base.extras.xml.in.h:20 +#: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" msgstr "Letón (Dvorak de EE. UU., variante Y)" -#: ../rules/base.extras.xml.in.h:21 +#: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" msgstr "Letón (Dvorak de EE. UU., variante menos)" -#: ../rules/base.extras.xml.in.h:22 +#: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" msgstr "Letón (programador, Dvorak de EE. UU.)" -#: ../rules/base.extras.xml.in.h:23 +#: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" msgstr "Letón (programador, Dvorak de EE. UU., variante Y)" -#: ../rules/base.extras.xml.in.h:24 +#: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" msgstr "Letón (programador, Dvorak de EE. UU., variante menos)" -#: ../rules/base.extras.xml.in.h:26 -msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Lituano (Dvorak de EE. UU. con letras lituanas)" +#: ../rules/base.extras.xml.in.h:30 +msgid "Latvian (US Colemak)" +msgstr "Letón (Colemak EE.UU.)" -#: ../rules/base.extras.xml.in.h:29 +#: ../rules/base.extras.xml.in.h:31 +msgid "Latvian (US Colemak, apostrophe variant)" +msgstr "Letón (Colemak EE.UU., variante con apóstrofo)" + +#: ../rules/base.extras.xml.in.h:32 +msgid "Latvian (Sun Type 6/7)" +msgstr "Letón (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:35 +msgid "English (US, international AltGr Unicode combining)" +msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr)" + +#: ../rules/base.extras.xml.in.h:36 +msgid "English (US, international AltGr Unicode combining, alternative)" +msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr, alternativo)" + +#: ../rules/base.extras.xml.in.h:37 +msgid "Atsina" +msgstr "Atsina" + +#: ../rules/base.extras.xml.in.h:38 +msgid "Coeur d'Alene Salish" +msgstr "Cœur d’Alene Salish" + +#: ../rules/base.extras.xml.in.h:39 +msgid "English (US, Sun Type 6/7)" +msgstr "Inglés (EE. UU, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inglés (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polaco (internacional con teclas muertas)" -#: ../rules/base.extras.xml.in.h:31 +#: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "Polaco (Colemak)" + +#: ../rules/base.extras.xml.in.h:45 +msgid "Polish (Sun Type 6/7)" +msgstr "Polaco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:49 +msgid "Crimean Tatar (Dobruja Q)" +msgstr "Tártaro de Crimea (Dobruca Q)" + +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumanía (tipo de pulsación ergonómica)" -#: ../rules/base.extras.xml.in.h:33 +#: ../rules/base.extras.xml.in.h:51 +msgid "Romanian (Sun Type 6/7)" +msgstr "Rumano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:54 +msgid "Serbian (combining accents instead of dead keys)" +msgstr "Serbio (combinar tildes en lugar de teclas muertas)" + +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Ruso (con distribución ucraniana y bielorrusa)" -#: ../rules/base.extras.xml.in.h:34 -msgid "Secwepemctsin" -msgstr "Shuswap" +#: ../rules/base.extras.xml.in.h:58 +msgid "Russian (Sun Type 6/7)" +msgstr "Ruso (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:36 -msgid "Serbian (combining accents instead of dead keys)" -msgstr "Serbio (combinar tildes en lugar de teclas muertas)" +#: ../rules/base.extras.xml.in.h:61 +msgid "Armenian (OLPC phonetic)" +msgstr "Armenio (OLPC fonético)" -#: ../rules/base.extras.xml.in.h:37 -msgid "apl" -msgstr "apl" +#: ../rules/base.extras.xml.in.h:64 +msgid "Hebrew (Biblical, SIL phonetic)" +msgstr "Hebreo (bíblico, fonética SIL)" -#: ../rules/base.extras.xml.in.h:44 -msgid "kut" -msgstr "kut" +#: ../rules/base.extras.xml.in.h:67 +msgid "Arabic (Sun Type 6/7)" +msgstr "Árabe (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:50 -msgid "shs" -msgstr "shs" +#: ../rules/base.extras.xml.in.h:70 +msgid "Belgian (Sun Type 6/7)" +msgstr "Belga (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:73 +msgid "Portuguese (Brazil, Sun Type 6/7)" +msgstr "Portugués (Brasil, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:76 +msgid "Czech (Sun Type 6/7)" +msgstr "Checo (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:79 +msgid "Danish (Sun Type 6/7)" +msgstr "Danés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:82 +msgid "Dutch (Sun Type 6/7)" +msgstr "Holandés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:85 +msgid "Estonian (Sun Type 6/7)" +msgstr "Estonio (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:88 +msgid "Finnish (Sun Type 6/7)" +msgstr "Finlandés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:90 +msgid "French (Sun Type 6/7)" +msgstr "Francés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:93 +msgid "Greek (Sun Type 6/7)" +msgstr "Griego (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:96 +msgid "Italian (Sun Type 6/7)" +msgstr "Italiano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:99 +msgid "Japanese (Sun Type 6)" +msgstr "Japonés (Sun tipo 6)" + +#: ../rules/base.extras.xml.in.h:100 +msgid "Japanese (Sun Type 7 - pc compatible)" +msgstr "Japonés (Sun tipo 7 - compatible con PC)" + +#: ../rules/base.extras.xml.in.h:101 +msgid "Japanese (Sun Type 7 - sun compatible)" +msgstr "Japonés (Sun tipo 7 - compatible con Sun)" + +#: ../rules/base.extras.xml.in.h:104 +msgid "Norwegian (Sun Type 6/7)" +msgstr "Noruego (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:106 +msgid "Portuguese (Sun Type 6/7)" +msgstr "Portugués (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:109 +msgid "Slovak (Sun Type 6/7)" +msgstr "Eslovaco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:112 +msgid "Spanish (Sun Type 6/7)" +msgstr "Español (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:115 +msgid "Swedish (Sun Type 6/7)" +msgstr "Sueco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:117 +msgid "German (Switzerland, Sun Type 6/7)" +msgstr "Alemán (Suiza, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:118 +msgid "French (Switzerland, Sun Type 6/7)" +msgstr "Francés (Suiza, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:121 +msgid "Turkish (Sun Type 6/7)" +msgstr "Turco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:124 +msgid "Ukrainian (Sun Type 6/7)" +msgstr "Ucraniano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:126 +msgid "English (UK, Sun Type 6/7)" +msgstr "Inglés (UK, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:129 +msgid "Korean (Sun Type 6/7)" +msgstr "Coreano (Sun tipo 6/7)" + +#~ msgid "Bengali" +#~ msgstr "Bengalí" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugués (Brasil, nativo para esperanto)" + +#~ msgid "<Less/Greater> chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "<Menor que/Mayor que> elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Catalan" +#~ msgstr "Catalán" + +#~ msgid "Compose key position" +#~ msgstr "Posición de la tecla Componer" + +#~ msgid "English (Cameroon Dvorak)" +#~ msgstr "Inglés (Dvorak de Camerún)" + +#~ msgid "English (layout toggle on multiply/divide key)" +#~ msgstr "Inglés (cambio de distribución en la tecla multiplicar/dividir)" + +#~ msgid "Key(s) to change layout" +#~ msgstr "Tecla(s) para cambiar la distribución" + +#~ msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym" +#~ msgstr "Hacer de Bloq Mayús un Control adicional pero mantener el símbolo de tecla Caps_Lock" + +#~ msgid "Numeric keypad layout selection" +#~ msgstr "Selección de distribución de teclado numérico" + +#~ msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Alt derecho elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Serbian (Z and ZHE swapped)" +#~ msgstr "Serbio (Z y ZHE intercambiados)" + +#~ msgid "Serbian (with guillemets)" +#~ msgstr "Serbio (con guillemots)" + +#~ msgid "Toggle PointerKeys with Shift + NumLock." +#~ msgstr "Cambiar las teclas de flechas con Mayús + Bloq Num" + +#~ msgid "ca" +#~ msgstr "ca" #~ msgid "English (Cameroon qwerty)" #~ msgstr "Inglés (qwerty de Camerún)" @@ -3780,15 +4255,6 @@ msgstr "shs" #~ msgid "French (Cameroon azerty)" #~ msgstr "Francés (azerty de Camerún)" -#~ msgid "German (qwerty)" -#~ msgstr "Alemán (qwerty)" - -#~ msgid "Make Caps Lock an additional Ctrl" -#~ msgstr "Hacer de Bloq Mayús un Ctrl adicional" - -#~ msgid "Meta on Left Ctrl" -#~ msgstr "Meta en Ctrl izquierda" - #~ msgid "Right Ctrl is mapped to Menu" #~ msgstr "Ctrl derecho está mapeada a la tecla Menú" @@ -3807,9 +4273,6 @@ msgstr "shs" #~ msgid "Danish (Mac)" #~ msgstr "Danés (Mac)" -#~ msgid "English (UK, Mac)" -#~ msgstr "Inglés (RU, Mac)" - #~ msgid "Finnish (Mac)" #~ msgstr "Croata (Mac_Croatian)" @@ -3891,9 +4354,6 @@ msgstr "shs" #~ msgid "Swiss" #~ msgstr "Suizo" -#~ msgid "Swiss (legacy)" -#~ msgstr "Suizo (heredado)" - #~ msgid "Turkish (Crimean Tatar Turkish Alt-Q)" #~ msgstr "Turco (Alt-Q turca del tártaro de Crimea)" @@ -3996,9 +4456,6 @@ msgstr "shs" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladesh" - #~ msgid "Bel" #~ msgstr "Bel" @@ -4209,9 +4666,6 @@ msgstr "shs" #~ msgid "Mli" #~ msgstr "Mli" -#~ msgid "Mmr" -#~ msgstr "Mmr" - #~ msgid "Mng" #~ msgstr "Mng" @@ -4465,9 +4919,6 @@ msgstr "shs" #~ msgid "Left Win-key is Compose." #~ msgstr "La tecla Windows izquierda es Componer." -#~ msgid "Macintosh layout" -#~ msgstr "Distribución Macintosh" - #~ msgid "Menu is Compose." #~ msgstr "Menú es Componer." diff --git a/xorg-server/xkeyboard-config/po/fr.po b/xorg-server/xkeyboard-config/po/fr.po index d850685da..93d7197cc 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.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 20:13+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 23:58+0100\n" "Last-Translator: Jean-Philippe Guérard \n" "Language-Team: French \n" "Language: fr\n" @@ -826,7 +826,7 @@ msgid "English (programmer Dvorak)" msgstr "Anglais (Dvorak pour programmeur)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -902,11 +902,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Ouzbek (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabe" @@ -944,11 +944,11 @@ msgid "Albanian" msgstr "Albanais" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Arménien" @@ -1024,11 +1024,11 @@ msgid "Belarusian (Latin)" msgstr "Biélorusse (latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belge" @@ -1060,17 +1060,17 @@ msgstr "Belge (touches mortes Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belge (Wang modèle 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengali" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengali (Probhat)" #. Keyboard indicator for Indian layouts @@ -1083,28 +1083,28 @@ msgid "Indian" msgstr "Indien" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengali (Inde)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengali (Inde, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Inde, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengali (Inde, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Inde, Uni Gitanjali)" # InScript = Indian Script #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Inde, Inscript Baishakhi)" #. Keyboard indicator for Gujarati layouts @@ -1298,11 +1298,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosniaque (clavier US avec lettres bosniaques)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" @@ -1317,16 +1317,16 @@ msgstr "Portugais (Brésil, Dvorak)" # https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard#Other_languages # http://tecladobrasileiro.com.br/images/stories/br-nativo/br-nativo-simples.svg #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugais (Brésil, BR-Nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugais (Brésil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugais (Brésil, Nativo pour claviers US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugais (Brésil, BR-Nativo pour l'Espéranto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Espéranto (Brésil, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1481,2546 +1481,2566 @@ msgstr "Tibétain" msgid "Tibetan (with ASCII numerals)" msgstr "Tibétain (avec chiffres ASCII)" -# https://secure.wikimedia.org/wikipedia/fr/wiki/Ou%C3%AFghour #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +# https://secure.wikimedia.org/wikipedia/fr/wiki/Ou%C3%AFghour +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ouïghour" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croate" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croate (utilise des guillemets typo. au lieu des guillemets simples)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croate (utilise les digraphes croates)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croate (clavier US avec digraphes croates)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croate (clavier US avec lettres croates)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tchèque" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tchèque (avec la touche <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tchèque (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tchèque (qwerty, barre oblique inverse étendue)" # http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README # http://www.ucw.cz/ -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tchèque (disposition UCW, lettres accentuées seulement)" # http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README # http://www.ucw.cz/ -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tchèque (Dvorak US avec support UCW CZ)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Danois" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Danois (sans touche morte)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Danois (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Danois (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Danois (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Néerlandais" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Néerlandais (touches mortes Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Néerlandais (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Néerlandais (standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estonien" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estonien (sans touche morte)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estonien (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estonien (clavier US avec lettres estoniennes)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Persan -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persan" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persan (avec pavé numérique persan)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurde (Iran, Q latin)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurde (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurde (Iran, Alt-Q latin)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurde (Iran, arabe-latin)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakien" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurde (Irak, Q latin)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurde (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurde (Irak, Alt-Q latin)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurde (Irak, arabe-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Féroïen" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Féroïen (sans touche morte)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finnois" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finnois (classique)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finnois (classique, sans touche morte)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Sami du Nord (Finlande)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finnois (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Français" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Français (sans touche morte)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Français (touches mortes Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Français (variante)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Français (variante, Latin-9 uniquement)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Français (variante, sans touche morte)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Français (variante, touches mortes Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Français (variante obsolète)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Français (variante obsolète, sans touche morte)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Français (variante obsolète, touches mortes Sun)" # http://bepo.fr -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Français (Bépo, ergonomique, façon Dvorak)" # http://bepo.fr -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Français (Bépo, ergonomique, façon Dvorak, Latin-9 uniquement)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Français (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Français (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Français (breton)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitan" # As the name suggests, this layout is based on French AZERTY keyboard. The layout is based on the Georgian AZERTY layout model by Georgian language and localizaton expert Vasil "Tskapo" Kekelia. # # http://www.gakartuleba.org/layouts/index.php -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Géorgien (France, azerty Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Anglais (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Anglais (Ghana, multilingue)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Éwé" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" # https://secure.wikimedia.org/wikipedia/en/wiki/Fula_language -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Peul" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" # Langue du Ghana. -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" # https://secure.wikimedia.org/wikipedia/fr/wiki/Haoussa -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haoussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" # http://www.gillbt.org/ -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Anglais (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Français (Guinée)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Géorgien" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Géorgien (ergonomique)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Géorgien (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russe (Géorgie)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossète (Géorgie)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Allemand" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Allemand (accent aigu en touche morte)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Allemand (accents aigu et grave en touches mortes)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Allemand (sans touche morte)" # https://de.wikipedia.org/wiki/ISO/IEC_9995 -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Allemand (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Roumain (Allemagne)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Roumain (Allemagne, sans touche morte)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Allemand (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 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:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Allemand (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Allemand (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Allemand (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Bas-sorabe" # https://secure.wikimedia.org/wikipedia/fr/wiki/Bas-sorabe -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Bas-sorabe (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Allemand (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russe (Allemagne, phonétique)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Allemand (obsolète)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grec" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grec (simple)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grec (étendu)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 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:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grec (polytonique)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" # https://secure.wikimedia.org/wikipedia/fr/wiki/Hongrois -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongrois" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongrois (standard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongrois (sans touche morte)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongrois (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongrois (101, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongrois (101, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongrois (101, qwertz, point, touches mortes)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongrois (101, qwertz, point, sans touche morte)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongrois (101, qwerty, virgule, touches mortes)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongrois (101, qwerty, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongrois (101, qwerty, point, touches mortes)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongrois (101, qwerty, point, sans touche morte)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongrois (102, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongrois (102, qwertz, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongrois (102, qwertz, point, touches mortes)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongrois (102, qwertz, point, sans touche morte)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongrois (102, qwerty, virgule, touches mortes)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongrois (102, qwerty, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongrois (102, qwerty, point, touches mortes)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" # https://secure.wikimedia.org/wikipedia/fr/wiki/Islandais -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandais" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandais (touches mortes Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandais (sans touche morte)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandais (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandais (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hébreu" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hébreu (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hébreu (phonétique)" # http://wiki.jewishliturgy.org/Hebrew_Font_and_Keyboard_Layout_Setup -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hébreu (biblique, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italien" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italien (sans touche morte)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italien (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 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:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Géorgien (Italie)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italien (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonais" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonais (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonais (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonais (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonais (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonais (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" # https://secure.wikimedia.org/wikipedia/fr/wiki/Kirghize_%28langue%29 -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirghize" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirghize (phonétique)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" # https://secure.wikimedia.org/wikipedia/fr/wiki/Khmer -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambodge)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 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:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russe (Kazakhstan, avec kazakh)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazakh (avec russe)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Lao_%28langue%29 -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 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:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (disposition proposée par la STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espagnol (Amérique latine)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espagnol (Amérique latine, sans touche morte)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espagnol (Amérique latine, y compris la touche morte tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 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:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Lituanien -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituanien" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituanien (standard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituanien (clavier US avec lettres lituaniennes)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituanien (IBM LST 1205-92)" # http://lekp.info/LithuanianErgonomic -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituanien (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituanien (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letton" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letton (variante apostrophe)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letton (variante tilde)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letton (variante F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letton (moderne)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letton (ergonomique, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letton (adapté)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mont%C3%A9n%C3%A9grin -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Monténégrin" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Monténégrin (cyrillique)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Monténégrin (cyrillique, Z et ZHE intervertis)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Monténégrin (Unicode latin)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Monténégrin (qwerty latin)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Monténégrin (qwerty Unicode latin)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Monténégrin (cyrillique avec guillemets)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Monténégrin (latin avec guillemets)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mac%C3%A9donien -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macédonien" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macédonien (sans touche morte)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Maltais -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltais" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltais (avec disposition US)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mongol -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" # https://secure.wikimedia.org/wikipedia/fr/wiki/Norv%C3%A9gien -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvégien" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvégien (sans touche morte)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvégien (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Sami du Nord (Norvège)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Sami du Nord (Norvège, sans touche morte)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvégien (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvégien (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvégien (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" # https://secure.wikimedia.org/wikipedia/fr/wiki/Polonais -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonais" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonais (obsolète)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonais (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 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:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonais (Dvorak, guillemets polonais sur la touche guillemets)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 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:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Cachoube" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russe (Pologne, Dvorak phonétique)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonais (Dvorak pour le programmeur)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugais" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugais (sans touche morte)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugais (touches mortes Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugais (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugais (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugais (Macintosh, touches mortes Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugais (PT-Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugais (Nativo pour claviers US)" # http://tecladobrasileiro.com.br/index.php?option=com_content&task=view&id=20&Itemid=62 -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Espéranto (Portugal, PT-Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" # https://secure.wikimedia.org/wikipedia/fr/wiki/Roumain -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Roumain" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Roumain (cédille)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Roumain (standard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Roumain (standard, cédille)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Roumain (touche Windows)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russe" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russe (phonétique)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russe (phonétique, touches Windows)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russe (machine à écrire)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russe (obsolète)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russe (machine à écrire, obsolète)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossète (obsolète)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossète (touches Windows)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tchouvache -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tchouvache (latin)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Oudmourte" # https://secure.wikimedia.org/wikipedia/fr/wiki/Komi_%28langue%29 -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" # https://secure.wikimedia.org/wikipedia/fr/wiki/Iakoute -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Iakute" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russe (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russe (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbe (Russe)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Bachkir -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bachkir" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mari_%28langue%29 -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbe" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbe (cyrillique, Z et ZHE intervertis)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbe (Latin)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbe (latin, Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbe (latin, qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbe (latin, Unicode, qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbe (cyrillique avec guillemets)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbe (Latin avec guillemets)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Ruthène pannonien (homophonique)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Ruthène pannonien" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" # https://secure.wikimedia.org/wikipedia/fr/wiki/Slov%C3%A8ne -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovène" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovène (utilise des guillemets typographiques au lieu des guillemets simples)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 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:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Slovaque -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovaque" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovaque (barre oblique inverse étendue)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovaque (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovaque (qwerty, barre oblique inverse étendue)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espagnol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espagnol (sans touche morte)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espagnol (y compris la touche morte tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espagnol (touches mortes Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espagnol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 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:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalan (Espagne, avec L point médian)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espagnol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" # https://secure.wikimedia.org/wikipedia/fr/wiki/Su%C3%A9dois -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suédois" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Suédois (sans touche morte)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Suédois (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russe (Suède, phonétique)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russe (Suède, phonétique, sans touche morte)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Sami du Nord (Suède)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Suédois (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Suédois (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Langue des signes suédoise" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Allemand (Suisse)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Allemand (Suisse, obsolète)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Allemand (Suisse, sans touche morte)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Allemand (Suisse, touches mortes Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Français (Suisse)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Français (Suisse, sans touche morte)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Français (Suisse, touches mortes Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Français (Suisse, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Allemand (Suisse, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabe (Syrie)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" # https://secure.wikimedia.org/wikipedia/fr/wiki/Syriaque -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syriaque" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syriaque (phonétique)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurde (Syrie, Q latin)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurde (Syrie, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurde (Syrie, Alt-Q latin)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tadjik -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjik (obsolète)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Cingalais (phonétique)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamoul (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamoul (Sri Lanka, machine à écrire, TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tha%C3%AF_%28langue%29 -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thaï" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thaï (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thaï (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" # https://secure.wikimedia.org/wikipedia/fr/wiki/Turc -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turc" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turc (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turc (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turc (touches mortes Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurde (Turquie, Q latin)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurde (Turquie, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurde (Turquie, Alt-Q latin)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turc (international avec touches mortes)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Tatar de Crimée (Q turc)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Tatar de Crimée (F turc)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Tatar de Crimée (Alt-Q turc)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taïwanais" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taïwanais (indigène)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taïwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ukrainien -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainien" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainien (phonétique)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainien (machine à écrire)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainien (touches Windows)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainien (obsolète)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainien (RSTU standard)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russe (Ukraine, RSTU standard)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainien (homophonique)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Anglais (Royaume-Uni)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Anglais (Royaume-Uni, touche Windows étendue)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Anglais (Royaume-Uni, international, avec touches mortes)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Anglais (Royaume-Uni, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Anglais (Royaume-Uni, Dvorak, ponctuation britannique)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Anglais (Royaume-Uni, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Anglais (Royaume-Uni, Macintosh international)" # http://colemak.com/ -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Anglais (Royaume-Uni, Colemak)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ouzbek -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Ouzbek" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Ouzbek (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamien" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coréen" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coréen (compatible 101/104 touches)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonais (PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandais" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Cló Gaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandais (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ourdou -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Ourdou (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Ourdou (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Ourdou (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabe (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" # https://secure.wikimedia.org/wikipedia/fr/wiki/Sindhi -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhî" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Divehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Anglais (Afrique du Sud)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Espéranto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 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:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" # https://secure.wikimedia.org/wikipedia/fr/wiki/N%C3%A9palais -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Népalais" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Anglais (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" # https://secure.wikimedia.org/wikipedia/fr/wiki/Igbo -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Yoruba -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharique" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Wolof_%28langue%29 -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (main gauche)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (main droite)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Turkm%C3%A8ne -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmène" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmène (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Français (Mali, variante)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Anglais (Mali, Macintosh USA)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Anglais (Mali, USA international)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzanie)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Swahili -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenya)" # Langue bantoue. # https://secure.wikimedia.org/wikipedia/fr/wiki/Kikuyu_%28langue%29 -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tswana -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipino" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (baybayin, qwerty)" # http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 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:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipino (Capewell-Dvorak, baybayin)" # http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 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:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipino (Capewell-QWERF 2006, baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipino (Colemak, latin)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipino (Colemak, baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipino (Dvorak, latin)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Baybayin -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipino (Dvorak, baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldave" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" # https://fr.wikipedia.org/wiki/Gagaouze -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldave (Gagaouze)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Passage à une autre disposition" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt droite (si enfoncé)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt gauche (si enfoncé)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Windows gauche (si enfoncé)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Windows droite (si enfoncé)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "N'importe quelle touche Windows (enfoncée)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl droite (si enfoncé)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt droite" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt gauche" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Verr. maj." -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Maj.+ Verr. maj." -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Verr. maj." -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Les deux Maj. ensemble" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Les deux Alt ensemble" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Les deux Ctrl ensemble" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Maj." -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl gauche+Maj. gauche" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl droite + Maj. droite" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Maj." -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt gauche+Maj. gauche" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espace" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Touche Windows gauche" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Windows droite" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maj. gauche" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Maj. droite" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl gauche" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl droite" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Arrêt défilement" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Touche sélectionnant le niveau 3" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "N'importe quelle touche Windows" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "N'importe quelle touche Alt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Touche_compose -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt droite, Maj. + Alt droite est la touche compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Alt droite ne sélectionne jamais le niveau 3" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Entrée sur le pavé numérique" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barre oblique inverse" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Plus petit/Plus grand>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Plus petit/Plus grand> sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Position de la touche Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Verr. maj. comme Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl gauche comme Méta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Intervertir Ctrl et Verr. maj." -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "À gauche du « A »" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "En bas à gauche" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl droite comme Alt droite" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu comme Ctrl droite" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt droite comme Ctrl droite" +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Échange Alt. gauche et Ctrl gauche" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Échange Win gauche et Ctrl gauche" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt. gauche pour Ctrl, Ctrl pour Win, Win gauche pour Alt." + # https://bugzilla.gnome.org/show_bug.cgi?id=518156 -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Utiliser les voyants du clavier pour indiquer une disposition alternative" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Verr. Num." -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposition du pavé numérique" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Obsolète" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Ajouts Unicode (opérateurs mathématiques et flèches)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Ajouts Unicode (opérateurs mathématiques et flèches ; opérateurs mathématiques au niveau par défaut)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 (clavier obsolète)" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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 ; opérateurs mathématiques au niveau par défaut)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadécimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Clavier de type téléphonique" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Comportement de la touche de Suppr. du pavé numérique" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 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:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Touche obsolète avec virgule" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Touche à quatre niveaux avec point" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Touche à quatre niveaux avec point, Latin-9 uniquement" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 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:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Touche à quatre niveaux avec le séparateur décimal abstrait" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Point-virgule au niveau 3" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportement de la touche Verr. maj." -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 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:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Faire de Verr. maj. un Verr. Num. supplémentaire" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Intervertir Échap. et Verr. maj." -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Faire de Verr. maj. un Échap. supplémentaire." -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Faire de Verr. maj. un Effacement. arriière supplémentaire." -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Faire de Verr. maj. un Super supplémentaire." -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Faire de Verr. maj. un Hyper supplémentaire" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Verr. maj. bascule le blocage majuscule (affecte toutes les touches)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Verr. maj. est désactivé" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Faire de Verr. maj. un Ctrl supplémentaire." -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportement des touches Alt et Windows" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Ajouter du comportement standard à la touche Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt et Meta sont sur les touches Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl 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:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl 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:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Méta est placé sur les touches Windows" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Méta est placé sur Windows gauche" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper est placé sur les touches Windows" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 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:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt échangé avec Windows" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Position de la touche Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Niveau 3 de la touche Windows de gauche" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Niveau 3 de la touche Windows de droite" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Niveau 3 de menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Niveau 3 de la touche Ctrl de gauche" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Niveau 3 de la touche Ctrl de droite" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Niveau 3 de Verr. Maj." -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Niveau 3 de <Plus petit/Plus grand>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Impr. Écr." -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Diverses options de compatibilité" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Touches du pavé numérique par défaut" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Les combinaisons spéciales (Ctrl+Alt+<touche>) sont traitées par le serveur X" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Maj. annule Verr. maj." -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Active des caractères typographiques supplémentaires" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Les deux touches Maj. activent ou désactivent Verr. maj." -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Les deux touches Maj. activent le verrouillage majuscule, une le désactive" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Les deux touches Maj. activent ou désactivent le blocage majuscule" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Maj. + VerrNum bascule le contrôle souris au clavier (PointerKeys) " -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" -msgstr "Autoriser des actions clavier à casser les captures (attention : faille de sécurité)" +msgstr "Autorise des actions clavier à casser les captures (attention : faille de sécurité)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Autorise l'enregistrement des captures et arborescences de fenêtres" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Ajout des signes monétaires sur certaines touches" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro sur le E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro sur le 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro sur le 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro sur le 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Roupie sur le 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Touche sélectionnant le niveau 5" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Plus petit/Plus grand> sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "L'espace habituelle quelque-soit le niveau" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Espace insécable au niveau 2" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Espace insécable au niveau 3" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Espace insécable au niveau 4" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Antiliant à chasse nulle au niveau 2" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Options des claviers japonais" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "La touche « verrouillage Kana » verrouille" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Eff. Arr. du type NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Faire du Zenkaku Hankaku un Échap. supplémentaire." -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Ajout des lettres accentuées Espéranto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Vers la touche correspondante sur une disposition Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Vers la touche correspondante sur une disposition Dvorak." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Vers la touche correspondante sur une disposition Dvorak." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Rester compatible avec les anciens code clavier Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilité avec les touches Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Séquence de touches pour tuer le serveur X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Eff. arrière" @@ -4137,147 +4157,158 @@ msgstr "Salish Cœur d'Alène" msgid "English (US, Sun Type 6/7)" msgstr "Anglais (USA, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +# https://normanlayout.info/ +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Anglais (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonais (international avec touches mortes)" # http://colemak.com/ -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonais (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonais (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tatar de Crimée (Q dobroudja)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Roumain (ergonomique dactylographique)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Roumain (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbe (accents combinatoires à la place des touches mortes)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russe (Ukrainien-Biélorusse)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russe (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Arménien (phonétique OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hébreu (biblique, SIL, phonétique)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabe (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belge (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugais (Brésil, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tchèque (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Danois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Danois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estonien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finnois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Français (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grec (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonais (Sun type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonais (Sun type 7 - compatible PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonais (Sun type 7 - compatible Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvégien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugais (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovaque (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espagnol (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Suédois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Allemand (Suisse, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Français (Suisse, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turc (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Anglais (Royaume-Uni, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coréen (Sun type 6/7)" + +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugais (Brésil, BR-Nativo pour l'Espéranto)" diff --git a/xorg-server/xkeyboard-config/po/hu.po b/xorg-server/xkeyboard-config/po/hu.po index a0ac3a6ea..d0b92760c 100644 --- a/xorg-server/xkeyboard-config/po/hu.po +++ b/xorg-server/xkeyboard-config/po/hu.po @@ -1,16 +1,16 @@ # Hungarian translation of xkeyboard-config -# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. Free Software Foundation, Inc. +# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # # Andras Timar , 2004. # Szilveszter Farkas , 2006. -# Gabor Kelemen , 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Gabor Kelemen , 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 00:37+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-21 10:43+0100\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 1.4\n" #: ../rules/base.xml.in.h:1 msgid "Generic 101-key PC" @@ -819,7 +819,7 @@ msgid "English (programmer Dvorak)" msgstr "Angol (programozói Dvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -891,11 +891,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Üzbég (Afganisztán, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arab" @@ -933,11 +933,11 @@ msgid "Albanian" msgstr "Albán" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Örmény" @@ -1013,11 +1013,11 @@ msgid "Belarusian (Latin)" msgstr "Belorusz (Latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1049,17 +1049,17 @@ msgstr "Belga (Sun halott billentyűk)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang 724-es modell, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengáli" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengáli (Probhat)" #. Keyboard indicator for Indian layouts @@ -1072,27 +1072,27 @@ msgid "Indian" msgstr "Indiai" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengáli (India)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengáli (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengáli (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengáli (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengáli (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengáli (India, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1276,11 +1276,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnyák (US billentyűzet bosnyák betűkkel)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugál (brazil)" @@ -1293,16 +1293,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugál (brazil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugál (brazil, natív)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugál (brazil, natív a US billentyűzetekhez)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugál (brazil, natív az eszperantóhoz)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Eszperantó (Brazil, natív)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1456,2462 +1456,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibeti (ASCII számjegyekkel)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Horvát" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Horvát (»Csúcsos« idézőjelek használata idézetekhez)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Horvát (Horvát billentyűkombinációk használata)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Horvát (US billentyűzet horvát billentyűkombinációkkal)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Horvát (US billentyűzet horvát betűkkel)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Cseh" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Cseh (az <\\|> billentyűvel)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Cseh (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Cseh (qwerty, kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Cseh (UCW kiosztás, csak ékezetes betűk)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Cseh (US Dvorak CZ UCW támogatással)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dán" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dán (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dán (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dán (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dán (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holland" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holland (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holland (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holland (szabványos)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Észt" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Észt (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Észt (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Észt (US billentyűzet észt betűkkel)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Perzsa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Perzsa (perzsa számbillentyűzettel)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurd (Irán, latin Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurd (Irán, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurd (Irán, latin Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurd (Irán, arab-latin)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraki" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurd (Irak, latin Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurd (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurd (Irak, latin Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurd (Irak, arab-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feröeri" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feröeri (halott billentyűk tiltása)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finn" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finn (klasszikus)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finn (klasszikus, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Északi szami (Finnország)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finn (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francia" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francia (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francia (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francia (alternatív)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francia (alternatív, csak Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francia (alternatív, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francia (alternatív, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francia (hagyományos, alternatív)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francia (hagyományos, alternatív, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francia (hagyományos, alternatív, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Finn (Bepo, ergonomikus, Dvorak kiosztás)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Finn (Bepo, ergonomikus, Dvorak kiosztás, csak Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francia (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francia (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francia (breton)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcitán" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Grúz (Franciaország, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angol (Ghána)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angol (Ghána, többnyelvű)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "hausza" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angol (Ghána, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francia (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Grúz" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Grúz (ergonomikus)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Grúz (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Orosz (Grúzia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Oszét (Grúzia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Német" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Német (halott ékezet)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Német (Halott grave ékezet)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Német (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Német (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Román (Németország)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Román (Németország, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Német (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Német (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Német (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Német (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Német (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Alsó szorb" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Alsó szorb (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Német (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Orosz (Németország, fonetikus)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Német (hagyományos)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Görög" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Görög (egyszerű)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Görög (kibővített)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Görög (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Görög (politonikus)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Magyar" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Magyar (szabványos)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Magyar (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Magyar (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Magyar (101/qwertz/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Magyar (101/qwertz/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Magyar (101/qwertz/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Magyar (101/qwertz/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Magyar (101/qwerty/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Magyar (101/qwerty/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Magyar (101/qwerty/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Magyar (101/qwerty/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Magyar (102/qwertz/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Magyar (102/qwertz/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Magyar (102/qwertz/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Magyar (102/qwertz/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Magyar (102/qwerty/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Magyar (102/qwerty/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Magyar (102/qwerty/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Magyar (102/qwerty/pont/halott billentyűk tiltása)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Izlandi" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Izlandi (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Izlandi (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Izlandi (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Izlandi (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Héber" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Héber (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Héber (fonetikus)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Héber (Bibliai, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Olasz" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Olasz (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Olasz (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Olasz (US billentyűzet olasz betűkkel)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Grúz (Olaszország)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Olasz (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japán" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japán (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japán (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japán (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japán (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japán (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiz" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiz (fonetikus)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Kambodzsa)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazah" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Orosz (Kazahsztán, kazahhal)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazah (orosszal)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA által javasolt szabványos)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spanyol (latin-amerikai)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spanyol (latin-amerikai, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spanyol (latin-amerikai, halott tildevel)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spanyol (latin-amerikai, Sun halott billentyűk)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litván" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litván (szabványos)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litván (US billentyűzet litván betűkkel)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litván (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litván (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litván (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lett" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lett (aposztróf változat)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lett (tilde változat)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lett (F-változat)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lett (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lett (ergonomikus, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lett (adaptált)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrói" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrói (Cirill)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrói (Cirill, a Z és a ZHE felcserélve)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrói (Latin Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrói (Latin qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrói (Latin Unicode qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrói (Cirill, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrói (Latin, »csúcsos« idézőjelekkel)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedón" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedón (halott billentyűk tiltása)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Máltai" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Máltai (US kiosztással)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvég" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvég (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvég (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Északi szami (Norvégia)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Északi szami (Norvégia, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvég (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvég (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvég (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Lengyel" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Lengyel (hagyományos)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Lengyel (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Lengyel (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Lengyel (Dvorak, lengyel idézőjelek az idézőjel billentyűn)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Lengyel (Dvorak, lengyel idézőjelek az 1 billentyűn)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kasub" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Orosz (Lengyelország, fonetikus Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Lengyel (programozói Dvorak)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugál" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugál (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugál (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugál (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugál (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugál (Macintosh, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugál (natív)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugál (Natív az USA billentyűzetekhez)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Eszperantó (Portugália, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Román" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Román (cédille)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Román (szabványos)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Román (szabványos cédille)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Román (Win billentyűk)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Orosz" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Orosz (fonetikus)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Orosz (fonetikus, Win billentyűk)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Orosz (írógép)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Orosz (hagyományos)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Orosz (írógép, hagyományos)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatár" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Oszét (hagyományos)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Oszét (Win billentyűk)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Csuvas" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Csuvas (latin)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmük" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Orosz (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Orosz (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Szerb (Oroszország)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baskír" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Szerb" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Szerb (cirill, a Z és a ZHE felcserélve)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Szerb (latin)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Szerb (latin Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Szerb (latin qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Szerb (latin Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Szerb (cirill, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Szerb (latin, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannon ruszin (homofon)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannon ruszin" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Szlovén" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Szlovén (»Csúcsos« idézőjelek használata idézetekhez)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Szlovén (US billentyűzet szlovén betűkkel)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Szlovák" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Szlovák (kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Szlovák (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Szlovák (qwerty, kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spanyol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spanyol (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spanyol (halott tilde felvétele)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spanyol (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spanyol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asztúri (Spanyolország, középső pontos H és alsó pontos L karakterrel)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Katalán (Spanyolország, középső pontos L karakterrel)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spanyol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Svéd" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Svéd (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Svéd (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Orosz (Svédország, fonetikus)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Orosz (Svédország, fonetikus, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Északi szami (Svédország)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Svéd (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Svéd (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Svéd jelnyelv" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Német (Svájc)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Német (Svájc, hagyományos)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Német (Svájc, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Német (Svájc, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francia (Svájc)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francia (Svájc, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francia (Svájc, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francia (Svájc, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Német (Svájc, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arab (Szíria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Szír" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Szír (fonetikus)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurd (Szíria, latin Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurd (Szíria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurd (Szíria, latin Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tádzsik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tádzsik (hagyományos)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Szingaléz (fonetikus)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamil (Sri Lanka, TAB írógép)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Török" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Török (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Török (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Török (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurd (Törökország, latin Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurd (Törökország, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurd (Törökország, latin Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Török (nemzetközi, halott billentyűkkel)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krími tatár (török Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krími tatár (török F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krími tatár (török Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajvani" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajvani (őslakos)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajvan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrán" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrán (fonetikus)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrán (írógép)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrán (Win billentyűk)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrán (hagyományos)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrán (szabványos RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Orosz (Ukrajna, szabványos RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrán (homofon)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angol (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angol (UK, kibővített Win billentyűk)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angol (UK, nemzetközi, halott billentyűkkel)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angol (USA, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angol (UK, Dvorak UK központozással)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angol (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angol (UK, Macintosh nemzetközi)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angol (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Üzbég" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Üzbég (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnami" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreai" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreai (101/104 gomb kompatibilis)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japán (PC-98xx sorozat)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ír" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ír (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakisztán)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakisztán, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakisztán, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arab (Pakisztán)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Szindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angol (Dél-Afrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Eszperantó" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Eszperantó (elcsúszott pontosvessző és idézőjel, elavult)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepáli" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angol (Nigéria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhara" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (balkezes)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (jobbkezes)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Türkmén" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Türkmén (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francia (Mali, alternatív)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angol (Mali, USA Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angol (Mali, USA nemzetközi)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Szuahéli (Tanzánia)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Szuahéli (Kenya)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuju" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Csvana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filippínó" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filippínó (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filippínó (Capewell-Dvorak Latin)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filippínó (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filippínó (Capewell-QWERF 2006 Latin)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filippínó (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filippínó (Colemak Latin)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filippínó (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filippínó (Dvorak Latin)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filippínó (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldáv" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldáv (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Váltás másik kiosztásra" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Jobb Alt (lenyomva tartva)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Bal Alt (lenyomva tartva)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Bal Win (lenyomva tartva)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Jobb Win (lenyomva tartva)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Bármely Win billentyű (lenyomva tartva)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "Caps Lock (lenyomva tartva), Alt+Caps Lock végzi az eredeti nagybetűsítési műveletet" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Jobb Ctrl (lenyomva tartva)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Jobb Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Bal Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (az első kiosztásra), Shift+Caps Lock (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Bal Win (az első kiosztásra), jobb Win/Menü (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Bal Ctrl (az első kiosztásra), jobb Ctrl (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "A két Shift billentyű együtt" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "A két Alt billentyű együtt" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "A két Ctrl billentyű együtt" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Bal Ctrl+Bal Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Jobb Ctrl + jobb Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Bal Alt+Bal Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Szóköz" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menü" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Bal Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Jobb Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Bal Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Jobb Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Bal Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Jobb Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Bal Ctrl + Bal Win (az első kiosztásra), jobb Ctrl + Menü (a második kiosztásra)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Billentyű a harmadik szint választásához" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Bármely Win billentyű" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Bármely Alt billentyű" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Jobb Alt, a Shift+jobb Alt a kombináló" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "A jobb Alt billentyű sohasem választ harmadik szintet" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter a számbillentyűzeten" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Fordított törtvonal" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kisebb/nagyobb>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Fordított törtvonal választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kisebb/nagyobb> választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Ctrl billentyű helyzete" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock mint Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Bal Ctrl mint Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ctrl és Caps Lock felcserélése" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Az „A”-tól balra" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Bal oldalt, alul" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Jobb Ctrl használata jobb Alt-ként" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menü mint jobb Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Jobb Alt jobb Ctrl-ként" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Bal Alt és bal Ctrl felcserélése" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Bal Win és bal Ctrl felcserélése" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Bal Alt mint Ctrl, bal Ctrl mint Win, bal Win mint Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Az alternatív kiosztás megjelenítése a billentyűzet LED-ek használatával" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Numerikus billentyűzet kiosztása" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Örökölt" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode kiegészítések (nyilak és műveleti jelek)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unicode kiegészítések (nyilak és műveleti jelek; a műveleti jelek az alapértelmezett szinten)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Hagyományos Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 numerikus billentyűzet Unicode bővítésekkel (nyilak és műveleti jelek)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Wang 724 numerikus billentyűzet Unicode bővítésekkel (nyilak és műveleti jelek; a műveleti jelek az alapértelmezett szinten)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimális" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefon stílusú" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Számbillentyűzet Delete billentyűjének viselkedése" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Hagyományos számbillentyűzet ponttal" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Hagyományos számbillentyűzet vesszővel" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Negyedik szintű billentyű ponttal" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Negyedik szintű billentyű ponttal, csak Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Negyedik szintű billentyű vesszővel" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Negyedik szintű billentyű momayyez-val" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Negyedik szintű billentyű absztrakt elválasztókkal" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Pontosvessző a harmadik szinten" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "A Caps Lock billentyű viselkedése" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "A Caps Lock belső nagybetűkre váltást használ; a Shift „szünetelteti” a nagybetűsítést" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "A Caps Lock belső nagybetűkre váltást használ; a Shift nem befolyásolja a nagybetűsítést" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "A Caps Lock Shiftként működik zárolással; a Shift „szünetelteti” a nagybetűsítést" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "A Caps Lock Shiftként működik zárolással; a Shift nem befolyásolja a nagybetűsítést" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "A Caps Lock átváltja a betűkarakterek normál kis- és nagybetűit" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "A Caps Lock használata másik Num Lock-ként" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc és Caps Lock felcserélése" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "A Caps Lock használata másik Esc-ként" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "A Caps Lock használata másik Backspace-ként" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "A Caps Lock használata másik Super-ként" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "A Caps Lock használata másik Hyper-ként" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "A Caps Lock átváltja a Shiftet (minden billentyűt érinti)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "A Caps Lock letiltva" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "A Caps Lock használata másik Ctrl-ként" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Az Alt/Win billentyűk viselkedése" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "A szabványos funkcionalitás hozzáadása a Menü billentyűhöz" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Az Alt és Meta az Alt billentyűkön" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Az Alt a Win billentyűkhöz van rendelve (és a szokásos Alt billentyűkhöz)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "A Ctrl a Win billentyűkhöz van rendelve (és a szokásos Ctrl billentyűkhöz)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "A Ctrl az Alt billentyűkhöz, az Alt a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "A Meta a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "A Meta a bal Win billentyűhöz van rendelve" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "A Hyper a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Az Alt a jobb Win billentyűhöz van rendelve, a Super a Menühöz" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Az Alt fel van cserélve a Win billentyűvel" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "A kombináló billentyű helye" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3. szintű bal Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3. szintű jobb Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3. szintű Menü" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3. szintű bal Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3. szintű jobb Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3. szintű jobb Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3. szintű <kisebb/nagyobb>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Egyéb kompatibilitási beállítások" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Alapértelmezett számbillentyűk" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "A számbillentyűk mindig számokat visznek be (mint Mac OS-en)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "A Shift+számbillentyűk úgy működjenek, mint az MS Windowsban" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "A Shift nem szakítja meg a Num Lockot, hanem a harmadik szintet választja" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "A speciális billentyűket (Ctrl+Alt+<billentyű>) a kiszolgáló kezeli" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple alumínium billentyűzet PC-billentyűk emulálása (Print, Scroll Lock, Pause, Num Lock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "A Shift megszakítja a Caps Lockot" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Extra tipográfiai karakterek engedélyezése" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "A két Shift billentyű együtt váltja a Caps Lockot" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "A két Shift billentyű együtt aktiválja a Caps Lockot, egy Shift deaktiválja" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "A két Shift billentyű együtt váltja a ShiftLockot" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Mutatóbillentyűk átváltása a Shift + NumLock használatával" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Megragadás billentyűzettel való feltörésének engedélyezése (biztonsági kockázat!)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Megragadás és ablakfa naplózásának engedélyezése" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Pénznem jelek hozzáadása bizonyos billentyűkhöz" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro jel az E billentyűn" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro jel a 2-es billentyűn" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro jel a 4-es billentyűn" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro jel az 5-ös billentyűn" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rúpia jel a 4-es billentyűn" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Billentyű az ötödik szint választásához" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kisebb/nagyobb> választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Jobb Alt választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Bal Win választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Jobb Win választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "A szóköz billentyű használata nem törhető szóköz bevitelére" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Hagyományos szóköz bármely szinten" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Nem törhető szóköz karakter a második szinten" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Nem törhető szóköz karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Nem törhető szóköz karakter a harmadik szinten és semmi a negyediken" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Nem törhető szóköz karakter a harmadik szinten, keskeny nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Nem törhető szóköz karakter a negyedik szinten, keskeny nem törhető szóköz karakter a hatodik szinten" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Nem törhető szóköz karakter a negyedik szinten, keskeny nem törhető szóköz karakter a hatodik szinten (a Ctrl+Shift segítségével)" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nulla szélességű egyesítő karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nulla szélességű egyesítő karakter a harmadik szinten, nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, semmi a negyedik szinten" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, nulla szélességű egyesítő karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, keskeny nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a harmadik szinten, nulla szélességű egyesítő karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japán billentyűzet-beállítások" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "A Kana zárolásbillentyű zárol" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F stílusú backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "A Zenkaku Hankaku használata másik Esc-ként" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Eszperantó mellékjeles betűk hozzáadása" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "A Qwerty kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "A Dvorak kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "A Colemak kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Billentyűkompatibilitás fenntartása a régi Solaris kódokkal" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun billentyűzetkompatibilitás" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Billentyűsorozat az X kiszolgáló kilövéséhez" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4023,150 +4043,160 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angol (US, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angol (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Lengyel (nemzetközi, halott billentyűkkel)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Lengyel (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Lengyel (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krími tatár (Dobrudzsa Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Román (ergonomikus Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Román (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Szerb (ékezetek kombinálása a halott billentyűk helyett)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Orosz (Ukrán-fehérorosz kiosztással)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Orosz (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Örmény (OLPC fonetikus)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Héber (bibliai, SIL fonetikus)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arab (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugál (brazil, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Cseh (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dán (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holland (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Észt (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finn (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francia (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Görög (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Olasz (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japán (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japán (Sun Type 7 - PC kompatibilis)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japán (Sun Type 7 - sun kompatibilis)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvég (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugál (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Szlovák (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spanyol (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Svéd (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Német (Svájc, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francia (Svájc, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Török (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrán (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angol (UK, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreai (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengáli" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugál (brazil, natív az eszperantóhoz)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Angol (kiosztás átváltása a szorzás/osztás billentyűn)" diff --git a/xorg-server/xkeyboard-config/po/id.po b/xorg-server/xkeyboard-config/po/id.po index fb0e2626e..93cb2f093 100644 --- a/xorg-server/xkeyboard-config/po/id.po +++ b/xorg-server/xkeyboard-config/po/id.po @@ -2,2914 +2,2697 @@ # Copyright (C) 2008 THE xkeyboard-config'S COPYRIGHT HOLDER # This file is distributed under the same license as the xkeyboard-config package. # Erwid M Jadied , 2008. -# Andhika Padmawan , 2010. -# Andika Triwidada , 2012. +# Andhika Padmawan , 2010, 2014. +# Andika Triwidada , 2012, 2013. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.4.99\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2012-01-17 20:46+0000\n" -"PO-Revision-Date: 2012-05-09 21:39+0700\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-26 08:31+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Indonesian\n" -"X-Poedit-Country: INDONESIA\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: ../rules/base.xml.in.h:1 -msgid "<Less/Greater>" -msgstr "<Lebih Kecil/Lebih Besar>" +msgid "Generic 101-key PC" +msgstr "PC 101-tombol Generik " #: ../rules/base.xml.in.h:2 -msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "<Lebih Kecil/Lebih Besar> memilih level ke-3, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ke-3 lainnya" +msgid "Generic 102-key (Intl) PC" +msgstr "PC 102-tombol (Intl) Generic" #: ../rules/base.xml.in.h:3 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "<Lebih Kecil/Lebih Besar> pilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "Generic 104-key PC" +msgstr "PC 104-tombol Generik " #: ../rules/base.xml.in.h:4 -msgid "A4Tech KB-21" -msgstr "A4Tech KB-21" +msgid "Generic 105-key (Intl) PC" +msgstr "PC 105-tombol (Intl) Generic" #: ../rules/base.xml.in.h:5 -msgid "A4Tech KBS-8" -msgstr "A4Tech KBS-8" +msgid "Dell 101-key PC" +msgstr "PC 101-tombol Dell" #: ../rules/base.xml.in.h:6 -msgid "A4Tech Wireless Desktop RFKB-23" -msgstr "A4Tech Wireless Desktop RFKB-23" +msgid "Dell Latitude series laptop" +msgstr "Laptop seri Dell Latitude" #: ../rules/base.xml.in.h:7 -msgid "ATM/phone-style" -msgstr "Gaya ATM/telepon" +msgid "Dell Precision M65" +msgstr "Dell Precision M65" #: ../rules/base.xml.in.h:8 -msgid "Acer AirKey V" -msgstr "Acer AirKey V" +msgid "Everex STEPnote" +msgstr "Everex STEPnote" #: ../rules/base.xml.in.h:9 -msgid "Acer C300" -msgstr "Acer C300" +msgid "Keytronic FlexPro" +msgstr "Keytronic FlexPro" #: ../rules/base.xml.in.h:10 -msgid "Acer Ferrari 4000" -msgstr "Acer Ferrari 4000" +msgid "Microsoft Natural" +msgstr "Microsoft Natural" #: ../rules/base.xml.in.h:11 -msgid "Acer Laptop" -msgstr "Laptop Acer" +msgid "Northgate OmniKey 101" +msgstr "Northgate OmniKey 101" #: ../rules/base.xml.in.h:12 -msgid "Add the standard behavior to Menu key" -msgstr "Tambah tindakan standar pada tombol Menu" +msgid "Winbook Model XP5" +msgstr "Winbook Model XP5" #: ../rules/base.xml.in.h:13 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Menambah circumflex Esperanto (supersigno)" +msgid "PC-98xx Series" +msgstr "Seri PC-98xx" #: ../rules/base.xml.in.h:14 -msgid "Adding currency signs to certain keys" -msgstr "Menambahkan tanda mata uang ke tombol tertentu" +msgid "A4Tech KB-21" +msgstr "A4Tech KB-21" #: ../rules/base.xml.in.h:15 -msgid "Advance Scorpius KI" -msgstr "Advance Scorpius KI" +msgid "A4Tech KBS-8" +msgstr "A4Tech KBS-8" #: ../rules/base.xml.in.h:16 -msgid "Afghani" -msgstr "Afganistan" +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "A4Tech Wireless Desktop RFKB-23" #: ../rules/base.xml.in.h:17 -msgid "Akan" -msgstr "Akan" +msgid "Acer AirKey V" +msgstr "Acer AirKey V" #: ../rules/base.xml.in.h:18 -msgid "Albanian" -msgstr "Albania" +msgid "Azona RF2300 wireless Internet Keyboard" +msgstr "Papan Ketik Internet nirkabel Azona RF2300" #: ../rules/base.xml.in.h:19 -msgid "Alt and Meta are on Alt keys" -msgstr "Alt dan Meta pada tombol Alt" +msgid "Advance Scorpius KI" +msgstr "Advance Scorpius KI" #: ../rules/base.xml.in.h:20 -msgid "Alt is mapped to Right Win, Super to Menu" -msgstr "Alt dipetakan ke Win Kanan, Super ke Menu" +msgid "Brother Internet Keyboard" +msgstr "Papan Tik Internet Brother" #: ../rules/base.xml.in.h:21 -msgid "Alt+Caps Lock" -msgstr "Tombol Alt+Caps" +msgid "BTC 5113RF Multimedia" +msgstr "BTC 5113RF Multimedia" #: ../rules/base.xml.in.h:22 -msgid "Alt+Ctrl" -msgstr "Alt+Ctrl" +msgid "BTC 5126T" +msgstr "BTC 5126T" #: ../rules/base.xml.in.h:23 -msgid "Alt+Shift" -msgstr "Alt+Shift" +msgid "BTC 6301URF" +msgstr "BTC 6301URF" #: ../rules/base.xml.in.h:24 -msgid "Alt+Space" -msgstr "Alt+Space" +msgid "BTC 9000" +msgstr "BTC 9000" #: ../rules/base.xml.in.h:25 -msgid "Alt/Win key behavior" -msgstr "Tindakan Tombol Alt/Win " +msgid "BTC 9000A" +msgstr "BTC 9000A" #: ../rules/base.xml.in.h:26 -msgid "Amharic" -msgstr "Amharic" +msgid "BTC 9001AH" +msgstr "BTC 9001AH" #: ../rules/base.xml.in.h:27 -msgid "Any Alt key" -msgstr "Tombol Alt apapun" +msgid "BTC 5090" +msgstr "BTC 5090" #: ../rules/base.xml.in.h:28 -msgid "Any Win key" -msgstr "Tombol Win apapun" +msgid "BTC 9019U" +msgstr "BTC 9019U" #: ../rules/base.xml.in.h:29 -msgid "Any Win key (while pressed)" -msgstr "Tombol Win apapun (ketika ditekan)" +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "BTC 91116U Internet dan Permainan Nirkabel Mini" #: ../rules/base.xml.in.h:30 -msgid "Apple" -msgstr "Apple" +msgid "Cherry Blue Line CyBo@rd" +msgstr "Cherry Blue Line CyBo@rd" #: ../rules/base.xml.in.h:31 -msgid "Apple Aluminium Keyboard (ANSI)" -msgstr "Papan Ketik Aluminium Apple (ANSI)" +msgid "Cherry CyMotion Master XPress" +msgstr "Cherry CyMotion Master XPress" #: ../rules/base.xml.in.h:32 -msgid "Apple Aluminium Keyboard (ISO)" -msgstr "Papan Ketik Aluminium (ISO)" +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 (JIS)" -msgstr "Papan Ketik Aluminium (JIS)" +msgid "Cherry CyBo@rd USB-Hub" +msgstr "Cherry CyBo@rd USB-Hub" #: ../rules/base.xml.in.h:34 -msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" -msgstr "Papan Ketik Aluminium Apple: mengemulasi tombol PC (Print, Scroll_Lock, Pause, Num Lock)" +msgid "Cherry CyMotion Expert" +msgstr "Cherry CyMotion Expert" #: ../rules/base.xml.in.h:35 -msgid "Apple Laptop" -msgstr "Laptop Apple" +msgid "Cherry B.UNLIMITED" +msgstr "Cherry B.UNLIMITED" #: ../rules/base.xml.in.h:36 -msgid "Arabic" -msgstr "Arab" +msgid "Chicony Internet Keyboard" +msgstr "Papan Tik Internet Chicony" #: ../rules/base.xml.in.h:37 -msgid "Arabic (Buckwalter)" -msgstr "Arab (Buckwalter)" +msgid "Chicony KU-0108" +msgstr "Chicony KU-0108" #: ../rules/base.xml.in.h:38 -msgid "Arabic (Morocco)" -msgstr "Arab (Maroko)" +msgid "Chicony KU-0420" +msgstr "Chicony KU-0420" #: ../rules/base.xml.in.h:39 -msgid "Arabic (Pakistan)" -msgstr "Arab (Pakistan)" +msgid "Chicony KB-9885" +msgstr "Chicony KB-9885" #: ../rules/base.xml.in.h:40 -msgid "Arabic (Syria)" -msgstr "Arab (Siria)" +msgid "Compaq Easy Access Keyboard" +msgstr "Papan Ketik Akses Mudah Compaq" #: ../rules/base.xml.in.h:41 -msgid "Arabic (azerty)" -msgstr "Arab (azerty)" +msgid "Compaq Internet Keyboard (7 keys)" +msgstr "Papan Ketik Internet Compaq (7 tombol)" #: ../rules/base.xml.in.h:42 -msgid "Arabic (azerty/digits)" -msgstr "Arab (azerty/digit)" +msgid "Compaq Internet Keyboard (13 keys)" +msgstr "Papan Ketik Internet Compaq (13 tombol)" #: ../rules/base.xml.in.h:43 -msgid "Arabic (digits)" -msgstr "Arab (digits)" +msgid "Compaq Internet Keyboard (18 keys)" +msgstr "Papan Ketik Internet Compaq (18 tombol)" #: ../rules/base.xml.in.h:44 -msgid "Arabic (qwerty)" -msgstr "Arab (qwerty)" +msgid "Cherry CyMotion Master Linux" +msgstr "Cherry CyMotion Master Linux" #: ../rules/base.xml.in.h:45 -msgid "Arabic (qwerty/digits)" -msgstr "Arab (qwerty/digit)" +msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -#: ../rules/base.xml.in.h:46 ../rules/base.extras.xml.in.h:2 -msgid "Armenian" -msgstr "Armenia" +#: ../rules/base.xml.in.h:46 +msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" #: ../rules/base.xml.in.h:47 -msgid "Armenian (alternative eastern)" -msgstr "Armenia (timur alternatif)" +msgid "Compaq iPaq Keyboard" +msgstr "Papan Ketik Compaq iPaq" #: ../rules/base.xml.in.h:48 -msgid "Armenian (alternative phonetic)" -msgstr "Armenia (fonetik alternatif)" +msgid "Dell" +msgstr "Dell" #: ../rules/base.xml.in.h:49 -msgid "Armenian (eastern)" -msgstr "Armenia (timur)" +msgid "Dell SK-8125" +msgstr "Dell SK-8125" #: ../rules/base.xml.in.h:50 -msgid "Armenian (phonetic)" -msgstr "Armenia (fonetik)" +msgid "Dell SK-8135" +msgstr "Dell SK-8135" #: ../rules/base.xml.in.h:51 -msgid "Armenian (western)" -msgstr "Armenia (barat)" +msgid "Dell USB Multimedia Keyboard" +msgstr "Papan Ketik Multimedia USB Dell" #: ../rules/base.xml.in.h:52 -msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" -msgstr "Asturia (Spanyol, dengan titik di bawah pada H dan L)" +msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" #: ../rules/base.xml.in.h:53 -msgid "Asus Laptop" -msgstr "Laptop Asus" +msgid "Dell Laptop/notebook Precision M series" +msgstr "Dell Laptop/notebook Precision M series" #: ../rules/base.xml.in.h:54 -msgid "At bottom left" -msgstr "Di kiri bawah" +msgid "Dexxa Wireless Desktop Keyboard" +msgstr "Papan Ketik Desktop Nirkabel Dexxa" #: ../rules/base.xml.in.h:55 -msgid "At left of 'A'" -msgstr "Di sebelah kiri 'A'" +msgid "Diamond 9801 / 9802 series" +msgstr "Diamond 9801 / 9802 series" #: ../rules/base.xml.in.h:56 -msgid "Avatime" -msgstr "Avatime" +msgid "DTK2000" +msgstr "DTK2000" #: ../rules/base.xml.in.h:57 -msgid "Azerbaijani" -msgstr "Ajarbaijan" +msgid "Ennyah DKB-1008" +msgstr "Ennyah DKB-1008" #: ../rules/base.xml.in.h:58 -msgid "Azerbaijani (Cyrillic)" -msgstr "Azerbaijan (Sirilik)" +msgid "Fujitsu-Siemens Computers AMILO laptop" +msgstr "Fujitsu-Siemens Computers AMILO laptop" #: ../rules/base.xml.in.h:59 -msgid "Azona RF2300 wireless Internet Keyboard" -msgstr "Papan Ketik Internet nirkabel Azona RF2300" +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 "BTC 5090" -msgstr "BTC 5090" +msgid "Genius Comfy KB-12e" +msgstr "Genius Comfy KB-12e" #: ../rules/base.xml.in.h:61 -msgid "BTC 5113RF Multimedia" -msgstr "BTC 5113RF Multimedia" +msgid "Genius Comfy KB-21e-Scroll" +msgstr "Genius Comfy KB-21e-Scroll" #: ../rules/base.xml.in.h:62 -msgid "BTC 5126T" -msgstr "BTC 5126T" +msgid "Genius KB-19e NB" +msgstr "Genius KB-19e NB" #: ../rules/base.xml.in.h:63 -msgid "BTC 6301URF" -msgstr "BTC 6301URF" +msgid "Genius KKB-2050HS" +msgstr "Genius KKB-2050HS" #: ../rules/base.xml.in.h:64 -msgid "BTC 9000" -msgstr "BTC 9000" +msgid "Gyration" +msgstr "Gyration" #: ../rules/base.xml.in.h:65 -msgid "BTC 9000A" -msgstr "BTC 9000A" +msgid "HTC Dream" +msgstr "HTC Dream" #: ../rules/base.xml.in.h:66 -msgid "BTC 9001AH" -msgstr "BTC 9001AH" +msgid "Kinesis" +msgstr "Kinesis" #: ../rules/base.xml.in.h:67 -msgid "BTC 9019U" -msgstr "BTC 9019U" +msgid "Logitech Generic Keyboard" +msgstr "Papan Ketik Generik Logitech" #: ../rules/base.xml.in.h:68 -msgid "BTC 9116U Mini Wireless Internet and Gaming" -msgstr "BTC 91116U Internet dan Permainan Nirkabel Mini" +msgid "Logitech G15 extra keys via G15daemon" +msgstr "Logitech G15 extra keys via G15daemon" #: ../rules/base.xml.in.h:69 -msgid "Backslash" -msgstr "Backslash" +msgid "Hewlett-Packard Internet Keyboard" +msgstr "Papan Ketik Internet Hewlett-Packard" #: ../rules/base.xml.in.h:70 -msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "Backslash memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" +msgid "Hewlett-Packard SK-250x Multimedia Keyboard" +msgstr "Papan Ketik Multimedia Hewlett-Packard SK-2501" #: ../rules/base.xml.in.h:71 -msgid "Bambara" -msgstr "Bambara" +msgid "Hewlett-Packard Omnibook XE3 GC" +msgstr "Hewlett-Packard Omnibook XE3 GC" #: ../rules/base.xml.in.h:72 -msgid "Bashkirian" -msgstr "Bashkirian" +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "Hewlett-Packard Omnibook XE3 GF" #: ../rules/base.xml.in.h:73 -msgid "Belarusian" -msgstr "Belarusia" +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "Hewlett-Packard Omnibook XT1000" #: ../rules/base.xml.in.h:74 -msgid "Belarusian (Latin)" -msgstr "Belarusia (Latin)" +msgid "Hewlett-Packard Pavilion dv5" +msgstr "Hewlett-Packard Pavilion dv5" #: ../rules/base.xml.in.h:75 -msgid "Belarusian (legacy)" -msgstr "Belarusia (legacy)" +msgid "Hewlett-Packard Pavilion ZT11xx" +msgstr "Hewlett-Packard Pavilion ZT11xx" #: ../rules/base.xml.in.h:76 -msgid "Belgian" -msgstr "Belgia" +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "Hewlett-Packard Omnibook 500 FA" #: ../rules/base.xml.in.h:77 -msgid "Belgian (ISO alternate)" -msgstr "Belgia (alternatif ISO)" +msgid "Hewlett-Packard Omnibook 5xx" +msgstr "Hewlett-Packard Omnibook 5xx" #: ../rules/base.xml.in.h:78 -msgid "Belgian (Sun dead keys)" -msgstr "Belgia (tombol mati Sun)" +msgid "Hewlett-Packard nx9020" +msgstr "Hewlett-Packard nx9020" #: ../rules/base.xml.in.h:79 -msgid "Belgian (Wang model 724 azerty)" -msgstr "Belgia (Wang model 724 azerty)" +msgid "Hewlett-Packard Omnibook 6000/6100" +msgstr "Hewlett-Packard Omnibook 6000/6100" #: ../rules/base.xml.in.h:80 -msgid "Belgian (alternative)" -msgstr "Belgia (alternatif)" +msgid "Honeywell Euroboard" +msgstr "Honeywell Euroboard" #: ../rules/base.xml.in.h:81 -msgid "Belgian (alternative, Sun dead keys)" -msgstr "Belgia (alternatif, tombol mati Sun)" +msgid "Hewlett-Packard Mini 110 Notebook" +msgstr "Hewlett-Packard Mini 110 Notebook" #: ../rules/base.xml.in.h:82 -msgid "Belgian (alternative, latin-9 only)" -msgstr "Belgia (alternative, hanya latin-9)" +msgid "IBM Rapid Access" +msgstr "IBM Rapid Access" #: ../rules/base.xml.in.h:83 -msgid "Belgian (eliminate dead keys)" -msgstr "Belgia (hapus tombol mati)" +msgid "IBM Rapid Access II" +msgstr "IBM Rapid Access II" #: ../rules/base.xml.in.h:84 -msgid "BenQ X-Touch" -msgstr "BenQ X-Touch" +msgid "IBM ThinkPad 560Z/600/600E/A22E" +msgstr "IBM ThinkPad 560Z/600/600E/A22E" #: ../rules/base.xml.in.h:85 -msgid "BenQ X-Touch 730" -msgstr "BenQ X-Touch 730" +msgid "IBM ThinkPad R60/T60/R61/T61" +msgstr "IBM ThinkPad R60/T60/R61/T61" #: ../rules/base.xml.in.h:86 -msgid "BenQ X-Touch 800" -msgstr "BenQ X-Touch 800" +msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" #: ../rules/base.xml.in.h:87 -msgid "Bengali" -msgstr "Bengali" +msgid "IBM Space Saver" +msgstr "IBM Space Saver" #: ../rules/base.xml.in.h:88 -msgid "Bengali (India)" -msgstr "Bengal (India)" +msgid "Logitech Access Keyboard" +msgstr "Logitech Access Keyboard" #: ../rules/base.xml.in.h:89 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Bengali (India, Baishakhi Inscript)" +msgid "Logitech Cordless Desktop LX-300" +msgstr "Logitech Cordless Desktop LX-300" #: ../rules/base.xml.in.h:90 -msgid "Bengali (India, Baishakhi)" -msgstr "Bengali (India, Baishakhi)" +msgid "Logitech Internet 350 Keyboard" +msgstr "Papan Ketik Logitech Internet 350" #: ../rules/base.xml.in.h:91 -msgid "Bengali (India, Bornona)" -msgstr "Bengali (India, Bornona)" +msgid "Logitech Media Elite Keyboard" +msgstr "Papan Ketik Logitech Media Elite" #: ../rules/base.xml.in.h:92 -msgid "Bengali (India, Probhat)" -msgstr "Bengal (India, Probhat)" +msgid "Logitech Cordless Desktop" +msgstr "Logitech Cordless Desktop" #: ../rules/base.xml.in.h:93 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Bengali (India, Uni Gitanjali)" +msgid "Logitech Cordless Desktop iTouch" +msgstr "Logitech Cordless Desktop iTouch" #: ../rules/base.xml.in.h:94 -msgid "Bengali (Probhat)" -msgstr "Bengal (Probhat)" +msgid "Logitech Cordless Desktop Navigator" +msgstr "Logitech Cordless Desktop Navigator" #: ../rules/base.xml.in.h:95 -msgid "Berber (Morocco, Tifinagh alternative phonetic)" -msgstr "Berber (Maroko, fonetik alternatif Tifinagh)" +msgid "Logitech Cordless Desktop Optical" +msgstr "Logitech Cordless Desktop Optical" #: ../rules/base.xml.in.h:96 -msgid "Berber (Morocco, Tifinagh alternative)" -msgstr "Berber (Maroko, alternatif Tifinagh)" +msgid "Logitech Cordless Desktop (alternate option)" +msgstr "Logitech Cordless Desktop (pilihan alternatif)" #: ../rules/base.xml.in.h:97 -msgid "Berber (Morocco, Tifinagh extended phonetic)" -msgstr "Berber (Maroko, fonetik Tifinagh diperluas)" +msgid "Logitech Cordless Desktop Pro (alternate option 2)" +msgstr "Logitech Cordless Desktop Pro (opsi alternatif 2)" #: ../rules/base.xml.in.h:98 -msgid "Berber (Morocco, Tifinagh extended)" -msgstr "Berber (Maroko, Tifinagh diperluas)" +msgid "Logitech Cordless Freedom/Desktop Navigator" +msgstr "Logitech Cordless Freedom/Desktop Navigator" #: ../rules/base.xml.in.h:99 -msgid "Berber (Morocco, Tifinagh phonetic)" -msgstr "Berber (Maroko, fonetik Tifinagh)" +msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)" #: ../rules/base.xml.in.h:100 -msgid "Berber (Morocco, Tifinagh)" -msgstr "Berber (Morocco, Tifinagh)" +msgid "Logitech Internet Keyboard" +msgstr "Papan Ketik Internet Logitech" #: ../rules/base.xml.in.h:101 -msgid "Bosnian" -msgstr "Bosnia" +msgid "Logitech iTouch" +msgstr "Logitech iTouch" #: ../rules/base.xml.in.h:102 -msgid "Bosnian (US keyboard with Bosnian digraphs)" -msgstr "Bosnia (papan tik AS dengan digraf Bosnia)" +msgid "Logitech Internet Navigator Keyboard" +msgstr "Papan Ketik Navigator Internet Logitech" #: ../rules/base.xml.in.h:103 -msgid "Bosnian (US keyboard with Bosnian letters)" -msgstr "Bosnia (papan tik AS dengan huruf Bosnia)" +msgid "Logitech Cordless Desktop EX110" +msgstr "Logitech Cordless Desktop EX110" #: ../rules/base.xml.in.h:104 -msgid "Bosnian (use Bosnian digraphs)" -msgstr "Bosnia (gunakan diagraph Bosnia)" +msgid "Logitech iTouch Internet Navigator Keyboard SE" +msgstr "Logitech iTouch Internet Navigator Keyboard SE" #: ../rules/base.xml.in.h:105 -msgid "Bosnian (use guillemets for quotes)" -msgstr "Bosnia (gunakan guillemets untuk tanda petik)" +msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" #: ../rules/base.xml.in.h:106 -msgid "Both Alt keys together" -msgstr "Kedua tombol Alt bersama" +msgid "Logitech Ultra-X Keyboard" +msgstr "Papan Ketik Logitech Ultra-X" #: ../rules/base.xml.in.h:107 -msgid "Both Ctrl keys together" -msgstr "Kedua tombol Ctrl bersama" +msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgstr "Papan Ketik Logitech Ultra-X Cordless Media Desktop" #: ../rules/base.xml.in.h:108 -msgid "Both Shift keys together" -msgstr "Kedua tombol Shift bersama" +msgid "Logitech diNovo Keyboard" +msgstr "Papan Ketik Logitech diNovo" #: ../rules/base.xml.in.h:109 -msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates" -msgstr "Kedua tombol Shift bersamaan mengaktifkan Caps Lock, satu Tombol-Shift mematikannya" +msgid "Logitech diNovo Edge Keyboard" +msgstr "Papan Ketik Logitech diNovo Edge" #: ../rules/base.xml.in.h:110 -msgid "Both Shift-Keys together toggle Caps Lock" -msgstr "Kedua tombol Shift bersama ubah Caps Lock" +msgid "Memorex MX1998" +msgstr "Memorex MX1998" #: ../rules/base.xml.in.h:111 -msgid "Both Shift-Keys together toggle ShiftLock" -msgstr "Kedua tombol Shift bersama menjungkitkan ShiftLock" +msgid "Memorex MX2500 EZ-Access Keyboard" +msgstr "Papan Ketik Memorex MX2500 EZ-Access" #: ../rules/base.xml.in.h:112 -msgid "Braille" -msgstr "Braille" +msgid "Memorex MX2750" +msgstr "Memorex MX2750" #: ../rules/base.xml.in.h:113 -msgid "Braille (left hand)" -msgstr "Braille (tangan kiri)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgstr "Papan Tik Ergonomis Nirkabel Alami Microsoft 4000" #: ../rules/base.xml.in.h:114 -msgid "Braille (right hand)" -msgstr "Braille (tangan kanan)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" #: ../rules/base.xml.in.h:115 -msgid "Brother Internet Keyboard" -msgstr "Papan Tik Internet Brother" +msgid "Microsoft Internet Keyboard" +msgstr "Papan Ketik Internet Microsoft" #: ../rules/base.xml.in.h:116 -msgid "Bulgarian" -msgstr "Bulgaria" +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 "Bulgarian (new phonetic)" -msgstr "Bulgaria (fonetik baru)" +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 "Bulgarian (traditional phonetic)" -msgstr "Bulgaria (fonetik tradisional)" +msgid "Microsoft Natural Keyboard Pro OEM" +msgstr "Microsoft Natural Keyboard Pro OEM" #: ../rules/base.xml.in.h:119 -msgid "Burmese" -msgstr "Burma" +msgid "ViewSonic KU-306 Internet Keyboard" +msgstr "Papan Ketik Internet ViewSonic KU-306" #: ../rules/base.xml.in.h:120 -msgid "Cameroon Multilingual (Dvorak)" -msgstr "Kamerun Multibahasa (Dvorak)" +msgid "Microsoft Internet Keyboard Pro, Swedish" +msgstr "Microsoft Internet Keyboard Pro, Swedia" #: ../rules/base.xml.in.h:121 -msgid "Cameroon Multilingual (azerty)" -msgstr "Kamerun Multibahasa (azerty)" +msgid "Microsoft Office Keyboard" +msgstr "Papan Ketik Microsoft Office" #: ../rules/base.xml.in.h:122 -msgid "Cameroon Multilingual (qwerty)" -msgstr "Kamerun Multibahasa (qwerty)" +msgid "Microsoft Wireless Multimedia Keyboard 1.0A" +msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" #: ../rules/base.xml.in.h:123 -msgid "Canadian Multilingual" -msgstr "Kanada Multibahasa" +msgid "Microsoft Natural Keyboard Elite" +msgstr "Microsoft Natural Keyboard Elite" #: ../rules/base.xml.in.h:124 -msgid "Canadian Multilingual (first part)" -msgstr "Kanada Multibahasa (bagian pertama)" +msgid "Microsoft Comfort Curve Keyboard 2000" +msgstr "Microsoft Comfort Curve Keyboard 2000" #: ../rules/base.xml.in.h:125 -msgid "Canadian Multilingual (second part)" -msgstr "Kanada Multibahasa (bagian kedua)" +msgid "Ortek MCK-800 MM/Internet keyboard" +msgstr "Ortek MCK-800 MM/Internet keyboard" #: ../rules/base.xml.in.h:126 -msgid "Caps Lock" -msgstr "Caps Lock" +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 (ke tata letak pertama), Shift+Caps Lock (ke tata letak terakhir)" +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 (ketika ditekan), Alt+Caps Lock melakukan aksi capslock asli" +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 bertindak sebagai Shift dengan mengunci. Shift \"jeda\" 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 bertindak sebagai Shift yang terkunci. Shift tidak mempengaruhi Caps Lock" +msgid "Sanwa Supply SKB-KG3" +msgstr "Sanwa Supply SKB-KG3" #: ../rules/base.xml.in.h:131 -msgid "Caps Lock as Ctrl" -msgstr "Caps Lock sebagai Ctrl" +msgid "SK-1300" +msgstr "SK-1300" #: ../rules/base.xml.in.h:132 -msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "Caps Lock memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" +msgid "SK-2500" +msgstr "SK-2500" #: ../rules/base.xml.in.h:133 -msgid "Caps Lock is disabled" -msgstr "Caps Lock dinonaktifkan" +msgid "SK-6200" +msgstr "SK-6200" #: ../rules/base.xml.in.h:134 -msgid "Caps Lock key behavior" -msgstr "Perilaku tombol Caps Lock" +msgid "SK-7100" +msgstr "SK-7100" #: ../rules/base.xml.in.h:135 -msgid "Caps Lock toggles Shift so all keys are affected" -msgstr "Caps Lock mengubah Shift sehingga semua tombol terpengaruh" +msgid "Super Power Multimedia Keyboard" +msgstr "Super Power Multimedia Keyboard" #: ../rules/base.xml.in.h:136 -msgid "Caps Lock toggles normal capitalization of alphabetic characters" -msgstr "Caps Lock mengubah huruf besar normal atau karakter secara alfabetis" +msgid "SVEN Ergonomic 2500" +msgstr "SVEN Ergonomic 2500" #: ../rules/base.xml.in.h:137 -msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock" -msgstr "Caps Lock menggunakan huruf besar internal. Shift \"pauses\" Caps Lock" +msgid "SVEN Slim 303" +msgstr "SVEN Slim 303" #: ../rules/base.xml.in.h:138 -msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock" -msgstr "Caps Lock menggunakan huruf besar internal. Shift tidak mempengaruhi Caps Lock" +msgid "Symplon PaceBook (tablet PC)" +msgstr "Symplon PaceBook (tablet PC)" #: ../rules/base.xml.in.h:139 -msgid "Catalan" -msgstr "Katala" +msgid "Toshiba Satellite S3000" +msgstr "Toshiba Satellite S3000" #: ../rules/base.xml.in.h:140 -msgid "Catalan (Spain, with middle-dot L)" -msgstr "Katala (Spanyol, dengan titik-tengah pada L)" +msgid "Trust Wireless Keyboard Classic" +msgstr "Trust Wireless Keyboard Classic" #: ../rules/base.xml.in.h:141 -msgid "Cherokee" -msgstr "Cherokee" +msgid "Trust Direct Access Keyboard" +msgstr "Trust Direct Access Keyboard" #: ../rules/base.xml.in.h:142 -msgid "Cherry B.UNLIMITED" -msgstr "Cherry B.UNLIMITED" +msgid "Trust Slimline" +msgstr "Trust Slimline" #: ../rules/base.xml.in.h:143 -msgid "Cherry Blue Line CyBo@rd" -msgstr "Cherry Blue Line CyBo@rd" +msgid "TypeMatrix EZ-Reach 2020" +msgstr "TypeMatrix EZ-Reach 2020" #: ../rules/base.xml.in.h:144 -msgid "Cherry Blue Line CyBo@rd (alternate option)" -msgstr "Cherry Blue Line CyBo@rd (alternate option)" +msgid "TypeMatrix EZ-Reach 2030 PS2" +msgstr "TypeMatrix EZ-Reach 2030 PS2" #: ../rules/base.xml.in.h:145 -msgid "Cherry CyBo@rd USB-Hub" -msgstr "Cherry CyBo@rd USB-Hub" +msgid "TypeMatrix EZ-Reach 2030 USB" +msgstr "TypeMatrix EZ-Reach 2030 USB" #: ../rules/base.xml.in.h:146 -msgid "Cherry CyMotion Expert" -msgstr "Cherry CyMotion Expert" +msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (mode 102/105:EU)" #: ../rules/base.xml.in.h:147 -msgid "Cherry CyMotion Master Linux" -msgstr "Cherry CyMotion Master Linux" +msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)" #: ../rules/base.xml.in.h:148 -msgid "Cherry CyMotion Master XPress" -msgstr "Cherry CyMotion Master XPress" +msgid "Yahoo! Internet Keyboard" +msgstr "Papan Ketik Internet Yahoo!" #: ../rules/base.xml.in.h:149 -msgid "Chicony Internet Keyboard" -msgstr "Papan Tik Internet Chicony" +msgid "MacBook/MacBook Pro" +msgstr "MacBook/MacBook Pro" #: ../rules/base.xml.in.h:150 -msgid "Chicony KB-9885" -msgstr "Chicony KB-9885" +msgid "MacBook/MacBook Pro (Intl)" +msgstr "MacBook/MacBook Pro (Intl)" #: ../rules/base.xml.in.h:151 -msgid "Chicony KU-0108" -msgstr "Chicony KU-0108" +msgid "Macintosh" +msgstr "Macintosh" #: ../rules/base.xml.in.h:152 -msgid "Chicony KU-0420" -msgstr "Chicony KU-0420" +msgid "Macintosh Old" +msgstr "Macintosh Old" #: ../rules/base.xml.in.h:153 -msgid "Chinese" -msgstr "Cina" +msgid "Happy Hacking Keyboard for Mac" +msgstr "Happy Hacking Keyboard untuk Mac" #: ../rules/base.xml.in.h:154 -msgid "Chuvash" -msgstr "Chuvash" +msgid "Acer C300" +msgstr "Acer C300" #: ../rules/base.xml.in.h:155 -msgid "Chuvash (Latin)" -msgstr "Chuvash (Latin)" +msgid "Acer Ferrari 4000" +msgstr "Acer Ferrari 4000" #: ../rules/base.xml.in.h:156 -msgid "Classmate PC" -msgstr "Classmate PC" +msgid "Acer Laptop" +msgstr "Laptop Acer" #: ../rules/base.xml.in.h:157 -msgid "CloGaelach" -msgstr "CloGaelach" +msgid "Asus Laptop" +msgstr "Laptop Asus" #: ../rules/base.xml.in.h:158 -msgid "Compaq Easy Access Keyboard" -msgstr "Papan Ketik Akses Mudah Compaq" +msgid "Apple" +msgstr "Apple" #: ../rules/base.xml.in.h:159 -msgid "Compaq Internet Keyboard (13 keys)" -msgstr "Papan Ketik Internet Compaq (13 tombol)" +msgid "Apple Laptop" +msgstr "Laptop Apple" #: ../rules/base.xml.in.h:160 -msgid "Compaq Internet Keyboard (18 keys)" -msgstr "Papan Ketik Internet Compaq (18 tombol)" +msgid "Apple Aluminium Keyboard (ANSI)" +msgstr "Papan Ketik Aluminium Apple (ANSI)" #: ../rules/base.xml.in.h:161 -msgid "Compaq Internet Keyboard (7 keys)" -msgstr "Papan Ketik Internet Compaq (7 tombol)" +msgid "Apple Aluminium Keyboard (ISO)" +msgstr "Papan Ketik Aluminium (ISO)" #: ../rules/base.xml.in.h:162 -msgid "Compaq iPaq Keyboard" -msgstr "Papan Ketik Compaq iPaq" +msgid "Apple Aluminium Keyboard (JIS)" +msgstr "Papan Ketik Aluminium (JIS)" #: ../rules/base.xml.in.h:163 -msgid "Compose key position" -msgstr "Posisi tombol Compose" +msgid "SILVERCREST Multimedia Wireless Keyboard" +msgstr "Papan Ketik SILVERCREST Multimedia Wireless" #: ../rules/base.xml.in.h:164 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Backspace" +msgid "Laptop/notebook eMachines m68xx" +msgstr "Laptop/notebook eMachines m68xx" #: ../rules/base.xml.in.h:165 -msgid "Control is mapped to Alt keys, Alt is mapped to Win keys" -msgstr "Kendali dipetakan ke tombol Alt, Alt dipetakan ke tombol Win" +msgid "BenQ X-Touch" +msgstr "BenQ X-Touch" #: ../rules/base.xml.in.h:166 -msgid "Control is mapped to Win keys (and the usual Ctrl keys)" -msgstr "Kendali dipetakan ke tombol Win ( dan tombol Ctrl biasa)" +msgid "BenQ X-Touch 730" +msgstr "BenQ X-Touch 730" #: ../rules/base.xml.in.h:167 -msgid "Creative Desktop Wireless 7000" -msgstr "Creative Desktop Wireless 7000" +msgid "BenQ X-Touch 800" +msgstr "BenQ X-Touch 800" #: ../rules/base.xml.in.h:168 -msgid "Crimean Tatar (Turkish Alt-Q)" -msgstr "Crimean Tatar (Turkish Alt-Q)" +msgid "Happy Hacking Keyboard" +msgstr "Happy Hacking Keyboard" #: ../rules/base.xml.in.h:169 -msgid "Crimean Tatar (Turkish F)" -msgstr "Crimean Tatar (Turkish F)" +msgid "Classmate PC" +msgstr "Classmate PC" #: ../rules/base.xml.in.h:170 -msgid "Crimean Tatar (Turkish Q)" -msgstr "Crimean Tatar (Turkish Q)" +msgid "OLPC" +msgstr "OLPC" #: ../rules/base.xml.in.h:171 -msgid "Croatian" -msgstr "Kroasia" +msgid "Sun Type 7 USB" +msgstr "Sun Type 7 USB" #: ../rules/base.xml.in.h:172 -msgid "Croatian (US keyboard with Croatian digraphs)" -msgstr "Kroasia (papan tik AS dengan digraf Kroasia)" +msgid "Sun Type 7 USB (European layout)" +msgstr "Sun Type 7 USB (tata letak Eropa)" #: ../rules/base.xml.in.h:173 -msgid "Croatian (US keyboard with Croatian letters)" -msgstr "Kroasia (papan tik AS dengan huruf Kroasia)" +msgid "Sun Type 7 USB (Unix layout)" +msgstr "Sun Type 7 USB (tata letak Unix)" #: ../rules/base.xml.in.h:174 -msgid "Croatian (use Croatian digraphs)" -msgstr "Kroasis (gunakan diagraph Kroasia)" +msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key" +msgstr "Sun Type 7 USB (tata letak Jepang) / Jepang 106-tombol" #: ../rules/base.xml.in.h:175 -msgid "Croatian (use guillemets for quotes)" -msgstr "Kroasia (gunakan guillemets untuk tanda petik)" +msgid "Sun Type 6/7 USB" +msgstr "Sun Type 6/7 USB" #: ../rules/base.xml.in.h:176 -msgid "Ctrl key position" -msgstr "Posisi tombol Ctrl" +msgid "Sun Type 6/7 USB (European layout)" +msgstr "Sun Type 6/7 USB (tata letak Eropa)" #: ../rules/base.xml.in.h:177 -msgid "Ctrl+Shift" -msgstr "Ctrl+Shift" +msgid "Sun Type 6 USB (Unix layout)" +msgstr "Sun Type 6 USB (tata letak Unix)" #: ../rules/base.xml.in.h:178 -msgid "Czech" -msgstr "Ceko" +msgid "Sun Type 6 USB (Japanese layout)" +msgstr "Sun Type 6 USB (tata letak Jepang)" #: ../rules/base.xml.in.h:179 -msgid "Czech (UCW layout, accented letters only)" -msgstr "Ceko (tata letak UCW, hanya huruf beraksen)" +msgid "Sun Type 6 (Japanese layout)" +msgstr "Sun Type 6 (tata letak Jepang)" #: ../rules/base.xml.in.h:180 -msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Ceko (Dvorak AS dengan dukungan CZ UCW)" +msgid "Targa Visionary 811" +msgstr "Targa Visionary 811" #: ../rules/base.xml.in.h:181 -msgid "Czech (qwerty)" -msgstr "Ceko (qwerty)" +msgid "Unitek KB-1925" +msgstr "Unitek KB-1925" #: ../rules/base.xml.in.h:182 -msgid "Czech (qwerty, extended Backslash)" -msgstr "Ceko (qwerty, Backslash diperpanjang)" +msgid "FL90" +msgstr "FL90" #: ../rules/base.xml.in.h:183 -msgid "Czech (with <\\|> key)" -msgstr "Ceko (dengan tombol <\\|>)" +msgid "Creative Desktop Wireless 7000" +msgstr "Creative Desktop Wireless 7000" #: ../rules/base.xml.in.h:184 -msgid "DTK2000" -msgstr "DTK2000" - -#: ../rules/base.xml.in.h:185 -msgid "Danish" -msgstr "Denmark" - -#: ../rules/base.xml.in.h:186 -msgid "Danish (Dvorak)" -msgstr "Denmark (Dvorak)" +msgid "Htc Dream phone" +msgstr "Telepon Htc Dream" -#: ../rules/base.xml.in.h:187 -msgid "Danish (Macintosh)" -msgstr "Denmark (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 (Macintosh, eliminate dead keys)" -msgstr "Denmark (Macintosh, hapus tombol mati" +#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34 +msgid "English (US)" +msgstr "Inggris (AS)" +#. Keyboard indicator for Cherokee layouts #: ../rules/base.xml.in.h:189 -msgid "Danish (eliminate dead keys)" -msgstr "Denmark (hapus tombol mati" +msgid "chr" +msgstr "chr" #: ../rules/base.xml.in.h:190 -msgid "Default numeric keypad keys" -msgstr "Tombol angka keypad standar" +msgid "Cherokee" +msgstr "Cherokee" #: ../rules/base.xml.in.h:191 -msgid "Dell" -msgstr "Dell" +msgid "English (US, with euro on 5)" +msgstr "Inggris (AS, dengan euro pada 5)" #: ../rules/base.xml.in.h:192 -msgid "Dell 101-key PC" -msgstr "PC 101-tombol Dell" +msgid "English (US, international with dead keys)" +msgstr "Inggris (AS, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:193 -msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" -msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgid "English (US, alternative international)" +msgstr "Inggris (AS, internasional alternatif)" #: ../rules/base.xml.in.h:194 -msgid "Dell Laptop/notebook Precision M series" -msgstr "Dell Laptop/notebook Precision M series" +msgid "English (Colemak)" +msgstr "Inggris (Colemak)" #: ../rules/base.xml.in.h:195 -msgid "Dell Latitude series laptop" -msgstr "Laptop seri Dell Latitude" +msgid "English (Dvorak)" +msgstr "Inggris (Dvorak)" #: ../rules/base.xml.in.h:196 -msgid "Dell Precision M65" -msgstr "Dell Precision M65" +msgid "English (Dvorak, international with dead keys)" +msgstr "Inggris (Dvorak, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:197 -msgid "Dell SK-8125" -msgstr "Dell SK-8125" +msgid "English (Dvorak alternative international no dead keys)" +msgstr "Inggris (Dvorak alternatif Internasional tanpa tombol mati)" #: ../rules/base.xml.in.h:198 -msgid "Dell SK-8135" -msgstr "Dell SK-8135" +msgid "English (left handed Dvorak)" +msgstr "Inggris (Dvorak kidal)" #: ../rules/base.xml.in.h:199 -msgid "Dell USB Multimedia Keyboard" -msgstr "Papan Ketik Multimedia USB Dell" +msgid "English (right handed Dvorak)" +msgstr "Inggris (Dvorak tangan kanan)" #: ../rules/base.xml.in.h:200 -msgid "Dexxa Wireless Desktop Keyboard" -msgstr "Papan Ketik Desktop Nirkabel Dexxa" +msgid "English (classic Dvorak)" +msgstr "Inggris (Dvorak klasik)" #: ../rules/base.xml.in.h:201 -msgid "Dhivehi" -msgstr "Dhivehi" - -#: ../rules/base.xml.in.h:202 -msgid "Diamond 9801 / 9802 series" -msgstr "Diamond 9801 / 9802 series" +msgid "English (programmer Dvorak)" +msgstr "Inggris (Dvorak pemrogram)" -#: ../rules/base.xml.in.h:203 -msgid "Dutch" -msgstr "Belanda" +#. Keyboard indicator for Russian layouts +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 +msgid "ru" +msgstr "ru" #: ../rules/base.xml.in.h:204 -msgid "Dutch (Macintosh)" -msgstr "Belanda (Macintosh)" +msgid "Russian (US, phonetic)" +msgstr "Rusia (AS, fonetik)" #: ../rules/base.xml.in.h:205 -msgid "Dutch (Sun dead keys)" -msgstr "Belanda (tombol mati Sun)" +msgid "English (Macintosh)" +msgstr "Inggris (Macintosh)" #: ../rules/base.xml.in.h:206 -msgid "Dutch (standard)" -msgstr "Belanda (standar)" +msgid "English (international AltGr dead keys)" +msgstr "Inggris (internasional AltGr tombol mati)" #: ../rules/base.xml.in.h:207 -msgid "Dzongkha" -msgstr "Dzongkha" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Inggris (tombol bagi/kali menjungkitkan tata letak)" #: ../rules/base.xml.in.h:208 -msgid "Enable extra typographic characters" -msgstr "Aktifkan karakter tipografi ekstra" +msgid "Serbo-Croatian (US)" +msgstr "Serbo-Kroasia (AS)" #: ../rules/base.xml.in.h:209 -msgid "English (Cameroon)" -msgstr "Inggris (Kamerun)" +msgid "English (Workman)" +msgstr "Inggris (Workman)" #: ../rules/base.xml.in.h:210 -msgid "English (Canada)" -msgstr "Inggris (Kanada)" - -#: ../rules/base.xml.in.h:211 -msgid "English (Colemak)" -msgstr "Inggris (Colemak)" +msgid "English (Workman, international with dead keys)" +msgstr "Inggris (Workman,internasional dengan tombol mati)" -#: ../rules/base.xml.in.h:212 -msgid "English (Dvorak alternative international no dead keys)" -msgstr "Inggris (Dvorak alternatif Internasional tanpa tombol mati)" +#. 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 "Inggris (Dvorak internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:214 -msgid "English (Dvorak)" -msgstr "Inggris (Dvorak)" +msgid "Afghani" +msgstr "Afganistan" +#. Keyboard indicator for Pashto layouts #: ../rules/base.xml.in.h:215 -msgid "English (Ghana)" -msgstr "Inggris (Ghana)" +msgid "ps" +msgstr "ps" #: ../rules/base.xml.in.h:216 -msgid "English (Ghana, GILLBT)" -msgstr "Inggris (Ghana, GILLBT)" - -#: ../rules/base.xml.in.h:217 -msgid "English (Ghana, multilingual)" -msgstr "Inggris (Ghana, multibahasa)" +msgid "Pashto" +msgstr "Pashto" +#. Keyboard indicator for Uzbek layouts #: ../rules/base.xml.in.h:218 -msgid "English (India, with RupeeSign)" -msgstr "English (India, dengan RupeeSign)" +msgid "uz" +msgstr "uz" #: ../rules/base.xml.in.h:219 -msgid "English (Macintosh)" -msgstr "Inggris (Macintosh)" +msgid "Uzbek (Afghanistan)" +msgstr "Uzbek (Afghanistan)" #: ../rules/base.xml.in.h:220 -msgid "English (Mali, US Macintosh)" -msgstr "Inggris (Mali, Macintosh AS)" +msgid "Pashto (Afghanistan, OLPC)" +msgstr "Pashto (Afghanistan, OLPC)" #: ../rules/base.xml.in.h:221 -msgid "English (Mali, US international)" -msgstr "Inggris (Mali, Internasional AS)" +msgid "Persian (Afghanistan, Dari OLPC)" +msgstr "Persia (Afghanistan, Dari OLPC)" #: ../rules/base.xml.in.h:222 -msgid "English (Nigeria)" -msgstr "Inggris (Nigeria)" - -#: ../rules/base.xml.in.h:223 -msgid "English (South Africa)" -msgstr "Inggris (Afrika Selatan)" +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "Uzbek (Afghanistan, OLPC)" -#: ../rules/base.xml.in.h:224 -msgid "English (UK)" -msgstr "Inggris (Britania)" +#. Keyboard indicator for Arabic layouts +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 +msgid "ar" +msgstr "ar" -#: ../rules/base.xml.in.h:225 -msgid "English (UK, Colemak)" -msgstr "Inggris (UK, Colemak)" +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 +msgid "Arabic" +msgstr "Arab" #: ../rules/base.xml.in.h:226 -msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Inggris (Britania, Dvorak dengan pungtuasi Britania)" +msgid "Arabic (azerty)" +msgstr "Arab (azerty)" #: ../rules/base.xml.in.h:227 -msgid "English (UK, Dvorak)" -msgstr "Inggris (Britania, Dvorak)" +msgid "Arabic (azerty/digits)" +msgstr "Arab (azerty/digit)" #: ../rules/base.xml.in.h:228 -msgid "English (UK, Macintosh international)" -msgstr "Inggris (Britania, Macintosh internasional)" +msgid "Arabic (digits)" +msgstr "Arab (digits)" #: ../rules/base.xml.in.h:229 -msgid "English (UK, Macintosh)" -msgstr "Inggris (Britania, Macintosh)" +msgid "Arabic (qwerty)" +msgstr "Arab (qwerty)" #: ../rules/base.xml.in.h:230 -msgid "English (UK, extended WinKeys)" -msgstr "Inggris (Britania, Winkeys diperluas)" +msgid "Arabic (qwerty/digits)" +msgstr "Arab (qwerty/digit)" #: ../rules/base.xml.in.h:231 -msgid "English (UK, international with dead keys)" -msgstr "Inggris (Britania, internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:232 ../rules/base.extras.xml.in.h:8 -msgid "English (US)" -msgstr "Inggris (AS)" +msgid "Arabic (Buckwalter)" +msgstr "Arab (Buckwalter)" +#. Keyboard indicator for Albanian layouts #: ../rules/base.xml.in.h:233 -msgid "English (US, alternative international)" -msgstr "Inggris (AS, internasional alternatif)" +msgid "sq" +msgstr "sq" #: ../rules/base.xml.in.h:234 -msgid "English (US, international with dead keys)" -msgstr "Inggris (AS, internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:235 -msgid "English (US, with euro on 5)" -msgstr "Inggris (AS, dengan euro pada 5)" +msgid "Albanian" +msgstr "Albania" -#: ../rules/base.xml.in.h:236 -msgid "English (classic Dvorak)" -msgstr "Inggris (Dvorak klasik)" +#. Keyboard indicator for Armenian layouts +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 +msgid "hy" +msgstr "hy" -#: ../rules/base.xml.in.h:237 -msgid "English (international AltGr dead keys)" -msgstr "Inggris (internasional AltGr tombol mati)" +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 +msgid "Armenian" +msgstr "Armenia" #: ../rules/base.xml.in.h:238 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Inggris (ubah tata letak pada tombol perkalian/pembagian)" +msgid "Armenian (phonetic)" +msgstr "Armenia (fonetik)" #: ../rules/base.xml.in.h:239 -msgid "English (left handed Dvorak)" -msgstr "Inggris (Dvorak kidal)" +msgid "Armenian (alternative phonetic)" +msgstr "Armenia (fonetik alternatif)" #: ../rules/base.xml.in.h:240 -msgid "English (programmer Dvorak)" -msgstr "Inggris (Dvorak pemrogram)" +msgid "Armenian (eastern)" +msgstr "Armenia (timur)" #: ../rules/base.xml.in.h:241 -msgid "English (right handed Dvorak)" -msgstr "Inggris (Dvorak tangan kanan)" +msgid "Armenian (western)" +msgstr "Armenia (barat)" #: ../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 pada keypad" +msgid "Armenian (alternative eastern)" +msgstr "Armenia (timur alternatif)" -#: ../rules/base.xml.in.h:244 -msgid "Esperanto" -msgstr "Esperanto" +#. 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 "Esperanto (Portugal, Nativo)" +msgid "German (Austria)" +msgstr "Jerman (Austria)" #: ../rules/base.xml.in.h:246 -msgid "Esperanto (displaced semicolon and quote, obsolete)" -msgstr "Esperanto (titik koma dan tanda kutip tergeser, kuno)" +msgid "German (Austria, eliminate dead keys)" +msgstr "Jerman (Austria, hapus tombol mati)" #: ../rules/base.xml.in.h:247 -msgid "Estonian" -msgstr "Estonia" +msgid "German (Austria, Sun dead keys)" +msgstr "Jerman (Austria, tombol mati Sun)" #: ../rules/base.xml.in.h:248 -msgid "Estonian (Dvorak)" -msgstr "Estonia (Dvorak)" - -#: ../rules/base.xml.in.h:249 -msgid "Estonian (US keyboard with Estonian letters)" -msgstr "Estonia (papan tik AS dengan huruf Estonia)" +msgid "German (Austria, Macintosh)" +msgstr "Jerman (Austria, Macintosh)" +#. Keyboard indicator for Azerbaijani layouts #: ../rules/base.xml.in.h:250 -msgid "Estonian (eliminate dead keys)" -msgstr "Estonia (hapus tombol mati)" +msgid "az" +msgstr "az" #: ../rules/base.xml.in.h:251 -msgid "Euro on 2" -msgstr "Euro pada 2" +msgid "Azerbaijani" +msgstr "Ajarbaijan" #: ../rules/base.xml.in.h:252 -msgid "Euro on 4" -msgstr "Euro pada 4" - -#: ../rules/base.xml.in.h:253 -msgid "Euro on 5" -msgstr "Euro pada 5" +msgid "Azerbaijani (Cyrillic)" +msgstr "Azerbaijan (Sirilik)" +#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:254 -msgid "Euro on E" -msgstr "Euro pada E" +msgid "by" +msgstr "by" #: ../rules/base.xml.in.h:255 -msgid "Everex STEPnote" -msgstr "Everex STEPnote" +msgid "Belarusian" +msgstr "Belarusia" #: ../rules/base.xml.in.h:256 -msgid "Ewe" -msgstr "Ewe" +msgid "Belarusian (legacy)" +msgstr "Belarusia (legacy)" #: ../rules/base.xml.in.h:257 -msgid "FL90" -msgstr "FL90" - -#: ../rules/base.xml.in.h:258 -msgid "Faroese" -msgstr "Faro" +msgid "Belarusian (Latin)" +msgstr "Belarusia (Latin)" -#: ../rules/base.xml.in.h:259 -msgid "Faroese (eliminate dead keys)" -msgstr "Faro (hapus tombol mati)" +#. Keyboard indicator for Belgian layouts +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 +msgid "be" +msgstr "be" -#: ../rules/base.xml.in.h:260 -msgid "Filipino" -msgstr "Filipina" +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 +msgid "Belgian" +msgstr "Belgia" #: ../rules/base.xml.in.h:261 -msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Filipina (Capewell-Dvorak Baybayin)" +msgid "Belgian (alternative)" +msgstr "Belgia (alternatif)" #: ../rules/base.xml.in.h:262 -msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Filipina (Capewell-Dvorak Latin)" +msgid "Belgian (alternative, Latin-9 only)" +msgstr "Belgia (alternative, hanya Latin-9)" #: ../rules/base.xml.in.h:263 -msgid "Filipino (Capewell-QWERF 2006 Baybayin)" -msgstr "Filipina (Capewell-QWERF 2006 Baybayin)" +msgid "Belgian (alternative, Sun dead keys)" +msgstr "Belgia (alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:264 -msgid "Filipino (Capewell-QWERF 2006 Latin)" -msgstr "Filipina (Capewell-QWERF 2006 Latin)" +msgid "Belgian (ISO alternate)" +msgstr "Belgia (alternatif ISO)" #: ../rules/base.xml.in.h:265 -msgid "Filipino (Colemak Baybayin)" -msgstr "Filipina (Colemak Baybayin)" +msgid "Belgian (eliminate dead keys)" +msgstr "Belgia (hapus tombol mati)" #: ../rules/base.xml.in.h:266 -msgid "Filipino (Colemak Latin)" -msgstr "Filipina (Colemak Latin)" +msgid "Belgian (Sun dead keys)" +msgstr "Belgia (tombol mati Sun)" #: ../rules/base.xml.in.h:267 -msgid "Filipino (Dvorak Baybayin)" -msgstr "Filipina (Dvorak Baybayin)" - -#: ../rules/base.xml.in.h:268 -msgid "Filipino (Dvorak Latin)" -msgstr "Filipina (Dvorak Latin)" +msgid "Belgian (Wang model 724 azerty)" +msgstr "Belgia (Wang model 724 azerty)" +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 -msgid "Filipino (QWERTY Baybayin)" -msgstr "Filipina (QWERTY Baybayin)" +msgid "bn" +msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Finnish" -msgstr "Finlandia" +msgid "Bangla" +msgstr "Bangla" #: ../rules/base.xml.in.h:271 -msgid "Finnish (Macintosh)" -msgstr "Finlandia (Macintosh)" - -#: ../rules/base.xml.in.h:272 -msgid "Finnish (classic)" -msgstr "Finlandia (klasik)" +msgid "Bangla (Probhat)" +msgstr "Bangla (Probhat)" +#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 -msgid "Finnish (classic, eliminate dead keys)" -msgstr "Finlandia (klasik, hapus tombol mati)" +msgid "in" +msgstr "in" + +#: ../rules/base.xml.in.h:274 +msgid "Indian" +msgstr "India" + +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" +msgstr "Bangla (India)" -#. 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" -msgstr "Tombol empat-level dengan pemisah abstrak" +msgid "Bangla (India, Probhat)" +msgstr "Bangla (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Four-level key with comma" -msgstr "Tombol empat-level dengan koma" +msgid "Bangla (India, Baishakhi)" +msgstr "Bangla (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Four-level key with dot" -msgstr "Tombol empat-level dengan titik" +msgid "Bangla (India, Bornona)" +msgstr "Bangla (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Four-level key with dot, latin-9 restriction" -msgstr "Tombol empat-level dengan titik, pembatasan latin-9" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bangla (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Four-level key with momayyez" -msgstr "Tombol empat level dengan momayyez" - -#: ../rules/base.xml.in.h:281 -msgid "French" -msgstr "Perancis" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bangla (India, Baishakhi Inscript)" +#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 -msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Perancis (Bepo, ergonomis, Dvorak way)" +msgid "gu" +msgstr "gu" #: ../rules/base.xml.in.h:283 -msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)" -msgstr "Perancis (Bepo, ergonomis, Dvorak way, hanya latin-9)" - -#: ../rules/base.xml.in.h:284 -msgid "French (Breton)" -msgstr "Perancis (Breton)" +msgid "Gujarati" +msgstr "Gujurati" +#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:285 -msgid "French (Cameroon)" -msgstr "Perancis (Kamerun)" +msgid "pa" +msgstr "pa" -#: ../rules/base.xml.in.h:286 ../rules/base.extras.xml.in.h:11 -msgid "French (Canada)" -msgstr "Perancis (Kanada)" +#: ../rules/base.xml.in.h:286 +msgid "Punjabi (Gurmukhi)" +msgstr "Punjab (Gurmukhi)" #: ../rules/base.xml.in.h:287 -msgid "French (Canada, Dvorak)" -msgstr "Perancis (Kanada, Dvorak)" - -#: ../rules/base.xml.in.h:288 -msgid "French (Canada, legacy)" -msgstr "Perancis (Kanada, legacy)" +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "Punjab (Gurmukhi Jhelum)" +#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:289 -msgid "French (Democratic Republic of the Congo)" -msgstr "Perancis (Republik Demokratik Kongo)" +msgid "kn" +msgstr "kn" #: ../rules/base.xml.in.h:290 -msgid "French (Dvorak)" -msgstr "Perancis (Dvorak)" +msgid "Kannada" +msgstr "Kannada" #: ../rules/base.xml.in.h:291 -msgid "French (Guinea)" -msgstr "Perancis (Guinea)" - -#: ../rules/base.xml.in.h:292 -msgid "French (Macintosh)" -msgstr "French (Macintosh)" +msgid "Kannada (KaGaPa phonetic)" +msgstr "Kannada (fonetik KaGaPa)" +#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 -msgid "French (Mali, alternative)" -msgstr "Perancis (Mali, alternatif)" +msgid "ml" +msgstr "ml" #: ../rules/base.xml.in.h:294 -msgid "French (Morocco)" -msgstr "Perancis (Maroko)" +msgid "Malayalam" +msgstr "Malayalam" #: ../rules/base.xml.in.h:295 -msgid "French (Sun dead keys)" -msgstr "Perancis (tombol mati Sun)" +msgid "Malayalam (Lalitha)" +msgstr "Malayalam (Lalitha)" #: ../rules/base.xml.in.h:296 -msgid "French (Switzerland)" -msgstr "Perancis (Swiss)" - -#: ../rules/base.xml.in.h:297 -msgid "French (Switzerland, Macintosh)" -msgstr "Perancis (Swiss, Macintosh)" +msgid "Malayalam (enhanced Inscript with Rupee Sign)" +msgstr "Malayalam (Inscript ditingkatkan dengan Tanda Rupee)" +#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:298 -msgid "French (Switzerland, Sun dead keys)" -msgstr "Perancis (Swiss, tombol mati Sun)" +msgid "or" +msgstr "or" #: ../rules/base.xml.in.h:299 -msgid "French (Switzerland, eliminate dead keys)" -msgstr "Perancis (Swiss, hapus tombol mati)" - -#: ../rules/base.xml.in.h:300 -msgid "French (alternative)" -msgstr "Perancis (alternatif)" +msgid "Oriya" +msgstr "Oriya" +#. Keyboard indicator for Tamil layouts #: ../rules/base.xml.in.h:301 -msgid "French (alternative, Sun dead keys)" -msgstr "Perancis (alternatif, tombol mati Sun)" +msgid "ta" +msgstr "ta" #: ../rules/base.xml.in.h:302 -msgid "French (alternative, eliminate dead keys)" -msgstr "Perancis (alternatif, hapus tombol mati)" +msgid "Tamil (Unicode)" +msgstr "Tamil (Unicode)" #: ../rules/base.xml.in.h:303 -msgid "French (alternative, latin-9 only)" -msgstr "Perancis (alternatif, hanya latin-9)" +msgid "Tamil (keyboard with numerals)" +msgstr "Tamil (papan tik dengan angka)" #: ../rules/base.xml.in.h:304 -msgid "French (eliminate dead keys)" -msgstr "Perancis (hapus tombol mati)" +msgid "Tamil (TAB typewriter)" +msgstr "Tamil (mesin tik TAB)" #: ../rules/base.xml.in.h:305 -msgid "French (legacy, alternative)" -msgstr "Perancis (legacy, alternatif)" +msgid "Tamil (TSCII typewriter)" +msgstr "Tamil (mestin tik TSCII)" #: ../rules/base.xml.in.h:306 -msgid "French (legacy, alternative, Sun dead keys)" -msgstr "Perancis (legacy, alternatif, tombol mati Sun)" - -#: ../rules/base.xml.in.h:307 -msgid "French (legacy, alternative, eliminate dead keys)" -msgstr "Perancis (legacy, alternatif, hapus tombol mati)" +msgid "Tamil" +msgstr "Tamil" +#. Keyboard indicator for Telugu layouts #: ../rules/base.xml.in.h:308 -msgid "Fujitsu-Siemens Computers AMILO laptop" -msgstr "Fujitsu-Siemens Computers AMILO laptop" +msgid "te" +msgstr "te" #: ../rules/base.xml.in.h:309 -msgid "Fula" -msgstr "Fula" +msgid "Telugu" +msgstr "Telugu" #: ../rules/base.xml.in.h:310 -msgid "Ga" -msgstr "Ga" - -#: ../rules/base.xml.in.h:311 -msgid "Generic 101-key PC" -msgstr "PC 101-tombol Generik " +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (fonetik KaGaPa)" +#. Keyboard indicator for Urdu layouts #: ../rules/base.xml.in.h:312 -msgid "Generic 102-key (Intl) PC" -msgstr "PC 102-tombol (Intl) Generic" +msgid "ur" +msgstr "ur" #: ../rules/base.xml.in.h:313 -msgid "Generic 104-key PC" -msgstr "PC 104-tombol Generik " +msgid "Urdu (phonetic)" +msgstr "Urdu (fonetik)" #: ../rules/base.xml.in.h:314 -msgid "Generic 105-key (Intl) PC" -msgstr "PC 105-tombol (Intl) Generic" +msgid "Urdu (alternative phonetic)" +msgstr "Urdu (fonetik alternatif)" #: ../rules/base.xml.in.h:315 -msgid "Genius Comfy KB-12e" -msgstr "Genius Comfy KB-12e" - -#: ../rules/base.xml.in.h:316 -msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" -msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" +msgid "Urdu (WinKeys)" +msgstr "Urdu (WinKeys)" +#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:317 -msgid "Genius Comfy KB-21e-Scroll" -msgstr "Genius Comfy KB-21e-Scroll" +msgid "hi" +msgstr "hi" #: ../rules/base.xml.in.h:318 -msgid "Genius KB-19e NB" -msgstr "Genius KB-19e NB" +msgid "Hindi (Bolnagri)" +msgstr "Hindi (Bolnagri)" #: ../rules/base.xml.in.h:319 -msgid "Genius KKB-2050HS" -msgstr "Genius KKB-2050HS" +msgid "Hindi (Wx)" +msgstr "Hindi (Wx)" #: ../rules/base.xml.in.h:320 -msgid "Georgian" -msgstr "Georgia" - -#: ../rules/base.xml.in.h:321 -msgid "Georgian (France, AZERTY Tskapo)" -msgstr "Georgia (Perancis, AZERTY Tskapo)" +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (fonetik KaGaPa)" +#. Keyboard indicator for Sanskrit layouts #: ../rules/base.xml.in.h:322 -msgid "Georgian (Italy)" -msgstr "Georgia (Italia)" +msgid "sa" +msgstr "sa" #: ../rules/base.xml.in.h:323 -msgid "Georgian (MESS)" -msgstr "Georgia (MESS)" - -#: ../rules/base.xml.in.h:324 -msgid "Georgian (ergonomic)" -msgstr "Georgia (ergonomik)" +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sanskerta (fonetik KaGaPa)" -#: ../rules/base.xml.in.h:325 ../rules/base.extras.xml.in.h:12 -msgid "German" -msgstr "Jerman" +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" #: ../rules/base.xml.in.h:326 -msgid "German (Austria)" -msgstr "Jerman (Austria)" +msgid "Marathi (KaGaPa phonetic)" +msgstr "Marathi (fonetik KaGaPa)" #: ../rules/base.xml.in.h:327 -msgid "German (Austria, Macintosh)" -msgstr "Jerman (Austria, Macintosh)" - -#: ../rules/base.xml.in.h:328 -msgid "German (Austria, Sun dead keys)" -msgstr "Jerman (Austria, tombol mati Sun)" +msgid "English (India, with RupeeSign)" +msgstr "English (India, dengan RupeeSign)" +#. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 -msgid "German (Austria, eliminate dead keys)" -msgstr "Jerman (Austria, hapus tombol mati)" +msgid "bs" +msgstr "bs" #: ../rules/base.xml.in.h:330 -msgid "German (Dvorak)" -msgstr "Jerman (Dvorak)" +msgid "Bosnian" +msgstr "Bosnia" #: ../rules/base.xml.in.h:331 -msgid "German (Macintosh)" -msgstr "German (Macintosh)" +msgid "Bosnian (use guillemets for quotes)" +msgstr "Bosnia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:332 -msgid "German (Macintosh, eliminate dead keys)" -msgstr "Jerman (Macintosh, hapus tombol mati)" +msgid "Bosnian (use Bosnian digraphs)" +msgstr "Bosnia (gunakan diagraph Bosnia)" #: ../rules/base.xml.in.h:333 -msgid "German (Neo 2)" -msgstr "Jerman (Neo 2)" +msgid "Bosnian (US keyboard with Bosnian digraphs)" +msgstr "Bosnia (papan tik AS dengan digraf Bosnia)" #: ../rules/base.xml.in.h:334 -msgid "German (Sun dead keys)" -msgstr "Jerman (tombol mati Sun)" - -#: ../rules/base.xml.in.h:335 -msgid "German (Switzerland)" -msgstr "Jerman (Swiss)" +msgid "Bosnian (US keyboard with Bosnian letters)" +msgstr "Bosnia (papan tik AS dengan huruf Bosnia)" -#: ../rules/base.xml.in.h:336 -msgid "German (Switzerland, Macintosh)" -msgstr "Jerman (Swiss, Macintosh)" +#. Keyboard indicator for Portuguese layouts +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 +msgid "pt" +msgstr "pt" -#: ../rules/base.xml.in.h:337 -msgid "German (Switzerland, Sun dead keys)" -msgstr "Jerman (Swiss, tombol mati Sun)" +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 +msgid "Portuguese (Brazil)" +msgstr "Portugis (Brasil)" #: ../rules/base.xml.in.h:338 -msgid "German (Switzerland, eliminate dead keys)" -msgstr "Jerman (Swiss, hapus tombol mati)" +msgid "Portuguese (Brazil, eliminate dead keys)" +msgstr "Portugis (Brasil, hapus tombo mati)" #: ../rules/base.xml.in.h:339 -msgid "German (Switzerland, legacy)" -msgstr "Jerman (Swiss, legacy)" +msgid "Portuguese (Brazil, Dvorak)" +msgstr "Portugis (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "German (dead acute)" -msgstr "Jerman (acute mati)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugis (Brasil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "German (dead grave acute)" -msgstr "Jerman (grave acute mati)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugis (Brasil, Nativo untuk papan ketik AS)" #: ../rules/base.xml.in.h:342 -msgid "German (eliminate dead keys)" -msgstr "Jerman (hapus tombol mati)" - -#: ../rules/base.xml.in.h:343 -msgid "Greek" -msgstr "Yunani" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazil, Nativo)" +#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 -msgid "Greek (eliminate dead keys)" -msgstr "Yunani (hapus tombol mati)" +msgid "bg" +msgstr "bg" #: ../rules/base.xml.in.h:345 -msgid "Greek (extended)" -msgstr "Yunani (diperluas)" +msgid "Bulgarian" +msgstr "Bulgaria" #: ../rules/base.xml.in.h:346 -msgid "Greek (polytonic)" -msgstr "Yunani (politonik)" +msgid "Bulgarian (traditional phonetic)" +msgstr "Bulgaria (fonetik tradisional)" #: ../rules/base.xml.in.h:347 -msgid "Greek (simple)" -msgstr "Yunani (sederhana)" +msgid "Bulgarian (new phonetic)" +msgstr "Bulgaria (fonetik baru)" #: ../rules/base.xml.in.h:348 -msgid "Gujarati" -msgstr "Gujurati" - -#: ../rules/base.xml.in.h:349 -msgid "Gyration" -msgstr "Gyration" +msgid "Arabic (Morocco)" +msgstr "Arab (Maroko)" -#: ../rules/base.xml.in.h:350 -msgid "HTC Dream" -msgstr "HTC Dream" +#. Keyboard indicator for French layouts +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 +msgid "fr" +msgstr "fr" #: ../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 untuk Mac" +msgid "French (Morocco)" +msgstr "Perancis (Maroko)" +#. Keyboard indicator for Berber layouts #: ../rules/base.xml.in.h:353 -msgid "Hausa" -msgstr "Hausa" +msgid "ber" +msgstr "ber" #: ../rules/base.xml.in.h:354 -msgid "Hebrew" -msgstr "Ibrani" +msgid "Berber (Morocco, Tifinagh)" +msgstr "Berber (Morocco, Tifinagh)" #: ../rules/base.xml.in.h:355 -msgid "Hebrew (Biblical, Tiro)" -msgstr "Ibrani (Biblical, Tiro)" +msgid "Berber (Morocco, Tifinagh alternative)" +msgstr "Berber (Maroko, alternatif Tifinagh)" #: ../rules/base.xml.in.h:356 -msgid "Hebrew (lyx)" -msgstr "Ibrani (lyx)" +msgid "Berber (Morocco, Tifinagh alternative phonetic)" +msgstr "Berber (Maroko, fonetik alternatif Tifinagh)" #: ../rules/base.xml.in.h:357 -msgid "Hebrew (phonetic)" -msgstr "Ibrani (fonetik)" +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "Berber (Maroko, Tifinagh diperluas)" #: ../rules/base.xml.in.h:358 -msgid "Hewlett-Packard Internet Keyboard" -msgstr "Papan Ketik Internet Hewlett-Packard" +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "Berber (Maroko, fonetik Tifinagh)" #: ../rules/base.xml.in.h:359 -msgid "Hewlett-Packard Mini 110 Notebook" -msgstr "Hewlett-Packard Mini 110 Notebook" - -#: ../rules/base.xml.in.h:360 -msgid "Hewlett-Packard Omnibook 500 FA" -msgstr "Hewlett-Packard Omnibook 500 FA" +msgid "Berber (Morocco, Tifinagh extended phonetic)" +msgstr "Berber (Maroko, fonetik Tifinagh diperluas)" +#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:361 -msgid "Hewlett-Packard Omnibook 5xx" -msgstr "Hewlett-Packard Omnibook 5xx" +msgid "cm" +msgstr "cm" #: ../rules/base.xml.in.h:362 -msgid "Hewlett-Packard Omnibook 6000/6100" -msgstr "Hewlett-Packard Omnibook 6000/6100" +msgid "English (Cameroon)" +msgstr "Inggris (Kamerun)" #: ../rules/base.xml.in.h:363 -msgid "Hewlett-Packard Omnibook XE3 GC" -msgstr "Hewlett-Packard Omnibook XE3 GC" +msgid "French (Cameroon)" +msgstr "Perancis (Kamerun)" #: ../rules/base.xml.in.h:364 -msgid "Hewlett-Packard Omnibook XE3 GF" -msgstr "Hewlett-Packard Omnibook XE3 GF" +msgid "Cameroon Multilingual (qwerty)" +msgstr "Kamerun Multibahasa (qwerty)" #: ../rules/base.xml.in.h:365 -msgid "Hewlett-Packard Omnibook XT1000" -msgstr "Hewlett-Packard Omnibook XT1000" +msgid "Cameroon Multilingual (azerty)" +msgstr "Kamerun Multibahasa (azerty)" #: ../rules/base.xml.in.h:366 -msgid "Hewlett-Packard Pavilion ZT11xx" -msgstr "Hewlett-Packard Pavilion ZT11xx" - -#: ../rules/base.xml.in.h:367 -msgid "Hewlett-Packard Pavilion dv5" -msgstr "Hewlett-Packard Pavilion dv5" +msgid "Cameroon Multilingual (Dvorak)" +msgstr "Kamerun Multibahasa (Dvorak)" +#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 -msgid "Hewlett-Packard SK-250x Multimedia Keyboard" -msgstr "Papan Ketik Multimedia Hewlett-Packard SK-2501" +msgid "my" +msgstr "my" #: ../rules/base.xml.in.h:369 -msgid "Hewlett-Packard nx9020" -msgstr "Hewlett-Packard nx9020" +msgid "Burmese" +msgstr "Burma" -#: ../rules/base.xml.in.h:370 -msgid "Hexadecimal" -msgstr "Heksadesimal" +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 +msgid "French (Canada)" +msgstr "Perancis (Kanada)" #: ../rules/base.xml.in.h:371 -msgid "Hindi (Bolnagri)" -msgstr "Hindi (Bolnagri)" +msgid "French (Canada, Dvorak)" +msgstr "Perancis (Kanada, Dvorak)" #: ../rules/base.xml.in.h:372 -msgid "Hindi (Wx)" -msgstr "Hindi (Wx)" +msgid "French (Canada, legacy)" +msgstr "Perancis (Kanada, legacy)" #: ../rules/base.xml.in.h:373 -msgid "Honeywell Euroboard" -msgstr "Honeywell Euroboard" +msgid "Canadian Multilingual" +msgstr "Kanada Multibahasa" #: ../rules/base.xml.in.h:374 -msgid "Htc Dream phone" -msgstr "Telepon Htc Dream" +msgid "Canadian Multilingual (first part)" +msgstr "Kanada Multibahasa (bagian pertama)" #: ../rules/base.xml.in.h:375 -msgid "Hungarian" -msgstr "Hungaria" - -#: ../rules/base.xml.in.h:376 -msgid "Hungarian (101/qwerty/comma/dead keys)" -msgstr "Hungaria (101/qwerty/koma/tombol mati)" +msgid "Canadian Multilingual (second part)" +msgstr "Kanada Multibahasa (bagian kedua)" +#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:377 -msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" -msgstr "Hungaria (101/qwerty/koma/hapus tombol mati)" +msgid "ike" +msgstr "ike" #: ../rules/base.xml.in.h:378 -msgid "Hungarian (101/qwerty/dot/dead keys)" -msgstr "Hungaria (101/qwerty/titik/tombol mati)" +msgid "Inuktitut" +msgstr "Inuktitut" #: ../rules/base.xml.in.h:379 -msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" -msgstr "Hungaria (101/qwerty/titik/hapus tombol mati)" +msgid "English (Canada)" +msgstr "Inggris (Kanada)" #: ../rules/base.xml.in.h:380 -msgid "Hungarian (101/qwertz/comma/dead keys)" -msgstr "Hungaria (101/qwertz/koma/tombol mati)" - -#: ../rules/base.xml.in.h:381 -msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" -msgstr "Hungaria (101/qwertz/koma/hapus tombol mati)" +msgid "French (Democratic Republic of the Congo)" +msgstr "Perancis (Republik Demokratik Kongo)" +#. Keyboard indicator for Taiwanese layouts #: ../rules/base.xml.in.h:382 -msgid "Hungarian (101/qwertz/dot/dead keys)" -msgstr "Hungaria (101/awertz/titik/tombol mati)" +msgid "zh" +msgstr "zh" #: ../rules/base.xml.in.h:383 -msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" -msgstr "Hungaria (101/qwertz/titik/hapus tombol mati)" +msgid "Chinese" +msgstr "Cina" #: ../rules/base.xml.in.h:384 -msgid "Hungarian (102/qwerty/comma/dead keys)" -msgstr "Hungaria (102/qwerty/koma/tombol mati)" +msgid "Tibetan" +msgstr "Tibetan" #: ../rules/base.xml.in.h:385 -msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" -msgstr "Hungaria (102/qwerty/koma/hapus tombol mati)" +msgid "Tibetan (with ASCII numerals)" +msgstr "Tibetan (with ASCII numerals)" #: ../rules/base.xml.in.h:386 -msgid "Hungarian (102/qwerty/dot/dead keys)" -msgstr "Hungaria (102/qwerty/titik/tombol mati)" +msgid "ug" +msgstr "ug" #: ../rules/base.xml.in.h:387 -msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" -msgstr "Hungaria (102/qwerty/titik/hapus tombol mati)" - -#: ../rules/base.xml.in.h:388 -msgid "Hungarian (102/qwertz/comma/dead keys)" -msgstr "Hungaria (102/qwertz/koma/tombol mati)" +msgid "Uyghur" +msgstr "Uyghur" +#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:389 -msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" -msgstr "Hungaria (102/qwertz/koma/hapus tombol mati)" +msgid "hr" +msgstr "hr" #: ../rules/base.xml.in.h:390 -msgid "Hungarian (102/qwertz/dot/dead keys)" -msgstr "Hungaria (102/qwertz/titik/tombol mati)" +msgid "Croatian" +msgstr "Kroasia" #: ../rules/base.xml.in.h:391 -msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" -msgstr "Hungaria (102/qwertz/titik/hapus tombol mati)" +msgid "Croatian (use guillemets for quotes)" +msgstr "Kroasia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:392 -msgid "Hungarian (eliminate dead keys)" -msgstr "Hungaria (hapus tombol mati)" +msgid "Croatian (use Croatian digraphs)" +msgstr "Kroasis (gunakan diagraph Kroasia)" #: ../rules/base.xml.in.h:393 -msgid "Hungarian (qwerty)" -msgstr "Hungaria (qwerty)" +msgid "Croatian (US keyboard with Croatian digraphs)" +msgstr "Kroasia (papan tik AS dengan digraf Kroasia)" #: ../rules/base.xml.in.h:394 -msgid "Hungarian (standard)" -msgstr "Hungaria (standar)" - -#: ../rules/base.xml.in.h:395 -msgid "Hyper is mapped to Win-keys" -msgstr "Hiper dipetakan ke tombol Win" +msgid "Croatian (US keyboard with Croatian letters)" +msgstr "Kroasia (papan tik AS dengan huruf Kroasia)" -#: ../rules/base.xml.in.h:396 -msgid "IBM Rapid Access" -msgstr "IBM Rapid Access" +#. Keyboard indicator for Chech layouts +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +msgid "cs" +msgstr "cs" -#: ../rules/base.xml.in.h:397 -msgid "IBM Rapid Access II" -msgstr "IBM Rapid Access II" +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 +msgid "Czech" +msgstr "Ceko" #: ../rules/base.xml.in.h:398 -msgid "IBM Space Saver" -msgstr "IBM Space Saver" +msgid "Czech (with <\\|> key)" +msgstr "Ceko (dengan tombol <\\|>)" #: ../rules/base.xml.in.h:399 -msgid "IBM ThinkPad 560Z/600/600E/A22E" -msgstr "IBM ThinkPad 560Z/600/600E/A22E" +msgid "Czech (qwerty)" +msgstr "Ceko (qwerty)" #: ../rules/base.xml.in.h:400 -msgid "IBM ThinkPad R60/T60/R61/T61" -msgstr "IBM ThinkPad R60/T60/R61/T61" +msgid "Czech (qwerty, extended Backslash)" +msgstr "Ceko (qwerty, Backslash diperpanjang)" #: ../rules/base.xml.in.h:401 -msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" -msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgid "Czech (UCW layout, accented letters only)" +msgstr "Ceko (tata letak UCW, hanya huruf beraksen)" #: ../rules/base.xml.in.h:402 -msgid "Icelandic" -msgstr "Islandia" - -#: ../rules/base.xml.in.h:403 -msgid "Icelandic (Dvorak)" -msgstr "Islandia (Dvorak)" +msgid "Czech (US Dvorak with CZ UCW support)" +msgstr "Ceko (Dvorak AS dengan dukungan CZ UCW)" -#: ../rules/base.xml.in.h:404 -msgid "Icelandic (Macintosh)" -msgstr "Islandia (Macintosh)" +#. Keyboard indicator for Danish layouts +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +msgid "da" +msgstr "da" -#: ../rules/base.xml.in.h:405 -msgid "Icelandic (Sun dead keys)" -msgstr "Islandia (tombol mati Sun)" +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 +msgid "Danish" +msgstr "Denmark" #: ../rules/base.xml.in.h:406 -msgid "Icelandic (eliminate dead keys)" -msgstr "Islandia (hapus tombol mati)" +msgid "Danish (eliminate dead keys)" +msgstr "Denmark (hapus tombol mati" #: ../rules/base.xml.in.h:407 -msgid "Igbo" -msgstr "Igbo" +msgid "Danish (Macintosh)" +msgstr "Denmark (Macintosh)" #: ../rules/base.xml.in.h:408 -msgid "Indian" -msgstr "India" +msgid "Danish (Macintosh, eliminate dead keys)" +msgstr "Denmark (Macintosh, hapus tombol mati" #: ../rules/base.xml.in.h:409 -msgid "Inuktitut" -msgstr "Inuktitut" - -#: ../rules/base.xml.in.h:410 -msgid "Iraqi" -msgstr "Irak" +msgid "Danish (Dvorak)" +msgstr "Denmark (Dvorak)" -#: ../rules/base.xml.in.h:411 -msgid "Irish" -msgstr "Irlandia" +#. Keyboard indicator for Dutch layouts +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +msgid "nl" +msgstr "nl" -#: ../rules/base.xml.in.h:412 -msgid "Irish (UnicodeExpert)" -msgstr "Irlandia (UnicodeExpert)" +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 +msgid "Dutch" +msgstr "Belanda" #: ../rules/base.xml.in.h:413 -msgid "Italian" -msgstr "Italia" +msgid "Dutch (Sun dead keys)" +msgstr "Belanda (tombol mati Sun)" #: ../rules/base.xml.in.h:414 -msgid "Italian (Macintosh)" -msgstr "Italia (Macintosh)" +msgid "Dutch (Macintosh)" +msgstr "Belanda (Macintosh)" #: ../rules/base.xml.in.h:415 -msgid "Italian (US keyboard with Italian letters)" -msgstr "Italia (papan tik AS dengan huruf Italia)" - -#: ../rules/base.xml.in.h:416 -msgid "Italian (eliminate dead keys)" -msgstr "Italia (hapus tombol mati)" +msgid "Dutch (standard)" +msgstr "Belanda (standar)" +#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:417 -msgid "Japanese" -msgstr "Jepang" +msgid "dz" +msgstr "dz" #: ../rules/base.xml.in.h:418 -msgid "Japanese (Kana 86)" -msgstr "Jepang (Kana 86)" - -#: ../rules/base.xml.in.h:419 -msgid "Japanese (Kana)" -msgstr "Jepang (Kana)" +msgid "Dzongkha" +msgstr "Dzongkha" -#: ../rules/base.xml.in.h:420 -msgid "Japanese (Macintosh)" -msgstr "Jepang (Macintosh)" +#. Keyboard indicator for Estonian layouts +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +msgid "et" +msgstr "et" -#: ../rules/base.xml.in.h:421 -msgid "Japanese (OADG 109A)" -msgstr "Jepang (OADG 109A)" +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 +msgid "Estonian" +msgstr "Estonia" #: ../rules/base.xml.in.h:422 -msgid "Japanese (PC-98xx Series)" -msgstr "Jepang (Seri PC-98xx)" +msgid "Estonian (eliminate dead keys)" +msgstr "Estonia (hapus tombol mati)" #: ../rules/base.xml.in.h:423 -msgid "Japanese keyboard options" -msgstr "Pilihan papan ketik Jepang" +msgid "Estonian (Dvorak)" +msgstr "Estonia (Dvorak)" #: ../rules/base.xml.in.h:424 -msgid "Kalmyk" -msgstr "Kalmyk" +msgid "Estonian (US keyboard with Estonian letters)" +msgstr "Estonia (papan tik AS dengan huruf Estonia)" -#: ../rules/base.xml.in.h:425 -msgid "Kana Lock key is locking" -msgstr "Tombol Kana Lock terkunci" +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 +msgid "Persian" +msgstr "Persia" #: ../rules/base.xml.in.h:426 -msgid "Kannada" -msgstr "Kannada" - -#: ../rules/base.xml.in.h:427 -msgid "Kashubian" -msgstr "Kashubian" +msgid "Persian (with Persian Keypad)" +msgstr "Persia (dengan papan tik Persia)" +#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:428 -msgid "Kazakh" -msgstr "Kazakh" +msgid "ku" +msgstr "ku" #: ../rules/base.xml.in.h:429 -msgid "Kazakh (with Russian)" -msgstr "Kazakh (dengan Rusia)" +msgid "Kurdish (Iran, Latin Q)" +msgstr "Kurdi (Iran, Latin Q)" #: ../rules/base.xml.in.h:430 -msgid "Key sequence to kill the X server" -msgstr "Sekuensi kunci untuk mematikan server X" +msgid "Kurdish (Iran, F)" +msgstr "Kurdi (Iran, F)" #: ../rules/base.xml.in.h:431 -msgid "Key to choose 3rd level" -msgstr "Tekan Menu Kiri untuk memilih level 3" +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "Kurdi (Iran, Latin Alt-Q)" #: ../rules/base.xml.in.h:432 -msgid "Key to choose 5th level" -msgstr "Tombol untuk memilih level kelima" +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "Kurdi (Iran, Arab-Latin)" #: ../rules/base.xml.in.h:433 -msgid "Key(s) to change layout" -msgstr "Tombol untuk mengubah tata letak" +msgid "Iraqi" +msgstr "Irak" #: ../rules/base.xml.in.h:434 -msgid "Keytronic FlexPro" -msgstr "Keytronic FlexPro" +msgid "Kurdish (Iraq, Latin Q)" +msgstr "Kurdi (Irak, Latin Q)" #: ../rules/base.xml.in.h:435 -msgid "Khmer (Cambodia)" -msgstr "Khmer (Kamboja)" +msgid "Kurdish (Iraq, F)" +msgstr "Kurdi (Irak, F)" #: ../rules/base.xml.in.h:436 -msgid "Kikuyu" -msgstr "Kikuyu" +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "Kurdi (Irak, Latin Alt-Q)" #: ../rules/base.xml.in.h:437 -msgid "Kinesis" -msgstr "Kinesis" - -#: ../rules/base.xml.in.h:438 -msgid "Komi" -msgstr "Komi" +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "Kurdi (Irak, Arab-Latin)" +#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:439 -msgid "Korean" -msgstr "Korea" +msgid "fo" +msgstr "fo" #: ../rules/base.xml.in.h:440 -msgid "Korean (101/104 key compatible)" -msgstr "Korea (kompatibel dengan 101/104 tombol)" +msgid "Faroese" +msgstr "Faro" #: ../rules/base.xml.in.h:441 -msgid "Kurdish (Iran, Arabic-Latin)" -msgstr "Kurdi (Iran, Arab-Latin)" - -#: ../rules/base.xml.in.h:442 -msgid "Kurdish (Iran, F)" -msgstr "Kurdi (Iran, F)" +msgid "Faroese (eliminate dead keys)" +msgstr "Faro (hapus tombol mati)" -#: ../rules/base.xml.in.h:443 -msgid "Kurdish (Iran, Latin Alt-Q)" -msgstr "Kurdi (Iran, Latin Alt-Q)" +#. Keyboard indicator for Finnish layouts +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +msgid "fi" +msgstr "fi" -#: ../rules/base.xml.in.h:444 -msgid "Kurdish (Iran, Latin Q)" -msgstr "Kurdi (Iran, Latin Q)" +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 +msgid "Finnish" +msgstr "Finlandia" #: ../rules/base.xml.in.h:445 -msgid "Kurdish (Iraq, Arabic-Latin)" -msgstr "Kurdi (Irak, Arab-Latin)" +msgid "Finnish (classic)" +msgstr "Finlandia (klasik)" #: ../rules/base.xml.in.h:446 -msgid "Kurdish (Iraq, F)" -msgstr "Kurdi (Irak, F)" +msgid "Finnish (classic, eliminate dead keys)" +msgstr "Finlandia (klasik, hapus tombol mati)" #: ../rules/base.xml.in.h:447 -msgid "Kurdish (Iraq, Latin Alt-Q)" -msgstr "Kurdi (Irak, Latin Alt-Q)" +msgid "Northern Saami (Finland)" +msgstr "Saami Utara (Finlandia)" #: ../rules/base.xml.in.h:448 -msgid "Kurdish (Iraq, Latin Q)" -msgstr "Kurdi (Irak, Latin Q)" +msgid "Finnish (Macintosh)" +msgstr "Finlandia (Macintosh)" -#: ../rules/base.xml.in.h:449 -msgid "Kurdish (Syria, F)" -msgstr "Kurdi (Suriah, F)" +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 +msgid "French" +msgstr "Perancis" #: ../rules/base.xml.in.h:450 -msgid "Kurdish (Syria, Latin Alt-Q)" -msgstr "Kurdi (Suriah, Latin Alt-Q)" +msgid "French (eliminate dead keys)" +msgstr "Perancis (hapus tombol mati)" #: ../rules/base.xml.in.h:451 -msgid "Kurdish (Syria, Latin Q)" -msgstr "Kurdi (Suriah, Latin Q" +msgid "French (Sun dead keys)" +msgstr "Perancis (tombol mati Sun)" #: ../rules/base.xml.in.h:452 -msgid "Kurdish (Turkey, F)" -msgstr "Kurdi (Turki, F)" +msgid "French (alternative)" +msgstr "Perancis (alternatif)" #: ../rules/base.xml.in.h:453 -msgid "Kurdish (Turkey, Latin Alt-Q)" -msgstr "Kurdi (Turki, Latin Alt-Q)" +msgid "French (alternative, Latin-9 only)" +msgstr "Perancis (alternatif, hanya Latin-9)" #: ../rules/base.xml.in.h:454 -msgid "Kurdish (Turkey, Latin Q)" -msgstr "Kurdi (Turki, Latin Q)" +msgid "French (alternative, eliminate dead keys)" +msgstr "Perancis (alternatif, hapus tombol mati)" #: ../rules/base.xml.in.h:455 -msgid "Kyrgyz" -msgstr "Kyrgyzstan" +msgid "French (alternative, Sun dead keys)" +msgstr "Perancis (alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:456 -msgid "Kyrgyz (phonetic)" -msgstr "Kyrgystan (fonetik)" +msgid "French (legacy, alternative)" +msgstr "Perancis (legacy, alternatif)" #: ../rules/base.xml.in.h:457 -msgid "Lao" -msgstr "Lao" +msgid "French (legacy, alternative, eliminate dead keys)" +msgstr "Perancis (legacy, alternatif, hapus tombol mati)" #: ../rules/base.xml.in.h:458 -msgid "Lao (STEA proposed standard layout)" -msgstr "Laos (tata letak standar yang diusulkan STEA)" +msgid "French (legacy, alternative, Sun dead keys)" +msgstr "Perancis (legacy, alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:459 -msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way)" +msgstr "Perancis (Bepo, ergonomis, Dvorak way)" #: ../rules/base.xml.in.h:460 -msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" -msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" +msgstr "Perancis (Bepo, ergonomis, Dvorak way, hanya Latin-9)" #: ../rules/base.xml.in.h:461 -msgid "Laptop/notebook eMachines m68xx" -msgstr "Laptop/notebook eMachines m68xx" +msgid "French (Dvorak)" +msgstr "Perancis (Dvorak)" -#: ../rules/base.xml.in.h:462 ../rules/base.extras.xml.in.h:16 -msgid "Latvian" -msgstr "Latvia" +#: ../rules/base.xml.in.h:462 +msgid "French (Macintosh)" +msgstr "French (Macintosh)" #: ../rules/base.xml.in.h:463 -msgid "Latvian (F variant)" -msgstr "Latvia (varian F)" +msgid "French (Breton)" +msgstr "Perancis (Breton)" #: ../rules/base.xml.in.h:464 -msgid "Latvian (adapted)" -msgstr "Latvia (diadaptasi)" +msgid "Occitan" +msgstr "Occitan" #: ../rules/base.xml.in.h:465 -msgid "Latvian (apostrophe variant)" -msgstr "Latvia (varian apostrof)" +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "Georgia (Perancis, AZERTY Tskapo)" #: ../rules/base.xml.in.h:466 -msgid "Latvian (ergonomic, ŪGJRMV)" -msgstr "Latvia (ergonomis, ŪGJRMV)" +msgid "English (Ghana)" +msgstr "Inggris (Ghana)" #: ../rules/base.xml.in.h:467 -msgid "Latvian (modern)" -msgstr "Latvia (modern)" - -#: ../rules/base.xml.in.h:468 -msgid "Latvian (tilde variant)" -msgstr "Latvia (varian tilde)" +msgid "English (Ghana, multilingual)" +msgstr "Inggris (Ghana, multibahasa)" +#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:469 -msgid "Left Alt" -msgstr "Alt Kiri" +msgid "ak" +msgstr "ak" #: ../rules/base.xml.in.h:470 -msgid "Left Alt (while pressed)" -msgstr "Alt Kiri (ketika ditekan)" - -#: ../rules/base.xml.in.h:471 -msgid "Left Alt is swapped with Left Win" -msgstr "Alt Kiri ditukar dengan Win Kiri" +msgid "Akan" +msgstr "Akan" +#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:472 -msgid "Left Alt+Left Shift" -msgstr "Alt Kiri+Shift Kiri" +msgid "ee" +msgstr "ee" #: ../rules/base.xml.in.h:473 -msgid "Left Ctrl" -msgstr "Ctrl Kiri" - -#: ../rules/base.xml.in.h:474 -msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" -msgstr "Ctrl Kiri (ke tata letak pertama), Ctrl Kanan (ke tata letak terakhir)" +msgid "Ewe" +msgstr "Ewe" +#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:475 -msgid "Left Ctrl as Meta" -msgstr "Ctrl Kiri sebagai Meta" +msgid "ff" +msgstr "ff" #: ../rules/base.xml.in.h:476 -msgid "Left Ctrl+Left Shift" -msgstr "Ctrl Kiri+Shift Kiri" - -#: ../rules/base.xml.in.h:477 -msgid "Left Shift" -msgstr "Shift Kiri" +msgid "Fula" +msgstr "Fula" +#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:478 -msgid "Left Win" -msgstr "Win Kiri" +msgid "gaa" +msgstr "gaa" #: ../rules/base.xml.in.h:479 -msgid "Left Win (to first layout), Right Win/Menu (to last layout)" -msgstr "Win Kiri (ke tata letak pertama), Win/Menu Kanan (ke tata letak terakhir)" - -#: ../rules/base.xml.in.h:480 -msgid "Left Win (while pressed)" -msgstr "Win Kiri (ketika ditekan)" +msgid "Ga" +msgstr "Ga" +#. Keyboard indicator for Hausa layouts #: ../rules/base.xml.in.h:481 -msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win kiri memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "ha" +msgstr "ha" #: ../rules/base.xml.in.h:482 -msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" -msgstr "Ctrl Kiri+Win Kiri (ke tata letak pertama), Ctrl Kanan+Menu (ke tata letak kedua)" - -#: ../rules/base.xml.in.h:483 -msgid "Legacy" -msgstr "Legacy" +msgid "Hausa" +msgstr "Hausa" +#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:484 -msgid "Legacy Wang 724" -msgstr "Legacy Wang 724" +msgid "avn" +msgstr "avn" + +#: ../rules/base.xml.in.h:485 +msgid "Avatime" +msgstr "Avatime" -#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:486 -msgid "Legacy key with comma" -msgstr "Tombol Legacy dengan koma" +msgid "English (Ghana, GILLBT)" +msgstr "Inggris (Ghana, GILLBT)" #: ../rules/base.xml.in.h:487 -msgid "Legacy key with dot" -msgstr "Tombol Legacy dengan titik" - -#: ../rules/base.xml.in.h:488 ../rules/base.extras.xml.in.h:25 -msgid "Lithuanian" -msgstr "Lituania" +msgid "French (Guinea)" +msgstr "Perancis (Guinea)" +#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:489 -msgid "Lithuanian (IBM LST 1205-92)" -msgstr "Lituania (IBM LST 1205-92)" +msgid "ka" +msgstr "ka" #: ../rules/base.xml.in.h:490 -msgid "Lithuanian (LEKP)" -msgstr "Lituania (LEKP)" +msgid "Georgian" +msgstr "Georgia" #: ../rules/base.xml.in.h:491 -msgid "Lithuanian (LEKPa)" -msgstr "Lituania (LEKPa)" +msgid "Georgian (ergonomic)" +msgstr "Georgia (ergonomik)" #: ../rules/base.xml.in.h:492 -msgid "Lithuanian (US keyboard with Lithuanian letters)" -msgstr "Lituania (papan tik AS dengan huruf Lituania)" +msgid "Georgian (MESS)" +msgstr "Georgia (MESS)" #: ../rules/base.xml.in.h:493 -msgid "Lithuanian (standard)" -msgstr "Lituania (standar)" +msgid "Russian (Georgia)" +msgstr "Rusia (Georgia)" #: ../rules/base.xml.in.h:494 -msgid "Logitech Access Keyboard" -msgstr "Logitech Access Keyboard" +msgid "Ossetian (Georgia)" +msgstr "Ossetia (Georgia)" -#: ../rules/base.xml.in.h:495 -msgid "Logitech Cordless Desktop" -msgstr "Logitech Cordless Desktop" +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 +msgid "German" +msgstr "Jerman" #: ../rules/base.xml.in.h:496 -msgid "Logitech Cordless Desktop (alternate option)" -msgstr "Logitech Cordless Desktop (pilihan alternatif)" +msgid "German (dead acute)" +msgstr "Jerman (acute mati)" #: ../rules/base.xml.in.h:497 -msgid "Logitech Cordless Desktop EX110" -msgstr "Logitech Cordless Desktop EX110" +msgid "German (dead grave acute)" +msgstr "Jerman (grave acute mati)" #: ../rules/base.xml.in.h:498 -msgid "Logitech Cordless Desktop LX-300" -msgstr "Logitech Cordless Desktop LX-300" +msgid "German (eliminate dead keys)" +msgstr "Jerman (hapus tombol mati)" #: ../rules/base.xml.in.h:499 -msgid "Logitech Cordless Desktop Navigator" -msgstr "Logitech Cordless Desktop Navigator" +msgid "German (T3)" +msgstr "Jerman (T3)" #: ../rules/base.xml.in.h:500 -msgid "Logitech Cordless Desktop Optical" -msgstr "Logitech Cordless Desktop Optical" +msgid "Romanian (Germany)" +msgstr "Rumania (Jerman)" #: ../rules/base.xml.in.h:501 -msgid "Logitech Cordless Desktop Pro (alternate option 2)" -msgstr "Logitech Cordless Desktop Pro (opsi alternatif 2)" +msgid "Romanian (Germany, eliminate dead keys)" +msgstr "Rumania (Jerman, hapus tombol mati)" #: ../rules/base.xml.in.h:502 -msgid "Logitech Cordless Desktop iTouch" -msgstr "Logitech Cordless Desktop iTouch" +msgid "German (Dvorak)" +msgstr "Jerman (Dvorak)" #: ../rules/base.xml.in.h:503 -msgid "Logitech Cordless Freedom/Desktop Navigator" -msgstr "Logitech Cordless Freedom/Desktop Navigator" +msgid "German (Sun dead keys)" +msgstr "Jerman (tombol mati Sun)" #: ../rules/base.xml.in.h:504 -msgid "Logitech G15 extra keys via G15daemon" -msgstr "Logitech G15 extra keys via G15daemon" +msgid "German (Neo 2)" +msgstr "Jerman (Neo 2)" #: ../rules/base.xml.in.h:505 -msgid "Logitech Generic Keyboard" -msgstr "Papan Ketik Generik Logitech" +msgid "German (Macintosh)" +msgstr "German (Macintosh)" #: ../rules/base.xml.in.h:506 -msgid "Logitech Internet 350 Keyboard" -msgstr "Papan Ketik Logitech Internet 350" +msgid "German (Macintosh, eliminate dead keys)" +msgstr "Jerman (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:507 -msgid "Logitech Internet Keyboard" -msgstr "Papan Ketik Internet Logitech" +msgid "Lower Sorbian" +msgstr "Lower Sorbian" #: ../rules/base.xml.in.h:508 -msgid "Logitech Internet Navigator Keyboard" -msgstr "Papan Ketik Navigator Internet Logitech" +msgid "Lower Sorbian (qwertz)" +msgstr "Lower Sorbian (qwertz)" #: ../rules/base.xml.in.h:509 -msgid "Logitech Media Elite Keyboard" -msgstr "Papan Ketik Logitech Media Elite" +msgid "German (qwerty)" +msgstr "Jerman (qwerty)" #: ../rules/base.xml.in.h:510 -msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" -msgstr "Papan Ketik Logitech Ultra-X Cordless Media Desktop" +msgid "Russian (Germany, phonetic)" +msgstr "Rusia (Jerman, fonetik)" #: ../rules/base.xml.in.h:511 -msgid "Logitech Ultra-X Keyboard" -msgstr "Papan Ketik Logitech Ultra-X" - -#: ../rules/base.xml.in.h:512 -msgid "Logitech diNovo Edge Keyboard" -msgstr "Papan Ketik Logitech diNovo Edge" +msgid "German (legacy)" +msgstr "Jerman (legacy)" -#: ../rules/base.xml.in.h:513 -msgid "Logitech diNovo Keyboard" -msgstr "Papan Ketik Logitech diNovo" +#. Keyboard indicator for Greek layouts +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +msgid "gr" +msgstr "gr" -#: ../rules/base.xml.in.h:514 -msgid "Logitech iTouch" -msgstr "Logitech iTouch" +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 +msgid "Greek" +msgstr "Yunani" #: ../rules/base.xml.in.h:515 -msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" -msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgid "Greek (simple)" +msgstr "Yunani (sederhana)" #: ../rules/base.xml.in.h:516 -msgid "Logitech iTouch Internet Navigator Keyboard SE" -msgstr "Logitech iTouch Internet Navigator Keyboard SE" +msgid "Greek (extended)" +msgstr "Yunani (diperluas)" #: ../rules/base.xml.in.h:517 -msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" -msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgid "Greek (eliminate dead keys)" +msgstr "Yunani (hapus tombol mati)" #: ../rules/base.xml.in.h:518 -msgid "Lower Sorbian" -msgstr "Lower Sorbian" - -#: ../rules/base.xml.in.h:519 -msgid "Lower Sorbian (qwertz)" -msgstr "Lower Sorbian (qwertz)" +msgid "Greek (polytonic)" +msgstr "Yunani (politonik)" +#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:520 -msgid "MacBook/MacBook Pro" -msgstr "MacBook/MacBook Pro" +msgid "hu" +msgstr "hu" #: ../rules/base.xml.in.h:521 -msgid "MacBook/MacBook Pro (Intl)" -msgstr "MacBook/MacBook Pro (Intl)" +msgid "Hungarian" +msgstr "Hungaria" #: ../rules/base.xml.in.h:522 -msgid "Macedonian" -msgstr "Masedonia" +msgid "Hungarian (standard)" +msgstr "Hungaria (standar)" #: ../rules/base.xml.in.h:523 -msgid "Macedonian (eliminate dead keys)" -msgstr "Makedonia (hapus tombol mati)" +msgid "Hungarian (eliminate dead keys)" +msgstr "Hungaria (hapus tombol mati)" #: ../rules/base.xml.in.h:524 -msgid "Macintosh" -msgstr "Macintosh" +msgid "Hungarian (qwerty)" +msgstr "Hungaria (qwerty)" #: ../rules/base.xml.in.h:525 -msgid "Macintosh Old" -msgstr "Macintosh Old" +msgid "Hungarian (101/qwertz/comma/dead keys)" +msgstr "Hungaria (101/qwertz/koma/tombol mati)" #: ../rules/base.xml.in.h:526 -msgid "Make Caps Lock an additional Backspace" -msgstr "Buat Caps Lock sebagai tambahan Backspace" +msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" +msgstr "Hungaria (101/qwertz/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:527 -msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym" -msgstr "Buat Caps Lock sebagai tambahan Control tapi pertahankan keysym Caps_Lock" +msgid "Hungarian (101/qwertz/dot/dead keys)" +msgstr "Hungaria (101/awertz/titik/tombol mati)" #: ../rules/base.xml.in.h:528 -msgid "Make Caps Lock an additional ESC" -msgstr "Buat Caps Lock sebagai tambahan ESC" +msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" +msgstr "Hungaria (101/qwertz/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:529 -msgid "Make Caps Lock an additional Hyper" -msgstr "Buat Caps Lock sebagai tambahan Hiper" +msgid "Hungarian (101/qwerty/comma/dead keys)" +msgstr "Hungaria (101/qwerty/koma/tombol mati)" #: ../rules/base.xml.in.h:530 -msgid "Make Caps Lock an additional Num Lock" -msgstr "Buat Caps Lock sebagai tambahan Num Lock" +msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" +msgstr "Hungaria (101/qwerty/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:531 -msgid "Make Caps Lock an additional Super" -msgstr "Buat Caps Lock sebagai tambahan Super" +msgid "Hungarian (101/qwerty/dot/dead keys)" +msgstr "Hungaria (101/qwerty/titik/tombol mati)" #: ../rules/base.xml.in.h:532 -msgid "Make Zenkaku Hankaku an additional ESC" -msgstr "Buat Zenkaku Hankaku sebagai tambahan ESC" +msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" +msgstr "Hungaria (101/qwerty/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:533 -msgid "Malayalam" -msgstr "Malayalam" +msgid "Hungarian (102/qwertz/comma/dead keys)" +msgstr "Hungaria (102/qwertz/koma/tombol mati)" #: ../rules/base.xml.in.h:534 -msgid "Malayalam (Lalitha)" -msgstr "Malayalam (Lalitha)" +msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" +msgstr "Hungaria (102/qwertz/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:535 -msgid "Malayalam (enhanced Inscript with Rupee Sign)" -msgstr "Malayalam (Inscript ditingkatkan dengan Tanda Rupee)" +msgid "Hungarian (102/qwertz/dot/dead keys)" +msgstr "Hungaria (102/qwertz/titik/tombol mati)" #: ../rules/base.xml.in.h:536 -msgid "Maltese" -msgstr "Malta" +msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" +msgstr "Hungaria (102/qwertz/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:537 -msgid "Maltese (with US layout)" -msgstr "Malta (dengan tata letak AS)" +msgid "Hungarian (102/qwerty/comma/dead keys)" +msgstr "Hungaria (102/qwerty/koma/tombol mati)" #: ../rules/base.xml.in.h:538 -msgid "Maori" -msgstr "Maori" +msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" +msgstr "Hungaria (102/qwerty/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:539 -msgid "Mari" -msgstr "Mari" +msgid "Hungarian (102/qwerty/dot/dead keys)" +msgstr "Hungaria (102/qwerty/titik/tombol mati)" #: ../rules/base.xml.in.h:540 -msgid "Memorex MX1998" -msgstr "Memorex MX1998" - -#: ../rules/base.xml.in.h:541 -msgid "Memorex MX2500 EZ-Access Keyboard" -msgstr "Papan Ketik Memorex MX2500 EZ-Access" +msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" +msgstr "Hungaria (102/qwerty/titik/hapus tombol mati)" +#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:542 -msgid "Memorex MX2750" -msgstr "Memorex MX2750" +msgid "is" +msgstr "is" #: ../rules/base.xml.in.h:543 -msgid "Menu" -msgstr "Menu" +msgid "Icelandic" +msgstr "Islandia" #: ../rules/base.xml.in.h:544 -msgid "Menu as Right Ctrl" -msgstr "Menu sebagai Ctrl Kanan" +msgid "Icelandic (Sun dead keys)" +msgstr "Islandia (tombol mati Sun)" #: ../rules/base.xml.in.h:545 -msgid "Meta is mapped to Left Win" -msgstr "Meta dipetakan ke tombol Win Kiri" +msgid "Icelandic (eliminate dead keys)" +msgstr "Islandia (hapus tombol mati)" #: ../rules/base.xml.in.h:546 -msgid "Meta is mapped to Win keys" -msgstr "Meta dipetakan ke tombol Win" +msgid "Icelandic (Macintosh)" +msgstr "Islandia (Macintosh)" #: ../rules/base.xml.in.h:547 -msgid "Microsoft Comfort Curve Keyboard 2000" -msgstr "Microsoft Comfort Curve Keyboard 2000" +msgid "Icelandic (Dvorak)" +msgstr "Islandia (Dvorak)" -#: ../rules/base.xml.in.h:548 -msgid "Microsoft Internet Keyboard" -msgstr "Papan Ketik Internet Microsoft" - -#: ../rules/base.xml.in.h:549 -msgid "Microsoft Internet Keyboard Pro, Swedish" -msgstr "Microsoft Internet Keyboard Pro, Swedia" +#. Keyboard indicator for Hebrew layouts +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +msgid "he" +msgstr "he" -#: ../rules/base.xml.in.h:550 -msgid "Microsoft Natural" -msgstr "Microsoft Natural" +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 +msgid "Hebrew" +msgstr "Ibrani" #: ../rules/base.xml.in.h:551 -msgid "Microsoft Natural Keyboard Elite" -msgstr "Microsoft Natural Keyboard Elite" +msgid "Hebrew (lyx)" +msgstr "Ibrani (lyx)" #: ../rules/base.xml.in.h:552 -msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgid "Hebrew (phonetic)" +msgstr "Ibrani (fonetik)" #: ../rules/base.xml.in.h:553 -msgid "Microsoft Natural Keyboard Pro OEM" -msgstr "Microsoft Natural Keyboard Pro OEM" - -#: ../rules/base.xml.in.h:554 -msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro" +msgid "Hebrew (Biblical, Tiro)" +msgstr "Ibrani (Biblical, Tiro)" -#: ../rules/base.xml.in.h:555 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" -msgstr "Papan Tik Ergonomis Nirkabel Alami Microsoft 4000" +#. Keyboard indicator for Italian layouts +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +msgid "it" +msgstr "it" -#: ../rules/base.xml.in.h:556 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 +msgid "Italian" +msgstr "Italia" #: ../rules/base.xml.in.h:557 -msgid "Microsoft Office Keyboard" -msgstr "Papan Ketik Microsoft Office" +msgid "Italian (eliminate dead keys)" +msgstr "Italia (hapus tombol mati)" #: ../rules/base.xml.in.h:558 -msgid "Microsoft Wireless Multimedia Keyboard 1.0A" -msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" +msgid "Italian (Macintosh)" +msgstr "Italia (Macintosh)" #: ../rules/base.xml.in.h:559 -msgid "Miscellaneous compatibility options" -msgstr "Pilihan kompabilitas lain-lain" +msgid "Italian (US keyboard with Italian letters)" +msgstr "Italia (papan tik AS dengan huruf Italia)" #: ../rules/base.xml.in.h:560 -msgid "Mongolian" -msgstr "Mongolia" +msgid "Georgian (Italy)" +msgstr "Georgia (Italia)" #: ../rules/base.xml.in.h:561 -msgid "Montenegrin" -msgstr "Montenegro" - -#: ../rules/base.xml.in.h:562 -msgid "Montenegrin (Cyrillic with guillemets)" -msgstr "Montenegro (Sirilik dengan guillemets)" +msgid "Italian (IBM 142)" +msgstr "Italia (IBM 142)" -#: ../rules/base.xml.in.h:563 -msgid "Montenegrin (Cyrillic)" -msgstr "Montenegro (Sirilik)" +#. Keyboard indicator for Japanese layouts +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +msgid "ja" +msgstr "ja" -#: ../rules/base.xml.in.h:564 -msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" -msgstr "Montenegro (Sirilik, Z dan ZHE ditukar)" +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 +msgid "Japanese" +msgstr "Jepang" #: ../rules/base.xml.in.h:565 -msgid "Montenegrin (Latin Unicode qwerty)" -msgstr "Montenegro (qwerty Unicode Latin)" +msgid "Japanese (Kana)" +msgstr "Jepang (Kana)" #: ../rules/base.xml.in.h:566 -msgid "Montenegrin (Latin Unicode)" -msgstr "Montenegro (Unicode Latin)" +msgid "Japanese (Kana 86)" +msgstr "Jepang (Kana 86)" #: ../rules/base.xml.in.h:567 -msgid "Montenegrin (Latin qwerty)" -msgstr "Montenegro (qwerty Latin)" +msgid "Japanese (OADG 109A)" +msgstr "Jepang (OADG 109A)" #: ../rules/base.xml.in.h:568 -msgid "Montenegrin (Latin with guillemets)" -msgstr "Montenegro (Latin dengan guillemets)" +msgid "Japanese (Macintosh)" +msgstr "Jepang (Macintosh)" #: ../rules/base.xml.in.h:569 -msgid "NICOLA-F style Backspace" -msgstr "NICOLA-F style Backspace" - -#: ../rules/base.xml.in.h:570 -msgid "Nepali" -msgstr "Nepal" +msgid "Japanese (Dvorak)" +msgstr "Jepang (Dvorak)" +#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:571 -msgid "Non-breakable space character at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 4" +msgid "ki" +msgstr "ki" #: ../rules/base.xml.in.h:572 -msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" -msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6" +msgid "Kyrgyz" +msgstr "Kyrgyzstan" #: ../rules/base.xml.in.h:573 -msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" -msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6 (via Ctrl+Shift)" - -#: ../rules/base.xml.in.h:574 -msgid "Non-breakable space character at second level" -msgstr "Karakter spasi yang tidak pecah pada level 2" +msgid "Kyrgyz (phonetic)" +msgstr "Kyrgystan (fonetik)" +#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:575 -msgid "Non-breakable space character at third level" -msgstr "Karakter spasi yang tidak pecah pada level 3" +msgid "km" +msgstr "km" #: ../rules/base.xml.in.h:576 -msgid "Non-breakable space character at third level, nothing at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 3, tidak ada pada level 4" - -#: ../rules/base.xml.in.h:577 -msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 3, karakter spasi yang tidak pecah dan tipis pada level 4" +msgid "Khmer (Cambodia)" +msgstr "Khmer (Kamboja)" +#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:578 -msgid "Northern Saami (Finland)" -msgstr "Saami Utara (Finlandia)" +msgid "kk" +msgstr "kk" #: ../rules/base.xml.in.h:579 -msgid "Northern Saami (Norway)" -msgstr "Saami Utara (Norwegia)" +msgid "Kazakh" +msgstr "Kazakh" #: ../rules/base.xml.in.h:580 -msgid "Northern Saami (Norway, eliminate dead keys)" -msgstr "Saami Utara (Norwegia, hapus tombo mati)" +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "Rusia (Kazakhstan, dengan Kazakh)" #: ../rules/base.xml.in.h:581 -msgid "Northern Saami (Sweden)" -msgstr "Saami Utara (Swedia)" - -#: ../rules/base.xml.in.h:582 -msgid "Northgate OmniKey 101" -msgstr "Northgate OmniKey 101" +msgid "Kazakh (with Russian)" +msgstr "Kazakh (dengan Rusia)" +#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:583 -msgid "Norwegian" -msgstr "Norwegia" +msgid "lo" +msgstr "lo" #: ../rules/base.xml.in.h:584 -msgid "Norwegian (Dvorak)" -msgstr "Norwegia (Dvorak)" +msgid "Lao" +msgstr "Lao" #: ../rules/base.xml.in.h:585 -msgid "Norwegian (Macintosh)" -msgstr "Norwegia (Macintosh)" - -#: ../rules/base.xml.in.h:586 -msgid "Norwegian (Macintosh, eliminate dead keys)" -msgstr "Norwegia (Macintosh, hapus tombol mati)" +msgid "Lao (STEA proposed standard layout)" +msgstr "Laos (tata letak standar yang diusulkan STEA)" -#: ../rules/base.xml.in.h:587 -msgid "Norwegian (eliminate dead keys)" -msgstr "Norwegia (hapus tombol mati)" +#. Keyboard indicator for Spanish layouts +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 +msgid "es" +msgstr "es" #: ../rules/base.xml.in.h:588 -msgid "Num Lock" -msgstr "Num Lock" +msgid "Spanish (Latin American)" +msgstr "Spanyol (Amerika Latin)" #: ../rules/base.xml.in.h:589 -msgid "Numeric keypad delete key behaviour" -msgstr "Keypad numerik menghapus perilaku tombol" +msgid "Spanish (Latin American, eliminate dead keys)" +msgstr "Spanyol (Amerika Latin, hapus tombol mati)" #: ../rules/base.xml.in.h:590 -msgid "Numeric keypad keys always enter digits (as in Mac OS)" -msgstr "Keypad numerik selalu memasukkan digit (seperti dalam Mac OS)" +msgid "Spanish (Latin American, include dead tilde)" +msgstr "Spanyol (Amerika Latin, termasuk tilde mati)" #: ../rules/base.xml.in.h:591 -msgid "Numeric keypad layout selection" -msgstr "Pilihan layout Keypad numerik " - -#: ../rules/base.xml.in.h:592 -msgid "OLPC" -msgstr "OLPC" +msgid "Spanish (Latin American, Sun dead keys)" +msgstr "Spanyol (Amerika Latin, tombol mati Sun)" -#: ../rules/base.xml.in.h:593 -msgid "Occitan" -msgstr "Occitan" +#. Keyboard indicator for Lithuanian layouts +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 +msgid "lt" +msgstr "lt" -#: ../rules/base.xml.in.h:594 -msgid "Ogham" -msgstr "Ogham" +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 +msgid "Lithuanian" +msgstr "Lituania" #: ../rules/base.xml.in.h:595 -msgid "Ogham (IS434)" -msgstr "Ogham (IS434)" +msgid "Lithuanian (standard)" +msgstr "Lituania (standar)" #: ../rules/base.xml.in.h:596 -msgid "Oriya" -msgstr "Oriya" +msgid "Lithuanian (US keyboard with Lithuanian letters)" +msgstr "Lituania (papan tik AS dengan huruf Lituania)" #: ../rules/base.xml.in.h:597 -msgid "Ortek MCK-800 MM/Internet keyboard" -msgstr "Ortek MCK-800 MM/Internet keyboard" +msgid "Lithuanian (IBM LST 1205-92)" +msgstr "Lituania (IBM LST 1205-92)" #: ../rules/base.xml.in.h:598 -msgid "Ossetian (Georgia)" -msgstr "Ossetia (Georgia)" +msgid "Lithuanian (LEKP)" +msgstr "Lituania (LEKP)" #: ../rules/base.xml.in.h:599 -msgid "Ossetian (WinKeys)" -msgstr "Ossetia (WinKeys)" - -#: ../rules/base.xml.in.h:600 -msgid "Ossetian (legacy)" -msgstr "Ossetia (warisan)" +msgid "Lithuanian (LEKPa)" +msgstr "Lituania (LEKPa)" -#: ../rules/base.xml.in.h:601 -msgid "PC-98xx Series" -msgstr "Seri PC-98xx" +#. Keyboard indicator for Latvian layouts +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 +msgid "lv" +msgstr "lv" -#: ../rules/base.xml.in.h:602 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonian Rusyn (homofon)" +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 +msgid "Latvian" +msgstr "Latvia" #: ../rules/base.xml.in.h:603 -msgid "Pashto" -msgstr "Pashto" +msgid "Latvian (apostrophe variant)" +msgstr "Latvia (varian apostrof)" #: ../rules/base.xml.in.h:604 -msgid "Pashto (Afghanistan, OLPC)" -msgstr "Pashto (Afghanistan, OLPC)" +msgid "Latvian (tilde variant)" +msgstr "Latvia (varian tilde)" #: ../rules/base.xml.in.h:605 -msgid "Pause" -msgstr "Pause" +msgid "Latvian (F variant)" +msgstr "Latvia (varian F)" -#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:27 -msgid "Persian" -msgstr "Persia" +#: ../rules/base.xml.in.h:606 +msgid "Latvian (modern)" +msgstr "Latvia (modern)" #: ../rules/base.xml.in.h:607 -msgid "Persian (Afghanistan, Dari OLPC)" -msgstr "Persia (Afghanistan, Dari OLPC)" +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "Latvia (ergonomis, ŪGJRMV)" #: ../rules/base.xml.in.h:608 -msgid "Persian (with Persian Keypad)" -msgstr "Persia (dengan papan tik Persia)" - -#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:28 -msgid "Polish" -msgstr "Polandia" +msgid "Latvian (adapted)" +msgstr "Latvia (diadaptasi)" +#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:610 -msgid "Polish (Dvorak)" -msgstr "Polandia (Dvorak)" +msgid "mi" +msgstr "mi" #: ../rules/base.xml.in.h:611 -msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol 1)" - -#: ../rules/base.xml.in.h:612 -msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol quotemark)" +msgid "Maori" +msgstr "Maori" -#: ../rules/base.xml.in.h:613 -msgid "Polish (programmer Dvorak)" -msgstr "Polandia (Dvorak pemrogram)" +#. Keyboard indicator for Serbian layouts +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 +msgid "sr" +msgstr "sr" #: ../rules/base.xml.in.h:614 -msgid "Polish (qwertz)" -msgstr "Polandia (qwertz)" +msgid "Montenegrin" +msgstr "Montenegro" #: ../rules/base.xml.in.h:615 -msgid "Portuguese" -msgstr "Portugis" +msgid "Montenegrin (Cyrillic)" +msgstr "Montenegro (Sirilik)" #: ../rules/base.xml.in.h:616 -msgid "Portuguese (Brazil)" -msgstr "Portugis (Brasil)" +msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" +msgstr "Montenegro (Sirilik, Z dan ZHE ditukar)" #: ../rules/base.xml.in.h:617 -msgid "Portuguese (Brazil, Dvorak)" -msgstr "Portugis (Brasil, Dvorak)" +msgid "Montenegrin (Latin Unicode)" +msgstr "Montenegro (Unicode Latin)" #: ../rules/base.xml.in.h:618 -msgid "Portuguese (Brazil, eliminate dead keys)" -msgstr "Portugis (Brasil, hapus tombo mati)" +msgid "Montenegrin (Latin qwerty)" +msgstr "Montenegro (qwerty Latin)" #: ../rules/base.xml.in.h:619 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugis (Brasil, nativo untuk Esperanto)" +msgid "Montenegrin (Latin Unicode qwerty)" +msgstr "Montenegro (qwerty Unicode Latin)" #: ../rules/base.xml.in.h:620 -msgid "Portuguese (Brazil, nativo for USA keyboards)" -msgstr "Portugis (Brasil, nativo untuk papan tik AS)" +msgid "Montenegrin (Cyrillic with guillemets)" +msgstr "Montenegro (Sirilik dengan guillemets)" #: ../rules/base.xml.in.h:621 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugis (Brasil, nativo)" - -#: ../rules/base.xml.in.h:622 -msgid "Portuguese (Macintosh)" -msgstr "Portugis (Macintosh)" +msgid "Montenegrin (Latin with guillemets)" +msgstr "Montenegro (Latin dengan guillemets)" +#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:623 -msgid "Portuguese (Macintosh, Sun dead keys)" -msgstr "Portugis (Macintosh, tombol mati Sun)" +msgid "mk" +msgstr "mk" #: ../rules/base.xml.in.h:624 -msgid "Portuguese (Macintosh, eliminate dead keys)" -msgstr "Portugis (Macintosh, hapus tombol mati)" +msgid "Macedonian" +msgstr "Masedonia" #: ../rules/base.xml.in.h:625 -msgid "Portuguese (Nativo for USA keyboards)" -msgstr "Portugis (Nativo untuk papan tik AS)" - -#: ../rules/base.xml.in.h:626 -msgid "Portuguese (Nativo)" -msgstr "Portugis (Nativo)" +msgid "Macedonian (eliminate dead keys)" +msgstr "Makedonia (hapus tombol mati)" +#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:627 -msgid "Portuguese (Sun dead keys)" -msgstr "Portugis (tombol mati Sun)" +msgid "mt" +msgstr "mt" #: ../rules/base.xml.in.h:628 -msgid "Portuguese (eliminate dead keys)" -msgstr "Portugis (hapus tombol mati)" +msgid "Maltese" +msgstr "Malta" #: ../rules/base.xml.in.h:629 -msgid "Propeller Voyager (KTEZ-1000)" -msgstr "Propeller Voyager (KTEZ-1000)" - -#: ../rules/base.xml.in.h:630 -msgid "PrtSc" -msgstr "PrtSc" +msgid "Maltese (with US layout)" +msgstr "Malta (dengan tata letak AS)" +#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:631 -msgid "Punjabi (Gurmukhi Jhelum)" -msgstr "Punjab (Gurmukhi Jhelum)" +msgid "mn" +msgstr "mn" #: ../rules/base.xml.in.h:632 -msgid "Punjabi (Gurmukhi)" -msgstr "Punjab (Gurmukhi)" - -#: ../rules/base.xml.in.h:633 -msgid "QTronix Scorpius 98N+" -msgstr "QTronix Scorpius 98N+" +msgid "Mongolian" +msgstr "Mongolia" -#: ../rules/base.xml.in.h:634 -msgid "Right Alt" -msgstr "Alt Kanan" +#. Keyboard indicator for Norwegian layouts +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +msgid "no" +msgstr "no" -#: ../rules/base.xml.in.h:635 -msgid "Right Alt (while pressed)" -msgstr "Alt Kanan (ketika ditekan)" +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 +msgid "Norwegian" +msgstr "Norwegia" #: ../rules/base.xml.in.h:636 -msgid "Right Alt as Right Ctrl" -msgstr "Alt Kanan sebagai Ctrl Kanan" +msgid "Norwegian (eliminate dead keys)" +msgstr "Norwegia (hapus tombol mati)" #: ../rules/base.xml.in.h:637 -msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Alt kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "Norwegian (Dvorak)" +msgstr "Norwegia (Dvorak)" #: ../rules/base.xml.in.h:638 -msgid "Right Alt key never chooses 3rd level" -msgstr "Alt Kanan tidak pernah memilih level 3" +msgid "Northern Saami (Norway)" +msgstr "Saami Utara (Norwegia)" #: ../rules/base.xml.in.h:639 -msgid "Right Alt, Shift+Right Alt key is Multi_Key" -msgstr "Alt Kanan, Shift+Right Alt adalah Multi_Key" +msgid "Northern Saami (Norway, eliminate dead keys)" +msgstr "Saami Utara (Norwegia, hapus tombo mati)" #: ../rules/base.xml.in.h:640 -msgid "Right Ctrl" -msgstr "Ctrl Kanan" +msgid "Norwegian (Macintosh)" +msgstr "Norwegia (Macintosh)" #: ../rules/base.xml.in.h:641 -msgid "Right Ctrl (while pressed)" -msgstr "Ctrl Kanan (ketika ditekan)" +msgid "Norwegian (Macintosh, eliminate dead keys)" +msgstr "Norwegia (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:642 -msgid "Right Ctrl as Right Alt" -msgstr "Ctrl Kanan bertindak seperti Alt Kanan" - -#: ../rules/base.xml.in.h:643 -msgid "Right Ctrl+Right Shift" -msgstr "Ctrl Kanan+Shift Kanan" +msgid "Norwegian (Colemak)" +msgstr "Norwegia (Colemak)" -#: ../rules/base.xml.in.h:644 -msgid "Right Shift" -msgstr "Shift Kanan" +#. Keyboard indicator for Polish layouts +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +msgid "pl" +msgstr "pl" -#: ../rules/base.xml.in.h:645 -msgid "Right Win" -msgstr "Win Kanan" +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 +msgid "Polish" +msgstr "Polandia" #: ../rules/base.xml.in.h:646 -msgid "Right Win (while pressed)" -msgstr "Win Kanan (ketika ditekan)" +msgid "Polish (legacy)" +msgstr "Polandia (warisan)" #: ../rules/base.xml.in.h:647 -msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima" +msgid "Polish (qwertz)" +msgstr "Polandia (qwertz)" -#: ../rules/base.xml.in.h:648 ../rules/base.extras.xml.in.h:30 -msgid "Romanian" -msgstr "Rumania" +#: ../rules/base.xml.in.h:648 +msgid "Polish (Dvorak)" +msgstr "Polandia (Dvorak)" #: ../rules/base.xml.in.h:649 -msgid "Romanian (Germany)" -msgstr "Rumania (Jerman)" +msgid "Polish (Dvorak, Polish quotes on quotemark key)" +msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol quotemark)" #: ../rules/base.xml.in.h:650 -msgid "Romanian (Germany, eliminate dead keys)" -msgstr "Rumania (Jerman, hapus tombol mati)" +msgid "Polish (Dvorak, Polish quotes on key 1)" +msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol 1)" #: ../rules/base.xml.in.h:651 -msgid "Romanian (WinKeys)" -msgstr "Rumania (WinKeys)" +msgid "Kashubian" +msgstr "Kashubian" #: ../rules/base.xml.in.h:652 -msgid "Romanian (cedilla)" -msgstr "Rumania (cedilla)" +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "Rusia (Polandia, Dvorak fonetik)" #: ../rules/base.xml.in.h:653 -msgid "Romanian (standard cedilla)" -msgstr "Rumania (standard cedilla)" +msgid "Polish (programmer Dvorak)" +msgstr "Polandia (Dvorak pemrogram)" -#: ../rules/base.xml.in.h:654 -msgid "Romanian (standard)" -msgstr "Rumania (standar)" +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 +msgid "Portuguese" +msgstr "Portugis" #: ../rules/base.xml.in.h:655 -msgid "Rupee on 4" -msgstr "Rupee pada 4" +msgid "Portuguese (eliminate dead keys)" +msgstr "Portugis (hapus tombol mati)" -#: ../rules/base.xml.in.h:656 ../rules/base.extras.xml.in.h:32 -msgid "Russian" -msgstr "Rusia" +#: ../rules/base.xml.in.h:656 +msgid "Portuguese (Sun dead keys)" +msgstr "Portugis (tombol mati Sun)" #: ../rules/base.xml.in.h:657 -msgid "Russian (DOS)" -msgstr "Rusia (DOS)" +msgid "Portuguese (Macintosh)" +msgstr "Portugis (Macintosh)" #: ../rules/base.xml.in.h:658 -msgid "Russian (Georgia)" -msgstr "Rusia (Georgia)" +msgid "Portuguese (Macintosh, eliminate dead keys)" +msgstr "Portugis (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:659 -msgid "Russian (Germany, phonetic)" -msgstr "Rusia (Jerman, fonetik)" +msgid "Portuguese (Macintosh, Sun dead keys)" +msgstr "Portugis (Macintosh, tombol mati Sun)" #: ../rules/base.xml.in.h:660 -msgid "Russian (Kazakhstan, with Kazakh)" -msgstr "Rusia (Kazakhstan, dengan Kazakh)" +msgid "Portuguese (Nativo)" +msgstr "Portugis (Nativo)" #: ../rules/base.xml.in.h:661 -msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Rusia (Polandia, Dvorak fonetik)" +msgid "Portuguese (Nativo for US keyboards)" +msgstr "Portugis (Nativo untuk papan tik AS)" #: ../rules/base.xml.in.h:662 -msgid "Russian (Sweden, phonetic)" -msgstr "Rusia (Swedia, fonetik)" - -#: ../rules/base.xml.in.h:663 -msgid "Russian (Sweden, phonetic, eliminate dead keys)" -msgstr "Rusia (Swedia, fonetik, hapus tombol mati)" +msgid "Esperanto (Portugal, Nativo)" +msgstr "Esperanto (Portugal, Nativo)" -#: ../rules/base.xml.in.h:664 -msgid "Russian (US, phonetic)" -msgstr "Rusia (AS, fonetik)" +#. Keyboard indicator for Romanian layouts +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +msgid "ro" +msgstr "ro" -#: ../rules/base.xml.in.h:665 -msgid "Russian (Ukraine, standard RSTU)" -msgstr "Rusia (Ukraina, standar RSTU)" +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 +msgid "Romanian" +msgstr "Rumania" #: ../rules/base.xml.in.h:666 -msgid "Russian (legacy)" -msgstr "Rusia (legacy)" +msgid "Romanian (cedilla)" +msgstr "Rumania (cedilla)" #: ../rules/base.xml.in.h:667 -msgid "Russian (phonetic WinKeys)" -msgstr "Rusia (WinKeys fonetik)" +msgid "Romanian (standard)" +msgstr "Rumania (standar)" #: ../rules/base.xml.in.h:668 -msgid "Russian (phonetic)" -msgstr "Rusia (fonetik)" +msgid "Romanian (standard cedilla)" +msgstr "Rumania (standard cedilla)" #: ../rules/base.xml.in.h:669 -msgid "Russian (typewriter)" -msgstr "Rusia (mesin tik)" +msgid "Romanian (WinKeys)" +msgstr "Rumania (WinKeys)" -#: ../rules/base.xml.in.h:670 -msgid "Russian (typewriter, legacy)" -msgstr "Rusia (mesin tik, warisan)" +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 +msgid "Russian" +msgstr "Rusia" #: ../rules/base.xml.in.h:671 -msgid "SILVERCREST Multimedia Wireless Keyboard" -msgstr "Papan Ketik SILVERCREST Multimedia Wireless" +msgid "Russian (phonetic)" +msgstr "Rusia (fonetik)" #: ../rules/base.xml.in.h:672 -msgid "SK-1300" -msgstr "SK-1300" +msgid "Russian (phonetic WinKeys)" +msgstr "Rusia (WinKeys fonetik)" #: ../rules/base.xml.in.h:673 -msgid "SK-2500" -msgstr "SK-2500" +msgid "Russian (typewriter)" +msgstr "Rusia (mesin tik)" #: ../rules/base.xml.in.h:674 -msgid "SK-6200" -msgstr "SK-6200" +msgid "Russian (legacy)" +msgstr "Rusia (legacy)" #: ../rules/base.xml.in.h:675 -msgid "SK-7100" -msgstr "SK-7100" +msgid "Russian (typewriter, legacy)" +msgstr "Rusia (mesin tik, warisan)" #: ../rules/base.xml.in.h:676 -msgid "SVEN Ergonomic 2500" -msgstr "SVEN Ergonomic 2500" +msgid "Tatar" +msgstr "Tatar" #: ../rules/base.xml.in.h:677 -msgid "SVEN Slim 303" -msgstr "SVEN Slim 303" +msgid "Ossetian (legacy)" +msgstr "Ossetia (warisan)" #: ../rules/base.xml.in.h:678 -msgid "Saisiyat (Taiwan)" -msgstr "Saisiyat (Taiwan)" +msgid "Ossetian (WinKeys)" +msgstr "Ossetia (WinKeys)" #: ../rules/base.xml.in.h:679 -msgid "Samsung SDM 4500P" -msgstr "Samsung SDM 4500P" +msgid "Chuvash" +msgstr "Chuvash" #: ../rules/base.xml.in.h:680 -msgid "Samsung SDM 4510P" -msgstr "Samsung SDM 4510P" +msgid "Chuvash (Latin)" +msgstr "Chuvash (Latin)" #: ../rules/base.xml.in.h:681 -msgid "Sanwa Supply SKB-KG3" -msgstr "Sanwa Supply SKB-KG3" +msgid "Udmurt" +msgstr "Udmurt" #: ../rules/base.xml.in.h:682 -msgid "Scroll Lock" -msgstr "Scroll Lock" +msgid "Komi" +msgstr "Komi" #: ../rules/base.xml.in.h:683 -msgid "Semi-colon on third level" -msgstr "Semi-kolon pada level ketiga" +msgid "Yakut" +msgstr "Yakut" #: ../rules/base.xml.in.h:684 -msgid "Serbian (Cyrillic with guillemets)" -msgstr "Serbia (Sirilik dengan guillemets)" +msgid "Kalmyk" +msgstr "Kalmyk" #: ../rules/base.xml.in.h:685 -msgid "Serbian (Cyrillic)" -msgstr "Serbia (Sirilik)" +msgid "Russian (DOS)" +msgstr "Rusia (DOS)" #: ../rules/base.xml.in.h:686 -msgid "Serbian (Cyrillic, Z and ZHE swapped)" -msgstr "Serbia (Sirilik, Z dan ZHE ditukar)" +msgid "Russian (Macintosh)" +msgstr "Rusia (Macintosh)" #: ../rules/base.xml.in.h:687 -msgid "Serbian (Latin Unicode qwerty)" -msgstr "Serbia (Latin Unicode qwerty)" +msgid "Serbian (Russia)" +msgstr "Serbia (Rusia)" #: ../rules/base.xml.in.h:688 -msgid "Serbian (Latin Unicode)" -msgstr "Serbia (Latin Unicode)" +msgid "Bashkirian" +msgstr "Bashkirian" #: ../rules/base.xml.in.h:689 -msgid "Serbian (Latin qwerty)" -msgstr "Serbia (Latin qwerty)" +msgid "Mari" +msgstr "Mari" -#: ../rules/base.xml.in.h:690 -msgid "Serbian (Latin with guillemets)" -msgstr "Serbia (Latin dengan guillemets)" +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 +msgid "Serbian" +msgstr "Serbia" #: ../rules/base.xml.in.h:691 -msgid "Serbian (Latin)" -msgstr "Serbia (Latin)" +msgid "Serbian (Cyrillic, Z and ZHE swapped)" +msgstr "Serbia (Sirilik, Z dan ZHE ditukar)" #: ../rules/base.xml.in.h:692 -msgid "Serbian (Russia)" -msgstr "Serbia (Rusia)" +msgid "Serbian (Latin)" +msgstr "Serbia (Latin)" #: ../rules/base.xml.in.h:693 -msgid "Serbo-Croatian (US)" -msgstr "Serbo-Kroasia (AS)" +msgid "Serbian (Latin Unicode)" +msgstr "Serbia (Latin Unicode)" #: ../rules/base.xml.in.h:694 -msgid "Shift cancels Caps Lock" -msgstr "Shift membatalkan Caps Lock" +msgid "Serbian (Latin qwerty)" +msgstr "Serbia (Latin qwerty)" #: ../rules/base.xml.in.h:695 -msgid "Shift does not cancel Num Lock, chooses 3rd level instead" -msgstr "Shift tidak membatalkan Num Lock, lebih memilih level ketiga" +msgid "Serbian (Latin Unicode qwerty)" +msgstr "Serbia (Latin Unicode qwerty)" #: ../rules/base.xml.in.h:696 -msgid "Shift with numeric keypad keys works as in MS Windows" -msgstr "Shit dengan keypad numerik bekerja sesuai pada MS Windows" +msgid "Serbian (Cyrillic with guillemets)" +msgstr "Serbia (Sirilik dengan guillemets)" #: ../rules/base.xml.in.h:697 -msgid "Shift+Caps Lock" -msgstr "Shift+Caps Lock" +msgid "Serbian (Latin with guillemets)" +msgstr "Serbia (Latin dengan guillemets)" #: ../rules/base.xml.in.h:698 -msgid "Sindhi" -msgstr "Sindhi" - -#: ../rules/base.xml.in.h:699 -msgid "Sinhala (phonetic)" -msgstr "Sinhala (fonetik)" +msgid "Pannonian Rusyn" +msgstr "Pannonian Rusyn" +#. Keyboard indicator for Slovenian layouts #: ../rules/base.xml.in.h:700 -msgid "Slovak" -msgstr "Slovakia" +msgid "sl" +msgstr "sl" #: ../rules/base.xml.in.h:701 -msgid "Slovak (extended Backslash)" -msgstr "Slowakia (Backslash diperluas)" +msgid "Slovenian" +msgstr "Slovenia" #: ../rules/base.xml.in.h:702 -msgid "Slovak (qwerty)" -msgstr "Slovakia (qwerty)" +msgid "Slovenian (use guillemets for quotes)" +msgstr "Slovenia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:703 -msgid "Slovak (qwerty, extended Backslash)" -msgstr "Slowakia (qwerty, Backslash diperluas)" - -#: ../rules/base.xml.in.h:704 -msgid "Slovenian" -msgstr "Slovenia" - -#: ../rules/base.xml.in.h:705 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovenia (papan tik AS dengan huruf Slovenia)" -#: ../rules/base.xml.in.h:706 -msgid "Slovenian (use guillemets for quotes)" -msgstr "Slovenia (gunakan guillemets untuk tanda petik)" +#. Keyboard indicator for Slovak layouts +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +msgid "sk" +msgstr "sk" + +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 +msgid "Slovak" +msgstr "Slovakia" #: ../rules/base.xml.in.h:707 -msgid "Spanish" -msgstr "Spanyol" +msgid "Slovak (extended Backslash)" +msgstr "Slowakia (Backslash diperluas)" #: ../rules/base.xml.in.h:708 -msgid "Spanish (Dvorak)" -msgstr "Spanyol (Dvorak)" +msgid "Slovak (qwerty)" +msgstr "Slovakia (qwerty)" #: ../rules/base.xml.in.h:709 -msgid "Spanish (Latin American)" -msgstr "Spanyol (Amerika Latin)" +msgid "Slovak (qwerty, extended Backslash)" +msgstr "Slowakia (qwerty, Backslash diperluas)" -#: ../rules/base.xml.in.h:710 -msgid "Spanish (Latin American, Sun dead keys)" -msgstr "Spanyol (Amerika Latin, tombol mati Sun)" +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 +msgid "Spanish" +msgstr "Spanyol" #: ../rules/base.xml.in.h:711 -msgid "Spanish (Latin American, eliminate dead keys)" -msgstr "Spanyol (Amerika Latin, hapus tombol mati)" +msgid "Spanish (eliminate dead keys)" +msgstr "Spanyol (hapus tombol mati)" #: ../rules/base.xml.in.h:712 -msgid "Spanish (Latin American, include dead tilde)" -msgstr "Spanyol (Amerika Latin, termasuk tilde mati)" +msgid "Spanish (include dead tilde)" +msgstr "Spanyol (termasuk tilde mati)" #: ../rules/base.xml.in.h:713 -msgid "Spanish (Macintosh)" -msgstr "Spanyol (Macintosh)" - -#: ../rules/base.xml.in.h:714 msgid "Spanish (Sun dead keys)" msgstr "Spanyol (tombol mati Sun)" +#: ../rules/base.xml.in.h:714 +msgid "Spanish (Dvorak)" +msgstr "Spanyol (Dvorak)" + #: ../rules/base.xml.in.h:715 -msgid "Spanish (eliminate dead keys)" -msgstr "Spanyol (hapus tombol mati)" +msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" +msgstr "Asturia (Spanyol, dengan titik di bawah pada H dan L)" #: ../rules/base.xml.in.h:716 -msgid "Spanish (include dead tilde)" -msgstr "Spanyol (termasuk tilde mati)" +msgid "Catalan (Spain, with middle-dot L)" +msgstr "Katala (Spanyol, dengan titik-tengah pada L)" #: ../rules/base.xml.in.h:717 -msgid "Special keys (Ctrl+Alt+<key>) handled in a server" -msgstr "Tombol spesial (Ctrl+Alt+<key>) ditangani pada server" - -#: ../rules/base.xml.in.h:718 -msgid "Sun Type 5/6" -msgstr "Sun Type 5/6" +msgid "Spanish (Macintosh)" +msgstr "Spanyol (Macintosh)" -#: ../rules/base.xml.in.h:719 -msgid "Super Power Multimedia Keyboard" -msgstr "Super Power Multimedia Keyboard" +#. Keyboard indicator for Swedish layouts +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +msgid "sv" +msgstr "sv" -#: ../rules/base.xml.in.h:720 -msgid "Swahili (Kenya)" -msgstr "Swahili (Kenya)" +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 +msgid "Swedish" +msgstr "Swedia" #: ../rules/base.xml.in.h:721 -msgid "Swahili (Tanzania)" -msgstr "Swahili (Tanzania)" +msgid "Swedish (eliminate dead keys)" +msgstr "Swedia (hapus tombol mati)" #: ../rules/base.xml.in.h:722 -msgid "Swap Ctrl and Caps Lock" -msgstr "Tukar Ctrl dan Caps Lock" +msgid "Swedish (Dvorak)" +msgstr "Swedia (Dvorak)" #: ../rules/base.xml.in.h:723 -msgid "Swap ESC and Caps Lock" -msgstr "Tukar ESC dan Caps Lock" +msgid "Russian (Sweden, phonetic)" +msgstr "Rusia (Swedia, fonetik)" #: ../rules/base.xml.in.h:724 -msgid "Swedish" -msgstr "Swedia" +msgid "Russian (Sweden, phonetic, eliminate dead keys)" +msgstr "Rusia (Swedia, fonetik, hapus tombol mati)" #: ../rules/base.xml.in.h:725 -msgid "Swedish (Dvorak)" -msgstr "Swedia (Dvorak)" +msgid "Northern Saami (Sweden)" +msgstr "Saami Utara (Swedia)" #: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" @@ -2920,971 +2703,1495 @@ msgid "Swedish (Svdvorak)" msgstr "Swedia (Svdvorak)" #: ../rules/base.xml.in.h:728 -msgid "Swedish (eliminate dead keys)" -msgstr "Swedia (hapus tombol mati)" - -#: ../rules/base.xml.in.h:729 msgid "Swedish Sign Language" msgstr "Bahasa Isyarat Swedia" +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 +msgid "German (Switzerland)" +msgstr "Jerman (Swiss)" + #: ../rules/base.xml.in.h:730 -msgid "Symplon PaceBook (tablet PC)" -msgstr "Symplon PaceBook (tablet PC)" +msgid "German (Switzerland, legacy)" +msgstr "Jerman (Swiss, legacy)" #: ../rules/base.xml.in.h:731 -msgid "Syriac" -msgstr "Syriac" +msgid "German (Switzerland, eliminate dead keys)" +msgstr "Jerman (Swiss, hapus tombol mati)" #: ../rules/base.xml.in.h:732 -msgid "Syriac (phonetic)" -msgstr "Suriah (fonetik)" +msgid "German (Switzerland, Sun dead keys)" +msgstr "Jerman (Swiss, tombol mati Sun)" #: ../rules/base.xml.in.h:733 -msgid "Taiwanese" -msgstr "Taiwan" +msgid "French (Switzerland)" +msgstr "Perancis (Swiss)" #: ../rules/base.xml.in.h:734 -msgid "Taiwanese (indigenous)" -msgstr "Taiwan (asli)" +msgid "French (Switzerland, eliminate dead keys)" +msgstr "Perancis (Swiss, hapus tombol mati)" #: ../rules/base.xml.in.h:735 -msgid "Tajik" -msgstr "Tajikistan" +msgid "French (Switzerland, Sun dead keys)" +msgstr "Perancis (Swiss, tombol mati Sun)" #: ../rules/base.xml.in.h:736 -msgid "Tajik (legacy)" -msgstr "Tajik (warisan)" +msgid "French (Switzerland, Macintosh)" +msgstr "Perancis (Swiss, Macintosh)" #: ../rules/base.xml.in.h:737 -msgid "Tamil" -msgstr "Tamil" +msgid "German (Switzerland, Macintosh)" +msgstr "Jerman (Swiss, Macintosh)" #: ../rules/base.xml.in.h:738 -msgid "Tamil (Sri Lanka, TAB Typewriter)" -msgstr "Tamil (Sri Lanka, Mesin Tik TAB)" - -#: ../rules/base.xml.in.h:739 -msgid "Tamil (Sri Lanka, Unicode)" -msgstr "Tamil (Sri Lanka, Unicode)" +msgid "Arabic (Syria)" +msgstr "Arab (Siria)" +#. Keyboard indicator for Syriac layouts #: ../rules/base.xml.in.h:740 -msgid "Tamil (TAB typewriter)" -msgstr "Tamil (mesin tik TAB)" +msgid "syc" +msgstr "syc" #: ../rules/base.xml.in.h:741 -msgid "Tamil (TSCII typewriter)" -msgstr "Tamil (mestin tik TSCII)" +msgid "Syriac" +msgstr "Syriac" #: ../rules/base.xml.in.h:742 -msgid "Tamil (Unicode)" -msgstr "Tamil (Unicode)" +msgid "Syriac (phonetic)" +msgstr "Suriah (fonetik)" #: ../rules/base.xml.in.h:743 -msgid "Tamil (keyboard with numerals)" -msgstr "Tamil (papan tik dengan angka)" +msgid "Kurdish (Syria, Latin Q)" +msgstr "Kurdi (Suriah, Latin Q" #: ../rules/base.xml.in.h:744 -msgid "Targa Visionary 811" -msgstr "Targa Visionary 811" +msgid "Kurdish (Syria, F)" +msgstr "Kurdi (Suriah, F)" #: ../rules/base.xml.in.h:745 -msgid "Tatar" -msgstr "Tatar" - -#: ../rules/base.xml.in.h:746 -msgid "Telugu" -msgstr "Telugu" +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "Kurdi (Suriah, Latin Alt-Q)" +#. Keyboard indicator for Tajik layouts #: ../rules/base.xml.in.h:747 -msgid "Thai" -msgstr "Thailand" +msgid "tg" +msgstr "tg" #: ../rules/base.xml.in.h:748 -msgid "Thai (Pattachote)" -msgstr "Thailand (Pattachote)" +msgid "Tajik" +msgstr "Tajikistan" #: ../rules/base.xml.in.h:749 -msgid "Thai (TIS-820.2538)" -msgstr "Thailand (TIS-820.2538)" - -#: ../rules/base.xml.in.h:750 -msgid "Tibetan" -msgstr "Tibetan" +msgid "Tajik (legacy)" +msgstr "Tajik (warisan)" +#. Keyboard indicator for Sinhala layouts #: ../rules/base.xml.in.h:751 -msgid "Tibetan (with ASCII numerals)" -msgstr "Tibetan (with ASCII numerals)" +msgid "si" +msgstr "si" #: ../rules/base.xml.in.h:752 -msgid "To the corresponding key in a Dvorak keyboard." -msgstr "Ke tombol dalam papan ketik Dvorak." +msgid "Sinhala (phonetic)" +msgstr "Sinhala (fonetik)" #: ../rules/base.xml.in.h:753 -msgid "To the corresponding key in a Qwerty keyboard." -msgstr "Ke tombol dalam papan ketik Qwerty." +msgid "Tamil (Sri Lanka, Unicode)" +msgstr "Tamil (Sri Lanka, Unicode)" #: ../rules/base.xml.in.h:754 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Jungkitkan PointerKeys dengan Shift + NumLock." - -#: ../rules/base.xml.in.h:755 -msgid "Toshiba Satellite S3000" -msgstr "Toshiba Satellite S3000" +msgid "Tamil (Sri Lanka, TAB Typewriter)" +msgstr "Tamil (Sri Lanka, Mesin Tik TAB)" +#. Keyboard indicator for Thai layouts #: ../rules/base.xml.in.h:756 -msgid "Trust Direct Access Keyboard" -msgstr "Trust Direct Access Keyboard" +msgid "th" +msgstr "th" #: ../rules/base.xml.in.h:757 -msgid "Trust Slimline" -msgstr "Trust Slimline" +msgid "Thai" +msgstr "Thailand" #: ../rules/base.xml.in.h:758 -msgid "Trust Wireless Keyboard Classic" -msgstr "Trust Wireless Keyboard Classic" +msgid "Thai (TIS-820.2538)" +msgstr "Thailand (TIS-820.2538)" #: ../rules/base.xml.in.h:759 -msgid "Tswana" -msgstr "Tswana" +msgid "Thai (Pattachote)" +msgstr "Thailand (Pattachote)" + +#. Keyboard indicator for Turkish layouts +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +msgid "tr" +msgstr "tr" -#: ../rules/base.xml.in.h:760 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turki" -#: ../rules/base.xml.in.h:761 -msgid "Turkish (Alt-Q)" -msgstr "Turki (Alt-Q)" - -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turki (F)" -#: ../rules/base.xml.in.h:763 -msgid "Turkish (Sun dead keys)" -msgstr "Turki (tombol mati Sun)" - #: ../rules/base.xml.in.h:764 -msgid "Turkish (international with dead keys)" -msgstr "Turki (internasional dengan tombol mati)" +msgid "Turkish (Alt-Q)" +msgstr "Turki (Alt-Q)" #: ../rules/base.xml.in.h:765 -msgid "Turkmen" -msgstr "Turkmen" +msgid "Turkish (Sun dead keys)" +msgstr "Turki (tombol mati Sun)" #: ../rules/base.xml.in.h:766 -msgid "Turkmen (Alt-Q)" -msgstr "Turkmen (Alt-Q)" +msgid "Kurdish (Turkey, Latin Q)" +msgstr "Kurdi (Turki, Latin Q)" #: ../rules/base.xml.in.h:767 -msgid "TypeMatrix EZ-Reach 2020" -msgstr "TypeMatrix EZ-Reach 2020" +msgid "Kurdish (Turkey, F)" +msgstr "Kurdi (Turki, F)" #: ../rules/base.xml.in.h:768 -msgid "TypeMatrix EZ-Reach 2030 PS2" -msgstr "TypeMatrix EZ-Reach 2030 PS2" +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "Kurdi (Turki, Latin Alt-Q)" #: ../rules/base.xml.in.h:769 -msgid "TypeMatrix EZ-Reach 2030 USB" -msgstr "TypeMatrix EZ-Reach 2030 USB" - -#: ../rules/base.xml.in.h:770 -msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (mode 102/105:EU)" +msgid "Turkish (international with dead keys)" +msgstr "Turki (internasional dengan tombol mati)" -#: ../rules/base.xml.in.h:771 -msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)" +#. Keyboard indicator for Crimean Tatar layouts +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 +msgid "crh" +msgstr "crh" #: ../rules/base.xml.in.h:772 -msgid "Udmurt" -msgstr "Udmurt" +msgid "Crimean Tatar (Turkish Q)" +msgstr "Crimean Tatar (Turkish Q)" #: ../rules/base.xml.in.h:773 -msgid "Ukrainian" -msgstr "Ukraina" +msgid "Crimean Tatar (Turkish F)" +msgstr "Crimean Tatar (Turkish F)" #: ../rules/base.xml.in.h:774 -msgid "Ukrainian (WinKeys)" -msgstr "Ukraina (WinKeys)" +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "Crimean Tatar (Turkish Alt-Q)" #: ../rules/base.xml.in.h:775 -msgid "Ukrainian (homophonic)" -msgstr "Ukraina (homofonik)" +msgid "Taiwanese" +msgstr "Taiwan" #: ../rules/base.xml.in.h:776 -msgid "Ukrainian (legacy)" -msgstr "Ukraina (legacy)" - -#: ../rules/base.xml.in.h:777 -msgid "Ukrainian (phonetic)" -msgstr "Ukraina (fonetik)" +msgid "Taiwanese (indigenous)" +msgstr "Taiwan (asli)" +#. Keyboard indicator for Saisiyat layouts #: ../rules/base.xml.in.h:778 -msgid "Ukrainian (standard RSTU)" -msgstr "Ukraina (standard RSTU)" +msgid "xsy" +msgstr "xsy" #: ../rules/base.xml.in.h:779 -msgid "Ukrainian (typewriter)" -msgstr "Ukraina (mesin tik)" - -#: ../rules/base.xml.in.h:780 -msgid "Unicode additions (arrows and math operators)" -msgstr "Tambahan unicode (panah dan operator matematika)" +msgid "Saisiyat (Taiwan)" +msgstr "Saisiyat (Taiwan)" -#: ../rules/base.xml.in.h:781 -msgid "Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Tambahan unicode (panah dan operator matematika). Operator matematika pada level standar" +#. Keyboard indicator for Ukranian layouts +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +msgid "uk" +msgstr "uk" -#: ../rules/base.xml.in.h:782 -msgid "Unitek KB-1925" -msgstr "Unitek KB-1925" +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 +msgid "Ukrainian" +msgstr "Ukraina" #: ../rules/base.xml.in.h:783 -msgid "Urdu (Pakistan)" -msgstr "Urdu (Pakistan)" +msgid "Ukrainian (phonetic)" +msgstr "Ukraina (fonetik)" #: ../rules/base.xml.in.h:784 -msgid "Urdu (Pakistan, CRULP)" -msgstr "Urdu (Pakistan, CRULP)" +msgid "Ukrainian (typewriter)" +msgstr "Ukraina (mesin tik)" #: ../rules/base.xml.in.h:785 -msgid "Urdu (Pakistan, NLA)" -msgstr "Urdu (Pakistan, NLA)" +msgid "Ukrainian (WinKeys)" +msgstr "Ukraina (WinKeys)" #: ../rules/base.xml.in.h:786 -msgid "Urdu (WinKeys)" -msgstr "Urdu (WinKeys)" +msgid "Ukrainian (legacy)" +msgstr "Ukraina (legacy)" #: ../rules/base.xml.in.h:787 -msgid "Urdu (alternative phonetic)" -msgstr "Urdu (fonetik alternatif)" +msgid "Ukrainian (standard RSTU)" +msgstr "Ukraina (standard RSTU)" #: ../rules/base.xml.in.h:788 -msgid "Urdu (phonetic)" -msgstr "Urdu (fonetik)" +msgid "Russian (Ukraine, standard RSTU)" +msgstr "Rusia (Ukraina, standar RSTU)" #: ../rules/base.xml.in.h:789 -msgid "Use keyboard LED to show alternative layout" -msgstr "Gunakan papan ketik LED untuk menunjukkan layout alternatif" +msgid "Ukrainian (homophonic)" +msgstr "Ukraina (homofonik)" -#: ../rules/base.xml.in.h:790 -msgid "Using space key to input non-breakable space character" -msgstr "Menggunakan spasi untuk input karakter spasi yang tidak pecah" +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 +msgid "English (UK)" +msgstr "Inggris (Britania)" #: ../rules/base.xml.in.h:791 -msgid "Usual space at any level" -msgstr "Tombol spasi biasa pada semua level" +msgid "English (UK, extended WinKeys)" +msgstr "Inggris (Britania, Winkeys diperluas)" #: ../rules/base.xml.in.h:792 -msgid "Uyghur" -msgstr "Uyghur" +msgid "English (UK, international with dead keys)" +msgstr "Inggris (Britania, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:793 -msgid "Uzbek" -msgstr "Uzbek" +msgid "English (UK, Dvorak)" +msgstr "Inggris (Britania, Dvorak)" #: ../rules/base.xml.in.h:794 -msgid "Uzbek (Afghanistan)" -msgstr "Uzbek (Afghanistan)" +msgid "English (UK, Dvorak with UK punctuation)" +msgstr "Inggris (Britania, Dvorak dengan pungtuasi Britania)" #: ../rules/base.xml.in.h:795 -msgid "Uzbek (Afghanistan, OLPC)" -msgstr "Uzbek (Afghanistan, OLPC)" +msgid "English (UK, Macintosh)" +msgstr "Inggris (Britania, Macintosh)" #: ../rules/base.xml.in.h:796 -msgid "Uzbek (Latin)" -msgstr "Uzbek (Latin)" +msgid "English (UK, Macintosh international)" +msgstr "Inggris (Britania, Macintosh internasional)" #: ../rules/base.xml.in.h:797 -msgid "Vietnamese" -msgstr "Vietnam" +msgid "English (UK, Colemak)" +msgstr "Inggris (UK, Colemak)" #: ../rules/base.xml.in.h:798 -msgid "ViewSonic KU-306 Internet Keyboard" -msgstr "Papan Ketik Internet ViewSonic KU-306" +msgid "Uzbek" +msgstr "Uzbek" #: ../rules/base.xml.in.h:799 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" -msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika)" - -#: ../rules/base.xml.in.h:800 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika). Operator matematika pada level standar" +msgid "Uzbek (Latin)" +msgstr "Uzbek (Latin)" +#. Keyboard indicator for Vietnamese layouts #: ../rules/base.xml.in.h:801 -msgid "Winbook Model XP5" -msgstr "Winbook Model XP5" +msgid "vi" +msgstr "vi" #: ../rules/base.xml.in.h:802 -msgid "Wolof" -msgstr "Wolof" - -#: ../rules/base.xml.in.h:803 -msgid "Yahoo! Internet Keyboard" -msgstr "Papan Ketik Internet Yahoo!" +msgid "Vietnamese" +msgstr "Vietnam" -#: ../rules/base.xml.in.h:804 -msgid "Yakut" -msgstr "Yakut" +#. Keyboard indicator for Korean layouts +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +msgid "ko" +msgstr "ko" -#: ../rules/base.xml.in.h:805 -msgid "Yoruba" -msgstr "Yoruba" +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 +msgid "Korean" +msgstr "Korea" #: ../rules/base.xml.in.h:806 -msgid "Zero-width non-joiner character at second level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua" +msgid "Korean (101/104 key compatible)" +msgstr "Korea (kompatibel dengan 101/104 tombol)" #: ../rules/base.xml.in.h:807 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga" - -#: ../rules/base.xml.in.h:808 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, tak ada di level keempat" +msgid "Japanese (PC-98xx Series)" +msgstr "Jepang (Seri PC-98xx)" +#. Keyboard indicator for Irish layouts #: ../rules/base.xml.in.h:809 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level ketiga, spasi non-dilepaskan tipis pada level keempat" +msgid "ie" +msgstr "ie" #: ../rules/base.xml.in.h:810 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, penggabung lebar-nol pada level keempat" +msgid "Irish" +msgstr "Irlandia" #: ../rules/base.xml.in.h:811 -msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" -msgstr "Karakter non-penggabung lebar nol pada level kedua, karakter penggabung lebar-nol pada level ketiga" +msgid "CloGaelach" +msgstr "CloGaelach" #: ../rules/base.xml.in.h:812 -msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" -msgstr "Karakter non-penggabung pada level kedua, karakter penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level keempat" +msgid "Irish (UnicodeExpert)" +msgstr "Irlandia (UnicodeExpert)" #: ../rules/base.xml.in.h:813 -msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level ketiga, penggabung lebar-nol pada level keempat" +msgid "Ogham" +msgstr "Ogham" + +#: ../rules/base.xml.in.h:814 +msgid "Ogham (IS434)" +msgstr "Ogham (IS434)" -#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:815 -msgid "ak" -msgstr "ak" +msgid "Urdu (Pakistan)" +msgstr "Urdu (Pakistan)" + +#: ../rules/base.xml.in.h:816 +msgid "Urdu (Pakistan, CRULP)" +msgstr "Urdu (Pakistan, CRULP)" -#. Keyboard indicator for Amharic layouts #: ../rules/base.xml.in.h:817 -msgid "am" -msgstr "am" +msgid "Urdu (Pakistan, NLA)" +msgstr "Urdu (Pakistan, NLA)" -#. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:819 -msgid "ar" -msgstr "ar" +#: ../rules/base.xml.in.h:818 +msgid "Arabic (Pakistan)" +msgstr "Arab (Pakistan)" + +#. Keyboard indicator for Sindhi layouts +#: ../rules/base.xml.in.h:820 +msgid "sd" +msgstr "sd" -#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:821 -msgid "avn" -msgstr "avn" +msgid "Sindhi" +msgstr "Sindhi" -#. Keyboard indicator for Azerbaijani layouts +#. Keyboard indicator for Dhivehi layouts #: ../rules/base.xml.in.h:823 -msgid "az" -msgstr "az" +msgid "dv" +msgstr "dv" + +#: ../rules/base.xml.in.h:824 +msgid "Dhivehi" +msgstr "Dhivehi" -#. Keyboard indicator for Belgian layouts #: ../rules/base.xml.in.h:825 -msgid "be" -msgstr "be" +msgid "English (South Africa)" +msgstr "Inggris (Afrika Selatan)" -#. Keyboard indicator for Berber layouts +#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:827 -msgid "ber" -msgstr "ber" +msgid "eo" +msgstr "eo" + +#: ../rules/base.xml.in.h:828 +msgid "Esperanto" +msgstr "Esperanto" -#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:829 -msgid "bg" -msgstr "bg" +msgid "Esperanto (displaced semicolon and quote, obsolete)" +msgstr "Esperanto (titik koma dan tanda kutip tergeser, kuno)" -#. Keyboard indicator for Bambara layouts +#. Keyboard indicator for Nepali layouts #: ../rules/base.xml.in.h:831 -msgid "bm" -msgstr "bm" +msgid "ne" +msgstr "ne" + +#: ../rules/base.xml.in.h:832 +msgid "Nepali" +msgstr "Nepal" -#. Keyboard indicator for Bengali layouts #: ../rules/base.xml.in.h:833 -msgid "bn" -msgstr "bn" +msgid "English (Nigeria)" +msgstr "Inggris (Nigeria)" -#. Keyboard indicator for Braille layouts +#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:835 -msgid "brl" -msgstr "brl" +msgid "ig" +msgstr "ig" -#. Keyboard indicator for Bosnian layouts -#: ../rules/base.xml.in.h:837 -msgid "bs" -msgstr "bs" +#: ../rules/base.xml.in.h:836 +msgid "Igbo" +msgstr "Igbo" + +#. Keyboard indicator for Yoruba layouts +#: ../rules/base.xml.in.h:838 +msgid "yo" +msgstr "yo" -#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:839 -msgid "by" -msgstr "by" +msgid "Yoruba" +msgstr "Yoruba" -#. Keyboard indicator for Catalan layouts +#. Keyboard indicator for Amharic layouts #: ../rules/base.xml.in.h:841 -msgid "ca" -msgstr "ca" +msgid "am" +msgstr "am" -#. Keyboard indicator for Cherokee layouts -#: ../rules/base.xml.in.h:843 -msgid "chr" -msgstr "chr" +#: ../rules/base.xml.in.h:842 +msgid "Amharic" +msgstr "Amharic" + +#. Keyboard indicator for Wolof layouts +#: ../rules/base.xml.in.h:844 +msgid "wo" +msgstr "wo" -#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:845 -msgid "cm" -msgstr "cm" +msgid "Wolof" +msgstr "Wolof" -#. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:847 ../rules/base.extras.xml.in.h:38 -msgid "crh" -msgstr "crh" +#. Keyboard indicator for Braille layouts +#: ../rules/base.xml.in.h:847 +msgid "brl" +msgstr "brl" + +#: ../rules/base.xml.in.h:848 +msgid "Braille" +msgstr "Braille" -#. Keyboard indicator for Chech layouts #: ../rules/base.xml.in.h:849 -msgid "cs" -msgstr "cs" +msgid "Braille (left hand)" +msgstr "Braille (tangan kiri)" -#. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:851 -msgid "da" -msgstr "da" +#: ../rules/base.xml.in.h:850 +msgid "Braille (right hand)" +msgstr "Braille (tangan kanan)" -#. Keyboard indicator for German layouts -#: ../rules/base.xml.in.h:853 ../rules/base.extras.xml.in.h:39 -msgid "de" -msgstr "de" +#. Keyboard indicator for Turkmen layouts +#: ../rules/base.xml.in.h:852 +msgid "tk" +msgstr "tk" -#. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:855 -msgid "dv" -msgstr "dv" +#: ../rules/base.xml.in.h:853 +msgid "Turkmen" +msgstr "Turkmen" + +#: ../rules/base.xml.in.h:854 +msgid "Turkmen (Alt-Q)" +msgstr "Turkmen (Alt-Q)" + +#. Keyboard indicator for Bambara layouts +#: ../rules/base.xml.in.h:856 +msgid "bm" +msgstr "bm" -#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:857 -msgid "dz" -msgstr "dz" +msgid "Bambara" +msgstr "Bambara" + +#: ../rules/base.xml.in.h:858 +msgid "French (Mali, alternative)" +msgstr "Perancis (Mali, alternatif)" -#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:859 -msgid "ee" -msgstr "ee" +msgid "English (Mali, US Macintosh)" +msgstr "Inggris (Mali, Macintosh AS)" -#. Keyboard indicator for English layouts -#: ../rules/base.xml.in.h:861 ../rules/base.extras.xml.in.h:40 -msgid "en" -msgstr "en" +#: ../rules/base.xml.in.h:860 +msgid "English (Mali, US international)" +msgstr "Inggris (Mali, Internasional AS)" + +#. Keyboard indicator for Swahili layouts +#: ../rules/base.xml.in.h:862 +msgid "sw" +msgstr "sw" -#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:863 -msgid "eo" -msgstr "eo" +msgid "Swahili (Tanzania)" +msgstr "Swahili (Tanzania)" + +#: ../rules/base.xml.in.h:864 +msgid "Swahili (Kenya)" +msgstr "Swahili (Kenya)" -#. Keyboard indicator for Spanish layouts #: ../rules/base.xml.in.h:865 -msgid "es" -msgstr "es" +msgid "Kikuyu" +msgstr "Kikuyu" -#. Keyboard indicator for Estonian layouts +#. Keyboard indicator for Tswana layouts #: ../rules/base.xml.in.h:867 -msgid "et" -msgstr "et" +msgid "tn" +msgstr "tn" -#. Keyboard indicator for Persian layouts -#: ../rules/base.xml.in.h:869 ../rules/base.extras.xml.in.h:41 -msgid "fa" -msgstr "fa" +#: ../rules/base.xml.in.h:868 +msgid "Tswana" +msgstr "Tswana" + +#. Keyboard indicator for Filipino layouts +#: ../rules/base.xml.in.h:870 +msgid "ph" +msgstr "ph" -#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:871 -msgid "ff" -msgstr "ff" +msgid "Filipino" +msgstr "Filipina" + +#: ../rules/base.xml.in.h:872 +msgid "Filipino (QWERTY Baybayin)" +msgstr "Filipina (QWERTY Baybayin)" -#. Keyboard indicator for Finnish layouts #: ../rules/base.xml.in.h:873 -msgid "fi" -msgstr "fi" +msgid "Filipino (Capewell-Dvorak Latin)" +msgstr "Filipina (Capewell-Dvorak Latin)" + +#: ../rules/base.xml.in.h:874 +msgid "Filipino (Capewell-Dvorak Baybayin)" +msgstr "Filipina (Capewell-Dvorak Baybayin)" -#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:875 -msgid "fo" -msgstr "fo" +msgid "Filipino (Capewell-QWERF 2006 Latin)" +msgstr "Filipina (Capewell-QWERF 2006 Latin)" -#. Keyboard indicator for French layouts -#: ../rules/base.xml.in.h:877 ../rules/base.extras.xml.in.h:42 -msgid "fr" -msgstr "fr" +#: ../rules/base.xml.in.h:876 +msgid "Filipino (Capewell-QWERF 2006 Baybayin)" +msgstr "Filipina (Capewell-QWERF 2006 Baybayin)" + +#: ../rules/base.xml.in.h:877 +msgid "Filipino (Colemak Latin)" +msgstr "Filipina (Colemak Latin)" + +#: ../rules/base.xml.in.h:878 +msgid "Filipino (Colemak Baybayin)" +msgstr "Filipina (Colemak Baybayin)" -#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:879 -msgid "gaa" -msgstr "gaa" +msgid "Filipino (Dvorak Latin)" +msgstr "Filipina (Dvorak Latin)" + +#: ../rules/base.xml.in.h:880 +msgid "Filipino (Dvorak Baybayin)" +msgstr "Filipina (Dvorak Baybayin)" -#. Keyboard indicator for Greek layouts #: ../rules/base.xml.in.h:881 -msgid "gr" -msgstr "gr" +msgid "md" +msgstr "md" + +#: ../rules/base.xml.in.h:882 +msgid "Moldavian" +msgstr "Moldavia" -#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:883 -msgid "gu" -msgstr "gu" +msgid "gag" +msgstr "gag" + +#: ../rules/base.xml.in.h:884 +msgid "Moldavian (Gagauz)" +msgstr "Moldavia (Gagauz)" -#. Keyboard indicator for Hausa layouts #: ../rules/base.xml.in.h:885 -msgid "ha" -msgstr "ha" +msgid "Switching to another layout" +msgstr "Bertukar ke tata letak lain" + +#: ../rules/base.xml.in.h:886 +msgid "Right Alt (while pressed)" +msgstr "Alt Kanan (ketika ditekan)" -#. Keyboard indicator for Hebrew layouts #: ../rules/base.xml.in.h:887 -msgid "he" -msgstr "he" +msgid "Left Alt (while pressed)" +msgstr "Alt Kiri (ketika ditekan)" + +#: ../rules/base.xml.in.h:888 +msgid "Left Win (while pressed)" +msgstr "Win Kiri (ketika ditekan)" -#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:889 -msgid "hi" -msgstr "hi" +msgid "Right Win (while pressed)" +msgstr "Win Kanan (ketika ditekan)" + +#: ../rules/base.xml.in.h:890 +msgid "Any Win key (while pressed)" +msgstr "Tombol Win apapun (ketika ditekan)" -#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:891 -msgid "hr" -msgstr "hr" +msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" +msgstr "Caps Lock (ketika ditekan), Alt+Caps Lock melakukan aksi capslock asli" + +#: ../rules/base.xml.in.h:892 +msgid "Right Ctrl (while pressed)" +msgstr "Ctrl Kanan (ketika ditekan)" -#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:893 -msgid "hu" -msgstr "hu" +msgid "Right Alt" +msgstr "Alt Kanan" -#. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:43 -msgid "hy" -msgstr "hy" +#: ../rules/base.xml.in.h:894 +msgid "Left Alt" +msgstr "Alt Kiri" + +#: ../rules/base.xml.in.h:895 +msgid "Caps Lock" +msgstr "Caps Lock" + +#: ../rules/base.xml.in.h:896 +msgid "Shift+Caps Lock" +msgstr "Shift+Caps Lock" -#. Keyboard indicator for Irish layouts #: ../rules/base.xml.in.h:897 -msgid "ie" -msgstr "ie" +msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" +msgstr "Caps Lock (ke tata letak pertama), Shift+Caps Lock (ke tata letak terakhir)" + +#: ../rules/base.xml.in.h:898 +msgid "Left Win (to first layout), Right Win/Menu (to last layout)" +msgstr "Win Kiri (ke tata letak pertama), Win/Menu Kanan (ke tata letak terakhir)" -#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:899 -msgid "ig" -msgstr "ig" +msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" +msgstr "Ctrl Kiri (ke tata letak pertama), Ctrl Kanan (ke tata letak terakhir)" + +#: ../rules/base.xml.in.h:900 +msgid "Alt+Caps Lock" +msgstr "Tombol Alt+Caps" -#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:901 -msgid "ike" -msgstr "ike" +msgid "Both Shift keys together" +msgstr "Kedua tombol Shift bersama" + +#: ../rules/base.xml.in.h:902 +msgid "Both Alt keys together" +msgstr "Kedua tombol Alt bersama" -#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:903 -msgid "in" -msgstr "in" +msgid "Both Ctrl keys together" +msgstr "Kedua tombol Ctrl bersama" + +#: ../rules/base.xml.in.h:904 +msgid "Ctrl+Shift" +msgstr "Ctrl+Shift" -#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:905 -msgid "is" -msgstr "is" +msgid "Left Ctrl+Left Shift" +msgstr "Ctrl Kiri+Shift Kiri" + +#: ../rules/base.xml.in.h:906 +msgid "Right Ctrl+Right Shift" +msgstr "Ctrl Kanan+Shift Kanan" -#. Keyboard indicator for Italian layouts #: ../rules/base.xml.in.h:907 -msgid "it" -msgstr "it" +msgid "Alt+Ctrl" +msgstr "Alt+Ctrl" + +#: ../rules/base.xml.in.h:908 +msgid "Alt+Shift" +msgstr "Alt+Shift" -#. Keyboard indicator for Japanese layouts #: ../rules/base.xml.in.h:909 -msgid "ja" -msgstr "ja" +msgid "Left Alt+Left Shift" +msgstr "Alt Kiri+Shift Kiri" + +#: ../rules/base.xml.in.h:910 +msgid "Alt+Space" +msgstr "Alt+Space" -#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:911 -msgid "ka" -msgstr "ka" +msgid "Menu" +msgstr "Menu" + +#: ../rules/base.xml.in.h:912 +msgid "Left Win" +msgstr "Win Kiri" -#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:913 -msgid "ki" -msgstr "ki" +msgid "Right Win" +msgstr "Win Kanan" + +#: ../rules/base.xml.in.h:914 +msgid "Left Shift" +msgstr "Shift Kiri" -#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:915 -msgid "kk" -msgstr "kk" +msgid "Right Shift" +msgstr "Shift Kanan" + +#: ../rules/base.xml.in.h:916 +msgid "Left Ctrl" +msgstr "Ctrl Kiri" -#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:917 -msgid "km" -msgstr "km" +msgid "Right Ctrl" +msgstr "Ctrl Kanan" + +#: ../rules/base.xml.in.h:918 +msgid "Scroll Lock" +msgstr "Scroll Lock" -#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:919 -msgid "kn" -msgstr "kn" +msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" +msgstr "Ctrl Kiri+Win Kiri (ke tata letak pertama), Ctrl Kanan+Menu (ke tata letak kedua)" + +#: ../rules/base.xml.in.h:920 +msgid "Key to choose 3rd level" +msgstr "Tekan Menu Kiri untuk memilih level 3" -#. Keyboard indicator for Korean layouts #: ../rules/base.xml.in.h:921 -msgid "ko" -msgstr "ko" +msgid "Any Win key" +msgstr "Tombol Win apapun" + +#: ../rules/base.xml.in.h:922 +msgid "Any Alt key" +msgstr "Tombol Alt apapun" -#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:923 -msgid "ku" -msgstr "ku" +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "Alt Kanan, Shift+Right Alt adalah Compose" + +#: ../rules/base.xml.in.h:924 +msgid "Right Alt key never chooses 3rd level" +msgstr "Alt Kanan tidak pernah memilih level 3" -#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:925 -msgid "lo" -msgstr "lo" +msgid "Enter on keypad" +msgstr "Enter pada keypad" -#. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:927 ../rules/base.extras.xml.in.h:45 -msgid "lt" -msgstr "lt" +#: ../rules/base.xml.in.h:926 +msgid "Backslash" +msgstr "Backslash" -#. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:929 ../rules/base.extras.xml.in.h:46 -msgid "lv" -msgstr "lv" +#: ../rules/base.xml.in.h:927 +msgid "<Less/Greater>" +msgstr "<Lebih Kecil/Lebih Besar>" + +#: ../rules/base.xml.in.h:928 +msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Caps Lock memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" + +#: ../rules/base.xml.in.h:929 +msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Backslash memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" + +#: ../rules/base.xml.in.h:930 +msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "<Lebih Kecil/Lebih Besar> memilih level ke-3, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ke-3 lainnya" -#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:931 -msgid "mi" -msgstr "mi" +msgid "Ctrl key position" +msgstr "Posisi tombol Ctrl" + +#: ../rules/base.xml.in.h:932 +msgid "Caps Lock as Ctrl" +msgstr "Caps Lock sebagai Ctrl" -#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:933 -msgid "mk" -msgstr "mk" +msgid "Left Ctrl as Meta" +msgstr "Ctrl Kiri sebagai Meta" + +#: ../rules/base.xml.in.h:934 +msgid "Swap Ctrl and Caps Lock" +msgstr "Tukar Ctrl dan Caps Lock" -#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:935 -msgid "ml" -msgstr "ml" +msgid "At left of 'A'" +msgstr "Di sebelah kiri 'A'" + +#: ../rules/base.xml.in.h:936 +msgid "At bottom left" +msgstr "Di kiri bawah" -#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:937 -msgid "mn" -msgstr "mn" +msgid "Right Ctrl as Right Alt" +msgstr "Ctrl Kanan bertindak seperti Alt Kanan" + +#: ../rules/base.xml.in.h:938 +msgid "Menu as Right Ctrl" +msgstr "Menu sebagai Ctrl Kanan" -#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:939 -msgid "mt" -msgstr "mt" +msgid "Right Alt as Right Ctrl" +msgstr "Alt Kanan sebagai Ctrl Kanan" + +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Tukar tombol Alt Kiri dengan tombol Ctrl Kiri" -#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:941 -msgid "my" -msgstr "my" +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Tukar tombol Win Kiri dengan tombol Ctrl Kiri" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt Kiri adalah Ctrl, CTrl Kiri adalan Win, Win Kiri adalah Alt" -#. Keyboard indicator for Nepali layouts #: ../rules/base.xml.in.h:943 -msgid "ne" -msgstr "ne" +msgid "Use keyboard LED to show alternative layout" +msgstr "Gunakan papan ketik LED untuk menunjukkan layout alternatif" + +#: ../rules/base.xml.in.h:944 +msgid "Num Lock" +msgstr "Num Lock" -#. Keyboard indicator for Dutch layouts #: ../rules/base.xml.in.h:945 -msgid "nl" -msgstr "nl" +msgid "Layout of numeric keypad" +msgstr "Tata letak keypad numerik" + +#: ../rules/base.xml.in.h:946 +msgid "Legacy" +msgstr "Legacy" -#. Keyboard indicator for Norwegian layouts #: ../rules/base.xml.in.h:947 -msgid "no" -msgstr "no" +msgid "Unicode additions (arrows and math operators)" +msgstr "Tambahan unicode (panah dan operator matematika)" + +#: ../rules/base.xml.in.h:948 +msgid "Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Tambahan unicode (panah dan operator matematika; operator matematika pada level baku)" -#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:949 -msgid "or" -msgstr "or" +msgid "Legacy Wang 724" +msgstr "Legacy Wang 724" + +#: ../rules/base.xml.in.h:950 +msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" +msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika)" -#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:951 -msgid "pa" -msgstr "pa" +msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika; operator matematika pada level baku)" + +#: ../rules/base.xml.in.h:952 +msgid "Hexadecimal" +msgstr "Heksadesimal" -#. Keyboard indicator for Filipino layouts #: ../rules/base.xml.in.h:953 -msgid "ph" -msgstr "ph" +msgid "ATM/phone-style" +msgstr "Gaya ATM/telepon" -#. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:955 ../rules/base.extras.xml.in.h:47 -msgid "pl" -msgstr "pl" +#: ../rules/base.xml.in.h:954 +msgid "Numeric keypad delete key behaviour" +msgstr "Keypad numerik menghapus perilaku tombol" -#. Keyboard indicator for Pashto layouts +#: ../rules/base.xml.in.h:955 +msgid "Legacy key with dot" +msgstr "Tombol Legacy dengan titik" + +#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:957 -msgid "ps" -msgstr "ps" +msgid "Legacy key with comma" +msgstr "Tombol Legacy dengan koma" + +#: ../rules/base.xml.in.h:958 +msgid "Four-level key with dot" +msgstr "Tombol empat-level dengan titik" -#. Keyboard indicator for Portuguese layouts #: ../rules/base.xml.in.h:959 -msgid "pt" -msgstr "pt" +msgid "Four-level key with dot, Latin-9 only" +msgstr "Tombol empat-level dengan titik, hanya Latin-9" -#. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:961 ../rules/base.extras.xml.in.h:48 -msgid "ro" -msgstr "ro" +#: ../rules/base.xml.in.h:960 +msgid "Four-level key with comma" +msgstr "Tombol empat-level dengan koma" -#. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:963 ../rules/base.extras.xml.in.h:49 -msgid "ru" -msgstr "ru" +#: ../rules/base.xml.in.h:961 +msgid "Four-level key with momayyez" +msgstr "Tombol empat level dengan momayyez" + +#. This assumes the KP_ abstract symbols are actually useful for some apps +#. The description needs to be rewritten +#: ../rules/base.xml.in.h:964 +msgid "Four-level key with abstract separators" +msgstr "Tombol empat-level dengan pemisah abstrak" + +#: ../rules/base.xml.in.h:965 +msgid "Semicolon on third level" +msgstr "Titik koma pada level ketiga" + +#: ../rules/base.xml.in.h:966 +msgid "Caps Lock key behavior" +msgstr "Perilaku tombol Caps Lock" + +#: ../rules/base.xml.in.h:967 +msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock menggunakan kapitalisasi internal. Shift \"mengistirahatkan\" Caps Lock" + +#: ../rules/base.xml.in.h:968 +msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" +msgstr "Caps Lock menggunakan kapitalisasi internal. Shift tidak mempengaruhi Caps Lock" + +#: ../rules/base.xml.in.h:969 +msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock bertindak sebagai Shift dengan penguncian; Shift \"mengistirahatkan\" Caps Lock" + +#: ../rules/base.xml.in.h:970 +msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" +msgstr "Caps Lock bertindak sebagai Shift dengan penguncian; Shift tidak mempengaruhi Caps Lock" + +#: ../rules/base.xml.in.h:971 +msgid "Caps Lock toggles normal capitalization of alphabetic characters" +msgstr "Caps Lock mengubah huruf besar normal atau karakter secara alfabetis" + +#: ../rules/base.xml.in.h:972 +msgid "Make Caps Lock an additional Num Lock" +msgstr "Buat Caps Lock sebagai tambahan Num Lock" + +#: ../rules/base.xml.in.h:973 +msgid "Swap ESC and Caps Lock" +msgstr "Tukar ESC dan Caps Lock" + +#: ../rules/base.xml.in.h:974 +msgid "Make Caps Lock an additional ESC" +msgstr "Buat Caps Lock sebagai tambahan ESC" + +#: ../rules/base.xml.in.h:975 +msgid "Make Caps Lock an additional Backspace" +msgstr "Buat Caps Lock sebagai tambahan Backspace" + +#: ../rules/base.xml.in.h:976 +msgid "Make Caps Lock an additional Super" +msgstr "Buat Caps Lock sebagai tambahan Super" + +#: ../rules/base.xml.in.h:977 +msgid "Make Caps Lock an additional Hyper" +msgstr "Buat Caps Lock sebagai tambahan Hiper" + +#: ../rules/base.xml.in.h:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Caps Lock menjungkitkan ShiftLock (mempengaruhi semua tombol)" + +#: ../rules/base.xml.in.h:979 +msgid "Caps Lock is disabled" +msgstr "Caps Lock dinonaktifkan" + +#: ../rules/base.xml.in.h:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Buat Caps Lock sebagai Ctrl tambahan" + +#: ../rules/base.xml.in.h:981 +msgid "Alt/Win key behavior" +msgstr "Tindakan Tombol Alt/Win " + +#: ../rules/base.xml.in.h:982 +msgid "Add the standard behavior to Menu key" +msgstr "Tambah tindakan standar pada tombol Menu" + +#: ../rules/base.xml.in.h:983 +msgid "Alt and Meta are on Alt keys" +msgstr "Alt dan Meta pada tombol Alt" + +#: ../rules/base.xml.in.h:984 +msgid "Alt is mapped to Win keys (and the usual Alt keys)" +msgstr "Alt dipetakan ke tombol Win (dan tombol Alt yang biasa)" + +#: ../rules/base.xml.in.h:985 +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Ctrl dipetakan ke tombol Win (dan tombol Ctrl yang biasa)" + +#: ../rules/base.xml.in.h:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Ctrl dipetakan ke tombol Alt, Alt dipetakan ke tombol Win" + +#: ../rules/base.xml.in.h:987 +msgid "Meta is mapped to Win keys" +msgstr "Meta dipetakan ke tombol Win" + +#: ../rules/base.xml.in.h:988 +msgid "Meta is mapped to Left Win" +msgstr "Meta dipetakan ke tombol Win Kiri" + +#: ../rules/base.xml.in.h:989 +msgid "Hyper is mapped to Win-keys" +msgstr "Hiper dipetakan ke tombol Win" + +#: ../rules/base.xml.in.h:990 +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "Alt dipetakan ke Win Kanan, Super ke Menu" + +#: ../rules/base.xml.in.h:991 +msgid "Alt is swapped with Win" +msgstr "Alt ditukar dengan Win" + +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Posisi tombol Compose" + +#: ../rules/base.xml.in.h:993 +msgid "3rd level of Left Win" +msgstr "Tingkat 3 dari Win Kiri" + +#: ../rules/base.xml.in.h:994 +msgid "3rd level of Right Win" +msgstr "Tingkat 3 dari Win Kanan" + +#: ../rules/base.xml.in.h:995 +msgid "3rd level of Menu" +msgstr "Tingkat 3 dari Menu" + +#: ../rules/base.xml.in.h:996 +msgid "3rd level of Left Ctrl" +msgstr "Tingkat 3 dari Ctrl Kiri" + +#: ../rules/base.xml.in.h:997 +msgid "3rd level of Right Ctrl" +msgstr "Tingkat 3 dari Ctrl Kanan" + +#: ../rules/base.xml.in.h:998 +msgid "3rd level of Caps Lock" +msgstr "Tingkat 3 dari Caps Lock" + +#: ../rules/base.xml.in.h:999 +msgid "3rd level of <Less/Greater>" +msgstr "Tingkat 3 dari <Lebih Kecil/Lebih Besar>" + +#: ../rules/base.xml.in.h:1000 +msgid "Pause" +msgstr "Pause" + +#: ../rules/base.xml.in.h:1001 +msgid "PrtSc" +msgstr "PrtSc" + +#: ../rules/base.xml.in.h:1002 +msgid "Miscellaneous compatibility options" +msgstr "Pilihan kompabilitas lain-lain" + +#: ../rules/base.xml.in.h:1003 +msgid "Default numeric keypad keys" +msgstr "Tombol angka keypad standar" + +#: ../rules/base.xml.in.h:1004 +msgid "Numeric keypad keys always enter digits (as in Mac OS)" +msgstr "Keypad numerik selalu memasukkan digit (seperti dalam Mac OS)" + +#: ../rules/base.xml.in.h:1005 +msgid "Shift with numeric keypad keys works as in MS Windows" +msgstr "Shit dengan keypad numerik bekerja sesuai pada MS Windows" + +#: ../rules/base.xml.in.h:1006 +msgid "Shift does not cancel Num Lock, chooses 3rd level instead" +msgstr "Shift tidak membatalkan Num Lock, lebih memilih level ketiga" + +#: ../rules/base.xml.in.h:1007 +msgid "Special keys (Ctrl+Alt+<key>) handled in a server" +msgstr "Tombol spesial (Ctrl+Alt+<key>) ditangani pada server" + +#: ../rules/base.xml.in.h:1008 +msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" +msgstr "Papan Ketik Aluminium Apple: mengemulasi tombol PC (Print, Scroll_Lock, Pause, Num Lock)" + +#: ../rules/base.xml.in.h:1009 +msgid "Shift cancels Caps Lock" +msgstr "Shift membatalkan Caps Lock" + +#: ../rules/base.xml.in.h:1010 +msgid "Enable extra typographic characters" +msgstr "Aktifkan karakter tipografi ekstra" + +#: ../rules/base.xml.in.h:1011 +msgid "Both Shift keys together toggle Caps Lock" +msgstr "Kedua tombol Shift bersamaan menjungkitkan Caps Lock" + +#: ../rules/base.xml.in.h:1012 +msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" +msgstr "Kedua tombol Shift bersamaan mengaktifkan Caps Lock, satu tombol Shift mematikannya" + +#: ../rules/base.xml.in.h:1013 +msgid "Both Shift keys together toggle ShiftLock" +msgstr "Kedua tombol Shift bersamaan menjungkitkan ShiftLock" + +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Shift + NumLock menjungkitkan PointerKeys" + +#: ../rules/base.xml.in.h:1015 +msgid "Allow breaking grabs with keyboard actions (warning: security risk)" +msgstr "Izinkan memecah genggaman dengan aksi papan tik (peringatan: resiko keamanan)" + +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Izinkan pencatatan genggaman dan pohon jendela" + +#: ../rules/base.xml.in.h:1017 +msgid "Adding currency signs to certain keys" +msgstr "Menambahkan tanda mata uang ke tombol tertentu" + +#: ../rules/base.xml.in.h:1018 +msgid "Euro on E" +msgstr "Euro pada E" + +#: ../rules/base.xml.in.h:1019 +msgid "Euro on 2" +msgstr "Euro pada 2" + +#: ../rules/base.xml.in.h:1020 +msgid "Euro on 4" +msgstr "Euro pada 4" + +#: ../rules/base.xml.in.h:1021 +msgid "Euro on 5" +msgstr "Euro pada 5" + +#: ../rules/base.xml.in.h:1022 +msgid "Rupee on 4" +msgstr "Rupee pada 4" + +#: ../rules/base.xml.in.h:1023 +msgid "Key to choose 5th level" +msgstr "Tombol untuk memilih level kelima" + +#: ../rules/base.xml.in.h:1024 +msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "<Lebih Kecil/Lebih Besar> pilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1025 +msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Alt kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1026 +msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win kiri memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1027 +msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima" + +#: ../rules/base.xml.in.h:1028 +msgid "Using space key to input non-breakable space character" +msgstr "Menggunakan spasi untuk input karakter spasi yang tidak pecah" + +#: ../rules/base.xml.in.h:1029 +msgid "Usual space at any level" +msgstr "Tombol spasi biasa pada semua level" + +#: ../rules/base.xml.in.h:1030 +msgid "Non-breakable space character at second level" +msgstr "Karakter spasi yang tidak pecah pada level 2" + +#: ../rules/base.xml.in.h:1031 +msgid "Non-breakable space character at third level" +msgstr "Karakter spasi yang tidak pecah pada level 3" -#. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:965 -msgid "sd" -msgstr "sd" +#: ../rules/base.xml.in.h:1032 +msgid "Non-breakable space character at third level, nothing at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 3, tidak ada pada level 4" -#. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:967 -msgid "si" -msgstr "si" +#: ../rules/base.xml.in.h:1033 +msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 3, karakter spasi yang tidak pecah dan tipis pada level 4" -#. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:969 -msgid "sk" -msgstr "sk" +#: ../rules/base.xml.in.h:1034 +msgid "Non-breakable space character at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 4" -#. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:971 -msgid "sl" -msgstr "sl" +#: ../rules/base.xml.in.h:1035 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" +msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6" -#. Keyboard indicator for Albanian layouts -#: ../rules/base.xml.in.h:973 -msgid "sq" -msgstr "sq" +#: ../rules/base.xml.in.h:1036 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" +msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6 (via Ctrl+Shift)" -#. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:975 ../rules/base.extras.xml.in.h:51 -msgid "sr" -msgstr "sr" +#: ../rules/base.xml.in.h:1037 +msgid "Zero-width non-joiner character at second level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua" -#. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:977 -msgid "sv" -msgstr "sv" +#: ../rules/base.xml.in.h:1038 +msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" +msgstr "Karakter non-penggabung lebar nol pada level kedua, karakter penggabung lebar-nol pada level ketiga" -#. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:979 -msgid "sw" -msgstr "sw" +#: ../rules/base.xml.in.h:1039 +msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" +msgstr "Karakter non-penggabung pada level kedua, karakter penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level keempat" -#. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:981 -msgid "syc" -msgstr "syc" +#: ../rules/base.xml.in.h:1040 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga" -#. Keyboard indicator for Tamil layouts -#: ../rules/base.xml.in.h:983 -msgid "ta" -msgstr "ta" +#: ../rules/base.xml.in.h:1041 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, tak ada di level keempat" -#. Keyboard indicator for Telugu layouts -#: ../rules/base.xml.in.h:985 -msgid "te" -msgstr "te" +#: ../rules/base.xml.in.h:1042 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, penggabung lebar-nol pada level keempat" -#. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:987 -msgid "tg" -msgstr "tg" +#: ../rules/base.xml.in.h:1043 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level ketiga, spasi non-dilepaskan tipis pada level keempat" -#. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:989 -msgid "th" -msgstr "th" +#: ../rules/base.xml.in.h:1044 +msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level ketiga, penggabung lebar-nol pada level keempat" -#. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:991 -msgid "tk" -msgstr "tk" +#: ../rules/base.xml.in.h:1045 +msgid "Japanese keyboard options" +msgstr "Pilihan papan ketik Jepang" -#. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:993 -msgid "tn" -msgstr "tn" +#: ../rules/base.xml.in.h:1046 +msgid "Kana Lock key is locking" +msgstr "Tombol Kana Lock terkunci" -#. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:995 -msgid "tr" -msgstr "tr" +#: ../rules/base.xml.in.h:1047 +msgid "NICOLA-F style Backspace" +msgstr "NICOLA-F style Backspace" -#. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:997 -msgid "uk" -msgstr "uk" +#: ../rules/base.xml.in.h:1048 +msgid "Make Zenkaku Hankaku an additional ESC" +msgstr "Buat Zenkaku Hankaku sebagai tambahan ESC" -#. Keyboard indicator for Urdu layouts -#: ../rules/base.xml.in.h:999 -msgid "ur" -msgstr "ur" +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Menambah huruf supersigned Esperanto" -#. Keyboard indicator for Uzbek layouts -#: ../rules/base.xml.in.h:1001 -msgid "uz" -msgstr "uz" +#: ../rules/base.xml.in.h:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "Ke tombol terkait dalam tata letak Qwerty" -#. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:1003 -msgid "vi" -msgstr "vi" +#: ../rules/base.xml.in.h:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "Ke tombol terkait dalam tata letak Dvorak" -#. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:1005 -msgid "wo" -msgstr "wo" +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "Ke tombol terkait dalam tata letak Colemak" -#. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:1007 -msgid "xsy" -msgstr "xsy" +#: ../rules/base.xml.in.h:1053 +msgid "Maintain key compatibility with old Solaris keycodes" +msgstr "Memelihara kompatibilitas tombol dengan kode tombol Solaris tua" -#. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:1009 -msgid "yo" -msgstr "yo" +#: ../rules/base.xml.in.h:1054 +msgid "Sun Key compatibility" +msgstr "Kompatibilitas Tombol Sun" -#. Keyboard indicator for Taiwanese layouts -#: ../rules/base.xml.in.h:1011 -msgid "zh" -msgstr "zh" +#: ../rules/base.xml.in.h:1055 +msgid "Key sequence to kill the X server" +msgstr "Sekuensi kunci untuk mematikan server X" -#: ../rules/base.extras.xml.in.h:1 -msgid "APL Keyboard Symbols" -msgstr "Simbol Papan Tik APL" +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Ctrl + Alt + Backspace" -#: ../rules/base.extras.xml.in.h:3 -msgid "Armenian (OLPC phonetic)" -msgstr "Armenia (fonetik OLPC)" +#: ../rules/base.extras.xml.in.h:1 +msgid "apl" +msgstr "apl" -#: ../rules/base.extras.xml.in.h:4 -msgid "Atsina" -msgstr "Atsina" +#: ../rules/base.extras.xml.in.h:2 +msgid "APL keyboard symbols" +msgstr "Simbol papan tik APL" #: ../rules/base.extras.xml.in.h:5 -msgid "Avestan" -msgstr "Avestan" +msgid "kut" +msgstr "kut" #: ../rules/base.extras.xml.in.h:6 -msgid "Couer D'alene Salish" -msgstr "Couer D'alene Salish" +msgid "Kutenai" +msgstr "Kutenai" #: ../rules/base.extras.xml.in.h:7 -msgid "Crimean Tatar (Dobruja Q)" -msgstr "Tatar Krimea (Dobruja Q)" +msgid "shs" +msgstr "shs" -#: ../rules/base.extras.xml.in.h:9 -msgid "English (US, international AltGr Unicode combining)" -msgstr "Inggris (AS, internasional AltGr menggabungkan Unicode)" +#: ../rules/base.extras.xml.in.h:8 +msgid "Secwepemctsin" +msgstr "Secwepemctsin" -#: ../rules/base.extras.xml.in.h:10 -msgid "English (US, international AltGr Unicode combining, alternative)" -msgstr "Inggris (AS, internasional (AltGr menggabungkan Unicode, alternatif)" +#: ../rules/base.extras.xml.in.h:9 +msgid "Multilingual (Canada, Sun Type 6/7)" +msgstr "Multibahasa (Kanada, Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:13 +#: ../rules/base.extras.xml.in.h:12 msgid "German (US keyboard with German letters)" msgstr "Jerman (papan tik AS dengan huruf Jerman)" -#: ../rules/base.extras.xml.in.h:14 +#: ../rules/base.extras.xml.in.h:13 msgid "German (with Hungarian letters and no dead keys)" msgstr "Jerman (dengan huruf Hungaria dan tanpa tombol mati)" -#: ../rules/base.extras.xml.in.h:15 -msgid "Kutenai" -msgstr "Kutenai" +#: ../rules/base.extras.xml.in.h:14 +msgid "German (Sun Type 6/7)" +msgstr "Jerman (Sun Tipe 6/7)" #: ../rules/base.extras.xml.in.h:17 -msgid "Latvian (US Colemak)" -msgstr "Latvia (Colemak AS)" +msgid "Avestan" +msgstr "Avestan" -#: ../rules/base.extras.xml.in.h:18 -msgid "Latvian (US Colemak, apostrophe variant)" -msgstr "Latvia (Colemak AS, varian apostrop)" +#: ../rules/base.extras.xml.in.h:20 +msgid "Lithuanian (US Dvorak with Lithuanian letters)" +msgstr "Lituania (Dvorak AS dengan huruf Lituania)" -#: ../rules/base.extras.xml.in.h:19 +#: ../rules/base.extras.xml.in.h:21 +msgid "Lithuanian (Sun Type 6/7)" +msgstr "Lithuania (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" msgstr "Latvia (Dvorak AS)" -#: ../rules/base.extras.xml.in.h:20 +#: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" msgstr "Latvia (Dvorak AS, varian Y)" -#: ../rules/base.extras.xml.in.h:21 +#: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" msgstr "Latvia (Dvorak AS, tanpa varian)" -#: ../rules/base.extras.xml.in.h:22 +#: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" msgstr "Latvia (Dvorak AS pemrogram)" -#: ../rules/base.extras.xml.in.h:23 +#: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" msgstr "Latvia (Dvorak AS pemrogram, varian Y)" -#: ../rules/base.extras.xml.in.h:24 +#: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" msgstr "Latvia (Dvorak AS pemrogram, tanpa varian)" -#: ../rules/base.extras.xml.in.h:26 -msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Lituania (Dvorak AS dengan huruf Lituania)" +#: ../rules/base.extras.xml.in.h:30 +msgid "Latvian (US Colemak)" +msgstr "Latvia (Colemak AS)" -#: ../rules/base.extras.xml.in.h:29 +#: ../rules/base.extras.xml.in.h:31 +msgid "Latvian (US Colemak, apostrophe variant)" +msgstr "Latvia (Colemak AS, varian apostrop)" + +#: ../rules/base.extras.xml.in.h:32 +msgid "Latvian (Sun Type 6/7)" +msgstr "Latvia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:35 +msgid "English (US, international AltGr Unicode combining)" +msgstr "Inggris (AS, internasional AltGr menggabungkan Unicode)" + +#: ../rules/base.extras.xml.in.h:36 +msgid "English (US, international AltGr Unicode combining, alternative)" +msgstr "Inggris (AS, internasional (AltGr menggabungkan Unicode, alternatif)" + +#: ../rules/base.extras.xml.in.h:37 +msgid "Atsina" +msgstr "Atsina" + +#: ../rules/base.extras.xml.in.h:38 +msgid "Coeur d'Alene Salish" +msgstr "Couer d'Alene Salish" + +#: ../rules/base.extras.xml.in.h:39 +msgid "English (US, Sun Type 6/7)" +msgstr "Inggris (AS, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inggris (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polandia (internasional dengan tombol mati)" -#: ../rules/base.extras.xml.in.h:31 +#: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "Polandia (Colemak)" + +#: ../rules/base.extras.xml.in.h:45 +msgid "Polish (Sun Type 6/7)" +msgstr "Polandia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:49 +msgid "Crimean Tatar (Dobruja Q)" +msgstr "Tatar Krimea (Dobruja Q)" + +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumania (Touchtype ergonomis)" -#: ../rules/base.extras.xml.in.h:33 +#: ../rules/base.extras.xml.in.h:51 +msgid "Romanian (Sun Type 6/7)" +msgstr "Rumania (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:54 +msgid "Serbian (combining accents instead of dead keys)" +msgstr "Serbia (menggabungkan aksen ketimbang tombol mati)" + +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russia (dengan tata letak Ukraina-Belarusia)" -#: ../rules/base.extras.xml.in.h:34 -msgid "Secwepemctsin" -msgstr "Secwepemctsin" +#: ../rules/base.extras.xml.in.h:58 +msgid "Russian (Sun Type 6/7)" +msgstr "Rusia (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:35 -msgid "Serbian" -msgstr "Serbia" +#: ../rules/base.extras.xml.in.h:61 +msgid "Armenian (OLPC phonetic)" +msgstr "Armenia (fonetik OLPC)" -#: ../rules/base.extras.xml.in.h:36 -msgid "Serbian (combining accents instead of dead keys)" -msgstr "Serbia (menggabungkan aksen ketimbang tombol mati)" +#: ../rules/base.extras.xml.in.h:64 +msgid "Hebrew (Biblical, SIL phonetic)" +msgstr "Ibrani (Biblical, fonetik SIL)" -#: ../rules/base.extras.xml.in.h:37 -msgid "apl" -msgstr "apl" +#: ../rules/base.extras.xml.in.h:67 +msgid "Arabic (Sun Type 6/7)" +msgstr "Arab (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:44 -msgid "kut" -msgstr "kut" +#: ../rules/base.extras.xml.in.h:70 +msgid "Belgian (Sun Type 6/7)" +msgstr "Belgia (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:50 -msgid "shs" -msgstr "shs" +#: ../rules/base.extras.xml.in.h:73 +msgid "Portuguese (Brazil, Sun Type 6/7)" +msgstr "Portugis (Brasil, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:76 +msgid "Czech (Sun Type 6/7)" +msgstr "Ceko (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:79 +msgid "Danish (Sun Type 6/7)" +msgstr "Denmark (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:82 +msgid "Dutch (Sun Type 6/7)" +msgstr "Belanda (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:85 +msgid "Estonian (Sun Type 6/7)" +msgstr "Estonia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:88 +msgid "Finnish (Sun Type 6/7)" +msgstr "Finlandia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:90 +msgid "French (Sun Type 6/7)" +msgstr "Perancis (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:93 +msgid "Greek (Sun Type 6/7)" +msgstr "Yunani (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:96 +msgid "Italian (Sun Type 6/7)" +msgstr "Italia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:99 +msgid "Japanese (Sun Type 6)" +msgstr "Jepang (Sun Tipe 6)" + +#: ../rules/base.extras.xml.in.h:100 +msgid "Japanese (Sun Type 7 - pc compatible)" +msgstr "Jepang (Sun Tipe 7 - kompatibel pc)" + +#: ../rules/base.extras.xml.in.h:101 +msgid "Japanese (Sun Type 7 - sun compatible)" +msgstr "Jepang (Sun Tipe 7 - kompatibel sun)" + +#: ../rules/base.extras.xml.in.h:104 +msgid "Norwegian (Sun Type 6/7)" +msgstr "Norwegia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:106 +msgid "Portuguese (Sun Type 6/7)" +msgstr "Portugis (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:109 +msgid "Slovak (Sun Type 6/7)" +msgstr "Slowakia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:112 +msgid "Spanish (Sun Type 6/7)" +msgstr "Spanyol (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:115 +msgid "Swedish (Sun Type 6/7)" +msgstr "Swedia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:117 +msgid "German (Switzerland, Sun Type 6/7)" +msgstr "Jerman (Swiss, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:118 +msgid "French (Switzerland, Sun Type 6/7)" +msgstr "Perancis (Swiss, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:121 +msgid "Turkish (Sun Type 6/7)" +msgstr "Turki (Sun Tipe 6/7)" -#~ msgid "German (qwerty)" -#~ msgstr "Jerman (qwerty)" +#: ../rules/base.extras.xml.in.h:124 +msgid "Ukrainian (Sun Type 6/7)" +msgstr "Ukraina (Sun Tipe 6/7)" -#~ msgid "Japanese (Dvorak)" -#~ msgstr "Jepang (Dvorak)" +#: ../rules/base.extras.xml.in.h:126 +msgid "English (UK, Sun Type 6/7)" +msgstr "Inggris (UK, Sun Tipe 6/7)" -#~ msgid "Allow breaking grabs with keyboard actions (warning: security risk)" -#~ msgstr "Ijinkan memecah genggaman dengan aksi papan tik (peringatan: resiko keamanan)" +#: ../rules/base.extras.xml.in.h:129 +msgid "Korean (Sun Type 6/7)" +msgstr "Korea (Sun Type 6/7)" -#~ msgid "Hebrew (Biblical SIL)" -#~ msgstr "Ibrani (SIL Biblical)" +#~ msgid "Bengali" +#~ msgstr "Bengali" -#~ msgid "Biblical SIL phonetic" -#~ msgstr "Fonetik SIL Biblical" +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugis (Brasil, nativo untuk Esperanto)" diff --git a/xorg-server/xkeyboard-config/po/nl.po b/xorg-server/xkeyboard-config/po/nl.po index b85b6e609..61ee5012f 100644 --- a/xorg-server/xkeyboard-config/po/nl.po +++ b/xorg-server/xkeyboard-config/po/nl.po @@ -1,12 +1,13 @@ # Dutch translations for xkeyboard-config. -# Copyright (C) 2013 Free Software Foundation, Inc. +# Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # -# Three trains, two busses, one good shake. +# “There's a big gang of penguins closing in, +# with a mean look in their eyes...” # # Taco Witte , 2003, 2004, 2005, 2006. # Tino Meinen , 2007, 2008, 2009, 2011, 2012. -# Benno Schulenberg , 2013. +# Benno Schulenberg , 2013, 2014. # ------------------------------------------------------------------------------ # *** Vocabulair *** # Caps Lock - CapsLock (vergrendelt Shift alleen voor lettertoetsen) @@ -31,10 +32,10 @@ # ------------------------------------------------------------------------------ msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 09:44+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 14:15+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -845,7 +846,7 @@ msgid "English (programmer Dvorak)" msgstr "Engels (programmeer-Dvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -869,6 +870,7 @@ msgstr "Engels (de delen-/vermenigvuldigen-toetsen schakelen de indeling)" msgid "Serbo-Croatian (US)" msgstr "Servo-Kroatisch (US)" +# "Workman" is een toetsenbordindeling. #: ../rules/base.xml.in.h:209 msgid "English (Workman)" msgstr "Engels (Workman)" @@ -917,11 +919,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Oezbeeks (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisch" @@ -959,11 +961,11 @@ msgid "Albanian" msgstr "Albanees" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeens" @@ -1039,11 +1041,11 @@ msgid "Belarusian (Latin)" msgstr "Wit-Russisch (Latijns)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisch" @@ -1075,17 +1077,17 @@ msgstr "Belgisch (Sun dode toetsen)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisch (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengaals" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengaals (Probhat)" #. Keyboard indicator for Indian layouts @@ -1098,27 +1100,28 @@ msgid "Indian" msgstr "Indisch" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengaals (India)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengaals (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengaals (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengaals (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengaals (India, Uni Gitanjali)" +# "Baishakhi Inscript" is een toetsenbordindeling. #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengaals (India, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1307,11 +1310,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisch (US-toetsenbord met Bosnische lettertekens)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" @@ -1323,17 +1326,18 @@ msgstr "Portugees (Brazilië, zonder dode toetsen)" msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugees (Brazilië, Dvorak)" +# Nativo is een soort indeling, net als Dvorak en Colemak. #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugees (Brazilië, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugees (Brazilië, Nativo voor US-toetsenborden)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugees (Brazilië, Nativo voor Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazilië, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1487,364 +1491,368 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetaans (met ASCII-cijfers)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Oeigoers" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisch" # Guillemets of ook quillemets zijn Franse aanhalingstekens. # Dit is de "Nederlandse" en dit is de «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisch (met Franse aanhalingstekens)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisch (met Kroatische digrafen)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisch (US-toetsenbord met Kroatische digrafen)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisch (US-toetsenbord met Kroatische lettertekens)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tsjechisch" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tsjechisch (met <\\|>-toets)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tsjechisch (qwerty)" # XXX brede backslash/uitgebreide backslash -- wat is dit? -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tsjechisch (qwerty, brede backslash-toets)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tsjechisch (UCW-indeling, alleen lettertekens met accenten)" # XXX CZ? -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tsjechisch (US Dvorak met Tsjechische UCW-ondersteuning)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Deens" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Deens (zonder dode toetsen)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Deens (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Deens (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Deens (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Nederlands" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Nederlands (Sun dode toetsen)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Nederlands (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Nederlands (standaard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" # Dzongkha is een taal die is afgeleid van het oud-Tibetaans. -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" # Estisch, de taal die ook Estlands of Ests wordt genoemd, # heeft ongeveer 1 miljoen sprekers. -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estisch" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estisch (zonder dode toetsen)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estisch (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estisch (US-toetsenbord met Estische lettertekens)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisch" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisch (met Persisch cijferblok)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Koerdisch (Iran, Latijns Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Koerdisch (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Koerdisch (Iran, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Koerdisch (Iran, Arabisch-Latijns)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakees" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Koerdisch (Irak, Latijns Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Koerdisch (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Koerdisch (Irak, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Koerdisch (Irak, Arabisch-Latijns)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Faeröers" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Faeröers (zonder dode toetsen)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Fins" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Fins (klassiek)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Fins (klassiek, zonder dode toetsen)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Noord-Samisch (Finland)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Fins (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Frans" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Frans (zonder dode toetsen)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Frans (Sun dode toetsen)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Frans (alternatief)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Frans (alternatief, enkel Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Frans (alternatief, zonder dode toetsen)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Frans (alternatief, Sun dode toetsen)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Frans (historisch, alternatief)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Frans (historisch, alternatief, zonder dode toetsen)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Frans (historisch, alternatief, Sun dode toetsen)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Frans (Bepo, ergonomisch, op Dvorak-wijze)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Frans (Bepo, ergonomisch, Dvorak-wijze, enkel Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Frans (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Frans (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Frans (Bretons)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitaans" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgisch (Frankrijk, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Engels (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Engels (Ghana, meertalig)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akaans" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Engels (Ghana, GILLBT)" @@ -1852,800 +1860,800 @@ msgstr "Engels (Ghana, GILLBT)" # de Republiek Guinee, is grondwettelijk een presidentiële republiek in # West-Afrika, gelegen aan de Atlantische Oceaan tussen Guinee-Bissau en # Sierra Leone. De hoofdstad is Conakry. -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Frans (Guinee)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisch" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisch (ergonomisch)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisch (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisch (Georgisch)" # Russisch (Georgisch) -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossetisch (Georgië)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Duits" # acute - aigu (bijv. á) -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Duits (dode aigu)" # grave (bijv: à) -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Duits (dode grave en aigu)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Duits (zonder dode toetsen)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Duits (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Roemeens (Duitsland)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Roemeens (Duitsland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Duits (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Duits (Sun dode toetsen)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Duits (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Duits (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Duits (Macintosh, zonder dode toetsen)" # Het Nedersorbisch is de noordelijke versie van de in Brandenburg # gesproken Sorbische taal. # http://nl.wikipedia.org/wiki/Nedersorbisch -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Nedersorbisch" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Nedersorbisch (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Duits (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisch (Duitsland, fonetisch)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Duits (historisch)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grieks" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grieks (eenvoudig)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grieks (uitgebreid)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grieks (zonder dode toetsen)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grieks (meertonig)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongaars" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongaars (standaard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongaars (zonder dode toetsen)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongaars (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongaars (101/qwertz/komma/dode toetsen)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongaars (101/qwertz/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongaars (101/qwertz/punt/dode toetsen)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongaars (101/qwertz/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongaars (101/qwerty/komma/dode toetsen)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongaars (101/qwerty/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongaars (101/qwerty/punt/dode toetsen)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongaars (101/qwerty/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongaars (102/qwertz/komma/dode toetsen)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongaars (102/qwertz/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongaars (102/qwertz/punt/dode toetsen)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongaars (102/qwertz/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongaars (102/qwerty/komma/dode toetsen)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongaars (102/qwerty/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongaars (102/qwerty/punt/dode toetsen)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Hongaars (102/qwerty/punt/zonder dode toetsen)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "IJslands" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "IJslands (Sun dode toetsen)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "IJslands (zonder dode toetsen)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "IJslands (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "IJslands (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebreeuws" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebreeuws (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebreeuws (fonetisch)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebreeuws (Bijbels, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiaans" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiaans (zonder dode toetsen)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiaans (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiaans (US-toetsenbord met Italiaanse lettertekens)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisch (Italië)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiaans (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japans" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japans (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japans (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japans (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japans (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japans (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgizisch" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgizisch (fonetisch)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambodja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazachstaans" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisch (Kazachstans, met Kazachstaans)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazachstaans (met Russisch)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA voorgestelde standaard indeling)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spaans (Latijns-Amerika)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spaans (Latijns-Amerika, zonder dode toetsen)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spaans (Latijns-Amerika, met dode tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spaans (Latijns-Amerika, Sun dode toetsen)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litouws" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litouws (standaard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litouws (US-toetsenbord met Litouwse lettertekens)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litouws (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litouws (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litouws (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lets" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lets (apostrof-variant)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lets (tilde-variant)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lets (F-variant)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lets (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lets (ergonomisch, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lets (aangepast)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" # Montenegrijns is het Servo-Kroatische (Štokavische) dialect # dat in Montenegro wordt gesproken. -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrijns" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrijns (Cyrillisch)" # verwisseld/gewisseld/omgewisseld -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrijns (Cyrillisch, Z en ZHE omgewisseld)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrijns (Latijns Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrijns (Latijns qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrijns (Latijns Unicode qwerty)" # Guillemets (of ook quillemets) zijn Franse aanhalingstekens. # Voorbeeld: "Nederlandse" en «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrijns (Cyrillisch met Franse aanhalingstekens)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrijns (Latijns met Franse aanhalingstekens)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedonisch" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedonisch (zonder dode toetsen)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltees" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltees (met US-indeling)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongools" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Noors" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Noors (zonder dode toetsen)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Noors (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Noord-Samisch (Noorwegen)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Noord-Samisch (Noorwegen, zonder dode toetsen)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Noors (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Noors (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Noors (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Pools" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Pools (historisch)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Pools (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Pools (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Pools (Dvorak, Poolse aanhalingstekens op aanhalingstekentoets)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Pools (Dvorak, Poolse aanhalingstekens op toets 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kasjoebisch" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisch (Polen, fonetisch Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Pools (programmeer-Dvorak)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugees" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugees (zonder dode toetsen)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugees (Sun dode toetsen)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugees (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugees (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugees (Macintosh, Sun dode toetsen)" # Nativo is een soort indeling, net als Dvorak en Colemak. -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugees (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugees (Nativo voor US-toetsenborden)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Roemeens" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Roemeens (cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Roemeens (standaard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Roemeens (standaard cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Roemeens (Windows-toetsen)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisch" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisch (fonetisch)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisch (fonetisch, Windows-toetsen)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisch (typmachine)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisch (historisch)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisch (typmachine, historisch)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossetisch (historisch)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossetisch (Windows-toetsen)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tsjoevasjisch" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tsjoevasjisch (Latijns)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurts" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" # Het Jakoets is een Turkse taal met ongeveer 360 duizend sprekers. -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakoets" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisch (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisch (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Servisch (Rusland)" # Het Basjkiers is een Turkse taal, voornamelijk gesproken door de Basjkieren. -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Basjkiers" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Servisch" # verwisseld/gewisseld/omgewisseld -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Servisch (Cyrillisch, Z en ZHE omgewisseld)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Servisch (Latijns)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Servisch (Latijns Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Servisch (Latijns qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Servisch (Latijns Unicode qwerty)" # Guillemets of ook quillemets zijn Franse aanhalingstekens. # Dit is "Nederlands" en dit is de «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Servisch (Cyrillisch met Franse aanhalingstekens)" # Guillemets of ook quillemets zijn Franse aanhalingstekens. # Dit is "Nederlands" en dit is de «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Servisch (Latijns met Franse aanhalingstekens)" @@ -2654,764 +2662,764 @@ msgstr "Servisch (Latijns met Franse aanhalingstekens)" # north-western Serbia (Bačka region) and eastern Croatia # (therefore also called Yugoslavo-Ruthenian, Vojvodina-Ruthenian # or Bačka-Ruthenian). -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisch Rusyn (homophonisch)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisch Rusyn" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Sloveens" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Sloveens (met Franse aanhalingstekens voor citaten)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Sloveens (US-toetsenbord met Sloveense lettertekens)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slowaaks" # XXX brede backslash/uitgebreide backslash -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slowaaks (brede backslash-toets)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slowaaks (qwerty)" # XXX brede backslash/uitgebreide backslash -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slowaaks (qwerty, brede backslash-toets)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spaans" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spaans (zonder dode toetsen)" # inactieve/dode/latente -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spaans (met dode tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spaans (Sun dode toetsen)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spaans (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturisch (Spanje, met onderpunts H en onderpunts L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalaans (Spanje, met middenpunts L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spaans (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Zweeds" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Zweeds (zonder dode toetsen)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Zweeds (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisch (Zweden, fonetisch)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisch (Zweden, fonetisch, zonder dode toetsen)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Noord-Samisch (Zweden)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Zweeds (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Zweeds (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Zweedse gebarentaal" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Duits (Zwitserland)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Duits (Zwitserland, historisch)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Duits (Zwitserland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Duits (Zwitserland, Sun dode toetsen)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Frans (Zwitserland)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Frans (Zwitserland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Frans (Zwitserland, Sun dode toetsen)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Frans (Zwitserland, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Duits (Zwitserland, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisch (Syrië)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisch" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisch (fonetisch)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Koerdisch (Syrië, Latijns Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Koerdisch (Syrië, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Koerdisch (Syrië, Latijns Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" # Het Tadzjieks of Tajiki. -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadzjieks" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadzjieks (historisch)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalees (fonetisch)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamil (Sri Lanka, TAB-typmachine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" # Het Thai is de officiële taal van Thailand. -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" # Pattachote en Kedmanee zijn de twee toetsenbordindelingen voor Thai. -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turks" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turks (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turks (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turks (Sun dode toetsen)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Koerdisch (Turks, Latijns Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Koerdisch (Turks, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Koerdisch (Turks, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turks (internationaal, met dode toetsen)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krim-Tataars (Turks Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krim-Tataars (Turks F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krim-Tataars (Turks Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanees" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanees (oorspronkelijk)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" # Saisiyat, ook Saiset, Seisirat, Saisett, Saisiat, Saisiett, Saisirat, # Saisyet, Saisyett, Amutoura of Bouiok. -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Oekraïens" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Oekraïens (fonetisch)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Oekraïens (typmachine)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Oekraïens (Windows-toetsen)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Oekraïens (historisch)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Oekraïens (standaard RSTU)" # Oekraïens (standaard RSTU). -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russisch (Oekraïne, standaard RSTU)" # Pannonian Rusyn (руска бешеда) or simply Rusyn (or Ruthenian) is a Slavic language # or dialect spoken by Pannonian Rusyns in north-western Serbia (Bačka region) and eastern # Croatia (therefore also called Yugoslavo-Ruthenian, Vojvodina-Ruthenian or Bačka-Ruthenian). -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Oekraïens (homophonisch)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Engels (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Engels (UK, uitgebreid Windows-toetsen)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Engels (UK, internationaal, met dode toetsen)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Engels (UK, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Engels (UK, Dvorak met UK-leestekens)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Engels (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Engels (UK, Macintosh internationaal)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Engels (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Oezbeeks" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Oezbeeks (Latijns)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Viëtnamees" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreaans" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreaans (101/104-toetsen compatibel)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japans (PC-98xx serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Iers" # Iers. -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Iers (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" # Iers (Ogham IS434). -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" # Het Urdu, vroeger door Westerse taalkundigen vaak Hindoestani genoemd, # is de officiële taal van Pakistan. -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisch (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Engels (Zuid-Afrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (puntkomma en aanhalingsteken op afwijkende plek, historisch)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalees" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Engels (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" # Het Yoruba is een Afrikaanse taal. Het is de taal van de Yoruba # en wordt gesproken in Nigeria, Benin en Togo. -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" # Het Amhaars is een Semitische taal die in Ethiopië gesproken wordt. -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhaars" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (linkerhand)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (rechterhand)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmeens" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmeens (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" # Bambara, ook bekend onder de naam Bamanankan, is een Mande-taal die door meer # dan zes miljoen mensen gesproken wordt, voornamelijk in Mali. -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Frans (Mali, alternatief)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Engels (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Engels (Mali, US internationaal)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" # Tswana of Setswana is een Bantoetaal die wordt gesproken in Botswana. # Andere benamingen voor Tswana zijn onder meer Sechuana en Beetjuans. -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" # Het Filipijns (Filipino of Pilipino). -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipijns" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipijns (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipijns (Capewell-Dvorak Latijns)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipijns (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipijns (Capewell-QWERF 2006 Latijns)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipijns (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipijns (Colemak Latijns)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipijns (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipijns (Dvorak Latijns)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipijns (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldavisch" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldavisch (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Overschakelen naar een andere indeling" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Rechter Alt-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Linker Alt-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Linker Windows-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Rechter Windows-toets (ingedrukt gehouden)" # Beide Win-toetsen wisselen de indeling gedurende het indrukken. -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Elke Windows-toets (ingedrukt gehouden)" # XXX -- what IS original capslock action? -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "CapsLock (ingedrukt gehouden); Alt+CapsLock geeft de oorspronkelijke caps-lock actie" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Rechter Ctrl-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Rechter Alt-toets" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Linker Alt-toets" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "CapsLock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift + CapsLock" # CapsLock wisselt naar de eerste indeling, Shift+CapsLock wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "CapsLock (naar eerste indeling), Shift+CapsLock (naar laatste indeling)" # Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Linker Windows-toets (naar eerste indeling), rechter Windows/Menu-toets (naar laatste indeling)" # Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Linker Ctrl-toets (naar eerste indeling), rechter Ctrl-toets (naar laatste indeling)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt + CapsLock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Beide Shift-toetsen samen" @@ -3419,554 +3427,570 @@ msgstr "Beide Shift-toetsen samen" # "Beide Alt-toetsen samen verandert de groep." # # tezamen/samen/tegelijk -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Beide Alt-toetsen samen" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Beide Ctrl-toetsen samen" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl + Shift" # Linker Ctrl + Shift-toets -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Linker Ctrl + linker Shift-toets" # Rechter Ctrl + Shift-toets -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Rechter Ctrl + rechter Shift-toets" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt + Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt + Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Linker Alt + linker Shift-toets" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt + Spatie" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Linker Windows-toets" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Rechter Windows-toets" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Linker Shift-toets" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Rechter Shift-toets" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Linker Ctrl-toets" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Rechter Ctrl-toets" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll-Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Linker Ctrl + linker Windows-toets (naar eerste indeling), rechter Ctrl + Menu-toets (naar tweede indeling)" # aan te zetten/te kiezen/te selecteren/te krijgen/te bereiken # 'to choose' is hier een slechte woordkeuze IMO -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Toegang tot het derde niveau" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Elke Windows-toets" # Beide/Willekeurige/Een van de/Een/Elke -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Elke Alt-toets" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Rechter Alt-toets (Shift + rechter Alt-toets is samensteltoets)" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Rechter Alt-toets geeft nooit het derde niveau" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter op cijferblok" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kleiner dan/Groter dan>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "CapsLock, vergrendelt eenmalig samen met andere derdeniveaukiezer" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Backslash, vergrendelt eenmalig samen met andere derdeniveaukiezer" # locks - op slot gezet/blijvend/in stand houden # latches - vergrendelt -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kleiner dan/Groter dan>, vergrendelt eenmalig samen met andere derdeniveaukiezer" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Positie van Ctrl-toets" # Ctrl-toets is hier duidelijker -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "CapsLock is Ctrl-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Linker Ctrl is Meta-toets" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ctrl en CapsLock omwisselen" # Ctrl-toets links van ‘A’ -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Links van de A" # "Ctrl-toets zit linksonder" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Linksonder" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Rechter Ctrl is rechter Alt-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu is rechter Ctrl-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Rechter Alt is rechter Ctrl-toets" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Linker Alt- en linker Ctrl-toets omwisselen" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Linker Windows- en linker Ctrl-toets omwisselen" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Linker Alt is Ctrl, linker Ctrl is Windows-toets, linker Windows-toets is Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Toetsenbord-LED gebruiken om alternatieve indeling te tonen" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" # dubbelop numeriek/cijfer -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Indeling van het cijferblok" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Historisch" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren; de laatste op standaardniveau)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Historisch Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 cijferblok met Unicode-aanvullingen (pijlen en wiskundige operatoren)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Wang 724 cijferblok met Unicode aanvullingen (pijlen en wiskundige operatoren; de laatste op standaardniveau)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimaal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefoonstijl" # Op het cijferblok is de delete toets aangegeven met "Del", maar # voor de duidelijkheid maar "Delete-toetsgedrag" van gemaakt. -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Gedrag van Delete-toets op cijferblok" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Historisch met punt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Historisch met komma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Vierniveaus-toets met punt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Vierniveaus-toets met punt, beperkt tot Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Vierniveaus-toets met komma" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Vierniveaus-toets met momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Vierniveaus-toets met abstracte scheidingstekens" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Puntkomma op derde niveau" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Gedrag van CapsLock-toets" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock tijdelijk op" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock niet op" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock tijdelijk op" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock niet op" # heeft alleen effect op/werkt alleen op/beïnvloedt alleen ~ # de alfabetische toetsen/ # bepaalt hoofdletters/kleine letters bij alfabetische tekens.< -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "CapsLock beïnvloedt alleen alfabetische tekens" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Van CapsLock een extra NumLock maken" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc en CapsLock omwisselen" # ESC-toets. -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Van CapsLock een extra ESC maken" # Backspace-toets. -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Van CapsLock een extra Backspace maken" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Van CapsLock een extra Super maken" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Van CapsLock een extra Hyper maken" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "CapsLock schakelt Shift-vergrendeling aan/uit (beïnvloedt alle toetsen)" # heeft geen functie/geen effect -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "CapsLock is uitgeschakeld" # Ctrl-toets -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Van CapsLock een extra Ctrl maken" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Gedrag van Alt/Windows-toetsen" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Het standaardgedrag toevoegen aan de Menu-toets" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt en Meta zitten op de Alt-toetsen" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt zit op de Windows-toetsen (én op de gebruikelijke Alt-toetsen)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl zit op de Windows-toetsen (én op de gebruikelijke Ctrl-toetsen)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl zit op de Alt-toetsen, Alt zit op de Windows-toetsen" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta zit op de Windows-toetsen" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta zit op de linker Windows-toets" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper zit op de Windows-toetsen" # wordt afgebeeld op/zit op # zit op is veel korter en is ook duidelijker -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt zit op de rechter Windows-toets, Super op de Menu-toets" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt- en Windows-toetsen omwisselen" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Positie van samensteltoets" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "derde niveau van linker Windows-toets" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "derde niveau van rechter Windows-toets" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "derde niveau van Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "derde niveau van linker Ctrl-toets" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "derde niveau van rechter Ctrl-toets" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "derde niveau van CapsLock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "derde niveau van <Kleiner dan/Groter dan>" # De tekst op de Pause-toets is meestal "Pause". -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Overige compatibiliteitsopties" # dubbelop numeriek/cijfer -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Standaard cijferblok-toetsen" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Cijferblok-toetsen geven altijd cijfers (net als bij Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift met cijferblok-toetsen werkt zoals in MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift heft NumLock niet op, maar geeft juist het derde niveau" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Speciale toetsen (Ctrl+Alt+<toets>) afgehandeld in een server" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple Aluminium-toetsenbord: PC-toetsen emuleren (Print, Scroll-Lock, Pause, NumLock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift schakelt CapsLock uit" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Extra typografische tekens aanzetten" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Beide Shift-toetsen samen schakelen CapsLock aan/uit" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Beide Shift-toetsen samen zetten CapsLock aan, één Shift-toets zet uit" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Beide Shift-toetsen samen schakelen ShiftLock aan/uit" # PointerKeys are the mouse emulation that XKB provides on the press of a key. # (Test with Shift+NumLock, then the keypad will move the mouse around.) -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock schakelen 'muistoetsen' aan/uit" # XXX -- what does "grab" mean? -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Het verbreken van 'grabs' via toetsenbord toestaan (veiligheidsrisico)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Het loggen van 'grabs' en 'window trees' toestaan" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Valutatekens aan bepaalde toetsen toevoegen" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euroteken op E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euroteken op 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euroteken op 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euroteken op 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Roepie op 4" # aan te zetten/te kiezen/te selecteren/te krijgen # 'to choose' is hier een slechte woordkeuze IMO -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "De toets om het vijde niveau te krijgen" # locks - op slot gezet/blijvend/in stand houden -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kleiner dan/Groter dan> geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Rechter Alt-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Linker Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Rechter Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Gebruik van spatiebalk voor het invoeren van harde (niet-afbrekende) spaties" # Spatiebalk geeft de gebruikelijke spatie op elk niveau. -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Gewone spatie op elk niveau" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Harde spatie op het tweede niveau" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Harde spatie op het derde niveau" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Harde spatie op het derde niveau, niets op het vierde niveau" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Harde spatie op het derde niveau, smalle harde spatie op het vierde niveau" # Spatiebalk geeft harde spatie op het vierde niveau. -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Harde spatie op het vierde niveau" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau (via Ctrl+Shift)" @@ -3980,85 +4004,85 @@ msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde nive # Nulbreedte-losmaker/non-verbinder/non-verbindingsteken -- # losmaker is het duidelijkst, het maakt twee tekens los die # anders verbonden zouden worden. (Tino) -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nulbreedte-losmaker op het tweede niveau" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau, harde spatie op het vierde niveau" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, niets op het vierde niveau" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, nulbreedte-verbinder op het vierde niveau" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, smalle harde spatie op het vierde niveau" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Nulbreedte-losmaker op het derde niveau, nulbreedte-verbinder op het vierde niveau" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanse toetsenbordopties" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana Lock-toets is vergrendelend" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F-stijl backspace" # De Zenkaku Hankaku toets converteert tussen volle breedte en half breedte karakters. -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Van de Zenkaku Hankaku-toets een extra ESC-toets maken" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Esperanto-letters met accenten toevoegen" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Aan de gerelateerde toets in een Qwerty-indeling" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Aan de gerelateerde toets in een Dvorak-indeling" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Aan de gerelateerde toets in een Colemak-indeling" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Toetscompatibiliteit behouden met oude Solaris-toetscodes" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun-toetsen-compatibiliteit" # om zeep te helpen/af te breken/te stoppen/ -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Toetscombinatie om de X-server af te breken" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4185,149 +4209,154 @@ msgstr "Cœur d'Alène Salish" msgid "English (US, Sun Type 6/7)" msgstr "Engels (US, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +# "Norman" is een toetsenbordindeling. +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Engels (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Pools (internationaal, met dode toetsen)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Pools (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Pools (Sun type 6/7)" # Krim-Tataars of Krim-Turks. # http://nl.wikipedia.org/wiki/Krim-Tataars -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krim-Tataars (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Roemeens (ergonomisch Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Roemeens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Servisch (Combinerende accenten in plaats van dode toetsen)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisch (met Oekraïens-Wit-Russische indeling)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeens (OLPC, fonetisch)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebreeuws (Bijbels, SIL-fonetisch)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugees (Brazilië, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tsjechisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Deens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Nederlands (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fins (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Frans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grieks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiaans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japans (Sun type 6/)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japans (Sun type 7 - PC-compatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japans (Sun type 7 - Sun-compatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Noors (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugees (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slowaaks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spaans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Zweeds (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Duits (Zwitserland, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Frans (Zwitserland, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Oekraïens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Engels (UK, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreaans (Sun type 6/7)" @@ -4463,9 +4492,6 @@ msgstr "Koreaans (Sun type 6/7)" #~ msgid "Myanmar" #~ msgstr "Myanmar" -#~ msgid "Nativo" -#~ msgstr "Nativo" - #~ msgid "Netherlands" #~ msgstr "Nederland" @@ -4560,7 +4586,7 @@ msgstr "Koreaans (Sun type 6/7)" #~ msgstr "qwertz" #~ msgid "ACPI Standard" -#~ msgstr "ACPI standaard" +#~ msgstr "ACPI-standaard" #~ msgid "Baltic+" #~ msgstr "Baltisch+" diff --git a/xorg-server/xkeyboard-config/po/pl.po b/xorg-server/xkeyboard-config/po/pl.po index fcb4f678c..deb05f4c7 100644 --- a/xorg-server/xkeyboard-config/po/pl.po +++ b/xorg-server/xkeyboard-config/po/pl.po @@ -1,13 +1,13 @@ # Polish translation for xkeyboard-config. # This file is distributed under the same license as the xkeyboard-config package. -# Jakub Bogusz , 2009-2013. +# Jakub Bogusz , 2009-2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 16:31+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-17 17:01+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -814,7 +814,7 @@ msgid "English (programmer Dvorak)" msgstr "Angielski (Dvoraka programisty)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -886,11 +886,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Uzbecki (Afganistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabski" @@ -928,11 +928,11 @@ msgid "Albanian" msgstr "Albański" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeński" @@ -1008,11 +1008,11 @@ msgid "Belarusian (Latin)" msgstr "Białoruski (łaciński)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgijski" @@ -1044,17 +1044,17 @@ msgstr "Belgijski (klawisze akcentów Suna)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgijski (Wang model 724 AZERTY)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengalski" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalski (Probhat)" #. Keyboard indicator for Indian layouts @@ -1067,27 +1067,27 @@ msgid "Indian" msgstr "Indyjski" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalski (Indie)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalski (Indie, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalski (Indie, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalski (Indie, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalski (Indie, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalski (Indie, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1271,11 +1271,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bośniacki (klawiatura US z literami bośniackimi)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugalski (Brazylia)" @@ -1288,16 +1288,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugalski (Brazylia, Dvoraka)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugalski (Brazylia, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugalski (Brazylia, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Portugalski (Brazylia, nativo dla klawiatur US)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugalski (Brazylia, Nativo dla klawiatur US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugalski (Brazylia, nativo dla esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazylia, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1451,2462 +1451,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tybetański (z liczbami ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgurski" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Chorwacki" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Chorwacki (z użyciem cudzysłowów do cytowania)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Chorwacki (z użyciem dwuznaków chorwackich)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Chorwacki (klawiatura US z dwuznakami chorwackimi)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Chorwacki (klawiatura US z literami chorwackimi)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Czeski" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Czeski (z klawiszem <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Czeski (QWERTY)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Czeski (QWERTY, rozszerzony Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Czeski (układ UCW - tylko litery akcentowane)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Czeski (US Dvoraka z obsługą CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Duński" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Duński (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Duński (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Duński (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Duński (Dvoraka)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holenderski" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holenderski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holenderski (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holenderski (standardowy)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongka" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estoński" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estoński (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estoński (Dvoraka)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estoński (klawiatura US z literami estońskimi)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Perski" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Perski (z perską klawiaturą numeryczną)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdyjski (Iran, łaciński Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdyjski (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdyjski (Iran, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdyjski (Iran, arabsko-łaciński)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iracki" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdyjski (Irak, łaciński Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdyjski (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdyjski (Irak, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdyjski (Irak, arabsko-łaciński)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Farerski" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Farerski (bez klawiszy akcentów)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Fiński" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Fiński (klasyczny)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Fiński (klasyczny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Północnolapoński (Finlandia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Fiński (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francuski" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francuski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francuski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francuski (alternatywny)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francuski (alternatywny, tylko Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francuski (alternatywny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francuski (alternatywny, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francuski (stary, alternatywny)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francuski (stary alternatywny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francuski (stary alternatywny, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka, tylko Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francuski (Dvoraka)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francuski (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francuski (bretoński)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcytański" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Gruziński (Francja, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angielski (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angielski (Ghana, wielojęzyczny)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fulani" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angielski (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francuski (Gwinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Gruziński" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Gruziński (ergonomiczny)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Gruziński (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rosyjski (gruziński)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osetyjski (Gruzja)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Niemiecki" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Niemiecki (akcent ostry)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Niemiecki (akcent gravis)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Niemiecki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Niemiecki (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumuński (Niemcy)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumuński (Niemcy, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Niemiecki (Dvoraka)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Niemiecki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Niemiecki (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Niemiecki (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Niemiecki (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Dolnołużycki" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Dolnołużycki (QWERTZ)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Niemiecki (QWERTY)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rosyjski (Niemcy, fonetyczny)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Niemiecki (stary)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grecki" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grecki (prosty)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grecki (rozszerzony)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grecki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grecki (politoniczny)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Węgierski" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Węgierski (standardowy)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Węgierski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Węgierski (QWERTY)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Węgierski (101/QWERTZ/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Węgierski (101/QWERTZ/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Węgierski (101/QWERTZ/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Węgierski (101/QWERTZ/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Węgierski (101/QWERTY/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Węgierski (101/QWERTY/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Węgierski (101/QWERTY/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Węgierski (101/QWERTY/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Węgierski (102/QWERTZ/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Węgierski (102/QWERTZ/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Węgierski (102/QWERTZ/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Węgierski (102/QWERTZ/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Węgierski (102/QWERTY/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Węgierski (102/QWERTY/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Węgierski (102/QWERTY/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandzki" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandzki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandzki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandzki (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandzki (Dvoraka)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebrajski" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebrajski (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebrajski (fonetyczny)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebrajski (biblijny, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Włoski" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Włoski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Włoski (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Włoski (klawiatura US z literami włoskimi)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Gruziński (Włochy)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Włoski (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japoński" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japoński (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japoński (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japoński (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japoński (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japoński (Dvoraka)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiski" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiski (fonetyczny)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmerski (Kambodża)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazaski" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rosyjski (Kazahstan, z kazaskim)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazaski (z rosyjskim)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laotański" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laotański (proponowany układ standardowy STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Hiszpański (Ameryka Łacińska)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Hiszpański (Ameryka Łacińska, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Hiszpański (Ameryka Łacińska, ze znakiem tyldy)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 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:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litewski" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litewski (standardowy)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litewski (klawiatura US z literami litewskimi)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litewski (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litewski (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litewski (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Łotewski" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Łotewski (wariant z apostrofem)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Łotewski (wariant z tyldą)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Łotewski (wariant F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Łotewski (współczesny)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Łotewski (ergonomiczny ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Łotewski (zaadaptowany)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maoryski" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Czarnogórski" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Czarnogórski (cyrylicki)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Czarnogórski (cyrylicki, zamienione Z i Ż)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Czarnogórski (łaciński unikodowy)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Czarnogórski (łaciński QWERTY)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Czarnogórski (łaciński unikodowy QWERTY)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Czarnogórski (cyrylicki z cudzysłowami)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Czarnogórski (łaciński z cudzysłowami)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedoński" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoński (bez klawiszy akcentów)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltański" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltański (z układem US)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolski" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norweski" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norweski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norweski (Dvoraka)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Północnolapoński (Norwegia)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Północnolapoński (Norwegia, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norweski (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norweski (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norweski (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polski" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polski (stary)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polski (QWERTZ)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polski (Dvoraka)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaszubski" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rosyjski (Polska, fonetyczny Dvoraka)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polski (Dvoraka programisty)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugalski" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugalski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugalski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugalski (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugalski (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugalski (Macintosh, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" -msgstr "Portugalski (nativo)" +msgstr "Portugalski (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugalski (Nativo dla klawiatur US)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugalia, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumuński" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumuński (cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumuński (standardowy)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumuński (standardowy cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumuński (klawisze Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rosyjski" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rosyjski (fonetyczny)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rosyjski (fonetyczny, klawisze Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rosyjski (maszynistki)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rosyjski (stary)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rosyjski (maszynistki, stary)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatarski" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osetyjski (stary)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osetyjski (klawisze Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Czuwaski" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Czuwaski (łaciński)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurcki" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakucki" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kałmucki" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rosyjski (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rosyjski (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbski (Rosja)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baszkirski" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Maryjski" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbski" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbski (cyrylicki, zamienione Z i Ż)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbski (łaciński)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbski (łaciński unikodowy)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbski (łaciński QWERTY)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbski (łaciński unikodowy QWERTY)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbski (cyrylicki z cudzysłowami)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbski (łaciński z cudzysłowami)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannońskorusiński (homofoniczny)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannońskorusiński" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Słoweński" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Słoweński (używanie cudzysłowów do cytowania)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 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:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Słowacki" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Słowacki (rozszerzony backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Słowacki (QWERTY)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Słowacki (QWERTY, rozszerzony Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Hiszpański" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Hiszpański (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Hiszpański (ze znakiem tyldy)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Hiszpański (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Hiszpański (Dvoraka)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 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:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Kataloński (hiszpański, z L ze środkową kropką)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Hiszpański (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Szwedzki" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Szwedzki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Szwedzki (Dvoraka)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rosyjski (Szwecja, fonetyczny)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rosyjski (Szwecja, fonetyczny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Północnolapoński (Szwecja)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Szwedzki (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Szwedzki (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Szwedzki migowy" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Niemiecki (Szwajcaria)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Niemiecki (Szwajcaria, stary)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Niemiecki (Szwajcaria, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Niemiecki (Szwajcaria, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francuski (Szwajcaria)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francuski (Szwajcaria, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francuski (Szwajcaria, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francuski (Szwajcaria, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Niemiecki (Szwajcaria, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabski (syryjski)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syryjski" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syryjski (fonetyczny)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdyjski (Syria, łaciński Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdyjski (Syria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdyjski (Syria, łaciński Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadżycki" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadżycki (stary)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Syngaleski (fonetyczny)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilski (Sri Lanka, unikodowy)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilski (Sri Lanka, maszynistki TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tajski" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tajski (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tajski (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turecki" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turecki (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turecki (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turecki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdyjski (Turcja, łaciński Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdyjski (Turcja, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdyjski (Turcja, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 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:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krymskotatarski (turecki Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krymskotatarski (turecki F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krymskotatarski (turecki Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajwański" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajwański (autochtoniczny)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukraiński" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukraiński (fonetyczny)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukraiński (maszynistki)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukraiński (klawisze Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukraiński (stary)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukraiński (standardowy RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rosyjski (Ukraina, standardowy RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukraiński (homofoniczny)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angielski (Wielka Brytania)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angielski (Wielka Brytania, rozszerzone klawisze Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angielski (Wielka Brytania, międzynarodowy z klawiszami akcentów)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angielski (Wielka Brytania, Dvoraka)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angielski (Wielka Brytania, Dvoraka z brytyjskimi znakami przestankowymi)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angielski (Wielka Brytania, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angielski (Wielka Brytania, międzynarodowy Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angielski (Wielka Brytania, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbecki" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbecki (łaciński)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Wietnamski" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreański" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreański (kompatybilny ze 101/104 klawiszami)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japoński (serie PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandzki" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Irlandzki gaelicki" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandzki (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogamiczny" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogamiczny (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabski (pakistański)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Malediwski" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angielski (Afryka Południowa)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperancki" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 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:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalski" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angielski (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Ibo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharski" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille'a" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (leworęczny)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (praworęczny)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmeński" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmeński (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francuski (Mali, alternatywny)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angielski (Mali, USA - Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angielski (Mali, międzynarodowy USA)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suahili (Tanzania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikiju" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipiński" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (baybain QWERTY)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipiński (łaciński Capewella-Dvoraka)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipiński (baybayin Capewella-Dvoraka)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipiński (łaciński Capewella-QWERF 2006)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipiński (baybayin Capewella-QWERF 2006)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipiński (łaciński Colemak)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipiński (baybain Colemak)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipiński (łaciński Dvoraka)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipiński (baybain Dvoraka)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Mołdawski" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Mołdawski (gagauski)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Przełączenie na inny układ" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Prawy Alt (wciśnięty)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Lewy Alt (wciśnięty)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Lewy Win (wciśnięty)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Prawy Win (wciśnięty)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Dowolny klawisz Win (wciśnięty)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Prawy Ctrl (wciśnięty)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Prawy Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Lewy Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "CapsLock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+CapsLock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+CapsLock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Oba klawisze Shift naraz" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Oba klawisze Alt naraz" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Oba klawisze Ctrl naraz" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Lewy Ctrl+lewy Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Prawy Ctrl+prawy Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Lewy Alt+lewy Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Spacja" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Lewy Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Prawy Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Lewy Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Prawy Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Lewy Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Prawy Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "ScrollLock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Klawisz wybierający poziom 3." -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Dowolny klawisz Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Dowolny klawisz Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Prawy Alt, Shift+prawy Alt jako Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Prawy Alt nigdy nie wybierający poziomu 3." -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter na klawiaturze numerycznej" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Mniejsze/Większe>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Mniejsze/Większe> wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3." -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Położenie klawisza Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "CapsLock jako Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Lewy Ctrl jako Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Zamiana Ctrl i CapsLocka" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Z lewej 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "W lewym dolnym rogu" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Prawy Ctrl jako prawy Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu jako prawy Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Prawy Alt jako prawy Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Zamiana lewego Alta z lewym Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Zamiana lewego Win z lewym Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Lewy Alt jako Ctrl, lewy Ctrl jako Win, lewy Win jako Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Układ klawiatury numerycznej" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Stary" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Dodatki Unicode (strzałki i symbole matematyczne)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Legacy Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Szesnastkowy" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefoniczna" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Klawisz tradycyjny z kropką" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Klawisz tradycyjny z przecinkiem" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Klawisz czterofunkcyjny z kropką" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Klawisz czterofunkcyjny z kropką, tylko Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Klawisz czterofunkcyjny z przecinkiem" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Klawisz czterofunkcyjny z abstrakcyjnymi separatorami" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Średnik na poziomie 3." -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Zachowanie klawisza CapsLock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "CapsLock przełącza wielkość znaków alfabetycznych" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "CapsLock jako dodatkowy NumLock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Zamiana Esc i CapsLocka" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "CapsLock jako dodatkowy Esc" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "CapsLock jako dodatkowy Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "CapsLock jako dodatkowy Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "CapsLock jako dodatkowy Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "CapsLock przełącza ShiftLock (wpływając na wszystkie klawisze)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "CapsLock wyłączony" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "CapsLock jako dodatkowy Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Zachowanie klawiszy Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Dodanie standardowego działania klawisza Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt i Meta pod klawiszami Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl pod klawiszami Alt, Alt pod klawiszami Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta pod klawiszami Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta pod lewym Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper pod klawiszami Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt pod prawym Win, Super pod Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Lewy zamieniony z Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Położenie klawisza Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Pozion 3. lewego klawisza Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Pozion 3. prawego klawisza Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Poziom 3. klawisza Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Poziom 3. lewego klawisza Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Poziom 3. prawego klawisza Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Poziom 3. klawisza Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Poziom 3. klawisza <Mniejsze/Większe>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pauza" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Różne opcje kompatybilności" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Domyślne klawisze klawiatury numerycznej" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift nie anuluje NumLocka, wybiera poziom 3." -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Klawisze specjalne (Ctrl+Alt+<klawisz>) obsługiwane przez serwer" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift anuluje CapsLock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Włączenie dodatkowych znaków typograficznych" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Oba klawisze Shift naraz przełączają CapsLock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 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:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Oba klawisze Shift naraz przełączają ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock przełącza klawisze kursorów" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 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:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Możliwe przechwytywanie i logowanie drzewa okien" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Dodanie znaków walut do pewnych klawiszy" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro pod E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro pod 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro pod 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro pod 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia pod 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Klawisz wybierający poziom 5." -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Mniejsze/Większe> wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5." -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Zwykła spacja na dowolnym poziomie" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Znak niełamliwej spacji na poziomie 2." -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Znak niełamliwej spacji na poziomie 3." -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Znak niełamliwej spacji na poziomie 4." -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Znak rozdzielający zerowej szerokości na poziomie 2." -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Opcje klawiatury japońskiej" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Blokujący klawisz Kana Lock" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace w stylu NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Zenkaku Hankaku jako dodatkowy Esc" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Dodanie akcentów Esperanto (supersigno)" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Pod odpowiednimi klawiszami wg układu QWERTY" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Pod odpowiednimi klawiszami wg układu Colemak" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Zachowanie zgodności klawiszy ze starymi kodami Solarisa" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Zgodność klawiszy z Sunem" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Sekwencja klawiszy zabijająca serwer X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4018,146 +4038,150 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angielski (USA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angielski (Normana)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polski (międzynarodowy z klawiszami akcentów)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polski (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krymskotatarski (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumuński (ergonomiczny Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumuński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbski (łączenie akcentów zamiast klawiszy akcentów)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rosyjski (z układem ukraińsko-białoruskim)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rosyjski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeński (fonetyczny OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebrajski (biblijny, fonetyczny SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgijski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugalski (Brazylia, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Czeski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Duński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holenderski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estoński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fiński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francuski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grecki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Włoski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japoński (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japoński (Sun Type 7 - kompatybilny z PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japoński (Sun Type 7 - kompatybilny z Sunem)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norweski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugalski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Słowacki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Hiszpański (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Szwedzki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Niemiecki (Szwajcaria, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francuski (Szwajcaria, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turecki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukraiński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angielski (USA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreański (Sun Type 6/7)" diff --git a/xorg-server/xkeyboard-config/po/pt_BR.po b/xorg-server/xkeyboard-config/po/pt_BR.po index 53be57077..c5331d532 100644 --- a/xorg-server/xkeyboard-config/po/pt_BR.po +++ b/xorg-server/xkeyboard-config/po/pt_BR.po @@ -1,15 +1,15 @@ # Brazilian Portuguese translation for xkeyboard-config -# Copyright (c) 2013 Canonical Ltd, and Rosetta Contributors 2013 +# Copyright (c) 2014 Canonical Ltd, and Rosetta Contributors 2014 # This file is distributed under the same license as the xkeyboard-config package. # Gabriell Nascimento , 2012. -# Enrico Nicoletto , 2013. +# Enrico Nicoletto , 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 20:48-0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 09:43-0300\n" "Last-Translator: Enrico Nicoletto \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -17,7 +17,7 @@ msgstr "" "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.7\n" +"X-Generator: Poedit 1.6.3\n" #: ../rules/base.xml.in.h:1 msgid "Generic 101-key PC" @@ -818,7 +818,7 @@ 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 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -890,11 +890,11 @@ 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 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Árabe" @@ -932,11 +932,11 @@ msgid "Albanian" msgstr "Albanês" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armênio" @@ -1012,11 +1012,11 @@ msgid "Belarusian (Latin)" msgstr "Bielorrusso (latino)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1048,17 +1048,17 @@ msgstr "Belga (Teclas mortas da Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang modelo 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengali" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengali (Probhat)" #. Keyboard indicator for Indian layouts @@ -1071,27 +1071,27 @@ msgid "Indian" msgstr "Indiano" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengali (Índia)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengali (Índia, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Índia, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengali (Índia, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Índia, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Índia, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1275,11 +1275,11 @@ 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:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" @@ -1292,16 +1292,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portuguese (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Português (Brasil, nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Português (Brasil, nativo para teclados americanos)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Português (Brasil, nativo para Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brasil, nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1455,2462 +1455,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetano (com númerais ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croata" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croata (utilizar aspas para citações)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croata (utilizar dígrafos croatas)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croata (Teclado EUA com digráfos croatas)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croata (Teclado EUA com letras croatas)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tchéco" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tcheco (com a tecla <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tcheco (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tcheco (qwerty, barra invertida extendida)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tcheco (leiaute UCW, apenas letras acentuadas)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 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:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dinamarquês" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dinamarquês (sem teclas mortas)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dinamarquês (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dinamarquês (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dinamarquês (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holandês" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holandês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holandês (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holandês (padrão)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estônio" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estoniano (sem teclas mortas)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estoniano (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estoniano (teclado EUA com letras estonianas)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (com teclado númerico persa)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Curdo (Irã, Q latino)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Curdo (Irã, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Curdo (Irã, latino Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Curdo (Irã, Arábico-Latino)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraqui" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Curdo (Irã, Q latino)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Curdo (Iraque, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Curdo (Iraque, alt-Q latino)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Curdo (Iraque, Arábico-Latino)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Faroês" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroês (sem teclas mortas)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finlandês" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finlandês (clássico)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finlandês (clássico, sem teclas mortas)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Lapão setentrional (Finlândia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finlandês (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francês" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francês (sem teclas mortas)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francês (alternativo)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francês (alternativo, apenas Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francês (alternativo, sem teclas mortas)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francês (alternativo, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francês (legado, alternativo)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francês (legado, alternativo, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francês (legado, alternativo, teclas mortas da Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francês (Bepó, ergonômico, Dvorak)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francês (Bepó, ergonômico, modo Dvorak, apenas Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francês (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francês (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francês (Bretão)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitano" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgiano (França, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Inglês (Gana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Inglês (Gana, multilíngue)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Inglês (Gana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francês (Guiné)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgiano" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgiano (ergonômico)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgiano (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russo (Geórgia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osseto (Geórgia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Alemão" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Alemão (com acento agudo)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Alemão (com acentos grave e agudo)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Alemão (sem teclas mortas)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Alemão (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Romeno (Alemanha)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Romeno (Alemanha, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Alemão (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Alemão (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Alemão (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Alemão (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Alemão (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Baixo Sorábio" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Baixo Sorábio (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Alemão (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russo (Alemanha, fonético)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Alemão (legado)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grego" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grego (simplificado)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grego (estendido)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grego (sem teclas mortas)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grego (politônico)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Húngaro" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Húngaro (padrão)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Húngaro (sem teclas mortas)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Húngaro (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Húngaro (101 teclas, qwertz, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 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:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Húngaro (101 teclas, qwertz, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 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:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Húngaro (101 teclas, qwerty, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 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:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Húngaro (101 teclas, qwerty, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 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:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Húngaro (102 teclas, qwertz, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 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:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Húngaro (102 teclas, qwertz, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 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:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Húngaro (102 teclas, qwerty, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 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:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Húngaro (102 teclas, qwerty, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 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:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandês" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandês (sem teclas mortas)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandês (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandês (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebraico" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebraico (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebraico (fonético)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebraico (Bíblico, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiano" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiano (sem teclas mortas)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiano (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiano (Teclado EUA com letras italianas)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgiano (Itália)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiano (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonês" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonês (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonês (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonês (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonês (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonês (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Quirguistão" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Quirguiz (fonético)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Cambojano (Camboja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Cazaque" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russo (Cazaquistão, com cazaque)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Cazaque (com Russo)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laociano" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 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:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espanhol (América Latina)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espanhol (América Latina, sem teclas mortas)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espanhol (América Latina, com tecla til)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 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:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituânio" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituano (padrão)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituano (Teclado EUA com letras lituanas)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituano (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituano (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituano (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letão" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letão (variação com apóstrofes)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letão (variante com til)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letão (F variante)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letão (moderno)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letão (ergonômico, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letão (adaptado)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrino" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrino (Cirílico)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrino (Cirílico, Z and ZHE invertidos)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrino (Unicode latino)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrino (qwerty latino)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrino (Qwerty Unicode latino)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrino (Cirílico com aspas angulares)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrino (Latino com aspas angulares)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedônio" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoniano (sem teclas mortas)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltês" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltês (Teclado EUA)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norueguês" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norueguês (sem teclas mortas)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norueguês (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Lapão setentrional (Noruega)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Lapão setentrional (Noruega, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norueguês (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norueguês (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norueguês (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonês" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonês (legado)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonês (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polonês (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonês (Dvorak, aspas polonesas na tecla de aspas)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polonês (Dvorak, aspas polonesas na tecla 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kashubian" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russo (Polônia, Dvorak fonético)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonês (Dvorak para programador)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Português" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Português (sem teclas mortas)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Português (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Português (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Português (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Português (Macintosh, teclas mortas da Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Português (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Português (Nativo para teclados americanos)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Romênio" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Romeno (com cedilha)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Romeno (padrão)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Romeno (padrão, com cedilha)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Romeno (teclas Windows)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russo" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russo (fonético)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russo (fonético com teclas Windows)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russo (máquina de escrever)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russo (legado)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russo (máquina de escrever, legado)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tátar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osseto (legado)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osseto (WinKeys)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tchuvache" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tchuvache (Latino)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Yakut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russo (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russo (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Sérvio (Rússia)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bashkirian" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Sérvio" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Sérvio (Cirílico, Z e ZHE trocados)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Sérvio (Latino)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Sérvio (Latino Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Sérvio (qwerty, Latino)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Sérvio (qwerty, Latino Unicode)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Sérvio (Cirílico com guillemets)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Sérvio (Latin com aspas angulares)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Ruteno (homofônico)" +# http://pt.wikipedia.org/wiki/Rusins --Enrico +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Rusins da Panônia" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Esloveno" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Esloveno (utilizar aspas para citações)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Esloveno (teclado US com letras eslovenas)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovaco" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovaco (barra invertida extendida)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslováquio (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovaco (qwerty, barra invertida extendida)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espanhol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espanhol (sem teclas mortas)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espanhol (com tecla til)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espanhol (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espanhol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 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:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalão (Espanha, com ponto mediano entre o L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espanhol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suéco" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Sueco (sem teclas mortas)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Sueco (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russo (Suécia, fonético)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russo (Suécia, fonético, sem teclas mortas)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Lapão setentrional (Suécia)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Sueco (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sueco (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Língua de sinais sueca" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Alemão (Suíça)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Alemão (Suíça, legado)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Alemão (Suiça, sem teclas mortas)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Alemão (Suiça, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francês (Suíça)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francês (Suíça, sem teclas mortas)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francês (Suíça, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francês (Suíça, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Alemão (Suíça, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Árabe (Síria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Sírio" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Sírio (fonético)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Curdo (Síria, Q latino)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Curdo (Síria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Curdo (Síria, alt-Q latino)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjique" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjique (legado)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (fonética)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tâmil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 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:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tailandês" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tailandês (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tailandês (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turco" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turco (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turco (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turco (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Curdo (Turquia, Q latino)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Curdo (Turquia, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Curdo (Turquia, alt-Q latino)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turco (internacional com teclas mortas)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Crimean Tatar (Turkish Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Crimean Tatar (Turkish F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Crimean Tatar (Turkish Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanês" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanês (indígena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ucraniano" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ucraniano (fonético)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ucraniano (Máquina de escrever)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ucraniano (teclas Windows)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ucraniano (legado)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ucraniano (padrão RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russo (Ucrânia, RSTU padrão)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ucraniano (homofônico)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Inglês (Reino Unido)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Inglês (Reino Unido, WinKeys estendidas)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Inglês (Reino Unido, internacional com teclas mortas)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Inglês (Reino Unido, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Inglês (Reino Unido, Dvorak com pontuação do Reino Unido)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Inglês (Reino Unido, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Inglês (Reino Unido, Macintosh internacional)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Inglês (Reino Unido, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbeque" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbeque (Latino)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamês" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coreano" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coreano (compatível com 101/104 teclas)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonês (PC-98xx Series)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandês" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandês (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogam" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Paquistão)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Paquistão, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Paquistão, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Árabe (Paquistão)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Síndi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Inglês (África do Sul)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 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:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalês" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Inglês (Nigéria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Iorubá" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amárico" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braile" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (canhoto)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (destro)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turcomano" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turcomano (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francês (Mali, alternativo)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Inglês (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Inglês (Mali, US internacional)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suaíli (Tanzânia)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suaíli (Quênia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipino" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (QWERTY baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipino (Capewell-Dvorak latino)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipino (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipino (Capewell-QWERF 2006 latino)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipino (Capewell-QWERF 2006 baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipino (Colemak latino)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipino (Colemak baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipino (Dvorak latino)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipino (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldávio" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldávio (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Alternando para outra disposição" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt Direito (quando pressionado)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt Esquerdo (quando pressionado)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Win Esquerdo (quando pressionado)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Win Direito (quando pressionado)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Qualquer tecla Windows (quando pressionada)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl Direito (quando pressionado)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt direito" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt Esquerdo" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Ambas teclas Shift juntas" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Ambas teclas Alt juntas" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Ambas teclas Ctrl juntas" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl Esquerdo+Shift Esquerdo" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl da Direita+Shift da Direita" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt da esquerda + Shift da esquerda" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espaço" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Win Esquerdo" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Win Direito" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Shift Esquerdo" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Shift direito" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl Esquerdo" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl Direito" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tecla para escolher terceiro nível" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Qualquer tecla Windows" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Qualquer tecla Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt direito, Shift+Alt direito é tecla de composição" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Tecla Alt Direita nunca escolhe terceiro nível" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter no teclado numérico" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barra invertida" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Menor que/Maior que>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Less/Greater> 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:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Posição da tecla Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock como Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl da esquerda como Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Trocar o Ctrl e o Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "À esquerda de 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Na parte inferior esquerda" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl Direito como Alt Direito" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu como Ctrl da direita" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt da direita como Ctrl da direita" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Alternar a tecla Alt esquerda com a tecla Ctrl esquerda" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Alternar a tecla Win esquerda com a tecla Ctrl esquerda" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt esquerdo como Ctrl, Ctrl esquerdo como Win, Win esquerdo como Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Usar LEDs do teclado para mostrar disposição alternativa" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposição das teclas do teclado numérico" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Legado" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Adições Unicode (setas e operadores matemáticos)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Legado Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Teclado Wang 724 keypad com adições Unicode (setas e operadores matemáticos; operadores matemáticos no nível padrão)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/estilo-telefone" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Teclado numérico elimina comportamento chave" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Legado com tecla ponto" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Legado com tecla vírgula" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Chave de quatro níveis com ponto" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Tecla de quarto nível com ponto, apenas Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Chave de quatro níveis com vírgula" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Chave de quatro níveis com separadores abstratos" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Ponto-e-vírgula no terceiro nível" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportamento da tecla Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock usa caixa alta interna; Shift \"pausa\" o Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock usa caixa alta interna. Shift não afeta o Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock funciona como Shift com trava; Shift \"pausa\" a tecla Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock alterna o uso normal de maiúsculas dos caracteres alfabéticos" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Fazer do Caps Lock um Num Lock adicional" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Trocar o Esc e o Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Fazer do Caps Lock um Esc adicional" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Fazer do Caps Lock um Backspace adicional" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Fazer do Caps Lock um Super adicional" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Tornar o Caps Lock uma adição à Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock alterna ShiftLock (todas as teclas são afetadas)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock está desabilitada" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Fazer do Caps Lock um Ctrl adicional" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportamento da tecla Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Adicionar o comportamento padrão a tecla Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt e Meta estão nas teclas Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 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:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl está mapeado para teclas Win (e as habituais teclas Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl está mapeado para teclas Alt, Alt está mapeado para teclas Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta está mapeado para teclas Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta está mapeado para Win esquerdo" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper está mapeado para teclas Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 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:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt é trocado por Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Posição da tecla de composição" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Terceiro nível de Win esquerdo" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Terceiro nível de Win direito" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Terceiro nível de Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Terceiro nível de Ctrl esquerdo" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Terceiro nível de Ctrl direito" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Terceiro nível de Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Terceiro nível de <Menor que/Maior que>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pausa" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Opções variadas de compatibilidade" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Pré-definição das teclas do teclado numérico" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 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:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Teclas especiais (Ctrl+Alt+<key>) tratadas em um servidor" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift cancela o Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Habilitar caracteres tipográficos extras" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Ambas as teclas Shift juntas alternam o Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Ambas as teclas Shift juntas ativam o Caps Lock, uma tecla Shift desativa" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Ambas as teclas Shift juntas alternam o Shift Lock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock alterna teclas de ponteiro" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 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:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permitir o registro e captura da árvore de janela" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Acrescentar sinal de unidade monetária a certas teclas" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro no E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro no 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro no 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro no 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia no 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tecla para escolher o 5º nível" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Menor que/Maior que> escolhe 5º nível, bloqueia quando pressionada junto com outra tecla de 5º nível" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Espaço normal em qualquer nível" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 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:1026 +#: ../rules/base.xml.in.h:1031 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:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 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:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Separação de tamanho nulo no segundo nível" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Teclado Japonês opcional" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Tecla Kana Lock está bloqueando" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F estilo Backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Fazer Zenkaku Hankaku um ESC adicional" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Adicionando letras diacríticas Esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Para a tecla correspondente em uma disposição Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Para a tecla correspondente em uma disposição Dvorak." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Para a tecla correspondente em uma disposição Colemak." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 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:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilidade com teclas Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Sequência de teclas para matar o servidor X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4022,150 +4043,160 @@ msgstr "Salish de Coeur d'Alene" msgid "English (US, Sun Type 6/7)" msgstr "Inglês (EUA, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inglês (Normando)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonês (internacional com teclas mortas)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonês (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tártaro da Crimeia (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Romeno (Touchtype ergonômico)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Romeno (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 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 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russo (com padrão Ucrânia-Bielorrússia)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russo (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armênio (OLPC fonético)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebraico (Bíblico, fonética SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Árabe (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Português (Brasil, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tcheco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dinamarquês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holandês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estoniano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finlandês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grego (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonês (Sun tipo 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonês (Sun tipo 7 - compatível com pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonês (Sun tipo 7 - compatível com Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norueguês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Português (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Eslovaco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espanhol (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Sueco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Alemão (Suiça, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francês (Suíça, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ucraniano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Inglês (Reino Unido, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coreano (Sun tipo 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Português (Brasil, nativo para Esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Inglês (Mudando disposição nas teclas de divisão e multiplicação)" diff --git a/xorg-server/xkeyboard-config/po/ru.po b/xorg-server/xkeyboard-config/po/ru.po index c4cec2fc7..e2f686fdf 100644 --- a/xorg-server/xkeyboard-config/po/ru.po +++ b/xorg-server/xkeyboard-config/po/ru.po @@ -7,14 +7,14 @@ # Nickolay V. Shmyrev , 2006. # Misha Shnurapet , 2010. # ChALkeR , 2010. -# Yuri Kozlov , 2009, 2010, 2011, 2012, 2013. +# Yuri Kozlov , 2009, 2010, 2011, 2012, 2013, 2014. # Pavel Maryanov , 2011. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 09:51+0400\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 19:29+0400\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" @@ -796,34 +796,34 @@ msgstr "Английская (Коулмак)" #: ../rules/base.xml.in.h:195 msgid "English (Dvorak)" -msgstr "Английская (Дворак)" +msgstr "Английская (дворак)" #: ../rules/base.xml.in.h:196 msgid "English (Dvorak, international with dead keys)" -msgstr "Английская (Дворак, международная с спец. клавишами)" +msgstr "Английская (дворак, международная с спец. клавишами)" #: ../rules/base.xml.in.h:197 msgid "English (Dvorak alternative international no dead keys)" -msgstr "Английская (Дворак альтернативная международная без спец. клавиш)" +msgstr "Английская (дворак альтернативная международная без спец. клавиш)" #: ../rules/base.xml.in.h:198 msgid "English (left handed Dvorak)" -msgstr "Английская (Дворак под левую руку)" +msgstr "Английская (дворак под левую руку)" #: ../rules/base.xml.in.h:199 msgid "English (right handed Dvorak)" -msgstr "Английская (Дворак под правую руку)" +msgstr "Английская (дворак под правую руку)" #: ../rules/base.xml.in.h:200 msgid "English (classic Dvorak)" -msgstr "Английская (классическая Дворак)" +msgstr "Английская (классическая дворак)" #: ../rules/base.xml.in.h:201 msgid "English (programmer Dvorak)" -msgstr "Английская (Дворак для программистов)" +msgstr "Английская (дворак для программистов)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -895,11 +895,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Узбекская (Афганистан, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Арабская" @@ -937,11 +937,11 @@ msgid "Albanian" msgstr "Албанская" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Армянская" @@ -1017,11 +1017,11 @@ msgid "Belarusian (Latin)" msgstr "Белорусская (латиница)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Бельгийская" @@ -1053,18 +1053,18 @@ msgstr "Бельгийская (спец. клавиши (dead keys) Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Бельгийская (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Бенгальская" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" -msgstr "Бенгальская (Индия, Probhat)" +msgid "Bangla (Probhat)" +msgstr "Бенгальская (пробхат)" #. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 @@ -1076,28 +1076,28 @@ msgid "Indian" msgstr "Индийская" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Бенгальская (Индия)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" -msgstr "Бенгальская (Индия, Probhat)" +msgid "Bangla (India, Probhat)" +msgstr "Бенгальская (Индия, пробхат)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" -msgstr "Бенгальская (Индия, Baishakhi)" +msgid "Bangla (India, Baishakhi)" +msgstr "Бенгальская (Индия, байшакхи)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" -msgstr "Бенгальская (Индия, Bornona)" +msgid "Bangla (India, Bornona)" +msgstr "Бенгальская (Индия, борона)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Бенгальская (Индия, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Бенгальская (Индия, юни-гитанжали)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Бенгальская (Индия, письменность Baishakhi)" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Бенгальская (Индия, письменность байшакхи)" #. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 @@ -1280,11 +1280,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Боснийская (клавиатура США с боснийскими буквами)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Португальская (Бразилия)" @@ -1294,19 +1294,19 @@ msgstr "Португальская (Бразилия, без спец. клав #: ../rules/base.xml.in.h:339 msgid "Portuguese (Brazil, Dvorak)" -msgstr "Португальская (Бразилия, Дворак)" +msgstr "Португальская (Бразилия, дворак)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Португальская (Бразилия, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Португальская (Бразилия, навито)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Португальская (Бразилия, nativo для клавиатур US)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Португальская (Бразилия, навито для клавиатур US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Португальская (Бразилия, nativo для эсперанто)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Эсперанто (Бразилия, навито)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1390,7 +1390,7 @@ msgstr "Камерунская многоязыковая (azerty)" #: ../rules/base.xml.in.h:366 msgid "Cameroon Multilingual (Dvorak)" -msgstr "Камерунская многоязыковая (Дворак)" +msgstr "Камерунская многоязыковая (дворак)" #. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 @@ -1407,7 +1407,7 @@ msgstr "Французская (Канада)" #: ../rules/base.xml.in.h:371 msgid "French (Canada, Dvorak)" -msgstr "Французская (Канада, Дворак)" +msgstr "Французская (Канада, дворак)" #: ../rules/base.xml.in.h:372 msgid "French (Canada, legacy)" @@ -1460,2462 +1460,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Тибетская (с цифрами ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Уйгурская" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Хорватская" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Хорватская (используются кавычки ёлочки как кавычки)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Хорватская (используются хорватские диграфы)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Хорватская (клавиатура США с хорватскими диграфами)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Хорватская (клавиатура США с хорватскими буквами)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Чешская" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Чешская (с клавишей <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Чешская (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Чешская (qwerty, расширенные функции Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Чешская (раскладка UCW, только символы акцентов)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Чешская (Дворак США с поддержкой CZ UCW)" +msgstr "Чешская (дворак США с поддержкой CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Датская" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Датская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Датская (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Датская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" -msgstr "Датская (Дворак)" +msgstr "Датская (дворак)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Голландская" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Голландская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Голландская (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Голландская (стандартная)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Дзонг-кэ (dz" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Эстонская" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Эстонская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" -msgstr "Эстонская (Дворак)" +msgstr "Эстонская (дворак)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Эстонская (клавиатура США с эстонскими буквами)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Персидская" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Персидская (с персидской доп. панелью)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Курдская (Иран, латинская Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Курдская (Иран, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Курдская (Иран, латинская Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Курдская (Иран, арабо-латинская)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Иракская" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Курдская (Ирак, латинская Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Курдская (Ирак, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Курдская (Ирак, латинская alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Курдская (Ирак, арабо-латинская)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Фарерская" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Фарерская (без спец. клавиш (dead keys))" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Финская" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Финская (классическая)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Финская (классическая, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Северная Саамская (Финляндия)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Финская (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Французская" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Французская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Французская (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Французская (альтернативная)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Французская (альтернативная, только Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Французская (альтернативная, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Французская (альтернативная, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Французская (устаревшая, альтернативная)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Французская (устаревшая, альтернативная, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Французская (устаревшая, альтернативная, с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Французская (Бепо, эргономичная, похожая на Дворак)" +msgstr "Французская (Бепо, эргономичная, похожа на дворак)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" -msgstr "Французская (Бепо, эргономичная, похожая на Дворак, только Latin-9)" +msgstr "Французская (Бепо, эргономичная, похожа на дворак, только Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" -msgstr "Французская (Дворак)" +msgstr "Французская (дворак)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Французская (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Французская (бретонская)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Окситанский" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Грузинская (Франция, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Английская (Гана)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Английская (Гана, международная)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Аканская" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Фулайская" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Гайская" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Хауза" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Аватайм" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Английская (Гана, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Французская (Гвинея)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Грузинская" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgian (эргономичная)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Грузинская (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Русская (Грузия)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Осетинская (Грузия)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Немецкая" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Немецкая (с акутом (dead acute))" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Немецкая (с dead grave acute)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Немецкая (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Немецкая (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Румынская (Германия)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Румынская (Германия, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" -msgstr "Немецкая (Дворак)" +msgstr "Немецкая (дворак)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Немецкая (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Немецкая (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Немецкая (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Немецкая (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Нижнелужицкая" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Нижнелужицкая (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Немецкая (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Русская (Германия, фонетическая)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Немецкая (устаревшая)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Греческая" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Греческая (простая)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Греческая (расширенная)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Греческая (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Греческая (полифоническая)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Венгерская" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Венгерская (стандартная)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Венгерская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Венгерская (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Венгерская (101/qwertz/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Венгерская (101/qwertz/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Венгерская (101/qwertz/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Венгерская (101/qwertz/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Венгерская (pc101/qwerty/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Венгерская (pc101/qwerty/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Венгерская (pc101/qwerty/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Венгерская (pc101/qwerty/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Венгерская (102/qwertz/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Венгерская (102/qwertz/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Венгерская (102/qwertz/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Венгерская (102/qwertz/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Венгерская (102/qwerty/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Венгерская (102/qwerty/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Венгерская (102/qwerty/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Венгерская (102/qwerty/точка/без спец. клавиш (dead keys))" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Исландская" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Исландская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Исландская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Исландская (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" -msgstr "Исландская (Дворак)" +msgstr "Исландская (дворак)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Иврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Иврит (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Иврит (фонетическая)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Иврит (библейский, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Итальянская" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Итальянская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Итальянская (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Итальянская (клавиатура США с итальянскими буквами)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Грузинская (Италия)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Итальянская (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Японская" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Японская (Кана)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Японская (Кана 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Японская (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Японская (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" -msgstr "Японская (Дворак)" +msgstr "Японская (дворак)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Киргизская" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Киргизская (фонетическая)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Кхмерская (Камбоджа)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Казахская" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Русская (Казахстан, с казахской)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Казахская (с русским)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Лаосская" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Лаосская (стандартная раскладка, предложенная STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Испанская (латиноамериканская)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Испанская (латиноамериканская, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Испанская (латиноамериканская, с dead tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Испанская (латиноамериканская, с спец. клавишами (dead keys) Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Литовская" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Литовская (стандартная)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Литовская (клавиатура США с литовскими буквами)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Литовская (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Литовская (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Литовская (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Латышская" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Латышская (вариант с апострофом)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Латышская (вариант с тильдой)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Латышская (вариант с F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Латышская (современная)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Латышская (эргономичная, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Латышская (адаптированная)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Маори" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Черногорская" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Черногорская (кириллица)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Черногорская (кириллица, З и Ж переставлены местами)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Черногорская (латинская юникодная)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Черногорская (латинская qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Черногорская (латинская юникодная qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Черногорская (кириллица с кавычками ёлочками)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Черногорская (латинская с кавычками ёлочками)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Македонская" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Македонская (без спец. клавиш (dead keys))" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Мальтийская" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Мальтийская (с раскладкой США)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Монгольская" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Норвежская" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Норвежская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" -msgstr "Норвежская (Дворак)" +msgstr "Норвежская (дворак)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Северная Саамская (Норвегия)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Северная Саамская (Норвегия, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Норвежская (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Норвежская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Норвежская (Коулмак)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Польская" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Польская (устаревшая)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Польская (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" -msgstr "Польская (Дворак)" +msgstr "Польская (дворак)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Польская (Дворак, польские кавычки на клавишах с кавычками)" +msgstr "Польская (дворак, польские кавычки на клавишах с кавычками)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Польская (Дворак, польские кавычки на клавише 1)" +msgstr "Польская (дворак, польские кавычки на клавише 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Кашубская" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Русский (Польша, фонетический Дворак)" +msgstr "Русский (Польша, фонетический дворак)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" -msgstr "Польская (Дворак для программистов)" +msgstr "Польская (дворак для программистов)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Португальская" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Португальская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Португальская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Португальская (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Португальская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Португальская (Macintosh, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Португальская (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Португальская (Nativo для клавиатур US)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Эсперанто (Португалия, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Румынская" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Румынская (седиль)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Румынская (стандартная)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Румынская (стандартная седиль)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Румынская (клавиши Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Русская" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Русская (фонетическая)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Русская (фонетическая с клавишами Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Русская (печатная машинка)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Русская (устаревшая)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Русская (печатная машинка, устаревшая)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Татарская" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Осетинская (устаревшая)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Осетинская (с клавишами Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Чувашия" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Чувашская (латиница)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Удмуртская" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Коми" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Якутская" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Калмыцкая" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Русская (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Русская (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Сербская (Россия)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Башкирская" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Марийская" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Сербская" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Сербская (кириллица, З и Ж переставлены местами)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Сербская (латинская)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Сербская (латинская юникодная)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Сербская (латинская qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Сербская (латинская юникодная qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Сербская (кириллица с кавычками ёлочками)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Сербская (латинская с кавычками ёлочками)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Паннонская русинская (омофоническая)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Паннонская русинская" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Словенская" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Словенская (используются кавычки ёлочки как кавычки)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Словенская (клавиатура США с словенскими буквами)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Словацкая" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Словацкая (расширенные функции Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Словацкая (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Словацкая (qwerty, расширенные функции Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Испанская" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Испанская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Испанская (с dead tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Испанская (с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" -msgstr "Испанская (Дворак)" +msgstr "Испанская (дворак)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Астурлеонская (испанский вариант с нижними точками у H и L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Каталонская (испанский вариант с точкой в L посередине)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Испанская (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Шведская" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Шведская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" -msgstr "Шведская (Дворак)" +msgstr "Шведская (дворак)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Русская (Швеция, фонетическая)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Русская (Швеция, фонетическая, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Северная Саамская (Швеция)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Шведская (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Шведская (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Шведский язык жестов" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Немецкая (Швейцария)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Немецкая (Швейцария, устаревшая)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Немецкая (Швейцария, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Немецкая (Швейцария, с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Французская (Швейцария)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Французская (Швейцария, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Французская (Швейцария, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Французская (Швейцария, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Немецкая (Швейцария, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Арабская (Сирия)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Сирийская" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Сирийская (фонетическая)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Курдская (Сирия, латинская Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Курдская (Сирия, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Курдская (Сирия, латинская Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Таджикская" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Таджикская (устаревшая)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Сингальская (фонетическая)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Тамильская (Шри-Ланка, юникодная)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Тамильская (Шри-Ланка, печатная машинка TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Тайская" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Тайская (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Тайская (паттачотская)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Турецкая" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Турецкая (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Турецкая (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Турецкая (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Курдская (Турция, латинская Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Курдская (Турция, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Курдская (Турция, латинская Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Турецкая (международная со спец. клавишами)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Крымско-татарская (турецкая Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Крымско-татарская (турецкая F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Крымско-татарская (турецкая Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Тайваньская" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Тайваньская (туземная)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Сайсьят (Тайвань)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Украинская" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Украинская (фонетическая)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Украинская (печатная машинка)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Украинская (с клавишами Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Украинская (устаревшая)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Украинская (стандартная RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Русская (Украина, стандартная RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Украинская (омофоническая)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Английская (Великобритания)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Английская (Великобритания, расширенная клавишами Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Английская (Великобритания, международная с спец. клавишами (dead keys))" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" -msgstr "Английская (Великобритания, Дворак)" +msgstr "Английская (Великобритания, дворак)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Английская (Великобритания, Дворак с английской пунктуацией)" +msgstr "Английская (Великобритания, дворак с английской пунктуацией)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Английская (Великобритания, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Английская (Великобритания, Macintosh международная)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Английская (Великобритания, Коулмак)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Узбекская" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Узбекская (латинская)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Вьетнамская" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Корейская" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Корейская (совместимая c 101/104 кнопочной)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Японская (PC-98xx Series)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ирландская" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ирландская (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Огхам" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Огхам (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Урдская (Пакистан)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Урдская (Пакистан, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Урдская (Пакистан, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Арабская (Пакистан)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Синдхи" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Дивехи" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Английская (Южная Африка)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Эсперанто" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Эсперанто (смещённые точка с запятой и кавычка, устарела)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Непальская" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Английская (Нигерия)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Игбо" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Йорубская" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Амхарская" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Волофская" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Брайля" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Брайля (под левую руку)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Брайля (под правую руку)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Туркменская" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Туркменская (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Баманская" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Французская (Мали, альтернативная)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Английская (Мали, Macintosh США)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Английская (Мали, международная США)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Суахильская (Танзания)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Суахильская (Кения)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Кикуйу" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Тсванская" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Филиппинская" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Филиппинская (QWERTY байбайинская)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Филиппинская (Кэйпвелл-Дворак латиница)" +msgstr "Филиппинская (кэйпвелл-дворак латиница)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Филиппинская (Кэйпвелл-Дворак байбайинcкая)" +msgstr "Филиппинская (кэйпвелл-дворак байбайинcкая)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Филиппинская (Кэйпвелл-QWERF 2006 латиница)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Филиппинская (Кэйпвелл-QWERF 2006 байбайинская)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Филиппинская (Коулмак латиница)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Филиппинская (Коулмак байбайинская)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" -msgstr "Филиппинская (Дворак латиница)" +msgstr "Филиппинская (дворак латиница)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" -msgstr "Филиппинская (Дворак байбайинcкая)" +msgstr "Филиппинская (дворак байбайинcкая)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Молдавская" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Молдавская (гагаузская)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Переключение на другую раскладку" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Правая клавиша Alt (пока нажата)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Левая клавиша Alt (пока нажата)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Левая клавиша Win (пока нажата)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Правая клавиша Win (пока нажата)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Любая клавиша Win (на время нажатия)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Правая клавиша Ctrl (пока нажата)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Правая клавиша Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Левая клавиша Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (на первую раскладку), Shift+Caps Lock (на последнюю раскладку)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Левая Win (на первую раскладку), Правая Win/Menu (на последнюю раскладку)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Левая Ctrl (на первую раскладку), Правая Ctrl (на последнюю раскладку)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Обе клавиши Shift, нажатые вместе" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Обе клавиши Alt, нажатые вместе" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Обе клавиши Ctrl, нажатые вместе" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Левая Ctrl+Левая Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Правая Ctrl+Правая Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Левая Alt+Левая Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Пробел" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Левая клавиша Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Правая клавиша Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Левая клавиша Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Правая клавиша Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Левая клавиша Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Правая клавиша Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Левая-Ctrl+Левая-Win (на первую раскладку), Правая-Ctrl+Menu (на вторую раскладку)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавиша для выбора 3-го ряда" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Любая клавиша Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Любая клавиша Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Правая клавиша Alt, Shift и правая Alt вместе работают как Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "По правой клавише Alt никогда не выбирается третий ряд" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровой клавиатуре" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Меньше чем/Больше чем>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Меньше чем/Больше чем> выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Положение клавиши Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock как Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Левая клавиша Ctrl как Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Поменять местами клавиши Ctrl и Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Слева от 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Снизу слева" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Правая клавиша Ctrl работает как правая клавиша Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu как правая клавиша Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Правая клавиша Alt как правая клавиша Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Левая клавиша Alt поменяна местами с левой клавишей Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Левая клавиша Win поменяна местами с левой клавишей Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Левая клавиша Alt как Ctrl, левая клавиша Ctrl как Win, левая клавиша Win как Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Использовать клавиатурные индикаторы для отображения дополнительных раскладок" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Раскладка цифровой клавиатуры" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Legacy" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Дополнения юникода (стрелки и математические операторы)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Дополнения юникода (стрелки и математические операторы; математические операторы в ряду по умолчанию)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Старая Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы; математические операторы в ряду по умолчанию)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Шестнадцатеричная" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "В стиле банкоматной/телефонной" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Функция клавиши Delete на цифровой клавиатуре" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Клавиша Legacy с точкой" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Клавиша Legacy с запятой" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Четырёх-рядная клавиша с точкой" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Четырёх-рядная клавиша с точкой, только Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Четырёх-рядная клавиша с запятой" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Четырёх-рядная клавиша с абстрактными разделителями" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Точка с запятой в третьем ряду" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведение клавиши Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock включает внутреннюю капитализацию; Shift «приостанавливает» действие Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock включает внутреннюю капитализацию; Shift не влияет на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock действует как Shift с блокировкой; Shift «приостанавливает» действие Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock переключает обычную капитализацию символов алфавита" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Использовать Caps Lock как дополнительную клавишу Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Поменять местами клавиши ESC и Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Использовать Caps Lock как дополнительную клавишу ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Использовать Caps Lock как дополнительную клавишу Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Использовать Caps Lock как дополнительную клавишу Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Использовать Caps Lock как дополнительную клавишу Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock переключает ShiftLock (действует сразу на все клавиши)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock отключён" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Использовать Caps Lock как дополнительную клавишу Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведение клавиши Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Добавить обыкновенное поведение на клавишу Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt и Meta на клавишах Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt используется в качестве клавиш Win (и как обычный Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl используется в качестве клавиш Win (и как обычные клавиши Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl используется в качестве клавиш Alt; Alt используется в качестве клавиш Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta соответствует клавишам Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta соответствует левой клавише Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper соответствует клавишам Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt соответствует правой клавише Win, а Super — Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Клавиша Alt поменяна местами с клавишей Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Положение клавиши Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-й ряд левой Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-й ряд правой Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-й ряд Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-й ряд левой Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-й ряд правой Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-й ряд Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-й ряд <Меньше чем/Больше чем>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Разные параметры совместимости" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Клавиши цифровой клавиатуры по умолчанию" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "С клавиш цифровой клавиатуры всегда вводятся цифры (как в Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Клавиша Shift с клавишами цифровой клавиатуры работают также как в MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не отменяет Num Lock, а выбирает третий ряд" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Специальные клавиши (Ctrl+Alt+<клв>) обрабатываются сервером" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift отменяет Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Включить дополнительные типографские символы" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Обе клавиши Shift, нажатые вместе, переключают Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Обе клавиши Shift, нажатые вместе, включают Caps Lock, одна клавиша Shift выключает" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Обе клавиши Shift, нажатые вместе, переключают ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock переключают PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Позволить прерывать захват с помощью клавиатуры (предупреждение: угроза безопасности)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Позволить захват и протоколирование дерева окон" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Добавление знаков валют к некоторым клавишам" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Символ евро на клавише E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Символ евро на клавише 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Символ евро на клавише 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Символ евро на клавише 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Символ рупии на клавише 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавиша для выбора 5-го ряда" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По клавише <Меньше чем/Больше чем> выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Клавиша пробела используется для ввода символа неразрывного пробела" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Обычный пробел в любом ряду" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Символ неразрывного пробела во втором ряду" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Символ неразрывного пробела в третьем ряду" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Символ неразрывного пробела в третьем ряду, ничего на четвёртом" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Символ неразрывного пробела в третьем ряду, символ тонкого неразрывного пробела в четвёртом ряду" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Символ неразрывного пробела в четвёртом ряду" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Несвязывающий символ нулевой ширины во втором ряду" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Несвязывающий символ нулевой ширины в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Настройки японской клавиатуры" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Кана блокируется клавишей Lock" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace в стиле NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Использовать Zenkaku Hankaku как дополнительную клавишу ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Добавление букв эсперанто с надстрочными знаками" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "На соответствующую клавишу в раскладке Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" -msgstr "На соответствующую клавишу в раскладке Дворак" +msgstr "На соответствующую клавишу в раскладке дворак" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "На соответствующую клавишу в раскладке Коулмак" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Сохранить совместимость со старыми кодами клавиш Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Совместимость с клавишами Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Комбинация клавиш для прерывания работы X-сервера" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -3965,7 +3985,7 @@ msgstr "Авестийская" #: ../rules/base.extras.xml.in.h:20 msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Литовская (Дворак США с литовскими буквами)" +msgstr "Литовская (дворак США с литовскими буквами)" #: ../rules/base.extras.xml.in.h:21 msgid "Lithuanian (Sun Type 6/7)" @@ -3973,27 +3993,27 @@ msgstr "Литовская (Sun Type 6/7)" #: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" -msgstr "Латышская (Дворак США)" +msgstr "Латышская (дворак США)" #: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" -msgstr "Латышская (Дворак США, вариант с Y)" +msgstr "Латышская (дворак США, вариант с Y)" #: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" -msgstr "Латышская (Дворак США, вариант с минусом)" +msgstr "Латышская (дворак США, вариант с минусом)" #: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" -msgstr "Латышская (Дворак США для программистов)" +msgstr "Латышская (дворак США для программистов)" #: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" -msgstr "Латышская (Дворак США для программистов, вариант с Y)" +msgstr "Латышская (дворак США для программистов, вариант с Y)" #: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" -msgstr "Латышская (Дворак США для программистов, вариант с минусом)" +msgstr "Латышская (дворак США для программистов, вариант с минусом)" #: ../rules/base.extras.xml.in.h:30 msgid "Latvian (US Colemak)" @@ -4027,150 +4047,160 @@ msgstr "Салишская Кёр-д’Ален" msgid "English (US, Sun Type 6/7)" msgstr "Английская (США, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Английская (нормандская)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Польская (международная со спец. клавишами)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Польская (Коулмак)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Польская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Крымско-татарская (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Румынская (эргономичная для слепой печати)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Румынская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Сербская (объединённые надбуквенные знаки вместе спец. клавиш (dead keys))" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Русская (с украинско-белорусской раскладкой)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Русская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Армянская (фонетическая на OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Иврит (Библейская, фонетическая SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Арабская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Бельгийская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Португальская (Бразилия, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Чешская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Датская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Голландская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Эстонская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Финская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Французская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Греческая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Итальянская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Японская (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Японская (Sun Type 7, совместимая с pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Японская (Sun Type 7, совместимая с sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Норвежская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Португальская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Словацкая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Испанская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Шведская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Немецкая (Швейцария, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Французская (Швейцария, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Турецкая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Украинская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Английская (Великобритания, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Корейская (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Бенгальская" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Португальская (Бразилия, nativo для эсперанто)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Английская (переключение раскладки по клавише умножения/деления)" @@ -4441,9 +4471,6 @@ msgstr "Корейская (Sun Type 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Бангладеш" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/uk.po b/xorg-server/xkeyboard-config/po/uk.po index d01490d71..7326eb1f4 100644 --- a/xorg-server/xkeyboard-config/po/uk.po +++ b/xorg-server/xkeyboard-config/po/uk.po @@ -7,13 +7,13 @@ # Andriy Rysin , 2007, 2008. # Andriy Rysin , 2008. # Maxim V. Dziumanenko , 2004-2011. -# Yuri Chornoivan , 2011, 2012, 2013. +# Yuri Chornoivan , 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 16:08+0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 16:54+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -822,7 +822,7 @@ msgid "English (programmer Dvorak)" msgstr "Англійська (програмістський Дворак)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -894,11 +894,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Узбецька (Афганістан, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Арабська" @@ -936,11 +936,11 @@ msgid "Albanian" msgstr "Албанська" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Вірменська" @@ -1016,11 +1016,11 @@ msgid "Belarusian (Latin)" msgstr "Білоруська (латиниця)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Бельгійська" @@ -1052,17 +1052,17 @@ msgstr "Бельгійська (сліпі клавіші Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Бельгійська (модель Wang 724, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Бенгальська" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Бенгальська (пробхат)" #. Keyboard indicator for Indian layouts @@ -1075,27 +1075,27 @@ msgid "Indian" msgstr "Індійська" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Бенгальська (Індія)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Бенгальська (Індія, пробхат)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Бенгальська (Індія, байшахі)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Бенгальська (Індія, борнона)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Бенгальська (Індія, уні гітанджалі)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Бенгальська (Індія, байшахі, індійські символи)" #. Keyboard indicator for Gujarati layouts @@ -1279,11 +1279,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Боснійська (клавіатура США з боснійськими літерами)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Португальська (Бразилія)" @@ -1296,16 +1296,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Португальська (Бразилія, Дворак)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Португальська (Бразилія, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Португальська (Бразилія, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Португальська (Бразилія, nativo для клавіатур США)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Португальська (Бразилія, Nativo для американських клавіатур)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Португальська (Бразилія, nativo для есперанто)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Есперанто (бразильська, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1459,2462 +1459,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Тибетська (з ASCII числами)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Уйгурська" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Хорватська" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Хорватська (кутові лапки)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Хорватська (з хорватськими диграфами)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Хорватська (клавіатура США з хорватськими диграфами)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Хорватська (клавіатура США з хорватськими літерами)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Чеська" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Чеська (з клавішею <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Чеська (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Чеська (qwerty, розширені функції Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Чеська (UCW-розкладка, лише літери з акцентами)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Чеська (Дворак-США з підтримкою CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Данська" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Данська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Данська (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Данська (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Данська (Дворака)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Голландська" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Голландська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Голландська (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Голландська (стандартна)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Дзонг-ке" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Естонська" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Естонська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Естонська (Дворака)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Естонська (клавіатура США з естонськими літерами)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Перська" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Перська (з перською дод. панеллю)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Курдська (Іран, латиниця Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Курдська (Іран, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Курдська (Іран, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Курдська (Іран, арабсько-латинська)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Іракська" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Курдська (Ірак, латиниця Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Курдська (Ірак, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Курдська (Ірак, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Курдська (Ірак, арабсько-латинська)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Фарерська" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Фарерська (вимкнути сліпі клавіші)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Фінська" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Фінська (класична)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Фінська (класична, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Північно-саамська (Фінляндія)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Фінська (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Французька" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Французька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Французька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Французька (альтернативна)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Французька (альтернативна, лише Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Французька (альтернативна, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Французька (альтернативна, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Французька (застаріла, альтернативна)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Французька (застаріла, альтернативна, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Французька (застаріла, альтернативна, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Французька (Bepo, ергономічна, варіант Дворак)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Французька (Bepo, ергономічна, варіант Дворак, лише Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Французька (Дворак)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Французька (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Французька (бретонська)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Окситанська" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Грузинська (Франція, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Англійська (Гана)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Англійська (Гана, інтернаціональна)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Акан" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Фула" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Га" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Аватіме" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Англійська (Гана, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Французька (Гвінея)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Грузинська" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Грузинська (ергономічна)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Грузинська (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Російська (Грузія)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Осетинська (Грузія)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Німецька" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Німецька (сліпий акут)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Німецька (сліпий наголос-акут)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Німецька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Німецька (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Румунська (Німеччина)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Німецька (Німеччина, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Німецька (Дворак)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Німецька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Німецька (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Німецька (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Німецька (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Нижньолужицька" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Нижньолужицька (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Німецька (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Російська (Німеччина, фонетична)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Німецька (застаріла)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Грецька" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Грецька (проста)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Грецька (розширена)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Грецька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Грецька (поліфонічна)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Угорська" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Угорська (стандартна)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Угорська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Угорська (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Угорська (101/qwertz/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Угорська (101/qwertz/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Угорська (101/qwerty/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Угорська (101/qwerty/кома/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Угорська (101/qwerty/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Угорська (101/qwerty/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Угорська (102/qwertz/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Угорська (102/qwertz/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Угорська (102/qwerty/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Угорська (102/qwerty/кома/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Угорська (102/qwerty/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Угорська (102/qwerty/крапка/вимкнути сліпі клавіші)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Ісландська" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Ісландська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Ісландська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Ісландська (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Ісландська (Дворак)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Іврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Іврит (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Іврит (фонетична)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Іврит (Біблейська, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Італійська" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Італійська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Італійська (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Італійська (клавіатура США з італійськими літерами)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Грузинська (Італія)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Італійська (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Японська" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Японська (кана)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Японська (кана 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Японська (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Японська (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Японська (Дворак)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Киргизька" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Киргизька (фонетична)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Кхмерська (Камбоджа)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Казахська" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Російська (Казахстан, з казахською)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Казахська (з російськими)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Лаоська" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Лаоська (стандартна розкладка, запропонована STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Іспанська (латиноамериканська)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Іспанська (латиноамериканська, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Іспанська (латиноамериканська зі «спеціальною» тильдою)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Іспанська (латиноамериканська, сліпі клавіші Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Литовська" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Литовська (стандартна)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Литовська (клавіатура США, з литовськими літерами)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Литовська (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Литовська (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Литовська (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Латвійська" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Латвійська (варіант з апострофом)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Латвійська (варіант з тильдою)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Латвійська (варіант з літерою F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Латвійська (сучасна)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Латвійська (ергономічна, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Латвійська (адаптована)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Маорійська" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Чорногорська" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Чорногорська (кирилиця)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Чорногорська (кирилиця, З та Ж поміняні місцями)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Чорногорська (латиниця, Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Чорногорська (латиниця, qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Чорногорська (латиниця, Unicode, qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Чорногорська (кирилиця з кутовими лапками)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Чорногорська (латиниця з кутовими лапками)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Македонська" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Македонська (вимкнути сліпі клавіші)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Мальтійська" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Мальтійська (клавіатура з розкладкою США)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Монгольська" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Норвезька" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Норвезька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Норвезька (Дворак)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Північно-саамська (Норвегія)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Північно-саамська (Норвегія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Норвезька (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Норвезька (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Норвезька (Колемак)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Польська" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Польська (застаріла)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Польська (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Польська (Дворак)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Польська (Дворак, польські лапки на знаку лапки)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Польська (Дворак, польські лапки на клавіші 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Кашубська" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Російська (Польща, фонетична Дворака)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Польська (програмістський Дворак)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Португальська" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Португальська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Португальська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Португальська (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Португальська (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Португальська (Macintosh, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Португальська (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Португальська (nativo для клавіатур США)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Есперанто (португальська, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Румунська" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Румунська (седиль)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Румунська (стандартна)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Румунська (стандартна седиль)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Румунська (з клавішами Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Російська" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Російська (фонетична)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Російська (фонетична з клавішами Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Російська (машинопис)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Російська (застаріла)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Російська (машинопис, застаріла)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Татарська" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Осетинська (застаріла)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Осетинська (з клавішами Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Чуваська" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Чуваська (латиниця)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Удмуртська" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Комі" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Якутська" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Калмицька" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Російська (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Російська (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Сербська (Росія)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Башкирська" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Марійська" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Сербська" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Сербська (кирилиця, З та Ж поміняні місцями)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Сербська (латиниця)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Сербська (латиниця Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Сербська (латиниця, qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Сербська (латиниця, Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Сербська (кирилиця з кутовими лапками)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Сербська (латиниця з кутовими лапками)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Паннонська русинська (гомофонна)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Паннонська русинська" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Словенська" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Словенська (кутові лапки)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Словенська (клавіатура США із словенськими літерами)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Словацька" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Словацька (розширені функції Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Словацька (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Словацька (qwerty, розширені функції Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Іспанська" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Іспанська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Іспанська (зі «спеціальною» тильдою)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Іспанська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Іспанська (Дворак)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Астурійська (Іспанія, з H та L з нижньою крапкою)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Іспанська (Іспанія, варіант з L із середньою точкою)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Іспанська (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Шведська" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Шведська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Шведська (Дворак)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Російська (шведська, фонетична)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Російська (шведська, фонетична, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Північно-саамська (Швеція)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Шведська (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Шведська (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Шведська мова жестів" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Німецька (Швейцарія)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Німецька (Швейцарія, застаріла)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Німецька (Швейцарія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Німецька (Швейцарія, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Французька (Швейцарія)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Французька (Швейцарія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Французька (Швейцарія, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Французька (Швейцарія, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Німецька (Швейцарія, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Арабська (Сирія)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Сирійська" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Сирійська (фонетична)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Курдська (Сирія, латиниця Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Курдська (Сирія, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Курдська (Сирія, латиниця Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Таджицька" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Таджицька (застаріла)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Сингальська (фонетична)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Тамільська (Шрі-Ланка, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Тамільська (Шрі-Ланка, TAB, машинопис)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Тайська" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Тайська (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Тайська (паттачот)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Турецька" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Турецька (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Турецька (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Турецька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Курдська (Туреччина, латиниця Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Курдська (Туреччина, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Курдська (Туреччина, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Турецька (інтернаціональна зі сліпими клавішами)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Кримськотатарська (турецька Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Кримськотатарська (турецька F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Кримськотатарська (турецька Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Тайванська" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Тайванська (місцева)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Сайсіят (Тайвань)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Українська" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Українська (фонетична)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Українська (друкарська машинка)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Українська (з клавішами Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Українська (застаріла)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Українська (стандартна RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Російська (Україна, стандартна RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Українська (гомофонна)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Англійська (Великобританія)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Англійська (Великобританія, розширена, з клавішами Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Англійська (Великобританія, інтернаціональна зі сліпими клавішами)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Англійська (Великобританія, Дворак)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Англійська (Великобританія, Дворак з британською пунктуацією)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Англійська (Великобританія, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Англійська (Великобританія, інтернаціональна Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Англійська (США, Коулмак)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Узбецька" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Узбецька (латиниця)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "В'єтнамська" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Корейська" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Корейська (сумісна з 101/104 клавішною)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Японська (родина PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ірландська" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Гаельський шрифт" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ірландська (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Огам" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Огам (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Урду (Пакистан)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Урду (Пакистан, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Урду (Пакистан, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Арабська (Пакистан)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Синдхі" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Мальдивська" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Англійська (ПАР)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Есперанто" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Есперанто (посунута крапка з комою та лапки, застаріла)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Непальська" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Англійська (Нігерія)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Йоруба" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Амхарська" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Волоф" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Брайля" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Брайля (для шульги)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Брайль (для правші)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Туркменська" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Туркменська (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Бамбара" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Французька (Малі, альтернативна)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Англійська (Малі, Macintosh США)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Англійська (Малі, інтернаціональна США)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Суахілі (Танзанія)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Суахілі (Кенія)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Кікуйю" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Тсвана" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Філіппінська" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Філіппінська (QWERTY, байбаїн)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Філіппінська (Кейпвелл-Дворак, латиниця)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Філіппінська (Кейпвелл-Дворак, байбаїн)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Філіппінська (Кейпвелл-QWERF 2006, латиниця)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Філіппінська (Кейпвелл-QWERF 2006, байбаїн)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Філіппінська (Коулмак, латиниця)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Філіппінська (Коулмак, байбаїн)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Філіппінська (Дворак, латиниця)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Філіппінська (Дворат, байбаїн)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Молдавська" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Молдавська (гагаузька)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Перемикання на іншу розкладку" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Права клавіша Alt (поки натиснена)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Ліва клавіша Alt (поки натиснена)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Ліва клавіша Win (поки натиснута)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Права клавіша Win (поки натиснена)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Будь-яка клавіша Win (на час натискання)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Права клавіша Ctrl (поки натиснута)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Права клавіша Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Ліва клавіша Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (на першу розкладку), Shift+Caps Lock (на останню розкладку)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Обидві клавіші Shift разом" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Обидві клавіші Alt разом" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Обидві клавіші Ctrl разом" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Лівий Ctrl+Лівий Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Права Ctrl+Права Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Лівий Alt+Лівий Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Пробіл" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Ліва клавіша Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Права клавіша Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Ліва клавіша Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Права клавіша Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ліва клавіша Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Права клавіша Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Ліва Ctrl+ліва Win (на першу розкладку), правий Ctrl+Menu (на другу розкладку)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавіша для вибору 3-го ряду" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Будь-яка клавіша Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Будь-яка клавіша Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Правий Alt, Shift+правий Alt діють як Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Права клавіша Alt ніколи не обирає 3-й рівень" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровій клавіатурі" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Зворотна риска" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Менше ніж/Більше ніж>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 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:928 +#: ../rules/base.xml.in.h:929 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:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Менше/Більше> вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Розташування клавіші Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock працює як Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ліва клавіша Ctrl як Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Поміняти місцями клавіші Ctrl та Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Ліворуч від 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Знизу ліворуч" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Права клавіша Ctrl працює як права клавіша Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu працює як права клавіша Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Права клавіша Alt працює як права клавіша Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Поміняти місцями ліву клавішу Alt і ліву клавішу Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Поміняти місцями ліву клавішу Win і ліву клавішу Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Ліва клавіша Alt працює як Ctrl, ліва Ctrl — як Win, ліва Win — як Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Розкладка цифрової клавіатури" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Застаріла" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Доповнення Unicode (стрілки та математичні оператори)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Доповнення Unicode (стрілки та математичні оператори; математичні оператори на типовому рівні)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Стара Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Шістнадцяткова" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "У стилі банкоматної/телефонної" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Вибір поведінки клавіші del на цифровій клавіатурі" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Застаріла клавіша з крапкою" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Застаріла клавіша з комою" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Клавіша четвертого рівня з крапкою" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Клавіша четвертого рівня з крапкою, обмежена Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Клавіша четвертого рівня з комою" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Клавіша четвертого рівня з абстрактним розділювачем " -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Крапка з комою на третьому рівні" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведінка клавіші Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift призупиняє дію Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift не впливає на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock дія як Shift з блокуванням. Shift призупиняє дію Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock вмикає звичайну капіталізацію символів алфавіту" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Caps Lock — додаткова клавіша Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Поміняти місцями клавіші ESC та Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Caps Lock — додаткова клавіша ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Caps Lock — додаткова клавіша Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Caps Lock — додаткова клавіша Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Caps Lock — додаткова клавіша Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock перемикає Shift (діє одразу на всі клавіші)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock вимкнено" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Caps Lock — додаткова клавіша Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведінка клавіш Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Додати звичайну поведінку на клавішу Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt та Meta на клавішах Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt використовуються як Win (і як звичайні Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl використовується як Win (і як звичайний Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl використовується як клавіші Alt, Alt використовується як Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta відповідає клавішам Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta відповідає лівій клавіші Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper відповідає клавішам Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu." -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt міняється з клавішею Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Розташування клавіші Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-ій рівень лівої Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-ій рівень правої Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-ій рівень клавіші меню" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-ій рівень лівої Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-ій рівень правої Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-ій рівень Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-ій рівень <Менше/Більше>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Різні параметри сумісності" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Типові клавіші цифрової клавіатури" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "За допомогою цифрова клавіатура вводяться лише цифри (як у Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не скасовує Num Lock, а вибирає третій рівень" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Сліпі клавіші (Ctrl+Alt+<key>) обробляються на сервері" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift скасовує Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Увімкнути додаткові типографські символи" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Обидві клавіші Shift разом перемикають стан Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Натискання обох клавіш Shift вмикають Caps Lock, одна клавіша Shift — вимикає" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Обидві клавіші Shift разом перемикають стан Shift" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock перемикає PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Дозволити скасування захоплення діями з клавіатури (увага: небезпечно)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Дозволити захоплення і журналювання ієрархії вікон" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Додавання знаків валюти до деяких клавіш" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Євро на E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Євро на 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Євро на 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Євро на 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Символ рупії на 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавіша для вибору 5-го ряду" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Менше ніж/Більше ніж> вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Клавіша пробіл генерує символ нерозривного пробілу" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Звичайний пробіл на будь-якому рівні" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Символ нерозривного пробілу на другому рівні" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Символ нерозривного пробілу на третьому рівні" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Символ нерозривного пробілу на четвертому рівні" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Незв’язувальний символ нульової ширини на другому рівні" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Незв’язувальний символ нульової ширини на третьому рівні, зв’язувальний символ нульової ширини на четвертому" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Параметри японської клавіатури" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Клавіша Kana Lock фіксується" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F style Backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Клавіша повних/половинних форм — додаткова клавіша ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Додавання діакритичних знаків есперанто" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "На відповідну клавішу у розкладці Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "На відповідну клавішу у розкладці Дворака" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "На відповідну клавішу у розкладці Колемака" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Підтримувати сумісність клавіш з застарілими кодами клавіш Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Сумісність з кодами клавіш Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Комбінація клавіш для переривання роботи X-сервера" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4026,150 +4046,160 @@ msgstr "Салішська кер-д’ален" msgid "English (US, Sun Type 6/7)" msgstr "Англійська (США, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Англійська (Норман)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Польська (інтернаціональна зі сліпими клавішами)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Польська (Коулмак)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Польська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Кримськотатарська (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Румунська (ергономічна для друку наосліп)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Румунська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Сербська (комбінації з акцентами замість сліпих клавіш)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Російська (з українсько-білоруською розкладкою)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Російська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Вірменська (OLPC, фонетична)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Іврит (біблійна, фонетична, SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Арабська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Бельгійська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Португальська (Бразилія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Чеська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Данська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Голландська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Естонська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Фінська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Французька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Грецька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Італійська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Японська (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Японська (Sun Type 7, сумісна з ПК)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Японська (Sun Type 7, сумісна з комп’ютерами Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Норвезька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Португальська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Словацька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Іспанська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Шведська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Німецька (Швейцарія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Французька (Швейцарія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Турецька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Українська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Англійська (Великобританія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Корейська (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Бенгальська" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Португальська (Бразилія, nativo для есперанто)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Англійська (перемикання розкладки клавішею «помножити/ділити»)" diff --git a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot index 03bc1d527..3952a1efe 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-09-30 22:59+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "" @@ -1046,17 +1046,17 @@ msgstr "" msgid "Belgian (Wang model 724 azerty)" msgstr "" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "" #. Keyboard indicator for Indian layouts @@ -1069,27 +1069,27 @@ msgid "Indian" msgstr "" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "" #. Keyboard indicator for Gujarati layouts @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "" @@ -1290,15 +1290,15 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" +msgid "Esperanto (Brazil, Nativo)" msgstr "" #. Keyboard indicator for Bulgarian layouts @@ -1453,2503 +1453,2523 @@ msgid "Tibetan (with ASCII numerals)" msgstr "" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" msgstr "" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "" "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "" "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with " "another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "" "Backslash chooses 3rd level, acts as onetime lock when pressed together with " "another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "" "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed " "together with another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "" "Unicode additions (arrows and math operators; math operators on default " "level)" msgstr "" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "" "Wang 724 keypad with Unicode additions (arrows and math operators; math " "operators on default level)" msgstr "" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 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:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "" "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num " "Lock)" msgstr "" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "" "<Less/Greater> chooses 5th level, locks when pressed together with " "another 5th-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "" "Right Alt chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "" "Left Win chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "" "Right Win chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "" "Non-breakable space character at third level, thin non-breakable space " "character at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "" "Non-breakable space character at fourth level, thin non-breakable space " "character at sixth level" msgstr "" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "" "Zero-width non-joiner character at second level, zero-width joiner character " "at third level" msgstr "" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "" "Zero-width non-joiner character at second level, non-breakable space " "character at third level" msgstr "" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "" "Zero-width non-joiner character at third level, zero-width joiner at fourth " "level" msgstr "" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "" @@ -4061,146 +4081,150 @@ msgstr "" msgid "English (US, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:42 -msgid "Polish (international with dead keys)" +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" msgstr "" #: ../rules/base.extras.xml.in.h:43 -msgid "Polish (Colemak)" +msgid "Polish (international with dead keys)" msgstr "" #: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "" + +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "" diff --git a/xorg-server/xkeyboard-config/rules/base.extras.xml.in b/xorg-server/xkeyboard-config/rules/base.extras.xml.in index dd3251b6e..dd7339390 100644 --- a/xorg-server/xkeyboard-config/rules/base.extras.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.extras.xml.in @@ -14,43 +14,43 @@ dyalog - dlg - APL keyboard symbols (Dyalog) + <_shortDescription>dlg + <_description>APL keyboard symbols (Dyalog) sax - sax - APL keyboard symbols (sax) + <_shortDescription>sax + <_description>APL keyboard symbols (sax) unified - ufd - APL keyboard symbols (unified) + <_shortDescription>ufd + <_description>APL keyboard symbols (unified) apl2 - apl2 - APL keyboard symbols (IBM APL2) + <_shortDescription>apl2 + <_description>APL keyboard symbols (IBM APL2) aplplusII - aplII - APL keyboard symbols (Manugistics APL*PLUS II) + <_shortDescription>aplII + <_description>APL keyboard symbols (Manugistics APL*PLUS II) aplx - aplx - APL keyboard symbols (APLX unified) + <_shortDescription>aplx + <_description>APL keyboard symbols (APLX unified) @@ -264,7 +264,7 @@ cz_sk_de - Czech Slovak and German (US) + <_description>Czech Slovak and German (US) eng cze slo @@ -371,7 +371,7 @@ chu - Church Slavonic + <_description>Church Slavonic chu @@ -776,6 +776,33 @@ + + + eu + + <_shortDescription>eu + <_description>EurKEY (US based layout with european letters) + + cat + dan + eng + est + fao + fin + ger + gre + gsw + ita + lav + lit + nld + nor + por + spa + swe + + + diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index eb9586680..198b3a7be 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -1839,7 +1839,7 @@ eeyek - Manipuri (Eeyek) + <_description>Manipuri (Eeyek) mni @@ -1925,7 +1925,7 @@ mal_enhanced <_shortDescription>ml - <_description>Malayalam (enhanced Inscript with Rupee Sign) + <_description>Malayalam (enhanced Inscript, with rupee sign) mal @@ -2110,7 +2110,7 @@ eng <_shortDescription>en - <_description>English (India, with RupeeSign) + <_description>English (India, with rupee sign) eng @@ -2132,13 +2132,13 @@ alternatequotes - <_description>Bosnian (use guillemets for quotes) + <_description>Bosnian (with guillemets for quotes) unicode - <_description>Bosnian (use Bosnian digraphs) + <_description>Bosnian (with Bosnian digraphs) @@ -2559,13 +2559,13 @@ alternatequotes - <_description>Croatian (use guillemets for quotes) + <_description>Croatian (with guillemets for quotes) unicode - <_description>Croatian (use Croatian digraphs) + <_description>Croatian (with Croatian digraphs) @@ -2642,6 +2642,12 @@ <_description>Danish (eliminate dead keys) + + + winkeys + <_description>Danish (Winkeys) + + mac @@ -2749,7 +2755,7 @@ pes_keypad - <_description>Persian (with Persian Keypad) + <_description>Persian (with Persian keypad) @@ -2896,6 +2902,12 @@ <_description>Finnish (classic, eliminate dead keys) + + + winkeys + <_description>Finnish (Winkeys) + + smi @@ -3277,6 +3289,15 @@ <_description>German (qwerty) + + + tr + <_description>Turkish (Germany) + + tr + + + ru @@ -3545,6 +3566,12 @@ <_description>Italian (eliminate dead keys) + + + winkeys + <_description>Italian (Winkeys) + + mac @@ -3982,6 +4009,12 @@ <_description>Norwegian (eliminate dead keys) + + + winkeys + <_description>Norwegian (Winkeys) + + dvorak @@ -4079,7 +4112,7 @@ szl - Silesian + <_description>Silesian szl @@ -4443,7 +4476,7 @@ alternatequotes - <_description>Slovenian (use guillemets for quotes) + <_description>Slovenian (with guillemets for quotes) @@ -4502,6 +4535,12 @@ <_description>Spanish (eliminate dead keys) + + + winkeys + <_description>Spanish (Winkeys) + + deadtilde @@ -6343,7 +6382,7 @@

: "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE + : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE + : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE + : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE + : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE + : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE + : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE XCOMM Sequences with COMBINING DOT BELOW / -XCOMM : " " # DOT BELOW - : "ạ" # LATIN SMALL LETTER A WITH DOT BELOW - : "Ạ" # LATIN CAPITAL LETTER A WITH DOT BELOW - : "ẹ" # LATIN SMALL LETTER E WITH DOT BELOW - : "Ẹ" # LATIN CAPITAL LETTER E WITH DOT BELOW - : "ị" # LATIN SMALL LETTER I WITH DOT BELOW - : "Ị" # LATIN CAPITAL LETTER I WITH DOT BELOW - : "ọ" # LATIN SMALL LETTER O WITH DOT BELOW - : "Ọ" # LATIN CAPITAL LETTER O WITH DOT BELOW - : "ụ" # LATIN SMALL LETTER U WITH DOT BELOW - : "Ụ" # LATIN CAPITAL LETTER U WITH DOT BELOW - : "ỵ" # LATIN SMALL LETTER Y WITH DOT BELOW - : "Ỵ" # LATIN CAPITAL LETTER Y WITH DOT BELOW +XCOMM : " " U.... # DOT BELOW + : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW + : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW + : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW + : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW + : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW + : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW + : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW + : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW + : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW + : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW + : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW + : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW XCOMM Sequences with COMBINING DOUBLE ACUTE ACCENT / - : "˝" # DOUBLE ACUTE ACCENT - : "ő" # LATIN SMALL LETTER O WITH DOUBLE ACUTE - : "Ő" # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - : "ű" # LATIN SMALL LETTER U WITH DOUBLE ACUTE - : "Ű" # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + : "˝" U02DD # DOUBLE ACUTE ACCENT + : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE + : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE + : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE XCOMM Sequences with COMBINING GRAVE ACCENT / - : "`" # GRAVE ACCENT - : "à" # LATIN SMALL LETTER A WITH GRAVE - : "À" # LATIN CAPITAL LETTER A WITH GRAVE - : "è" # LATIN SMALL LETTER E WITH GRAVE - : "È" # LATIN CAPITAL LETTER E WITH GRAVE - : "ì" # LATIN SMALL LETTER I WITH GRAVE - : "Ì" # LATIN CAPITAL LETTER I WITH GRAVE - : "ò" # LATIN SMALL LETTER O WITH GRAVE - : "Ò" # LATIN CAPITAL LETTER O WITH GRAVE - : "ù" # LATIN SMALL LETTER U WITH GRAVE - : "Ù" # LATIN CAPITAL LETTER U WITH GRAVE - : "ẁ" # LATIN SMALL LETTER W WITH GRAVE - : "Ẁ" # LATIN CAPITAL LETTER W WITH GRAVE - : "ỳ" # LATIN SMALL LETTER Y WITH GRAVE - : "Ỳ" # LATIN CAPITAL LETTER Y WITH GRAVE + : "`" U0060 # GRAVE ACCENT + : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE + : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE + : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE + : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE + : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE + : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE + : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE + : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE + : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE + : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE + : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE + : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE + : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE + : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE XCOMM Sequences with COMBINING MACRON / - : "¯" # MACRON - : "ā" # LATIN SMALL LETTER A WITH MACRON - : "Ā" # LATIN CAPITAL LETTER A WITH MACRON - : "ē" # LATIN SMALL LETTER E WITH MACRON - : "Ē" # LATIN CAPITAL LETTER E WITH MACRON - : "ī" # LATIN SMALL LETTER I WITH MACRON - : "Ī" # LATIN CAPITAL LETTER I WITH MACRON - : "ō" # LATIN SMALL LETTER O WITH MACRON - : "Ō" # LATIN CAPITAL LETTER O WITH MACRON - : "ū" # LATIN SMALL LETTER U WITH MACRON - : "Ū" # LATIN CAPITAL LETTER U WITH MACRON - : "ǣ" # LATIN SMALL LETTER AE WITH MACRON - : "Ǣ" # LATIN CAPITAL LETTER AE WITH MACRON - : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON - : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON + : "¯" U00AF # MACRON + : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON + : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON + : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON + : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON + : "ī" U012B # LATIN SMALL LETTER I WITH MACRON + : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON + : "ō" U014D # LATIN SMALL LETTER O WITH MACRON + : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON + : "ū" U016B # LATIN SMALL LETTER U WITH MACRON + : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON + : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON + : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON + : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON + : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON XCOMM Sequences with COMBINING OGONEK / - : "˛" # OGONEK - : "ą" # LATIN SMALL LETTER A WITH OGONEK - : "Ą" # LATIN CAPITAL LETTER A WITH OGONEK - : "ę" # LATIN SMALL LETTER E WITH OGONEK - : "Ę" # LATIN CAPITAL LETTER E WITH OGONEK - : "į" # LATIN SMALL LETTER I WITH OGONEK - : "Į" # LATIN CAPITAL LETTER I WITH OGONEK - : "ǫ" # LATIN SMALL LETTER O WITH OGONEK - : "Ǫ" # LATIN CAPITAL LETTER O WITH OGONEK - : "ų" # LATIN SMALL LETTER U WITH OGONEK - : "Ų" # LATIN CAPITAL LETTER U WITH OGONEK + : "˛" U02DB # OGONEK + : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK + : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK + : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK + : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK + : "į" U012F # LATIN SMALL LETTER I WITH OGONEK + : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK + : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK + : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK + : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK + : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK XCOMM Sequences with COMBINING RING ABOVE / - : "°" # RING ABOVE - : "å" # LATIN SMALL LETTER A WITH RING ABOVE - : "Å" # LATIN CAPITAL LETTER A WITH RING ABOVE - : "ů" # LATIN SMALL LETTER U WITH RING ABOVE - : "Ů" # LATIN CAPITAL LETTER U WITH RING ABOVE + : "˚" U02DA # RING ABOVE + : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE + : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE + : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE + : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE XCOMM Sequences with COMBINING TILDE / - : "~" # TILDE - : "ã" # LATIN SMALL LETTER A WITH TILDE - : "Ã" # LATIN CAPITAL LETTER A WITH TILDE - : "ẽ" # LATIN SMALL LETTER E WITH TILDE - : "Ẽ" # LATIN CAPITAL LETTER E WITH TILDE - : "ĩ" # LATIN SMALL LETTER I WITH TILDE - : "Ĩ" # LATIN CAPITAL LETTER I WITH TILDE - : "ñ" # LATIN SMALL LETTER N WITH TILDE - : "Ñ" # LATIN CAPITAL LETTER N WITH TILDE - : "õ" # LATIN SMALL LETTER O WITH TILDE - : "Õ" # LATIN CAPITAL LETTER O WITH TILDE - : "ũ" # LATIN SMALL LETTER U WITH TILDE - : "Ũ" # LATIN CAPITAL LETTER U WITH TILDE - : "ỹ" # LATIN SMALL LETTER Y WITH TILDE - : "Ỹ" # LATIN CAPITAL LETTER Y WITH TILDE + : "~" U007E # TILDE + : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE + : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE + : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE + : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE + : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE + : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE + : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE + : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE + : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE + : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE + : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE + : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE + : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE + : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE XCOMM Sequences with AUXILIARY STROKE / - : "đ" # LATIN SMALL LETTER D WITH STROKE - : "Đ" # LATIN CAPITAL LETTER D WITH STROKE - : "ǥ" # LATIN SMALL LETTER G WITH STROKE - : "Ǥ" # LATIN CAPITAL LETTER G WITH STROKE - : "ħ" # LATIN SMALL LETTER H WITH STROKE - : "Ħ" # LATIN CAPITAL LETTER H WITH STROKE - : "ł" # LATIN SMALL LETTER L WITH STROKE - : "Ł" # LATIN CAPITAL LETTER L WITH STROKE - : "ø" # LATIN SMALL LETTER O WITH STROKE - : "Ø" # LATIN CAPITAL LETTER O WITH STROKE - : "ŧ" # LATIN SMALL LETTER T WITH STROKE - : "Ŧ" # LATIN CAPITAL LETTER T WITH STROKE + : "đ" U0111 # LATIN SMALL LETTER D WITH STROKE + : "Đ" U0110 # LATIN CAPITAL LETTER D WITH STROKE + : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE + : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE + : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE + : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE + : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE + : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE + : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE + : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE + : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE + : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE XCOMM Sequences from Annex 4 XCOMM Sequences with COMBINING BREVE / - : "ắ" # LATIN SMALL LETTER A WITH BREVE AND ACUTE - : "ặ" # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW - : "ằ" # LATIN SMALL LETTER A WITH BREVE AND GRAVE - : "ẳ" # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE - : "ẵ" # LATIN SMALL LETTER A WITH BREVE AND TILDE - : "Ắ" # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE - : "Ặ" # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW - : "Ằ" # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE - : "Ẳ" # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE - : "Ẵ" # LATIN CAPITAL LETTER A WITH BREVE AND TILDE + : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE + : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW + : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE + : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE + : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE + : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE + : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW + : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE + : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE + : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / - : "ấ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE - : "ậ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW - : "ầ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE - : "ẩ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE - : "ẫ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE - : "Ấ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE - : "Ậ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW - : "Ầ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE - : "Ẩ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE - : "Ẫ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE - : "ế" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE - : "ệ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW - : "ề" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE - : "ể" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE - : "ễ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE - : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE - : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW - : "Ề" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE - : "Ể" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE - : "Ễ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE - : "ố" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE - : "ộ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW - : "ồ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE - : "ổ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE - : "ỗ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE - : "Ố" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE - : "Ộ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW - : "Ồ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE - : "Ổ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE - : "Ỗ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE + : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE + : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW + : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE + : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE + : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE + : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE + : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW + : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE + : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE + : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE + : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE + : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW + : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE + : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE + : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE + : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE + : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW + : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE + : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE + : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE + : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE + : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW + : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE + : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE + : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE + : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE + : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW + : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE + : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE + : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE XCOMM Sequences with COMBINING DIAERESIS / - : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON - : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON + : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON + : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON XCOMM Sequences with COMBINING DOT ABOVE / - : "ȧ" # LATIN SMALL LETTER A WITH DOT ABOVE - : "ǡ" # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON - : "Ȧ" # LATIN CAPITAL LETTER A WITH DOT ABOVE - : "Ǡ" # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON + : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE + : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON + : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE + : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON XCOMM Sequences with COMBINING HOOK ABOVE / - : "ả" # LATIN SMALL LETTER A WITH HOOK ABOVE - : "Ả" # LATIN CAPITAL LETTER A WITH HOOK ABOVE - : "ẻ" # LATIN SMALL LETTER E WITH HOOK ABOVE - : "Ẻ" # LATIN CAPITAL LETTER E WITH HOOK ABOVE - : "ỉ" # LATIN SMALL LETTER I WITH HOOK ABOVE - : "Ỉ" # LATIN CAPITAL LETTER I WITH HOOK ABOVE - : "ỏ" # LATIN SMALL LETTER O WITH HOOK ABOVE - : "Ỏ" # LATIN CAPITAL LETTER O WITH HOOK ABOVE - : "ủ" # LATIN SMALL LETTER U WITH HOOK ABOVE - : "Ủ" # LATIN CAPITAL LETTER U WITH HOOK ABOVE - : "ỷ" # LATIN SMALL LETTER Y WITH HOOK ABOVE - : "Ỷ" # LATIN CAPITAL LETTER Y WITH HOOK ABOVE + : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE + : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE + : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE + : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE + : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE + : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE + : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE + : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE + : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE + : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE + : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE + : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE XCOMM Sequences with COMBINING HORN / - : "ơ" # LATIN SMALL LETTER O WITH HORN - : "ớ" # LATIN SMALL LETTER O WITH HORN AND ACUTE - : "ợ" # LATIN SMALL LETTER O WITH HORN AND DOT BELOW - : "ờ" # LATIN SMALL LETTER O WITH HORN AND GRAVE - : "ờ" # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE - : "ỡ" # LATIN SMALL LETTER O WITH HORN AND TILDE - : "Ơ" # LATIN CAPITAL LETTER O WITH HORN - : "Ớ" # LATIN CAPITAL LETTER O WITH HORN AND ACUTE - : "Ợ" # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW - : "Ờ" # LATIN CAPITAL LETTER O WITH HORN AND GRAVE - : "Ở" # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE - : "Ỡ" # LATIN CAPITAL LETTER O WITH HORN AND TILDE - : "ư" # LATIN SMALL LETTER U WITH HORN - : "ứ" # LATIN SMALL LETTER U WITH HORN AND ACUTE - : "ự" # LATIN SMALL LETTER U WITH HORN AND DOT BELOW - : "ừ" # LATIN SMALL LETTER U WITH HORN AND GRAVE - : "ử" # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE - : "ữ" # LATIN SMALL LETTER U WITH HORN AND TILDE - : "Ư" # LATIN CAPITAL LETTER U WITH HORN - : "Ứ" # LATIN CAPITAL LETTER U WITH HORN AND ACUTE - : "Ự" # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW - : "Ừ" # LATIN CAPITAL LETTER U WITH HORN AND GRAVE - : "Ử" # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE - : "Ữ" # LATIN CAPITAL LETTER U WITH HORN AND TILDE + : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN + : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE + : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW + : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE + : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE + : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE + : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN + : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE + : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW + : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE + : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE + : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE + : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN + : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE + : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW + : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE + : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE + : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE + : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN + : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE + : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW + : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE + : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE + : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE XCOMM Sequences with COMBINING OGONEK / - : "ǭ" # LATIN SMALL LETTER O WITH OGONEK AND MACRON - : "Ǭ" # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON + : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON + : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON XCOMM Sequences with COMBINING RING ABOVE / - : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE - : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE + : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE + : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE XCOMM Additional sequences from Annex 5 for the reportoire of the MES-2 XCOMM (Multilingual European Subset No. 2 in ISO/IEC 10646, Collection 282) - : "ƒ" # LATIN SMALL LETTER F WITH HOOK - : "fi" # LATIN SMALL LIGATURE FI - : "fl" # LATIN SMALL LIGATURE FL - : "ij" # LATIN SMALL LIGATURE IJ - : "IJ" # LATIN CAPITAL LIGATURE IJ - : "ŀ" # LATIN SMALL LETTER L WITH MIDDLE DOT - : "Ŀ" # LATIN CAPITAL LETTER L WITH MIDDLE DOT - : "ʼn" # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - : "ɼ" # LATIN SMALL LETTER R WITH LONG LEG - : "ſ" # LATIN SMALL LETTER LONG S - : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE - : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE - : "ș" # LATIN SMALL LETTER S WITH COMMA BELOW - : "Ș" # LATIN CAPITAL LETTER S WITH COMMA BELOW - : "ț" # LATIN SMALL LETTER T WITH COMMA BELOW - : "Ț" # LATIN CAPITAL LETTER T WITH COMMA BELOW + : "ƒ" U0192 # LATIN SMALL LETTER F WITH HOOK + : "fi" UFB01 # LATIN SMALL LIGATURE FI + : "fl" UFB02 # LATIN SMALL LIGATURE FL + : "ij" U0133 # LATIN SMALL LIGATURE IJ + : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ + : "ŀ" U0140 # LATIN SMALL LETTER L WITH MIDDLE DOT + : "Ŀ" U013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT + : "ʼn" U0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE + : "ɼ" U027C # LATIN SMALL LETTER R WITH LONG LEG + : "ſ" U017F # LATIN SMALL LETTER LONG S + : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE + : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE + : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW + : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW + : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW + : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW diff --git a/libX11/src/XErrorDB b/libX11/src/XErrorDB index 8048907a6..7b6d46513 100644 --- a/libX11/src/XErrorDB +++ b/libX11/src/XErrorDB @@ -898,12 +898,24 @@ XRequest.RANDR.28: RRGetPanning XRequest.RANDR.29: RRSetPanning XRequest.RANDR.30: RRSetOutputPrimary XRequest.RANDR.31: RRGetOutputPrimary +XRequest.RANDR.32: RRGetProviders +XRequest.RANDR.33: RRGetProviderInfo +XRequest.RANDR.34: RRSetProviderOffloadSink +XRequest.RANDR.35: RRSetProviderOutputSource +XRequest.RANDR.36: RRListProviderProperties +XRequest.RANDR.37: RRQueryProviderProperty +XRequest.RANDR.38: RRConfigureProviderProperty +XRequest.RANDR.39: RRChangeProviderProperty +XRequest.RANDR.40: RRDeleteProviderProperty +XRequest.RANDR.41: RRGetProviderProperty XProtoError.RANDR.0: BadRROutput (invalid Output parameter) XlibMessage.RANDR.0: Output id in failed request: 0x%lx XProtoError.RANDR.1: BadRRCrtc (invalid Crtc parameter) XlibMessage.RANDR.1: Crtc id in failed request: 0x%lx XProtoError.RANDR.2: BadRRMode (invalid Mode parameter) XlibMessage.RANDR.2: Mode id in failed request: 0x%lx +XProtoError.RANDR.3: BadRRProvider (invalid Provider parameter) +XlibMessage.RANDR.3: Provider id in failed request: 0x%lx ! RENDER XRequest.RENDER.0: RenderQueryVersion XRequest.RENDER.1: RenderQueryPictFormats diff --git a/libxcb/Makefile.am b/libxcb/Makefile.am index 1cb3d9a7b..387c2f28e 100644 --- a/libxcb/Makefile.am +++ b/libxcb/Makefile.am @@ -1,6 +1,6 @@ ACLOCAL_AMFLAGS=-I m4 -SUBDIRS=src tests doc +SUBDIRS=src tests doc man pkgconfigdir = $(libdir)/pkgconfig diff --git a/libxcb/configure.ac b/libxcb/configure.ac index 6d0f844b8..68c3b2f0c 100644 --- a/libxcb/configure.ac +++ b/libxcb/configure.ac @@ -1,42 +1,51 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. +dnl Process this file with autoconf to produce a configure script. # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([libxcb], - 1.10, - [xcb@lists.freedesktop.org]) +AC_INIT([libxcb],[1.10], + [https://bugs.freedesktop.org/enter_bug.cgi?product=xcb], + [libxcb]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([xcb.pc.in]) +AC_CONFIG_HEADERS([src/config.h]) # Initialize Automake AM_INIT_AUTOMAKE([foreign dist-bzip2]) -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +AM_PATH_PYTHON([2.6]) # Set common system defines for POSIX extensions, such as _GNU_SOURCE # Must be called before any macros that run the compiler (like AC_PROG_LIBTOOL) # to avoid autoconf errors. AC_USE_SYSTEM_EXTENSIONS -AM_PATH_PYTHON([2.6]) +# Initialize libtool +LT_PREREQ([2.2]) +LT_INIT([win32-dll]) + +# Require xorg-macros minimum of 1.18 - Initial version +m4_ifndef([XORG_MACROS_VERSION], + [m4_fatal([must install xorg-macros 1.18 or later before running autoconf/autogen])]) +XORG_MACROS_VERSION(1.18) +XORG_DEFAULT_OPTIONS +XORG_ENABLE_DEVEL_DOCS +XORG_WITH_DOXYGEN + +# The dot drawing tool is checked by XORG_WITH_DOXYGEN, needed for xcb manual +if test x"$HAVE_DOT" = xno; then + AC_MSG_WARN([dot not found - doxygen targets will be skipped]) +fi PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=yes], [HAVE_CHECK=no]) AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xyes) -AC_CONFIG_HEADERS([src/config.h]) - -AC_LIBTOOL_WIN32_DLL -AC_PROG_LIBTOOL -AC_PROG_CC - XSLTPROC=no HTML_CHECK_RESULT=no if test x"$HAVE_CHECK" = xyes; then - AC_PATH_PROG(XSLTPROC, xsltproc, no) - if test x"$XSLTPROC" != xno; then - HTML_CHECK_RESULT=yes - fi + AC_PATH_PROG(XSLTPROC, xsltproc, no) + if test x"$XSLTPROC" != xno; then + HTML_CHECK_RESULT=yes + fi fi AC_SUBST(HTML_CHECK_RESULT) @@ -47,17 +56,17 @@ PKG_CHECK_MODULES(NEEDED, $NEEDED) have_xdmcp="no" PKG_CHECK_MODULES(XDMCP, xdmcp, - AC_CHECK_LIB(Xdmcp, XdmcpWrap, - [ - AC_DEFINE(HASXDMAUTH,1,[Has Wraphelp.c needed for XDM AUTH protocols]) - NEEDED="$NEEDED xdmcp" - have_xdmcp="yes" - ], - [ - XDMCP_CFLAGS= - XDMCP_LIBS= - ], [$XDMCP_LIBS]), - [AC_MSG_RESULT(no)]) + AC_CHECK_LIB(Xdmcp, XdmcpWrap, + [ + AC_DEFINE(HASXDMAUTH,1,[Has Wraphelp.c needed for XDM AUTH protocols]) + NEEDED="$NEEDED xdmcp" + have_xdmcp="yes" + ], + [ + XDMCP_CFLAGS= + XDMCP_LIBS= + ], [$XDMCP_LIBS]), + [AC_MSG_RESULT(no)]) AC_SUBST(NEEDED) @@ -82,12 +91,12 @@ AC_SEARCH_LIBS(getaddrinfo, socket) AC_SEARCH_LIBS(connect, socket) AC_ARG_ENABLE(sendfds, AS_HELP_STRING([--disable-sendfds], [Support FD passing (default: auto)]), - [sendfds=$enableval], [sendfds=auto]) + [sendfds=$enableval], [sendfds=auto]) case x$sendfds in xauto) - AC_SEARCH_LIBS(sendmsg, socket, [sendfds="yes"], [sendfds="no"]) - ;; + AC_SEARCH_LIBS(sendmsg, socket, [sendfds="yes"], [sendfds="no"]) + ;; esac # XPG4v2/UNIX95 added msg_control - check to see if we need to define @@ -134,12 +143,12 @@ have_win32="no" lt_enable_auto_import="" case $host_os in mingw*) - have_win32="yes" - lt_enable_auto_import="-Wl,--enable-auto-import" - ;; + have_win32="yes" + lt_enable_auto_import="-Wl,--enable-auto-import" + ;; linux*) - AC_DEFINE([HAVE_ABSTRACT_SOCKETS], 1, [Define if your platform supports abstract sockets]) - ;; + AC_DEFINE([HAVE_ABSTRACT_SOCKETS], 1, [Define if your platform supports abstract sockets]) + ;; esac AC_SUBST(lt_enable_auto_import) @@ -147,7 +156,7 @@ AM_CONDITIONAL([XCB_HAVE_WIN32], [test "x${have_win32}" = "xyes"]) dnl define buffer queue size AC_ARG_WITH([queue-size], - AC_HELP_STRING([--with-queue-size=SIZE], + AS_HELP_STRING([--with-queue-size=SIZE], [Set the XCB buffer queue size (default is 16384)]), [xcb_queue_buffer_size="$withval"], [xcb_queue_buffer_size=16384]) @@ -156,11 +165,11 @@ AC_DEFINE_UNQUOTED(XCB_QUEUE_BUFFER_SIZE, [$xcb_queue_buffer_size], dnl check for the sockaddr_un.sun_len member AC_CHECK_MEMBER([struct sockaddr_un.sun_len], - [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])], - [], - [ #include - #include - ]) + [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])], + [], + [ #include + #include + ]) dnl check for support for Solaris Trusted Extensions AC_CHECK_HEADERS([tsol/label.h]) @@ -168,52 +177,39 @@ AC_CHECK_FUNCS([is_system_labeled]) dnl check for IOV_MAX, and fall back to UIO_MAXIOV on BSDish systems AC_CHECK_DECL([IOV_MAX], [], - [AC_CHECK_DECL([UIO_MAXIOV], [AC_DEFINE([IOV_MAX], [UIO_MAXIOV])], - [AC_DEFINE([IOV_MAX], [16], [Define if not provided by ])], - [[#include ]])], - [[#include ]]) + [AC_CHECK_DECL([UIO_MAXIOV], [AC_DEFINE([IOV_MAX], [UIO_MAXIOV])], + [AC_DEFINE([IOV_MAX], [16], [Define if not provided by ])], + [[#include ]])], + [[#include ]]) xcbincludedir='${includedir}/xcb' AC_SUBST(xcbincludedir) -if test "x$GCC" = xyes ; then - CWARNFLAGS="-Wall -Wpointer-arith -Wold-style-definition \ - -Wstrict-prototypes -Wmissing-declarations -Wnested-externs" -else - AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) - if test "x$SUNCC" = "xyes"; then - CWARNFLAGS="-v -fd" - fi -fi -AC_SUBST(CWARNFLAGS) - XCB_CHECK_VISIBILITY() -XCB_CHECK_DOXYGEN() - AC_CHECK_FUNC(getaddrinfo, [AC_DEFINE(HAVE_GETADDRINFO, 1, [getaddrinfo() function is available])], ) case $host_os in - # darwin through Snow Leopard has poll() but can't be used to poll character devices. - darwin@<:@789@:>@*|darwin10*) ;; - darwin*) - _ac_xorg_macosx_version_min="" - if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then - _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\(@<:@^ @:>@*\).*$/\1/'` - else - _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET - fi - case $_ac_xorg_macosx_version_min in - 10.@<:@0123456@:>@|10.@<:@0123456@:>@.*) ;; - *) - AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) - ;; - esac - unset _ac_xorg_macosx_version_min - ;; - *) - AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) - ;; + # darwin through Snow Leopard has poll() but can't be used to poll character devices. + darwin@<:@789@:>@*|darwin10*) ;; + darwin*) + _ac_xorg_macosx_version_min="" + if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then + _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\(@<:@^ @:>@*\).*$/\1/'` + else + _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET + fi + case $_ac_xorg_macosx_version_min in + 10.@<:@0123456@:>@|10.@<:@0123456@:>@.*) ;; + *) + AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) + ;; + esac + unset _ac_xorg_macosx_version_min + ;; + *) + AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) + ;; esac XCB_EXTENSION(Composite, "yes") @@ -245,17 +241,18 @@ XCB_EXTENSION(XvMC, "yes") AC_ARG_WITH(launchd, AS_HELP_STRING([--with-launchd], [Build with support for Apple's launchd (default: auto)]), [LAUNCHD=$withval], [LAUNCHD=auto]) if test "x$LAUNCHD" = xauto; then - unset LAUNCHD - AC_CHECK_PROG(LAUNCHD, [launchd], [yes], [no], [$PATH$PATH_SEPARATOR/sbin]) + unset LAUNCHD + AC_CHECK_PROG(LAUNCHD, [launchd], [yes], [no], [$PATH$PATH_SEPARATOR/sbin]) fi if test "x$LAUNCHD" = xyes ; then - AC_DEFINE(HAVE_LAUNCHD, 1, [launchd support available]) + AC_DEFINE(HAVE_LAUNCHD, 1, [launchd support available]) fi AC_CONFIG_FILES([ Makefile doc/Makefile +man/Makefile src/Makefile tests/Makefile ]) @@ -338,7 +335,7 @@ echo "" echo " Used CFLAGS:" echo " CPPFLAGS............: ${CPPFLAGS}" echo " CFLAGS..............: ${CFLAGS}" -echo " Warning CFLAGS......: ${CWARNFLAGS}" +echo " Warning CFLAGS......: ${BASE_CFLAGS}" echo "" echo " Installation:" echo " Prefix..............: ${prefix}" diff --git a/libxcb/doc/Makefile.am b/libxcb/doc/Makefile.am index dbe2e0b0c..f3c934a72 100644 --- a/libxcb/doc/Makefile.am +++ b/libxcb/doc/Makefile.am @@ -8,7 +8,9 @@ xkb_issues docdirs = $(srcdir)/tutorial -if BUILD_DOCS +if ENABLE_DEVEL_DOCS +if HAVE_DOXYGEN +if HAVE_DOT docdirs += manual @@ -21,6 +23,8 @@ clean-local: rm -rf manual/ endif +endif +endif all-local: $(docdirs) diff --git a/libxcb/m4/xcb.m4 b/libxcb/m4/xcb.m4 index ad24bc2e5..32e852dd5 100644 --- a/libxcb/m4/xcb.m4 +++ b/libxcb/m4/xcb.m4 @@ -31,95 +31,6 @@ extern void f(int); CFLAGS=${save_CFLAGS} ]) -dnl Configure script for doxygen -dnl Vincent Torri 2006-05-11 -dnl -dnl XCB_CHECK_DOXYGEN([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -dnl Test for the doxygen program, and define BUILD_DOCS and DOXYGEN. -dnl -AC_DEFUN([XCB_CHECK_DOXYGEN], -[ -DOXYGEN="doxygen" - -dnl -dnl Disable the build of the documentation -dnl -AC_ARG_ENABLE( - [build_docs], - AC_HELP_STRING( - [--disable-build-docs], - [Disable the build of the documentation]), - [if test x"$enableval" != x"yes" ; then - enable_build_docs="no" - else - enable_build_docs="yes" - fi], - [enable_build_docs="yes"]) - -if test "$enable_build_docs" = "no" ; then - BUILD_DOCS=no -else -dnl -dnl Get the prefix where doxygen is installed. -dnl -AC_ARG_WITH( - [doxygen], - AC_HELP_STRING( - [--with-doxygen=FILE], - [doxygen program to use (eg /usr/bin/doxygen)]), - dnl - dnl Check the given doxygen program. - dnl - [DOXYGEN=${withval} - AC_CHECK_PROG( - [BUILD_DOCS], - [${DOXYGEN}], - [yes], - [no]) - if test $BUILD_DOCS = no; then - echo "WARNING:" - echo "The doxygen program you specified:" - echo "$DOXYGEN" - echo "was not found. Please check the path and make sure " - echo "the program exists and is executable." - AC_MSG_WARN( - [Warning: no doxygen detected. Documentation will not be built]) - fi], - [AC_CHECK_PROG( - [BUILD_DOCS], - [${DOXYGEN}], - [yes], - [no]) - if test ${BUILD_DOCS} = no; then - echo "WARNING:" - echo "The doxygen program was not found in your execute" - echo "You may have doxygen installed somewhere not covered by your path." - echo "" - echo "If this is the case make sure you have the packages installed, AND" - echo "that the doxygen program is in your execute path (see your" - echo "shell manual page on setting the \$PATH environment variable), OR" - echo "alternatively, specify the program to use with --with-doxygen." - AC_MSG_WARN( - [Warning: no doxygen detected. Documentation will not be built]) - fi]) - AC_PATH_PROG(DOT, dot, no) - if test "$DOT" = "no"; then - AC_MSG_WARN([Warning: no dot detected. Documentation will not be built]) - BUILD_DOCS="no" - fi -fi -AC_MSG_CHECKING([whether documentation is built]) -AC_MSG_RESULT([${BUILD_DOCS}]) - -dnl -dnl Substitution -dnl -AC_SUBST([DOXYGEN]) - -AM_CONDITIONAL(BUILD_DOCS, test "x$BUILD_DOCS" = "xyes") - -]) - dnl Detection and configuration of the visibility feature of gcc dnl Vincent Torri 2006-02-11 dnl diff --git a/libxcb/man/.gitignore b/libxcb/man/.gitignore new file mode 100644 index 000000000..181f3143c --- /dev/null +++ b/libxcb/man/.gitignore @@ -0,0 +1 @@ +*.[0-9] diff --git a/libxcb/man/Makefile.am b/libxcb/man/Makefile.am new file mode 100644 index 000000000..16bf51c55 --- /dev/null +++ b/libxcb/man/Makefile.am @@ -0,0 +1,18 @@ + +libmandir = $(LIB_MAN_DIR) + +libman_PRE = \ + xcb-examples.man \ + xcb-requests.man + +libman_DATA = $(libman_PRE:man=$(LIB_MAN_SUFFIX)) + +EXTRA_DIST = $(libman_PRE) + +CLEANFILES = $(libman_DATA) + +# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure +SUFFIXES = .$(LIB_MAN_SUFFIX) .man + +.man.$(LIB_MAN_SUFFIX): + $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ diff --git a/libxcb/man/xcb-examples.man b/libxcb/man/xcb-examples.man new file mode 100644 index 000000000..87a71f27f --- /dev/null +++ b/libxcb/man/xcb-examples.man @@ -0,0 +1,59 @@ +.TH xcb-examples __libmansuffix__ __xorgversion__ "XCB examples" +.ad l +.SH NAME +xcb-examples \- manpage examples +.SH DESCRIPTION +Many of the XCB manpages contain example code. These examples intend to explain +how to use one particular part of XCB. They almost never represent a standalone +(or even useful) program - X11 programs are relatively involved and +thus beyond the scope of a manpage example. + +.SH ENVIRONMENT + +Every example assumes you have an \fIxcb_connection\fP and possibly other +variables at hand. For illustrating how \fIxcb_get_property\fP works, you need +the window of which you want to get the property, for example. To make it clear +that these variables are your responsibility, these examples consist of a +single function which takes the necessary variables as parameters. + +.SH FLUSHING + +Flushing means calling \fIxcb_flush\fP to clear the XCB-internal write buffer +and send all pending requests to the X11 server. You don't explicitly need to +flush before using a reply function (like \fIxcb_query_pointer_reply\fP), but +you do need to flush before entering the event loop of your program. + +There are only two cases when XCB flushes by itself. The first case is when +its write buffer becomes full, the second case is when you are asking for +the reply of a request which wasn't flushed out yet (like +\fIxcb_query_pointer_reply\fP). This last point also includes +xcb_request_check(). Please note that waiting for an event does \fBNOT\fP +flush. + +Examples generally include the \fIxcb_flush\fP call where appropriate (for +example after setting a property). Therefore, including these functions and +calling them in your application should just work. However, you might get +better results when flushing outside of the function, depending on the +architecture of your program. + +.SH COMPILATION + +If an example does not compile (without warnings) when using \fI-std=c99\fP, +that is considered a documentation bug. Similarly, not handling errors or +leaking memory is also considered a documentation bug. Please inform us about +it on xcb@lists.freedesktop.org. + +.SH CODING STYLE + +Every example uses 4 spaces for indentation. + +Comments are in asterisks, like /* this */. + +No line is longer than 80 characters (including indentation). + +.SH SEE ALSO +.BR xcb_connect (__libmansuffix__), +.BR xcb_get_property (__libmansuffix__), +.BR xcb_flush (__libmansuffix__) +.SH AUTHOR +Michael Stapelberg diff --git a/libxcb/man/xcb-requests.man b/libxcb/man/xcb-requests.man new file mode 100644 index 000000000..8d4a1dc5f --- /dev/null +++ b/libxcb/man/xcb-requests.man @@ -0,0 +1,165 @@ +.TH xcb-requests __libmansuffix__ __xorgversion__ "XCB examples" +.ad l +.SH NAME +xcb-requests \- about request manpages +.SH DESCRIPTION +Every request in X11, like \fIMapWindow\fP, corresponds to a number of +functions and data structures in XCB. For \fIMapWindow\fP, XCB provides the +function \fIxcb_map_window\fP, which fills the \fIxcb_map_window_request_t\fP +data structure and writes that to the X11 connection. Since the \fIMapWindow\fP +request does not have a reply, this is the most simple case. + +.SH REPLIES + +Many requests have replies. For each reply, XCB provides at least a +corresponding data structure and a function to return a pointer to a filled +data structure. Let's take the \fIInternAtom\fP request as an example: XCB +provides the \fIxcb_intern_atom_reply_t\fP data structure and +\fIxcb_intern_atom_reply\fP function. For replies which are more complex (for +example lists, such as in \fIxcb_list_fonts\fP), accessor functions are +provided. + +.SH COOKIES + +XCB returns a cookie for each request you send. This is an XCB-specific data +structure containing the sequence number with which the request was sent to the +X11 server. To get any reply, you have to provide that cookie (so that XCB +knows which of the waiting replies you want). Here is an example to illustrate +the use of cookies: + +.nf +.sp +void my_example(xcb_connection *conn) { + xcb_intern_atom_cookie_t cookie; + xcb_intern_atom_reply_t *reply; + + cookie = xcb_intern_atom(conn, 0, strlen("_NET_WM_NAME"), "_NET_WM_NAME"); + /* ... do other work here if possible ... */ + if ((reply = xcb_intern_atom_reply(conn, cookie, NULL))) { + printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); + } + free(reply); +} +.fi + +.SH CHECKED VS. UNCHECKED + +The checked and unchecked suffixes for functions determine which kind of error +handling is used for this specific request. + +For requests which have no reply (for example \fIxcb_map_window\fP), errors +will be delivered to the event loop (you will receive an X11 event of type 0 +when calling \fIxcb_poll_for_event\fP). +If you want to explicitly check for errors in a blocking fashion, call the +_checked version of the function (for example \fIxcb_map_window_checked\fP) and +use \fIxcb_request_check\fP. + +For requests which have a reply (for example \fIxcb_intern_atom\fP), errors +will be checked when calling the reply function. To get errors in the event +loop instead, use the _unchecked version of the function (for example +\fIxcb_intern_atom_unchecked\fP). + +Here is an example which illustrates the four different ways of handling errors: + +.nf +.sp +/* + * Request without a reply, handling errors in the event loop (default) + * + */ +void my_example(xcb_connection *conn, xcb_window_t window) { + /* This is a request without a reply. Errors will be delivered to the event + * loop. Getting an error to xcb_map_window most likely is a bug in our + * program, so we don't need to check for that in a blocking way. */ + xcb_map_window(conn, window); + + /* ... of course your event loop would not be in the same function ... */ + while ((event = xcb_wait_for_event(conn)) != NULL) { + if (event->response_type == 0) { + fprintf("Received X11 error %d\\n", error->error_code); + free(event); + continue; + } + + /* ... handle a normal event ... */ + } +} + +/* + * Request without a reply, handling errors directly + * + */ +void my_example(xcb_connection *conn, xcb_window_t deco, xcb_window_t window) { + /* A reparenting window manager wants to know whether a new window was + * successfully reparented. If not (because the window got destroyed + * already, for example), it does not make sense to map an empty window + * decoration at all, so we need to know this right now. */ + xcb_void_cookie_t cookie = xcb_reparent_window_checked(conn, window, + deco, 0, 0); + xcb_generic_error_t *error; + if ((error = xcb_request_check(conn, cookie))) { + fprintf(stderr, "Could not reparent the window\\n"); + free(error); + return; + } + + /* ... do window manager stuff here ... */ +} + +/* + * Request with a reply, handling errors directly (default) + * + */ +void my_example(xcb_connection *conn, xcb_window_t window) { + xcb_intern_atom_cookie_t cookie; + xcb_intern_atom_reply_t *reply; + xcb_generic_error_t *error; + + cookie = xcb_intern_atom(c, 0, strlen("_NET_WM_NAME"), "_NET_WM_NAME"); + /* ... do other work here if possible ... */ + if ((reply = xcb_intern_atom_reply(c, cookie, &error))) { + printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); + free(reply); + } else { + fprintf(stderr, "X11 Error %d\\n", error->error_code); + free(error); + } +} + +/* + * Request with a reply, handling errors in the event loop + * + */ +void my_example(xcb_connection *conn, xcb_window_t window) { + xcb_intern_atom_cookie_t cookie; + xcb_intern_atom_reply_t *reply; + + cookie = xcb_intern_atom_unchecked(c, 0, strlen("_NET_WM_NAME"), + "_NET_WM_NAME"); + /* ... do other work here if possible ... */ + if ((reply = xcb_intern_atom_reply(c, cookie, NULL))) { + printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); + free(reply); + } + + /* ... of course your event loop would not be in the same function ... */ + while ((event = xcb_wait_for_event(conn)) != NULL) { + if (event->response_type == 0) { + fprintf("Received X11 error %d\\n", error->error_code); + free(event); + continue; + } + + /* ... handle a normal event ... */ + } +} +.fi + +.SH SEE ALSO +.BR xcb_map_window (__libmansuffix__), +.BR xcb_intern_atom (__libmansuffix__), +.BR xcb_list_fonts (__libmansuffix__), +.BR xcb_poll_for_event (__libmansuffix__), +.BR xcb_request_check (__libmansuffix__) +.SH AUTHOR +Michael Stapelberg diff --git a/libxcb/src/Makefile.am b/libxcb/src/Makefile.am index f2875dd18..5a3c52abd 100644 --- a/libxcb/src/Makefile.am +++ b/libxcb/src/Makefile.am @@ -4,7 +4,7 @@ EXTSOURCES = xproto.c \ bigreq.c \ xc_misc.c -AM_CFLAGS = $(CWARNFLAGS) $(NEEDED_CFLAGS) $(XDMCP_CFLAGS) +AM_CFLAGS = $(BASE_CFLAGS) $(NEEDED_CFLAGS) $(XDMCP_CFLAGS) libxcb_la_LIBADD = $(NEEDED_LIBS) $(XDMCP_LIBS) libxcb_la_SOURCES = \ xcb_conn.c xcb_out.c xcb_in.c xcb_ext.c xcb_xid.c \ @@ -241,15 +241,16 @@ endif nodist_xcbinclude_HEADERS = $(EXTHEADERS) noinst_HEADERS = xcbint.h -STATIC_MANS = man/xcb-examples.3 man/xcb-requests.3 -BUILT_MANS = man/xcb_*.3 -man_MANS = $(STATIC_MANS) $(BUILT_MANS) -EXTRA_DIST = $(STATIC_MANS) +BUILT_MAN_PAGES = man/xcb_* +libmandir = $(LIB_MAN_DIR) +libman_DATA = $(BUILT_MAN_PAGES) -BUILT_SOURCES = $(EXTSOURCES) $(BUILT_MANS) -CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) $(BUILT_MANS) +BUILT_SOURCES = $(EXTSOURCES) $(BUILT_MAN_PAGES) +CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) $(BUILT_MAN_PAGES) $(EXTSOURCES): c_client.py $(XCBPROTO_XCBINCLUDEDIR)/$(@:.c=.xml) - $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(XCBPROTO_XCBINCLUDEDIR)/$(@:.c=.xml) + $(AM_V_GEN)$(PYTHON) $(srcdir)/c_client.py -c "$(PACKAGE_STRING)" -l "$(XORG_MAN_PAGE)" \ + -s "$(LIB_MAN_SUFFIX)" -p $(XCBPROTO_XCBPYTHONDIR) \ + $(XCBPROTO_XCBINCLUDEDIR)/$(@:.c=.xml) -$(man_MANS): $(EXTSOURCES) +$(BUILT_MAN_PAGES): $(EXTSOURCES) diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py index 161cbf59d..aaaab2e4a 100644 --- a/libxcb/src/c_client.py +++ b/libxcb/src/c_client.py @@ -2344,18 +2344,18 @@ def _man_request(self, name, cookie_type, void, aux): func_name = self.c_request_name if not aux else self.c_aux_name def create_link(linkname): - name = 'man/%s.3' % linkname + name = 'man/%s.%s' % (linkname, section) if manpaths: sys.stdout.write(name) f = open(name, 'w') - f.write('.so man3/%s.3' % func_name) + f.write('.so man%s/%s.%s' % (section, func_name, section)) f.close() if manpaths: - sys.stdout.write('man/%s.3 ' % func_name) + sys.stdout.write('man/%s.%s ' % (func_name, section)) # Our CWD is src/, so this will end up in src/man/ - f = open('man/%s.3' % func_name, 'w') - f.write('.TH %s 3 %s "XCB" "XCB Requests"\n' % (func_name, today)) + f = open('man/%s.%s' % (func_name, section), 'w') + f.write('.TH %s %s "%s" "%s" "XCB Requests"\n' % (func_name, section, center_footer, left_footer)) # Left-adjust instead of adjusting to both sides f.write('.ad l\n') f.write('.SH NAME\n') @@ -2680,14 +2680,14 @@ def _man_request(self, name, cookie_type, void, aux): 'have to be handled in the event loop.\n\nIf you want to ' 'handle errors directly with \\fIxcb_request_check\\fP ' 'instead, use \\fI%s_checked\\fP. See ' - '\\fBxcb-requests(3)\\fP for details.\n') % (base_func_name)) + '\\fBxcb-requests(%s)\\fP for details.\n') % (base_func_name, section)) else: f.write(('Returns an \\fI%s\\fP. Errors have to be handled when ' 'calling the reply function \\fI%s\\fP.\n\nIf you want to ' 'handle errors in the event loop instead, use ' - '\\fI%s_unchecked\\fP. See \\fBxcb-requests(3)\\fP for ' + '\\fI%s_unchecked\\fP. See \\fBxcb-requests(%s)\\fP for ' 'details.\n') % - (cookie_type, self.c_reply_name, base_func_name)) + (cookie_type, self.c_reply_name, base_func_name, section)) f.write('.SH ERRORS\n') if hasattr(self, "doc") and self.doc: for errtype, errtext in self.doc.errors.items(): @@ -2705,18 +2705,18 @@ def _man_request(self, name, cookie_type, void, aux): f.write('.fi\n') f.write('.SH SEE ALSO\n') if hasattr(self, "doc") and self.doc: - see = ['.BR %s (3)' % 'xcb-requests'] + see = ['.BR %s (%s)' % ('xcb-requests', section)] if self.doc.example: - see.append('.BR %s (3)' % 'xcb-examples') + see.append('.BR %s (%s)' % ('xcb-examples', section)) for seename, seetype in self.doc.see.items(): if seetype == 'program': see.append('.BR %s (1)' % seename) elif seetype == 'event': - see.append('.BR %s (3)' % _t(('xcb', seename, 'event'))) + see.append('.BR %s (%s)' % (_t(('xcb', seename, 'event')), section)) elif seetype == 'request': - see.append('.BR %s (3)' % _n(('xcb', seename))) + see.append('.BR %s (%s)' % (_n(('xcb', seename)), section)) elif seetype == 'function': - see.append('.BR %s (3)' % seename) + see.append('.BR %s (%s)' % (seename, section)) else: see.append('TODO: %s (type %s)' % (seename, seetype)) f.write(',\n'.join(see) + '\n') @@ -2726,10 +2726,10 @@ def _man_request(self, name, cookie_type, void, aux): def _man_event(self, name): if manpaths: - sys.stdout.write('man/%s.3 ' % self.c_type) + sys.stdout.write('man/%s.%s ' % (self.c_type, section)) # Our CWD is src/, so this will end up in src/man/ - f = open('man/%s.3' % self.c_type, 'w') - f.write('.TH %s 3 %s "XCB" "XCB Events"\n' % (self.c_type, today)) + f = open('man/%s.%s' % (self.c_type, section), 'w') + f.write('.TH %s %s "%s" "%s" "XCB Events"\n' % (self.c_type, section, center_footer, left_footer)) # Left-adjust instead of adjusting to both sides f.write('.ad l\n') f.write('.SH NAME\n') @@ -2835,18 +2835,18 @@ def _man_event(self, name): f.write('.fi\n') f.write('.SH SEE ALSO\n') if hasattr(self, "doc") and self.doc: - see = ['.BR %s (3)' % 'xcb_generic_event_t'] + see = ['.BR %s (%s)' % ('xcb_generic_event_t', section)] if self.doc.example: - see.append('.BR %s (3)' % 'xcb-examples') + see.append('.BR %s (%s)' % ('xcb-examples', section)) for seename, seetype in self.doc.see.items(): if seetype == 'program': see.append('.BR %s (1)' % seename) elif seetype == 'event': - see.append('.BR %s (3)' % _t(('xcb', seename, 'event'))) + see.append('.BR %s (%s)' % (_t(('xcb', seename, 'event')), section)) elif seetype == 'request': - see.append('.BR %s (3)' % _n(('xcb', seename))) + see.append('.BR %s (%s)' % (_n(('xcb', seename)), section)) elif seetype == 'function': - see.append('.BR %s (3)' % seename) + see.append('.BR %s (%s)' % (seename, section)) else: see.append('TODO: %s (type %s)' % (seename, seetype)) f.write(',\n'.join(see) + '\n') @@ -2978,13 +2978,19 @@ output = {'open' : c_open, # Check for the argument that specifies path to the xcbgen python package. try: - opts, args = getopt.getopt(sys.argv[1:], 'p:m') + opts, args = getopt.getopt(sys.argv[1:], 'c:l:s:p:m') except getopt.GetoptError as err: print(err) - print('Usage: c_client.py [-p path] file.xml') + print('Usage: c_client.py -c center_footer -l left_footer -s section [-p path] file.xml') sys.exit(1) for (opt, arg) in opts: + if opt == '-c': + center_footer=arg + if opt == '-l': + left_footer=arg + if opt == '-s': + section=arg if opt == '-p': sys.path.insert(1, arg) elif opt == '-m': diff --git a/libxcb/src/man/.gitignore b/libxcb/src/man/.gitignore index b36be7f44..f000a81f7 100644 --- a/libxcb/src/man/.gitignore +++ b/libxcb/src/man/.gitignore @@ -1,3 +1,2 @@ -*.3 -!xcb-examples.3 -!xcb-requests.3 +*.[0-9] +*.[0-9]x diff --git a/libxcb/src/man/xcb-examples.3 b/libxcb/src/man/xcb-examples.3 deleted file mode 100644 index c02fc0199..000000000 --- a/libxcb/src/man/xcb-examples.3 +++ /dev/null @@ -1,59 +0,0 @@ -.TH xcb-examples 3 2011-12-11 "XCB" "XCB examples" -.ad l -.SH NAME -xcb-examples \- manpage examples -.SH DESCRIPTION -Many of the XCB manpages contain example code. These examples intend to explain -how to use one particular part of XCB. They almost never represent a standalone -(or even useful) program - X11 programs are relatively involved and -thus beyond the scope of a manpage example. - -.SH ENVIRONMENT - -Every example assumes you have an \fIxcb_connection\fP and possibly other -variables at hand. For illustrating how \fIxcb_get_property\fP works, you need -the window of which you want to get the property, for example. To make it clear -that these variables are your responsibility, these examples consist of a -single function which takes the necessary variables as parameters. - -.SH FLUSHING - -Flushing means calling \fIxcb_flush\fP to clear the XCB-internal write buffer -and send all pending requests to the X11 server. You don't explicitly need to -flush before using a reply function (like \fIxcb_query_pointer_reply\fP), but -you do need to flush before entering the event loop of your program. - -There are only two cases when XCB flushes by itself. The first case is when -its write buffer becomes full, the second case is when you are asking for -the reply of a request which wasn't flushed out yet (like -\fIxcb_query_pointer_reply\fP). This last point also includes -xcb_request_check(). Please note that waiting for an event does \fBNOT\fP -flush. - -Examples generally include the \fIxcb_flush\fP call where appropriate (for -example after setting a property). Therefore, including these functions and -calling them in your application should just work. However, you might get -better results when flushing outside of the function, depending on the -architecture of your program. - -.SH COMPILATION - -If an example does not compile (without warnings) when using \fI-std=c99\fP, -that is considered a documentation bug. Similarly, not handling errors or -leaking memory is also considered a documentation bug. Please inform us about -it on xcb@lists.freedesktop.org. - -.SH CODING STYLE - -Every example uses 4 spaces for indentation. - -Comments are in asterisks, like /* this */. - -No line is longer than 80 characters (including indentation). - -.SH SEE ALSO -.BR xcb_connect (3), -.BR xcb_get_property (3), -.BR xcb_flush (3) -.SH AUTHOR -Michael Stapelberg diff --git a/libxcb/src/man/xcb-requests.3 b/libxcb/src/man/xcb-requests.3 deleted file mode 100644 index 278bcff13..000000000 --- a/libxcb/src/man/xcb-requests.3 +++ /dev/null @@ -1,165 +0,0 @@ -.TH xcb-requests 3 2011-12-11 "XCB" "XCB examples" -.ad l -.SH NAME -xcb-requests \- about request manpages -.SH DESCRIPTION -Every request in X11, like \fIMapWindow\fP, corresponds to a number of -functions and data structures in XCB. For \fIMapWindow\fP, XCB provides the -function \fIxcb_map_window\fP, which fills the \fIxcb_map_window_request_t\fP -data structure and writes that to the X11 connection. Since the \fIMapWindow\fP -request does not have a reply, this is the most simple case. - -.SH REPLIES - -Many requests have replies. For each reply, XCB provides at least a -corresponding data structure and a function to return a pointer to a filled -data structure. Let's take the \fIInternAtom\fP request as an example: XCB -provides the \fIxcb_intern_atom_reply_t\fP data structure and -\fIxcb_intern_atom_reply\fP function. For replies which are more complex (for -example lists, such as in \fIxcb_list_fonts\fP), accessor functions are -provided. - -.SH COOKIES - -XCB returns a cookie for each request you send. This is an XCB-specific data -structure containing the sequence number with which the request was sent to the -X11 server. To get any reply, you have to provide that cookie (so that XCB -knows which of the waiting replies you want). Here is an example to illustrate -the use of cookies: - -.nf -.sp -void my_example(xcb_connection *conn) { - xcb_intern_atom_cookie_t cookie; - xcb_intern_atom_reply_t *reply; - - cookie = xcb_intern_atom(conn, 0, strlen("_NET_WM_NAME"), "_NET_WM_NAME"); - /* ... do other work here if possible ... */ - if ((reply = xcb_intern_atom_reply(conn, cookie, NULL))) { - printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); - } - free(reply); -} -.fi - -.SH CHECKED VS. UNCHECKED - -The checked and unchecked suffixes for functions determine which kind of error -handling is used for this specific request. - -For requests which have no reply (for example \fIxcb_map_window\fP), errors -will be delivered to the event loop (you will receive an X11 event of type 0 -when calling \fIxcb_poll_for_event\fP). -If you want to explicitly check for errors in a blocking fashion, call the -_checked version of the function (for example \fIxcb_map_window_checked\fP) and -use \fIxcb_request_check\fP. - -For requests which have a reply (for example \fIxcb_intern_atom\fP), errors -will be checked when calling the reply function. To get errors in the event -loop instead, use the _unchecked version of the function (for example -\fIxcb_intern_atom_unchecked\fP). - -Here is an example which illustrates the four different ways of handling errors: - -.nf -.sp -/* - * Request without a reply, handling errors in the event loop (default) - * - */ -void my_example(xcb_connection *conn, xcb_window_t window) { - /* This is a request without a reply. Errors will be delivered to the event - * loop. Getting an error to xcb_map_window most likely is a bug in our - * program, so we don't need to check for that in a blocking way. */ - xcb_map_window(conn, window); - - /* ... of course your event loop would not be in the same function ... */ - while ((event = xcb_wait_for_event(conn)) != NULL) { - if (event->response_type == 0) { - fprintf("Received X11 error %d\\n", error->error_code); - free(event); - continue; - } - - /* ... handle a normal event ... */ - } -} - -/* - * Request without a reply, handling errors directly - * - */ -void my_example(xcb_connection *conn, xcb_window_t deco, xcb_window_t window) { - /* A reparenting window manager wants to know whether a new window was - * successfully reparented. If not (because the window got destroyed - * already, for example), it does not make sense to map an empty window - * decoration at all, so we need to know this right now. */ - xcb_void_cookie_t cookie = xcb_reparent_window_checked(conn, window, - deco, 0, 0); - xcb_generic_error_t *error; - if ((error = xcb_request_check(conn, cookie))) { - fprintf(stderr, "Could not reparent the window\\n"); - free(error); - return; - } - - /* ... do window manager stuff here ... */ -} - -/* - * Request with a reply, handling errors directly (default) - * - */ -void my_example(xcb_connection *conn, xcb_window_t window) { - xcb_intern_atom_cookie_t cookie; - xcb_intern_atom_reply_t *reply; - xcb_generic_error_t *error; - - cookie = xcb_intern_atom(c, 0, strlen("_NET_WM_NAME"), "_NET_WM_NAME"); - /* ... do other work here if possible ... */ - if ((reply = xcb_intern_atom_reply(c, cookie, &error))) { - printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); - free(reply); - } else { - fprintf(stderr, "X11 Error %d\\n", error->error_code); - free(error); - } -} - -/* - * Request with a reply, handling errors in the event loop - * - */ -void my_example(xcb_connection *conn, xcb_window_t window) { - xcb_intern_atom_cookie_t cookie; - xcb_intern_atom_reply_t *reply; - - cookie = xcb_intern_atom_unchecked(c, 0, strlen("_NET_WM_NAME"), - "_NET_WM_NAME"); - /* ... do other work here if possible ... */ - if ((reply = xcb_intern_atom_reply(c, cookie, NULL))) { - printf("The _NET_WM_NAME atom has ID %u\n", reply->atom); - free(reply); - } - - /* ... of course your event loop would not be in the same function ... */ - while ((event = xcb_wait_for_event(conn)) != NULL) { - if (event->response_type == 0) { - fprintf("Received X11 error %d\\n", error->error_code); - free(event); - continue; - } - - /* ... handle a normal event ... */ - } -} -.fi - -.SH SEE ALSO -.BR xcb_map_window (3), -.BR xcb_intern_atom (3), -.BR xcb_list_fonts (3), -.BR xcb_poll_for_event (3), -.BR xcb_request_check (3) -.SH AUTHOR -Michael Stapelberg diff --git a/mesalib/.dir-locals.el b/mesalib/.dir-locals.el index 4f0ad7ac8..04a1a2ce6 100644 --- a/mesalib/.dir-locals.el +++ b/mesalib/.dir-locals.el @@ -8,4 +8,5 @@ (c-set-offset 'innamespace '0) (c-set-offset 'inline-open '0))) ) + (makefile-mode (indent-tabs-mode . t)) ) diff --git a/mesalib/VERSION b/mesalib/VERSION index 7432bee2a..6d4f9f483 100644 --- a/mesalib/VERSION +++ b/mesalib/VERSION @@ -1 +1 @@ -10.1.0-devel +10.2.0-devel diff --git a/mesalib/configure.ac b/mesalib/configure.ac index 33ac92259..8bf9b9441 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -589,6 +589,11 @@ AC_ARG_ENABLE([vdpau], [enable vdpau library @<:@default=auto@:>@])], [enable_vdpau="$enableval"], [enable_vdpau=auto]) +AC_ARG_ENABLE([omx], + [AS_HELP_STRING([--enable-omx], + [enable OpenMAX library @<:@default=no@:>@])], + [enable_omx="$enableval"], + [enable_omx=no]) AC_ARG_ENABLE([opencl], [AS_HELP_STRING([--enable-opencl], [enable OpenCL library NOTE: Enabling this option will also enable @@ -661,6 +666,7 @@ if test "x$enable_opengl" = xno -a \ "x$enable_xa" = xno -a \ "x$enable_xvmc" = xno -a \ "x$enable_vdpau" = xno -a \ + "x$enable_omx" = xno -a \ "x$enable_opencl" = xno; then AC_MSG_ERROR([at least one API should be enabled]) fi @@ -858,7 +864,7 @@ xyesno) if test x"$enable_dri3$have_libudev" = xyesyes; then X11_INCLUDES="$X11_INCLUDES $LIBUDEV_CFLAGS" - GL_LIB_DEPS="$GL_LIB_DEPS $LIBUDEV_LIBS" + GL_LIB_DEPS="$GL_LIB_DEPS" fi # need DRM libs, $PTHREAD_LIBS, etc. @@ -867,6 +873,10 @@ xyesno) ;; esac +if test "$have_libudev" = yes; then + DEFINES="$DEFINES -DHAVE_LIBUDEV" +fi + # This is outside the case (above) so that it is invoked even for non-GLX # builds. AM_CONDITIONAL(HAVE_XF86VIDMODE, test "x$HAVE_XF86VIDMODE" = xyes) @@ -1202,11 +1212,6 @@ if test "x$enable_egl" = xyes; then AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"]) if test "$enable_static" != yes; then - # build egl_glx when libGL is built - if test "$have_libudev" = yes; then - DEFINES="$DEFINES -DHAVE_LIBUDEV" - fi - if test "x$enable_dri" = xyes; then HAVE_EGL_DRIVER_DRI2=1 fi @@ -1307,6 +1312,10 @@ if test -n "$with_gallium_drivers"; then if test "x$enable_vdpau" = xauto; then PKG_CHECK_EXISTS([vdpau], [enable_vdpau=yes], [enable_vdpau=no]) fi + + if test "x$enable_omx" = xauto; then + PKG_CHECK_EXISTS([libomxil-bellagio], [enable_omx=yes], [enable_omx=no]) + fi fi if test "x$enable_xvmc" = xyes; then @@ -1321,6 +1330,12 @@ if test "x$enable_vdpau" = xyes; then fi AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes) +if test "x$enable_omx" = xyes; then + PKG_CHECK_MODULES([OMX], [libomxil-bellagio >= 0.0 x11-xcb xcb-dri2 >= 1.8]) + GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS omx" +fi +AM_CONDITIONAL(HAVE_ST_OMX, test "x$enable_omx" = xyes) + dnl dnl OpenCL configuration dnl @@ -1439,10 +1454,6 @@ for plat in $egl_platforms; do x11) PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 >= 1.8 xcb-xfixes]) - - if test "x$enable_glx" = xyes; then - HAVE_EGL_DRIVER_GLX=1 - fi ;; drm) @@ -1485,7 +1496,6 @@ AM_CONDITIONAL(HAVE_EGL_PLATFORM_FBDEV, echo "$egl_platforms" | grep 'fbdev' >/d AM_CONDITIONAL(HAVE_EGL_PLATFORM_NULL, echo "$egl_platforms" | grep 'null' >/dev/null 2>&1) AM_CONDITIONAL(HAVE_EGL_DRIVER_DRI2, test "x$HAVE_EGL_DRIVER_DRI2" != "x") -AM_CONDITIONAL(HAVE_EGL_DRIVER_GLX, test "x$HAVE_EGL_DRIVER_GLX" != "x") AC_SUBST([EGL_NATIVE_PLATFORM]) AC_SUBST([EGL_CFLAGS]) @@ -1659,6 +1669,13 @@ AC_ARG_WITH([vdpau-libdir], [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau']) AC_SUBST([VDPAU_LIB_INSTALL_DIR]) +AC_ARG_WITH([omx-libdir], + [AS_HELP_STRING([--with-omx-libdir=DIR], + [directory for the OMX libraries])], + [OMX_LIB_INSTALL_DIR="$withval"], + [OMX_LIB_INSTALL_DIR=`$PKG_CONFIG --variable=pluginsdir libomxil-bellagio`]) +AC_SUBST([OMX_LIB_INSTALL_DIR]) + dnl Directory for OpenCL libs AC_ARG_WITH([opencl-libdir], [AS_HELP_STRING([--with-opencl-libdir=DIR], @@ -1689,6 +1706,9 @@ gallium_check_st() { if test "x$enable_vdpau" = xyes && test "x$5" != x; then GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $5" fi + if test "x$enable_omx" = xyes && test "x$6" != x; then + GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $7" + fi } gallium_require_llvm() { @@ -1786,7 +1806,7 @@ if test "x$with_gallium_drivers" != x; then if test "x$enable_opencl" = xyes; then LLVM_COMPONENTS="${LLVM_COMPONENTS} bitreader asmparser" fi - gallium_check_st "radeon/drm" "r600/dri" "" "r600/xvmc" "r600/vdpau" + gallium_check_st "radeon/drm" "r600/dri" "" "r600/xvmc" "r600/vdpau" "r600/omx" DRICOMMON_NEED_LIBDRM=yes ;; xradeonsi) @@ -1795,7 +1815,7 @@ if test "x$with_gallium_drivers" != x; then gallium_require_drm_loader GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS radeonsi" radeon_llvm_check - gallium_check_st "radeon/drm" "radeonsi/dri" "" "" "radeonsi/vdpau" + gallium_check_st "radeon/drm" "radeonsi/dri" "" "" "radeonsi/vdpau" "radeonsi/omx" DRICOMMON_NEED_LIBDRM=yes ;; xnouveau) @@ -1975,7 +1995,6 @@ AC_CONFIG_FILES([Makefile src/egl/Makefile src/egl/drivers/Makefile src/egl/drivers/dri2/Makefile - src/egl/drivers/glx/Makefile src/egl/main/Makefile src/egl/main/egl.pc src/egl/wayland/Makefile @@ -2010,6 +2029,7 @@ AC_CONFIG_FILES([Makefile src/gallium/state_trackers/gbm/Makefile src/gallium/state_trackers/glx/xlib/Makefile src/gallium/state_trackers/osmesa/Makefile + src/gallium/state_trackers/omx/Makefile src/gallium/state_trackers/vdpau/Makefile src/gallium/state_trackers/vega/Makefile src/gallium/state_trackers/xa/Makefile @@ -2028,9 +2048,11 @@ AC_CONFIG_FILES([Makefile src/gallium/targets/osmesa/osmesa.pc src/gallium/targets/pipe-loader/Makefile src/gallium/targets/radeonsi/dri/Makefile + src/gallium/targets/radeonsi/omx/Makefile src/gallium/targets/radeonsi/vdpau/Makefile src/gallium/targets/r300/dri/Makefile src/gallium/targets/r600/dri/Makefile + src/gallium/targets/r600/omx/Makefile src/gallium/targets/r600/vdpau/Makefile src/gallium/targets/r600/xvmc/Makefile src/gallium/targets/libgl-xlib/Makefile @@ -2157,9 +2179,6 @@ if test "$enable_egl" = yes; then echo " EGL platforms: $egl_platforms" egl_drivers="" - if test "x$HAVE_EGL_DRIVER_GLX" != "x"; then - egl_drivers="$egl_drivers builtin:egl_glx" - fi if test "x$HAVE_EGL_DRIVER_DRI2" != "x"; then egl_drivers="$egl_drivers builtin:egl_dri2" fi diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt index 799db4bc0..09c8caa28 100644 --- a/mesalib/docs/GL3.txt +++ b/mesalib/docs/GL3.txt @@ -55,7 +55,7 @@ GL 3.1 --- all DONE: i965, nv50, nvc0, r600, radeonsi Forward compatible context support/deprecations DONE () Instanced drawing (GL_ARB_draw_instanced) DONE (swrast) Buffer copying (GL_ARB_copy_buffer) DONE (r300, swrast) - Primitive restart (GL_NV_primitive_restart) DONE (r300, ) + Primitive restart (GL_NV_primitive_restart) DONE (r300) 16 vertex texture image units DONE () Texture buffer objs (GL_ARB_texture_buffer_object) DONE for OpenGL 3.1 contexts () Rectangular textures (GL_ARB_texture_rectangle) DONE (r300, swrast) @@ -63,42 +63,42 @@ GL 3.1 --- all DONE: i965, nv50, nvc0, r600, radeonsi Signed normalized textures (GL_EXT_texture_snorm) DONE (r300) -GL 3.2 --- all DONE: i965 +GL 3.2 --- all DONE: i965, nv50, nvc0, r600, radeonsi Core/compatibility profiles DONE GLSL 1.50 DONE () Geometry shaders DONE () - BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - Provoking vertex (GL_ARB_provoking_vertex) DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - Seamless cubemaps (GL_ARB_seamless_cube_map) DONE (nvc0, r600, radeonsi) - Multisample textures (GL_ARB_texture_multisample) DONE (nvc0, r600, radeonsi) - Frag depth clamp (GL_ARB_depth_clamp) DONE (nv50, nvc0, r600, swrast, radeonsi) - Fence objects (GL_ARB_sync) DONE (nv50, nvc0, r300, r600, radeonsi, swrast) + BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (r300, swrast) + Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (r300, swrast) + Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (r300, swrast) + Provoking vertex (GL_ARB_provoking_vertex) DONE (r300, swrast) + Seamless cubemaps (GL_ARB_seamless_cube_map) DONE () + Multisample textures (GL_ARB_texture_multisample) DONE () + Frag depth clamp (GL_ARB_depth_clamp) DONE (swrast) + Fence objects (GL_ARB_sync) DONE (r300, swrast) GLX_ARB_create_context_profile DONE -GL 3.3 --- all DONE: i965 +GL 3.3 --- all DONE: i965, nv50, nvc0, r600, radeonsi GLSL 3.30 DONE () - GL_ARB_blend_func_extended DONE (nv50, nvc0, r600, radeonsi, softpipe) - GL_ARB_explicit_attrib_location DONE (i915, nv50, nvc0, r300, r600, radeonsi, swrast) - GL_ARB_occlusion_query2 DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - GL_ARB_sampler_objects DONE (nv50, nvc0, r300, r600, radeonsi) - GL_ARB_shader_bit_encoding DONE (nv50, nvc0, r600, radeonsi) - GL_ARB_texture_rgb10_a2ui DONE (r600, radeonsi) - GL_ARB_texture_swizzle DONE (nv50, nvc0, r300, r600, radeonsi, swrast) - GL_ARB_timer_query DONE (nv50, nvc0, r600, radeonsi) - GL_ARB_instanced_arrays DONE (nv50, nvc0, r300, r600, radeonsi) - GL_ARB_vertex_type_2_10_10_10_rev DONE (r600, radeonsi) + GL_ARB_blend_func_extended DONE (softpipe) + GL_ARB_explicit_attrib_location DONE (all drivers that support GLSL) + GL_ARB_occlusion_query2 DONE (r300, swrast) + GL_ARB_sampler_objects DONE (all drivers) + GL_ARB_shader_bit_encoding DONE () + GL_ARB_texture_rgb10_a2ui DONE () + GL_ARB_texture_swizzle DONE (r300, swrast) + GL_ARB_timer_query DONE () + GL_ARB_instanced_arrays DONE (r300) + GL_ARB_vertex_type_2_10_10_10_rev DONE () GL 4.0: GLSL 4.0 not started GL_ARB_texture_query_lod DONE (i965) - GL_ARB_draw_buffers_blend DONE (i965, r600, radeonsi, softpipe) + GL_ARB_draw_buffers_blend DONE (i965, nv50, nvc0, r600, radeonsi, softpipe) GL_ARB_draw_indirect DONE (i965) GL_ARB_gpu_shader5 started GL_ARB_gpu_shader_fp64 not started @@ -106,18 +106,18 @@ GL 4.0: GL_ARB_shader_subroutine not started GL_ARB_tessellation_shader not started GL_ARB_texture_buffer_object_rgb32 DONE (i965, r600, radeonsi, softpipe) - GL_ARB_texture_cube_map_array DONE (i965, r600, softpipe) + GL_ARB_texture_cube_map_array DONE (i965, nvc0, r600, softpipe) GL_ARB_texture_gather DONE (i965) - GL_ARB_transform_feedback2 DONE (i965, r600, radeonsi) - GL_ARB_transform_feedback3 DONE (i965, r600, radeonsi) + GL_ARB_transform_feedback2 DONE (i965, nv50, nvc0, r600, radeonsi) + GL_ARB_transform_feedback3 DONE (i965, nv50, nvc0, r600, radeonsi) GL 4.1: GLSL 4.1 not started - GL_ARB_ES2_compatibility DONE (i965, r300, r600, radeonsi) + GL_ARB_ES2_compatibility DONE (i965, nv50, nvc0, r300, r600, radeonsi) GL_ARB_get_program_binary DONE (0 binary formats) - GL_ARB_separate_shader_objects some infrastructure done + GL_ARB_separate_shader_objects started (Ian Romanick, Gregory Hainaut) GL_ARB_shader_precision not started GL_ARB_vertex_attrib_64bit not started GL_ARB_viewport_array DONE (i965) @@ -130,13 +130,13 @@ GL 4.2: GL_ARB_compressed_texture_pixel_storage not started GL_ARB_shader_atomic_counters DONE (i965) GL_ARB_texture_storage DONE (all drivers) - GL_ARB_transform_feedback_instanced DONE (i965, r600, radeonsi) + GL_ARB_transform_feedback_instanced DONE (i965, nv50, nvc0, r600, radeonsi) GL_ARB_base_instance DONE (i965, nv50, nvc0, r600, radeonsi) GL_ARB_shader_image_load_store in progress (curro) GL_ARB_conservative_depth DONE (all drivers that support GLSL 1.30) GL_ARB_shading_language_420pack DONE (all drivers that support GLSL 1.30) - GL_ARB_internalformat_query DONE (i965, r300, r600, radeonsi) - GL_ARB_map_buffer_alignment DONE (r300, r600, radeonsi) + GL_ARB_internalformat_query DONE (i965, nv50, nvc0, r300, r600, radeonsi) + GL_ARB_map_buffer_alignment DONE (all drivers) GL 4.3: @@ -144,8 +144,8 @@ GL 4.3: GLSL 4.3 not started GL_ARB_arrays_of_arrays started GL_ARB_ES3_compatibility DONE (i965) - GL_ARB_clear_buffer_object not started - GL_ARB_compute_shader not started + GL_ARB_clear_buffer_object DONE (all drivers) + GL_ARB_compute_shader started (Paul Berry) GL_ARB_copy_image not started GL_KHR_debug DONE (all drivers) GL_ARB_explicit_uniform_location not started @@ -162,7 +162,7 @@ GL 4.3: GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi) GL_ARB_texture_query_levels DONE (i965) GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample) - GL_ARB_texture_view not started + GL_ARB_texture_view started (Courtney Goeltzenleuchter, Chris Forbes) GL_ARB_vertex_attrib_binding DONE (all drivers) @@ -173,7 +173,7 @@ GL 4.4: GL_ARB_buffer_storage not started GL_ARB_clear_texture not started GL_ARB_enhanced_layouts not started - GL_ARB_multi_bind not started + GL_ARB_multi_bind started (Fredrik Höglund) GL_ARB_query_buffer_object not started GL_ARB_texture_mirror_clamp_to_edge DONE (i965, nv30, nv50, nvc0, r300, r600, radeonsi, swrast) GL_ARB_texture_stencil8 not started diff --git a/mesalib/docs/README.UVD b/mesalib/docs/README.UVD index 36b467edf..38ea8646a 100644 --- a/mesalib/docs/README.UVD +++ b/mesalib/docs/README.UVD @@ -11,3 +11,34 @@ 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. + +WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE WILL RUN +UNINTERRUPTED OR ERROR-FREE OR WARRANTIES ARISING FROM CUSTOM OF TRADE OR +COURSE OF USAGE. THE ENTIRE RISK ASSOCIATED WITH THE USE OF THE SOFTWARE IS +ASSUMED BY YOU. Some jurisdictions do not allow the exclusion of implied +warranties, so the above exclusion may not apply to You. + +LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL NOT, +UNDER ANY CIRCUMSTANCES BE LIABLE FOR ANY PUNITIVE, DIRECT, INCIDENTAL, +INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF THE SOFTWARE OR +THIS AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. In no event shall AMD's total liability to You +for all damages, losses, and causes of action (whether in contract, tort +(including negligence) or otherwise) exceed the amount of $100 USD. You agree +to defend, indemnify and hold harmless AMD and its licensors, and any of their +directors, officers, employees, affiliates or agents from and against any and +all loss, damage, liability and other expenses (including reasonable +attorneys' fees), resulting from Your use of the Software or violation of the +terms and conditions of this Agreement. + +U.S. GOVERNMENT RESTRICTED RIGHTS: The Software is provided with "RESTRICTED +RIGHTS." Use, duplication, or disclosure by the Government is subject to the +restrictions as set forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or +its successor. Use of the Software by the Government constitutes +acknowledgement of AMD's proprietary rights in them. + +EXPORT RESTRICTIONS: The Software may be subject to export restrictions as +stated in the Software License Agreement. diff --git a/mesalib/docs/egl.html b/mesalib/docs/egl.html index dc2324194..eebb8c73b 100644 --- a/mesalib/docs/egl.html +++ b/mesalib/docs/egl.html @@ -232,16 +232,6 @@ The supported platforms are X11, DRM, FBDEV, and GDI.