aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--X11/xtrans/Xtrans.c16
-rw-r--r--X11/xtrans/Xtrans.h4
-rw-r--r--X11/xtrans/configure.ac2
-rw-r--r--fontconfig/configure.ac2
-rw-r--r--fontconfig/doc/fcdircache.fncs10
-rw-r--r--fontconfig/src/fccompat.c35
-rw-r--r--fontconfig/src/fcfreetype.c4
-rw-r--r--fontconfig/src/fcstat.c3
-rw-r--r--libX11/nls/en_US.UTF-8/Compose.pre20
-rw-r--r--libX11/nls/fi_FI.UTF-8/Compose.pre710
-rw-r--r--libX11/src/XErrorDB12
-rw-r--r--libxcb/Makefile.am2
-rw-r--r--libxcb/configure.ac163
-rw-r--r--libxcb/doc/Makefile.am6
-rw-r--r--libxcb/m4/xcb.m489
-rw-r--r--libxcb/man/.gitignore1
-rw-r--r--libxcb/man/Makefile.am18
-rw-r--r--libxcb/man/xcb-examples.man (renamed from libxcb/src/man/xcb-examples.3)8
-rw-r--r--libxcb/man/xcb-requests.man (renamed from libxcb/src/man/xcb-requests.3)12
-rw-r--r--libxcb/src/Makefile.am19
-rw-r--r--libxcb/src/c_client.py52
-rw-r--r--libxcb/src/man/.gitignore5
-rw-r--r--mesalib/.dir-locals.el1
-rw-r--r--mesalib/VERSION2
-rw-r--r--mesalib/configure.ac53
-rw-r--r--mesalib/docs/GL3.txt68
-rw-r--r--mesalib/docs/README.UVD31
-rw-r--r--mesalib/docs/egl.html14
-rw-r--r--mesalib/docs/index.html6
-rw-r--r--mesalib/docs/relnotes.html1
-rw-r--r--mesalib/docs/relnotes/10.0.3.html206
-rw-r--r--mesalib/docs/relnotes/10.1.html4
-rw-r--r--mesalib/docs/relnotes/10.2.html61
-rw-r--r--mesalib/include/GL/gl.h2
-rw-r--r--mesalib/include/GL/glxext.h13
-rw-r--r--mesalib/include/GL/internal/dri_interface.h1
-rw-r--r--mesalib/include/HaikuGL/GLRenderer.h10
-rw-r--r--mesalib/include/c11/threads_win32.h1
-rw-r--r--mesalib/install-lib-links.mk14
-rw-r--r--mesalib/src/gallium/auxiliary/hud/font.c2
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_index_modify.c6
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_vbuf.c2
-rw-r--r--mesalib/src/glsl/ast.h37
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp128
-rw-r--r--mesalib/src/glsl/ast_type.cpp15
-rw-r--r--mesalib/src/glsl/builtin_variables.cpp68
-rw-r--r--mesalib/src/glsl/glcpp/glcpp-lex.l2
-rw-r--r--mesalib/src/glsl/glcpp/glcpp-parse.y49
-rw-r--r--mesalib/src/glsl/glcpp/glcpp.c3
-rw-r--r--mesalib/src/glsl/glcpp/glcpp.h5
-rw-r--r--mesalib/src/glsl/glcpp/pp.c4
-rw-r--r--mesalib/src/glsl/glsl_lexer.ll3
-rw-r--r--mesalib/src/glsl/glsl_parser.yy96
-rw-r--r--mesalib/src/glsl/glsl_parser_extras.cpp58
-rw-r--r--mesalib/src/glsl/glsl_parser_extras.h21
-rw-r--r--mesalib/src/glsl/ir.h2
-rw-r--r--mesalib/src/glsl/ir_constant_expression.cpp17
-rw-r--r--mesalib/src/glsl/linker.cpp79
-rw-r--r--mesalib/src/glsl/lower_instructions.cpp14
-rw-r--r--mesalib/src/glsl/main.cpp16
-rw-r--r--mesalib/src/glsl/opt_algebraic.cpp67
-rw-r--r--mesalib/src/glsl/opt_vectorize.cpp66
-rw-r--r--mesalib/src/glsl/standalone_scaffolding.cpp12
-rw-r--r--mesalib/src/glsl/standalone_scaffolding.h2
-rw-r--r--mesalib/src/loader/Makefile.am5
-rw-r--r--mesalib/src/loader/loader.c86
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml40
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_gpu_shader5.xml15
-rw-r--r--mesalib/src/mapi/glapi/gen/Makefile.am1
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_API.xml6
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_genexec.py3
-rw-r--r--mesalib/src/mesa/Makefile.am12
-rw-r--r--mesalib/src/mesa/Makefile.sources3
-rw-r--r--mesalib/src/mesa/SConscript3
-rw-r--r--mesalib/src/mesa/drivers/common/driverfuncs.c4
-rw-r--r--mesalib/src/mesa/drivers/common/meta.c251
-rw-r--r--mesalib/src/mesa/drivers/dri/common/dri_util.c44
-rw-r--r--mesalib/src/mesa/drivers/dri/common/dri_util.h4
-rw-r--r--mesalib/src/mesa/drivers/dri/common/utils.c26
-rw-r--r--mesalib/src/mesa/drivers/dri/common/utils.h2
-rw-r--r--mesalib/src/mesa/drivers/dri/swrast/swrast.c30
-rw-r--r--mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp10
-rw-r--r--mesalib/src/mesa/main/accum.c8
-rw-r--r--mesalib/src/mesa/main/api_arrayelt.c48
-rw-r--r--mesalib/src/mesa/main/api_validate.c36
-rw-r--r--mesalib/src/mesa/main/arrayobj.c130
-rw-r--r--mesalib/src/mesa/main/arrayobj.h46
-rw-r--r--mesalib/src/mesa/main/attrib.c42
-rw-r--r--mesalib/src/mesa/main/blend.c6
-rw-r--r--mesalib/src/mesa/main/blend.h4
-rw-r--r--mesalib/src/mesa/main/blit.c513
-rw-r--r--mesalib/src/mesa/main/blit.h39
-rw-r--r--mesalib/src/mesa/main/bufferobj.c35
-rw-r--r--mesalib/src/mesa/main/buffers.c8
-rw-r--r--mesalib/src/mesa/main/compute.c54
-rw-r--r--mesalib/src/mesa/main/compute.h38
-rw-r--r--mesalib/src/mesa/main/config.h9
-rw-r--r--mesalib/src/mesa/main/context.c27
-rw-r--r--mesalib/src/mesa/main/dd.h99
-rw-r--r--mesalib/src/mesa/main/debug.c18
-rw-r--r--mesalib/src/mesa/main/enable.c44
-rw-r--r--mesalib/src/mesa/main/extensions.c6
-rw-r--r--mesalib/src/mesa/main/fbobject.c695
-rw-r--r--mesalib/src/mesa/main/fbobject.h29
-rw-r--r--mesalib/src/mesa/main/ffvertex_prog.c2
-rw-r--r--mesalib/src/mesa/main/format_pack.c736
-rw-r--r--mesalib/src/mesa/main/format_pack.h26
-rw-r--r--mesalib/src/mesa/main/format_unpack.c532
-rw-r--r--mesalib/src/mesa/main/format_unpack.h16
-rw-r--r--mesalib/src/mesa/main/formats.c1286
-rw-r--r--mesalib/src/mesa/main/formats.h710
-rw-r--r--mesalib/src/mesa/main/framebuffer.c16
-rw-r--r--mesalib/src/mesa/main/genmipmap.c131
-rw-r--r--mesalib/src/mesa/main/genmipmap.h36
-rw-r--r--mesalib/src/mesa/main/get.c41
-rw-r--r--mesalib/src/mesa/main/get_hash_params.py29
-rw-r--r--mesalib/src/mesa/main/getstring.c18
-rw-r--r--mesalib/src/mesa/main/matrix.c13
-rw-r--r--mesalib/src/mesa/main/mipmap.c4
-rw-r--r--mesalib/src/mesa/main/mipmap.h2
-rw-r--r--mesalib/src/mesa/main/mtypes.h85
-rw-r--r--mesalib/src/mesa/main/objectlabel.c2
-rw-r--r--mesalib/src/mesa/main/readpix.c14
-rw-r--r--mesalib/src/mesa/main/scissor.c2
-rw-r--r--mesalib/src/mesa/main/shaderapi.c31
-rw-r--r--mesalib/src/mesa/main/shaderimage.c100
-rw-r--r--mesalib/src/mesa/main/shaderobj.h2
-rw-r--r--mesalib/src/mesa/main/state.c6
-rw-r--r--mesalib/src/mesa/main/texcompress.c58
-rw-r--r--mesalib/src/mesa/main/texcompress.h10
-rw-r--r--mesalib/src/mesa/main/texcompress_etc.c10
-rw-r--r--mesalib/src/mesa/main/texcompress_etc.h4
-rw-r--r--mesalib/src/mesa/main/texcompress_fxt1.c2
-rw-r--r--mesalib/src/mesa/main/texcompress_fxt1.h2
-rw-r--r--mesalib/src/mesa/main/texcompress_rgtc.c34
-rw-r--r--mesalib/src/mesa/main/texcompress_rgtc.h2
-rw-r--r--mesalib/src/mesa/main/texcompress_s3tc.c2
-rw-r--r--mesalib/src/mesa/main/texcompress_s3tc.h2
-rw-r--r--mesalib/src/mesa/main/texformat.c450
-rw-r--r--mesalib/src/mesa/main/texformat.h2
-rw-r--r--mesalib/src/mesa/main/texgetimage.c4
-rw-r--r--mesalib/src/mesa/main/teximage.c290
-rw-r--r--mesalib/src/mesa/main/teximage.h24
-rw-r--r--mesalib/src/mesa/main/texobj.c20
-rw-r--r--mesalib/src/mesa/main/texobj.h3
-rw-r--r--mesalib/src/mesa/main/texparam.c89
-rw-r--r--mesalib/src/mesa/main/texstorage.c14
-rw-r--r--mesalib/src/mesa/main/texstore.c688
-rw-r--r--mesalib/src/mesa/main/texstore.h6
-rw-r--r--mesalib/src/mesa/main/textureview.c4
-rw-r--r--mesalib/src/mesa/main/varray.c135
-rw-r--r--mesalib/src/mesa/program/prog_print.c3
-rw-r--r--mesalib/src/mesa/program/program.c20
-rw-r--r--mesalib/src/mesa/program/program.h9
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c9
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawpixels.c4
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_eglimage.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_fbo.c4
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_texture.c18
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c19
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.c514
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.h6
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp2
-rw-r--r--mesalib/src/mesa/state_tracker/st_manager.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_program.c19
-rw-r--r--mesalib/src/mesa/state_tracker/st_vdpau.c6
-rw-r--r--mesalib/src/mesa/swrast/s_blit.c8
-rw-r--r--mesalib/src/mesa/swrast/s_depth.c46
-rw-r--r--mesalib/src/mesa/swrast/s_drawpix.c14
-rw-r--r--mesalib/src/mesa/swrast/s_renderbuffer.c18
-rw-r--r--mesalib/src/mesa/swrast/s_stencil.c10
-rw-r--r--mesalib/src/mesa/swrast/s_texfetch.c290
-rw-r--r--mesalib/src/mesa/swrast/s_texfetch_tmp.h126
-rw-r--r--mesalib/src/mesa/swrast/s_texfilter.c16
-rw-r--r--mesalib/src/mesa/swrast/s_texrender.c2
-rw-r--r--mesalib/src/mesa/swrast/s_triangle.c40
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_array.c56
-rw-r--r--mesalib/src/mesa/vbo/vbo_save_api.c4
-rw-r--r--openssl/CHANGES163
-rw-r--r--openssl/Configure2
-rw-r--r--openssl/Makefile5
-rw-r--r--openssl/Makefile.org3
-rw-r--r--openssl/NEWS184
-rw-r--r--openssl/README2
-rw-r--r--openssl/apps/Makefile17
-rw-r--r--openssl/apps/apps.h2
-rw-r--r--openssl/apps/openssl.c1
-rw-r--r--openssl/apps/pkcs12.c9
-rw-r--r--openssl/config2
-rw-r--r--openssl/crypto/Makefile4
-rw-r--r--openssl/crypto/aes/asm/aes-parisc.pl3
-rw-r--r--openssl/crypto/aes/asm/bsaes-x86_64.pl73
-rw-r--r--openssl/crypto/armcap.c2
-rw-r--r--openssl/crypto/asn1/a_int.c2
-rw-r--r--openssl/crypto/bio/bss_dgram.c6
-rw-r--r--openssl/crypto/bn/Makefile4
-rw-r--r--openssl/crypto/bn/asm/mips-mont.pl2
-rw-r--r--openssl/crypto/bn/asm/mips.pl44
-rw-r--r--openssl/crypto/bn/asm/parisc-mont.pl4
-rw-r--r--openssl/crypto/bn/asm/x86_64-gf2m.pl3
-rw-r--r--openssl/crypto/bn/asm/x86_64-mont5.pl4
-rw-r--r--openssl/crypto/bn/bn_nist.c55
-rw-r--r--openssl/crypto/buffer/buffer.c4
-rw-r--r--openssl/crypto/buffer/buffer.h2
-rw-r--r--openssl/crypto/ec/ec_ameth.c2
-rw-r--r--openssl/crypto/ec/ec_asn1.c6
-rw-r--r--openssl/crypto/ec/ec_lib.c10
-rw-r--r--openssl/crypto/engine/eng_rdrand.c1
-rw-r--r--openssl/crypto/evp/Makefile2
-rw-r--r--openssl/crypto/evp/digest.c7
-rw-r--r--openssl/crypto/evp/e_aes.c16
-rw-r--r--openssl/crypto/evp/e_aes_cbc_hmac_sha1.c5
-rw-r--r--openssl/crypto/evp/e_des3.c6
-rw-r--r--openssl/crypto/evp/p5_crpt2.c40
-rw-r--r--openssl/crypto/modes/Makefile5
-rw-r--r--openssl/crypto/modes/asm/ghash-alpha.pl25
-rw-r--r--openssl/crypto/modes/asm/ghash-parisc.pl1
-rw-r--r--openssl/crypto/modes/cbc128.c25
-rw-r--r--openssl/crypto/modes/ccm128.c2
-rw-r--r--openssl/crypto/modes/cts128.c28
-rw-r--r--openssl/crypto/modes/gcm128.c104
-rw-r--r--openssl/crypto/modes/modes_lcl.h9
-rw-r--r--openssl/crypto/opensslv.h6
-rw-r--r--openssl/crypto/pariscid.pl41
-rw-r--r--openssl/crypto/pem/pem_info.c1
-rw-r--r--openssl/crypto/pkcs12/p12_crt.c7
-rw-r--r--openssl/crypto/rand/md_rand.c22
-rw-r--r--openssl/crypto/rand/rand.h1
-rw-r--r--openssl/crypto/rand/rand_err.c1
-rw-r--r--openssl/crypto/rand/rand_lib.c8
-rw-r--r--openssl/crypto/rc4/asm/rc4-parisc.pl3
-rw-r--r--openssl/crypto/rsa/rsa_ameth.c8
-rw-r--r--openssl/crypto/rsa/rsa_chk.c6
-rw-r--r--openssl/crypto/rsa/rsa_pmeth.c2
-rw-r--r--openssl/crypto/sha/Makefile4
-rw-r--r--openssl/crypto/sha/asm/sha1-parisc.pl3
-rw-r--r--openssl/crypto/sha/asm/sha1-x86_64.pl4
-rw-r--r--openssl/crypto/sha/asm/sha512-mips.pl2
-rw-r--r--openssl/crypto/sha/asm/sha512-parisc.pl2
-rw-r--r--openssl/crypto/sha/sha512.c9
-rw-r--r--openssl/crypto/srp/srp_grps.h816
-rw-r--r--openssl/crypto/srp/srp_lib.c18
-rw-r--r--openssl/crypto/x509/x509_vfy.c11
-rw-r--r--openssl/crypto/x509/x_all.c2
-rw-r--r--openssl/crypto/x86cpuid.pl2
-rw-r--r--openssl/demos/x509/mkreq.c5
-rw-r--r--openssl/doc/apps/rsa.pod15
-rw-r--r--openssl/doc/crypto/X509_STORE_CTX_get_error.pod2
-rw-r--r--openssl/doc/crypto/ecdsa.pod10
-rw-r--r--openssl/doc/ssl/SSL_CTX_set_client_CA_list.pod8
-rw-r--r--openssl/doc/ssl/SSL_CTX_set_options.pod5
-rw-r--r--openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod4
-rw-r--r--openssl/doc/ssl/SSL_accept.pod10
-rw-r--r--openssl/doc/ssl/SSL_connect.pod10
-rw-r--r--openssl/doc/ssl/SSL_do_handshake.pod10
-rw-r--r--openssl/doc/ssl/SSL_shutdown.pod10
-rw-r--r--openssl/engines/ccgost/gost89.h4
-rw-r--r--openssl/ms/bcb4.bat12
-rw-r--r--openssl/ms/do_nt.bat14
-rw-r--r--openssl/ms/tenc.bat28
-rw-r--r--openssl/ms/tencce.bat38
-rw-r--r--openssl/ms/testenc.bat188
-rw-r--r--openssl/ms/testencce.bat194
-rw-r--r--openssl/ms/testpem.bat64
-rw-r--r--openssl/ms/testpemce.bat84
-rw-r--r--openssl/ms/testss.bat196
-rw-r--r--openssl/ms/testssce.bat208
-rw-r--r--openssl/ms/tpem.bat12
-rw-r--r--openssl/ms/tpemce.bat16
-rw-r--r--openssl/openssl.spec9
-rw-r--r--openssl/ssl/d1_both.c13
-rw-r--r--openssl/ssl/d1_clnt.c36
-rw-r--r--openssl/ssl/d1_lib.c1
-rw-r--r--openssl/ssl/d1_pkt.c7
-rw-r--r--openssl/ssl/d1_srvr.c29
-rw-r--r--openssl/ssl/s23_clnt.c29
-rw-r--r--openssl/ssl/s3_both.c8
-rw-r--r--openssl/ssl/s3_cbc.c2
-rw-r--r--openssl/ssl/s3_clnt.c7
-rw-r--r--openssl/ssl/s3_lib.c20
-rw-r--r--openssl/ssl/s3_pkt.c10
-rw-r--r--openssl/ssl/s3_srvr.c16
-rw-r--r--openssl/ssl/ssl.h11
-rw-r--r--openssl/ssl/ssl3.h9
-rw-r--r--openssl/ssl/ssl_lib.c8
-rw-r--r--openssl/ssl/ssl_locl.h3
-rw-r--r--openssl/ssl/ssltest.c8
-rw-r--r--openssl/ssl/t1_enc.c28
-rw-r--r--openssl/ssl/t1_lib.c104
-rw-r--r--openssl/test/cms-test.pl4
-rw-r--r--openssl/util/shlib_wrap.sh6
-rw-r--r--packages.txt2
-rw-r--r--xkbcomp/man/Makefile.am2
-rw-r--r--xkbcomp/man/xkbcomp.man2
-rw-r--r--xorg-server/Makefile.am12
-rw-r--r--xorg-server/Xi/xichangehierarchy.c4
-rw-r--r--xorg-server/Xi/xipassivegrab.c2
-rw-r--r--xorg-server/config/Makefile.am24
-rw-r--r--xorg-server/config/config-backends.h35
-rw-r--r--xorg-server/config/config.c25
-rw-r--r--xorg-server/config/dbus-core.c32
-rw-r--r--xorg-server/config/dbus.c407
-rw-r--r--xorg-server/config/hal.c7
-rw-r--r--xorg-server/config/xorg-server.conf13
-rw-r--r--xorg-server/configure.ac66
-rw-r--r--xorg-server/dix/dixfonts.c9
-rw-r--r--xorg-server/dix/protocol.txt11
-rw-r--r--xorg-server/glamor/Makefile.am36
-rw-r--r--xorg-server/glamor/compat-api.h107
-rw-r--r--xorg-server/glamor/glamor.c809
-rw-r--r--xorg-server/glamor/glamor.h259
-rw-r--r--xorg-server/glamor/glamor_addtraps.c34
-rw-r--r--xorg-server/glamor/glamor_compositerects.c458
-rw-r--r--xorg-server/glamor/glamor_copyarea.c1161
-rw-r--r--xorg-server/glamor/glamor_copyplane.c50
-rw-r--r--xorg-server/glamor/glamor_copywindow.c34
-rw-r--r--xorg-server/glamor/glamor_core.c827
-rw-r--r--xorg-server/glamor/glamor_debug.h9
-rw-r--r--xorg-server/glamor/glamor_egl.c1181
-rw-r--r--xorg-server/glamor/glamor_egl_stubs.c64
-rw-r--r--xorg-server/glamor/glamor_eglmodule.c24
-rw-r--r--xorg-server/glamor/glamor_fbo.c849
-rw-r--r--xorg-server/glamor/glamor_fill.c589
-rw-r--r--xorg-server/glamor/glamor_fillspans.c121
-rw-r--r--xorg-server/glamor/glamor_getimage.c97
-rw-r--r--xorg-server/glamor/glamor_getspans.c91
-rw-r--r--xorg-server/glamor/glamor_gl_dispatch.c138
-rw-r--r--xorg-server/glamor/glamor_gl_dispatch.h244
-rw-r--r--xorg-server/glamor/glamor_glext.h1
-rw-r--r--xorg-server/glamor/glamor_glyphblt.c83
-rw-r--r--xorg-server/glamor/glamor_glyphs.c2945
-rw-r--r--xorg-server/glamor/glamor_gradient.c2608
-rw-r--r--xorg-server/glamor/glamor_largepixmap.c2429
-rw-r--r--xorg-server/glamor/glamor_picture.c111
-rw-r--r--xorg-server/glamor/glamor_pixmap.c2245
-rw-r--r--xorg-server/glamor/glamor_polyfillrect.c135
-rw-r--r--xorg-server/glamor/glamor_polylines.c155
-rw-r--r--xorg-server/glamor/glamor_polyops.c43
-rw-r--r--xorg-server/glamor/glamor_priv.h927
-rw-r--r--xorg-server/glamor/glamor_putimage.c559
-rw-r--r--xorg-server/glamor/glamor_render.c3724
-rw-r--r--xorg-server/glamor/glamor_setspans.c119
-rw-r--r--xorg-server/glamor/glamor_tile.c514
-rw-r--r--xorg-server/glamor/glamor_trapezoid.c3230
-rw-r--r--xorg-server/glamor/glamor_triangles.c61
-rw-r--r--xorg-server/glamor/glamor_utils.h1756
-rw-r--r--xorg-server/glamor/glamor_window.c102
-rw-r--r--xorg-server/glamor/glamor_xv.c1022
-rw-r--r--xorg-server/glamor/glapi.h121
-rw-r--r--xorg-server/glx/glxdri2.c2
-rw-r--r--xorg-server/glx/glxdricommon.c2
-rw-r--r--xorg-server/hw/xfree86/common/xf86.h6
-rw-r--r--xorg-server/hw/xfree86/common/xf86Events.c299
-rw-r--r--xorg-server/hw/xfree86/common/xf86Helper.c7
-rw-r--r--xorg-server/hw/xfree86/common/xf86Init.c8
-rw-r--r--xorg-server/hw/xfree86/modes/xf86EdidModes.c5
-rw-r--r--xorg-server/hw/xfree86/vgahw/Makefile.am1
-rw-r--r--xorg-server/include/Makefile.am2
-rw-r--r--xorg-server/include/dbus-core.h (renamed from xorg-server/glamor/compiler.h)63
-rw-r--r--xorg-server/include/dix-config.h.in16
-rw-r--r--xorg-server/pseudoramiX/pseudoramiX.c8
-rw-r--r--xorg-server/test/xi2/protocol-xipassivegrabdevice.c9
-rw-r--r--xorg-server/xkeyboard-config/NEWS3
-rw-r--r--xorg-server/xkeyboard-config/configure.ac2
-rw-r--r--xorg-server/xkeyboard-config/keycodes/xfree864
-rw-r--r--xorg-server/xkeyboard-config/po/bg.po1348
-rw-r--r--xorg-server/xkeyboard-config/po/ca.po1355
-rw-r--r--xorg-server/xkeyboard-config/po/da.po1680
-rw-r--r--xorg-server/xkeyboard-config/po/de.po1384
-rw-r--r--xorg-server/xkeyboard-config/po/eo.po1373
-rw-r--r--xorg-server/xkeyboard-config/po/es.po4825
-rw-r--r--xorg-server/xkeyboard-config/po/fr.po1357
-rw-r--r--xorg-server/xkeyboard-config/po/hu.po1356
-rw-r--r--xorg-server/xkeyboard-config/po/id.po4809
-rw-r--r--xorg-server/xkeyboard-config/po/nl.po1360
-rw-r--r--xorg-server/xkeyboard-config/po/pl.po1352
-rw-r--r--xorg-server/xkeyboard-config/po/pt_BR.po1357
-rw-r--r--xorg-server/xkeyboard-config/po/ru.po1453
-rw-r--r--xorg-server/xkeyboard-config/po/uk.po1356
-rw-r--r--xorg-server/xkeyboard-config/po/xkeyboard-config.pot1336
-rw-r--r--xorg-server/xkeyboard-config/rules/base.extras.xml.in55
-rw-r--r--xorg-server/xkeyboard-config/rules/base.xml.in61
-rw-r--r--xorg-server/xkeyboard-config/symbols/Makefile.am2
-rw-r--r--xorg-server/xkeyboard-config/symbols/af12
-rw-r--r--xorg-server/xkeyboard-config/symbols/ba16
-rw-r--r--xorg-server/xkeyboard-config/symbols/ca11
-rw-r--r--xorg-server/xkeyboard-config/symbols/cm16
-rw-r--r--xorg-server/xkeyboard-config/symbols/de30
-rw-r--r--xorg-server/xkeyboard-config/symbols/dk8
-rw-r--r--xorg-server/xkeyboard-config/symbols/es8
-rw-r--r--xorg-server/xkeyboard-config/symbols/eu63
-rw-r--r--xorg-server/xkeyboard-config/symbols/fi8
-rw-r--r--xorg-server/xkeyboard-config/symbols/fr2
-rw-r--r--xorg-server/xkeyboard-config/symbols/hr17
-rw-r--r--xorg-server/xkeyboard-config/symbols/in42
-rw-r--r--xorg-server/xkeyboard-config/symbols/inet34
-rw-r--r--xorg-server/xkeyboard-config/symbols/ir2
-rw-r--r--xorg-server/xkeyboard-config/symbols/is3
-rw-r--r--xorg-server/xkeyboard-config/symbols/it10
-rw-r--r--xorg-server/xkeyboard-config/symbols/jp4
-rw-r--r--xorg-server/xkeyboard-config/symbols/ma2
-rw-r--r--xorg-server/xkeyboard-config/symbols/nl2
-rw-r--r--xorg-server/xkeyboard-config/symbols/no8
-rw-r--r--xorg-server/xkeyboard-config/symbols/rs33
-rw-r--r--xorg-server/xkeyboard-config/symbols/ru4
-rw-r--r--xorg-server/xkeyboard-config/symbols/se8
-rw-r--r--xorg-server/xkeyboard-config/symbols/si13
-rw-r--r--xorg-server/xkeyboard-config/symbols/tm6
-rw-r--r--xorg-server/xkeyboard-config/symbols/tw12
-rw-r--r--xorg-server/xkeyboard-config/symbols/ua2
-rw-r--r--xorg-server/xkeyboard-config/symbols/us41
411 files changed, 38923 insertions, 35765 deletions
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
@@ -802,6 +802,22 @@ TRANS(NoListen) (const char * protocol)
}
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
@@ -55,6 +55,16 @@ 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 <parameter>dir</parameter> and update the cache.
+returns NULL if failed.
+@@
+
+@RET@ FcCache *
@FUNC@ FcDirCacheRead
@TYPE1@ const FcChar8 * @ARG1@ dir
@TYPE2@ FcBool% @ARG2@ force
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 <sys/vfs.h>
#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
#ifdef HAVE_SYS_STATFS_H
#include <sys/statfs.h>
#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
<Multi_key> <asciicircum> <exclam> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
<dead_belowdot> <ocircumflex> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
<dead_acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-<dead_acute> <U01A0> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
<Multi_key> <acute> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
<Multi_key> <apostrophe> <Ohorn> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
<dead_acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
@@ -2810,7 +2809,6 @@ XCOMM Part 3
<Multi_key> <apostrophe> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
<Multi_key> <apostrophe> <plus> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
<dead_acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
-<dead_acute> <U01A1> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
<Multi_key> <acute> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
<Multi_key> <apostrophe> <ohorn> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
<dead_acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
@@ -2820,56 +2818,48 @@ XCOMM Part 3
<Multi_key> <apostrophe> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
<Multi_key> <apostrophe> <plus> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
<dead_grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-<dead_grave> <U01A0> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <Ohorn> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<dead_grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<dead_grave> <Multi_key> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <plus> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
<dead_grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
-<dead_grave> <U01A1> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <ohorn> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<dead_grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<dead_grave> <Multi_key> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<Multi_key> <grave> <plus> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
<dead_hook> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-<dead_hook> <U01A0> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <Ohorn> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<dead_hook> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<dead_hook> <Multi_key> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <plus> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
<dead_hook> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-<dead_hook> <U01A1> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <ohorn> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<dead_hook> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<dead_hook> <Multi_key> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <dead_horn> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<Multi_key> <question> <plus> <o> : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
<dead_tilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
-<dead_tilde> <U01A0> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <Ohorn> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<dead_tilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<dead_tilde> <Multi_key> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <plus> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
<dead_tilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
-<dead_tilde> <U01A1> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <ohorn> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<dead_tilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<dead_tilde> <Multi_key> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<Multi_key> <asciitilde> <plus> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
<dead_belowdot> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-<dead_belowdot> <U01A0> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<Multi_key> <exclam> <Ohorn> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<dead_belowdot> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<dead_belowdot> <Multi_key> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<Multi_key> <exclam> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<Multi_key> <exclam> <plus> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
<dead_belowdot> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-<dead_belowdot> <U01A1> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
<Multi_key> <exclam> <ohorn> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
<dead_belowdot> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
<dead_belowdot> <Multi_key> <plus> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
@@ -2884,7 +2874,6 @@ XCOMM Part 3
<dead_hook> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
<Multi_key> <question> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
<dead_acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-<dead_acute> <U01AF> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
<Multi_key> <acute> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
<Multi_key> <apostrophe> <Uhorn> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
<dead_acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
@@ -2894,7 +2883,6 @@ XCOMM Part 3
<Multi_key> <apostrophe> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
<Multi_key> <apostrophe> <plus> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
<dead_acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
-<dead_acute> <U01B0> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
<Multi_key> <acute> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
<Multi_key> <apostrophe> <uhorn> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
<dead_acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
@@ -2904,56 +2892,48 @@ XCOMM Part 3
<Multi_key> <apostrophe> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
<Multi_key> <apostrophe> <plus> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
<dead_grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-<dead_grave> <U01AF> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <Uhorn> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<dead_grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<dead_grave> <Multi_key> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <plus> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
<dead_grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
-<dead_grave> <U01B0> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <uhorn> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<dead_grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<dead_grave> <Multi_key> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<Multi_key> <grave> <plus> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
<dead_hook> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-<dead_hook> <U01AF> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <Uhorn> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<dead_hook> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<dead_hook> <Multi_key> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <plus> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
<dead_hook> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-<dead_hook> <U01B0> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <uhorn> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<dead_hook> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<dead_hook> <Multi_key> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<Multi_key> <question> <plus> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
<dead_tilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
-<dead_tilde> <U01AF> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <Uhorn> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<dead_tilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<dead_tilde> <Multi_key> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <plus> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
<dead_tilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
-<dead_tilde> <U01B0> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <uhorn> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<dead_tilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<dead_tilde> <Multi_key> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<Multi_key> <asciitilde> <plus> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
<dead_belowdot> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-<dead_belowdot> <U01AF> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<Multi_key> <exclam> <Uhorn> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<dead_belowdot> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<dead_belowdot> <Multi_key> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<Multi_key> <exclam> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<Multi_key> <exclam> <plus> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
<dead_belowdot> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-<dead_belowdot> <U01B0> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
<Multi_key> <exclam> <uhorn> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
<dead_belowdot> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
<dead_belowdot> <Multi_key> <plus> <u> : "ự" 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 / <dead_acute>
-<dead_acute> <space> : "´" # ACUTE ACCENT
-<dead_acute> <a> : "á" # LATIN CAPITAL LETTER A WITH ACUTE
-<dead_acute> <A> : "Á" # LATIN CAPITAL LETTER A WITH ACUTE
-<dead_acute> <c> : "ć" # LATIN SMALL LETTER C WITH ACUTE
-<dead_acute> <C> : "Ć" # LATIN CAPITAL LETTER C WITH ACUTE
-<dead_acute> <e> : "é" # LATIN SMALL LETTER E WITH ACUTE
-<dead_acute> <E> : "É" # LATIN CAPITAL LETTER E WITH ACUTE
-<dead_acute> <i> : "í" # LATIN SMALL LETTER I WITH ACUTE
-<dead_acute> <I> : "Í" # LATIN CAPITAL LETTER I WITH ACUTE
-<dead_acute> <l> : "ĺ" # LATIN SMALL LETTER L WITH ACUTE
-<dead_acute> <L> : "Ĺ" # LATIN CAPITAL LETTER L WITH ACUTE
-<dead_acute> <n> : "ń" # LATIN SMALL LETTER N WITH ACUTE
-<dead_acute> <N> : "Ń" # LATIN CAPITAL LETTER N WITH ACUTE
-<dead_acute> <o> : "ó" # LATIN SMALL LETTER O WITH ACUTE
-<dead_acute> <O> : "Ó" # LATIN CAPITAL LETTER O WITH ACUTE
-<dead_acute> <r> : "ŕ" # LATIN SMALL LETTER R WITH ACUTE
-<dead_acute> <R> : "Ŕ" # LATIN CAPITAL LETTER R WITH ACUTE
-<dead_acute> <s> : "ś" # LATIN SMALL LETTER S WITH ACUTE
-<dead_acute> <S> : "Ś" # LATIN CAPITAL LETTER S WITH ACUTE
-<dead_acute> <u> : "ú" # LATIN SMALL LETTER U WITH ACUTE
-<dead_acute> <U> : "Ú" # LATIN CAPITAL LETTER U WITH ACUTE
-<dead_acute> <w> : "ẃ" # LATIN SMALL LETTER W WITH ACUTE
-<dead_acute> <W> : "Ẃ" # LATIN CAPITAL LETTER W WITH ACUTE
-<dead_acute> <y> : "ý" # LATIN SMALL LETTER Y WITH ACUTE
-<dead_acute> <Y> : "Ý" # LATIN CAPITAL LETTER Y WITH ACUTE
-<dead_acute> <z> : "ź" # LATIN SMALL LETTER Z WITH ACUTE
-<dead_acute> <Z> : "Ź" # LATIN CAPITAL LETTER Z WITH ACUTE
-<dead_acute> <ae> : "ǽ" # LATIN SMALL LETTER AE WITH ACUTE
-<dead_acute> <AE> : "Ǽ" # LATIN CAPITAL LETTER AE WITH ACUTE
-<dead_acute> <oslash> : "ǿ" # LATIN SMALL LETTER O WITH STROKE AND ACUTE
-<dead_acute> <Oslash> : "Ǿ" # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-<dead_acute> <aring> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-<dead_acute> <Aring> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <space> : "´" U00B4 # ACUTE ACCENT
+<dead_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
+<dead_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
+<dead_acute> <c> : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE
+<dead_acute> <C> : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE
+<dead_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
+<dead_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
+<dead_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
+<dead_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
+<dead_acute> <l> : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE
+<dead_acute> <L> : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE
+<dead_acute> <n> : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE
+<dead_acute> <N> : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE
+<dead_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
+<dead_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
+<dead_acute> <r> : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE
+<dead_acute> <R> : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE
+<dead_acute> <s> : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE
+<dead_acute> <S> : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE
+<dead_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
+<dead_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
+<dead_acute> <w> : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE
+<dead_acute> <W> : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
+<dead_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
+<dead_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
+<dead_acute> <z> : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE
+<dead_acute> <Z> : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+<dead_acute> <ae> : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE
+<dead_acute> <AE> : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
+<dead_acute> <oslash> : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Oslash> : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <aring> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <Aring> : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
XCOMM Sequences with COMBINING BREVE / <dead_breve>
-<dead_breve> <space> : "˘" # BREVE
-<dead_breve> <a> : "ă" # LATIN SMALL LETTER A WITH BREVE
-<dead_breve> <A> : "Ă" # LATIN CAPITAL LETTER A WITH BREVE
-<dead_breve> <e> : "ĕ" # LATIN SMALL LETTER E WITH BREVE
-<dead_breve> <E> : "Ĕ" # LATIN CAPITAL LETTER E WITH BREVE
-<dead_breve> <g> : "ğ" # LATIN SMALL LETTER G WITH BREVE
-<dead_breve> <G> : "Ğ" # LATIN CAPITAL LETTER G WITH BREVE
-<dead_breve> <i> : "ĭ" # LATIN SMALL LETTER I WITH BREVE
-<dead_breve> <I> : "Ĭ" # LATIN CAPITAL LETTER I WITH BREVE
-<dead_breve> <o> : "ŏ" # LATIN SMALL LETTER O WITH BREVE
-<dead_breve> <O> : "Ŏ" # LATIN CAPITAL LETTER O WITH BREVE
-<dead_breve> <u> : "ŭ" # LATIN SMALL LETTER U WITH BREVE
-<dead_breve> <U> : "Ŭ" # LATIN CAPITAL LETTER U WITH BREVE
+<dead_breve> <space> : "˘" U02D8 # BREVE
+<dead_breve> <a> : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE
+<dead_breve> <A> : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE
+<dead_breve> <e> : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE
+<dead_breve> <E> : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE
+<dead_breve> <g> : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE
+<dead_breve> <G> : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE
+<dead_breve> <i> : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE
+<dead_breve> <I> : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE
+<dead_breve> <o> : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE
+<dead_breve> <O> : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE
+<dead_breve> <u> : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE
+<dead_breve> <U> : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE
XCOMM Sequences with COMBINING CARON / <dead_caron>
-<dead_caron> <space> : "ˇ" # CARON
-<dead_caron> <a> : "ǎ" # LATIN SMALL LETTER A WITH CARON
-<dead_caron> <A> : "Ǎ" # LATIN CAPITAL LETTER A WITH CARON
-<dead_caron> <c> : "č" # LATIN SMALL LETTER C WITH CARON
-<dead_caron> <C> : "Č" # LATIN CAPITAL LETTER C WITH CARON
-<dead_caron> <d> : "ď" # LATIN SMALL LETTER D WITH CARON
-<dead_caron> <D> : "Ď" # LATIN CAPITAL LETTER D WITH CARON
-<dead_caron> <e> : "ě" # LATIN SMALL LETTER E WITH CARON
-<dead_caron> <E> : "Ě" # LATIN CAPITAL LETTER E WITH CARON
-<dead_caron> <g> : "ǧ" # LATIN SMALL LETTER G WITH CARON
-<dead_caron> <G> : "Ǧ" # LATIN CAPITAL LETTER G WITH CARON
-<dead_caron> <h> : "ȟ" # LATIN SMALL LETTER H WITH CARON
-<dead_caron> <H> : "Ȟ" # LATIN CAPITAL LETTER H WITH CARON
-<dead_caron> <i> : "ǐ" # LATIN SMALL LETTER I WITH CARON
-<dead_caron> <I> : "Ǐ" # LATIN CAPITAL LETTER I WITH CARON
-<dead_caron> <k> : "ǩ" # LATIN SMALL LETTER K WITH CARON
-<dead_caron> <K> : "Ǩ" # LATIN CAPITAL LETTER K WITH CARON
-<dead_caron> <l> : "ľ" # LATIN SMALL LETTER L WITH CARON
-<dead_caron> <L> : "Ľ" # LATIN CAPITAL LETTER L WITH CARON
-<dead_caron> <n> : "ň" # LATIN SMALL LETTER N WITH CARON
-<dead_caron> <N> : "Ň" # LATIN CAPITAL LETTER N WITH CARON
-<dead_caron> <o> : "ǒ" # LATIN SMALL LETTER O WITH CARON
-<dead_caron> <O> : "Ǒ" # LATIN CAPITAL LETTER O WITH CARON
-<dead_caron> <r> : "ř" # LATIN SMALL LETTER R WITH CARON
-<dead_caron> <R> : "Ř" # LATIN CAPITAL LETTER R WITH CARON
-<dead_caron> <s> : "š" # LATIN SMALL LETTER S WITH CARON
-<dead_caron> <S> : "Š" # LATIN CAPITAL LETTER S WITH CARON
-<dead_caron> <t> : "ť" # LATIN SMALL LETTER T WITH CARON
-<dead_caron> <T> : "Ť" # LATIN CAPITAL LETTER T WITH CARON
-<dead_caron> <u> : "ǔ" # LATIN SMALL LETTER U WITH CARON
-<dead_caron> <U> : "Ǔ" # LATIN CAPITAL LETTER U WITH CARON
-<dead_caron> <z> : "ž" # LATIN SMALL LETTER Z WITH CARON
-<dead_caron> <Z> : "Ž" # LATIN CAPITAL LETTER Z WITH CARON
-<dead_caron> <ezh> : "ǯ" # LATIN SMALL LETTER EZH WITH CARON
-<dead_caron> <EZH> : "Ǯ" # LATIN CAPITAL LETTER EZH WITH CARON
+<dead_caron> <space> : "ˇ" U02C7 # CARON
+<dead_caron> <a> : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON
+<dead_caron> <A> : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON
+<dead_caron> <c> : "č" U010D # LATIN SMALL LETTER C WITH CARON
+<dead_caron> <C> : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON
+<dead_caron> <d> : "ď" U010F # LATIN SMALL LETTER D WITH CARON
+<dead_caron> <D> : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON
+<dead_caron> <e> : "ě" U011B # LATIN SMALL LETTER E WITH CARON
+<dead_caron> <E> : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON
+<dead_caron> <g> : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON
+<dead_caron> <G> : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON
+<dead_caron> <h> : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON
+<dead_caron> <H> : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON
+<dead_caron> <i> : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON
+<dead_caron> <I> : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON
+<dead_caron> <k> : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON
+<dead_caron> <K> : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON
+<dead_caron> <l> : "ľ" U013E # LATIN SMALL LETTER L WITH CARON
+<dead_caron> <L> : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON
+<dead_caron> <n> : "ň" U0148 # LATIN SMALL LETTER N WITH CARON
+<dead_caron> <N> : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON
+<dead_caron> <o> : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON
+<dead_caron> <O> : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON
+<dead_caron> <r> : "ř" U0159 # LATIN SMALL LETTER R WITH CARON
+<dead_caron> <R> : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON
+<dead_caron> <s> : "š" U0161 # LATIN SMALL LETTER S WITH CARON
+<dead_caron> <S> : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON
+<dead_caron> <t> : "ť" U0165 # LATIN SMALL LETTER T WITH CARON
+<dead_caron> <T> : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON
+<dead_caron> <u> : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON
+<dead_caron> <U> : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON
+<dead_caron> <z> : "ž" U017E # LATIN SMALL LETTER Z WITH CARON
+<dead_caron> <Z> : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON
+<dead_caron> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<dead_caron> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
XCOMM Sequences with COMBINING CEDILLA / <dead_cedilla>
-<dead_cedilla> <space> : "¸" # CEDILLA
-<dead_cedilla> <c> : "ç" # LATIN SMALL LETTER C WITH CEDILLA
-<dead_cedilla> <C> : "Ç" # LATIN CAPITAL LETTER C WITH CEDILLA
-<dead_cedilla> <g> : "ģ" # LATIN SMALL LETTER G WITH CEDILLA
-<dead_cedilla> <G> : "Ģ" # LATIN CAPITAL LETTER G WITH CEDILLA
-<dead_cedilla> <k> : "ķ" # LATIN SMALL LETTER K WITH CEDILLA
-<dead_cedilla> <K> : "Ķ" # LATIN CAPITAL LETTER K WITH CEDILLA
-<dead_cedilla> <l> : "ļ" # LATIN SMALL LETTER L WITH CEDILLA
-<dead_cedilla> <L> : "Ļ" # LATIN CAPITAL LETTER L WITH CEDILLA
-<dead_cedilla> <n> : "ņ" # LATIN SMALL LETTER N WITH CEDILLA
-<dead_cedilla> <N> : "Ņ" # LATIN CAPITAL LETTER N WITH CEDILLA
-<dead_cedilla> <r> : "ŗ" # LATIN SMALL LETTER R WITH CEDILLA
-<dead_cedilla> <R> : "Ŗ" # LATIN CAPITAL LETTER R WITH CEDILLA
-<dead_cedilla> <s> : "ş" # LATIN SMALL LETTER S WITH CEDILLA
-<dead_cedilla> <S> : "Ş" # LATIN CAPITAL LETTER S WITH CEDILLA
-<dead_cedilla> <t> : "ţ" # LATIN SMALL LETTER T WITH CEDILLA
-<dead_cedilla> <T> : "Ţ" # LATIN CAPITAL LETTER T WITH CEDILLA
+<dead_cedilla> <space> : "¸" U00B8 # CEDILLA
+<dead_cedilla> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
+<dead_cedilla> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
+<dead_cedilla> <g> : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA
+<dead_cedilla> <G> : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+<dead_cedilla> <k> : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA
+<dead_cedilla> <K> : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+<dead_cedilla> <l> : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA
+<dead_cedilla> <L> : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA
+<dead_cedilla> <n> : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA
+<dead_cedilla> <N> : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
+<dead_cedilla> <r> : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA
+<dead_cedilla> <R> : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
+<dead_cedilla> <s> : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA
+<dead_cedilla> <S> : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA
+<dead_cedilla> <t> : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA
+<dead_cedilla> <T> : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
-<dead_circumflex> <space> : "^" # CIRCUMFLEX
-<dead_circumflex> <a> : "â" # LATIN SMALL LETTER A WITH CIRCUMFLEX
-<dead_circumflex> <A> : "Â" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-<dead_circumflex> <c> : "ĉ" # LATIN SMALL LETTER C WITH CIRCUMFLEX
-<dead_circumflex> <C> : "Ĉ" # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-<dead_circumflex> <e> : "ê" # LATIN SMALL LETTER E WITH CIRCUMFLEX
-<dead_circumflex> <E> : "Ê" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-<dead_circumflex> <g> : "ĝ" # LATIN SMALL LETTER G WITH CIRCUMFLEX
-<dead_circumflex> <G> : "Ĝ" # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-<dead_circumflex> <h> : "ĥ" # LATIN SMALL LETTER H WITH CIRCUMFLEX
-<dead_circumflex> <H> : "Ĥ" # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-<dead_circumflex> <i> : "î" # LATIN SMALL LETTER I WITH CIRCUMFLEX
-<dead_circumflex> <I> : "Î" # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-<dead_circumflex> <j> : "ĵ" # LATIN SMALL LETTER J WITH CIRCUMFLEX
-<dead_circumflex> <J> : "Ĵ" # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-<dead_circumflex> <o> : "ô" # LATIN SMALL LETTER O WITH CIRCUMFLEX
-<dead_circumflex> <O> : "Ô" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-<dead_circumflex> <s> : "ŝ" # LATIN SMALL LETTER S WITH CIRCUMFLEX
-<dead_circumflex> <S> : "Ŝ" # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-<dead_circumflex> <u> : "û" # LATIN SMALL LETTER U WITH CIRCUMFLEX
-<dead_circumflex> <U> : "Û" # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-<dead_circumflex> <w> : "ŵ" # LATIN SMALL LETTER W WITH CIRCUMFLEX
-<dead_circumflex> <W> : "Ŵ" # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-<dead_circumflex> <y> : "ŷ" # LATIN SMALL LETTER Y WITH CIRCUMFLEX
-<dead_circumflex> <Y> : "Ŷ" # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+<dead_circumflex> <space> : "^" U005E # CIRCUMFLEX
+<dead_circumflex> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<dead_circumflex> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<dead_circumflex> <c> : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+<dead_circumflex> <C> : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+<dead_circumflex> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<dead_circumflex> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<dead_circumflex> <g> : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
+<dead_circumflex> <G> : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+<dead_circumflex> <h> : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+<dead_circumflex> <H> : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+<dead_circumflex> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<dead_circumflex> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<dead_circumflex> <j> : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
+<dead_circumflex> <J> : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+<dead_circumflex> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<dead_circumflex> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<dead_circumflex> <s> : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
+<dead_circumflex> <S> : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+<dead_circumflex> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<dead_circumflex> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<dead_circumflex> <w> : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <W> : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <y> : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+<dead_circumflex> <Y> : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
-<dead_diaeresis> <space> : "¨" # DIAERESIS
-<dead_diaeresis> <a> : "ä" # LATIN SMALL LETTER A WITH DIAERESIS
-<dead_diaeresis> <A> : "Ä" # LATIN CAPITAL LETTER A WITH DIAERESIS
-<dead_diaeresis> <e> : "ë" # LATIN SMALL LETTER E WITH DIAERESIS
-<dead_diaeresis> <E> : "Ë" # LATIN CAPITAL LETTER E WITH DIAERESIS
-<dead_diaeresis> <i> : "ï" # LATIN SMALL LETTER I WITH DIAERESIS
-<dead_diaeresis> <I> : "Ï" # LATIN CAPITAL LETTER I WITH DIAERESIS
-<dead_diaeresis> <o> : "ö" # LATIN SMALL LETTER O WITH DIAERESIS
-<dead_diaeresis> <O> : "Ö" # LATIN CAPITAL LETTER O WITH DIAERESIS
-<dead_diaeresis> <u> : "ü" # LATIN SMALL LETTER U WITH DIAERESIS
-<dead_diaeresis> <U> : "Ü" # LATIN CAPITAL LETTER U WITH DIAERESIS
-<dead_diaeresis> <w> : "ẅ" # LATIN SMALL LETTER W WITH DIAERESIS
-<dead_diaeresis> <W> : "Ẅ" # LATIN CAPITAL LETTER W WITH DIAERESIS
-<dead_diaeresis> <y> : "ÿ" # LATIN SMALL LETTER Y WITH DIAERESIS
-<dead_diaeresis> <Y> : "Ÿ" # LATIN CAPITAL LETTER Y WITH DIAERESIS
+<dead_diaeresis> <space> : "¨" U00A8 # DIAERESIS
+<dead_diaeresis> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
+<dead_diaeresis> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
+<dead_diaeresis> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
+<dead_diaeresis> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
+<dead_diaeresis> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
+<dead_diaeresis> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
+<dead_diaeresis> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
+<dead_diaeresis> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
+<dead_diaeresis> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
+<dead_diaeresis> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
+<dead_diaeresis> <w> : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
+<dead_diaeresis> <W> : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
+<dead_diaeresis> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+<dead_diaeresis> <Y> : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
-<dead_abovedot> <space> : "˙" # DOT ABOVE
-<dead_abovedot> <b> : "ḃ" # LATIN SMALL LETTER B WITH DOT ABOVE
-<dead_abovedot> <B> : "Ḃ" # LATIN CAPITAL LETTER B WITH DOT ABOVE
-<dead_abovedot> <c> : "ċ" # LATIN SMALL LETTER C WITH DOT ABOVE
-<dead_abovedot> <C> : "Ċ" # LATIN CAPITAL LETTER C WITH DOT ABOVE
-<dead_abovedot> <d> : "ḋ" # LATIN SMALL LETTER D WITH DOT ABOVE
-<dead_abovedot> <D> : "Ḋ" # LATIN CAPITAL LETTER D WITH DOT ABOVE
-<dead_abovedot> <e> : "ė" # LATIN SMALL LETTER E WITH DOT ABOVE
-<dead_abovedot> <E> : "Ė" # LATIN CAPITAL LETTER E WITH DOT ABOVE
-<dead_abovedot> <f> : "ḟ" # LATIN SMALL LETTER F WITH DOT ABOVE
-<dead_abovedot> <F> : "Ḟ" # LATIN CAPITAL LETTER F WITH DOT ABOVE
-<dead_abovedot> <g> : "ġ" # LATIN SMALL LETTER G WITH DOT ABOVE
-<dead_abovedot> <G> : "Ġ" # LATIN CAPITAL LETTER G WITH DOT ABOVE
-<dead_abovedot> <I> : "İ" # LATIN CAPITAL LETTER I WITH DOT ABOVE
-<dead_abovedot> <m> : "ṁ" # LATIN SMALL LETTER M WITH DOT ABOVE
-<dead_abovedot> <M> : "Ṁ" # LATIN CAPITAL LETTER M WITH DOT ABOVE
-<dead_abovedot> <p> : "ṗ" # LATIN SMALL LETTER P WITH DOT ABOVE
-<dead_abovedot> <P> : "Ṗ" # LATIN CAPITAL LETTER P WITH DOT ABOVE
-<dead_abovedot> <s> : "ṡ" # LATIN SMALL LETTER S WITH DOT ABOVE
-<dead_abovedot> <S> : "Ṡ" # LATIN CAPITAL LETTER S WITH DOT ABOVE
-<dead_abovedot> <t> : "ṫ" # LATIN SMALL LETTER T WITH DOT ABOVE
-<dead_abovedot> <T> : "Ṫ" # LATIN CAPITAL LETTER T WITH DOT ABOVE
-<dead_abovedot> <z> : "ż" # LATIN SMALL LETTER Z WITH DOT ABOVE
-<dead_abovedot> <Z> : "Ż" # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+<dead_abovedot> <space> : "˙" U02D9 # DOT ABOVE
+<dead_abovedot> <b> : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
+<dead_abovedot> <B> : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+<dead_abovedot> <c> : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE
+<dead_abovedot> <C> : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
+<dead_abovedot> <d> : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
+<dead_abovedot> <D> : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
+<dead_abovedot> <e> : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+<dead_abovedot> <E> : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+<dead_abovedot> <f> : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
+<dead_abovedot> <F> : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
+<dead_abovedot> <g> : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
+<dead_abovedot> <G> : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+<dead_abovedot> <I> : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+<dead_abovedot> <m> : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
+<dead_abovedot> <M> : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
+<dead_abovedot> <p> : "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
+<dead_abovedot> <P> : "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+<dead_abovedot> <s> : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
+<dead_abovedot> <S> : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+<dead_abovedot> <t> : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
+<dead_abovedot> <T> : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
+<dead_abovedot> <z> : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+<dead_abovedot> <Z> : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
XCOMM Sequences with COMBINING DOT BELOW / <dead_belowdot>
-XCOMM <dead_belowdot> <space> : " " # DOT BELOW
-<dead_belowdot> <a> : "ạ" # LATIN SMALL LETTER A WITH DOT BELOW
-<dead_belowdot> <A> : "Ạ" # LATIN CAPITAL LETTER A WITH DOT BELOW
-<dead_belowdot> <e> : "ẹ" # LATIN SMALL LETTER E WITH DOT BELOW
-<dead_belowdot> <E> : "Ẹ" # LATIN CAPITAL LETTER E WITH DOT BELOW
-<dead_belowdot> <i> : "ị" # LATIN SMALL LETTER I WITH DOT BELOW
-<dead_belowdot> <I> : "Ị" # LATIN CAPITAL LETTER I WITH DOT BELOW
-<dead_belowdot> <o> : "ọ" # LATIN SMALL LETTER O WITH DOT BELOW
-<dead_belowdot> <O> : "Ọ" # LATIN CAPITAL LETTER O WITH DOT BELOW
-<dead_belowdot> <u> : "ụ" # LATIN SMALL LETTER U WITH DOT BELOW
-<dead_belowdot> <U> : "Ụ" # LATIN CAPITAL LETTER U WITH DOT BELOW
-<dead_belowdot> <y> : "ỵ" # LATIN SMALL LETTER Y WITH DOT BELOW
-<dead_belowdot> <Y> : "Ỵ" # LATIN CAPITAL LETTER Y WITH DOT BELOW
+XCOMM <dead_belowdot> <space> : " " U.... # DOT BELOW
+<dead_belowdot> <a> : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
+<dead_belowdot> <A> : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
+<dead_belowdot> <e> : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
+<dead_belowdot> <E> : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
+<dead_belowdot> <i> : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
+<dead_belowdot> <I> : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
+<dead_belowdot> <o> : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
+<dead_belowdot> <O> : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
+<dead_belowdot> <u> : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
+<dead_belowdot> <U> : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
+<dead_belowdot> <y> : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
+<dead_belowdot> <Y> : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
XCOMM Sequences with COMBINING DOUBLE ACUTE ACCENT / <dead_doubleacute>
-<dead_doubleacute> <space> : "˝" # DOUBLE ACUTE ACCENT
-<dead_doubleacute> <o> : "ő" # LATIN SMALL LETTER O WITH DOUBLE ACUTE
-<dead_doubleacute> <O> : "Ő" # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-<dead_doubleacute> <u> : "ű" # LATIN SMALL LETTER U WITH DOUBLE ACUTE
-<dead_doubleacute> <U> : "Ű" # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+<dead_doubleacute> <space> : "˝" U02DD # DOUBLE ACUTE ACCENT
+<dead_doubleacute> <o> : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+<dead_doubleacute> <O> : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+<dead_doubleacute> <u> : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+<dead_doubleacute> <U> : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
XCOMM Sequences with COMBINING GRAVE ACCENT / <dead_grave>
-<dead_grave> <space> : "`" # GRAVE ACCENT
-<dead_grave> <a> : "à" # LATIN SMALL LETTER A WITH GRAVE
-<dead_grave> <A> : "À" # LATIN CAPITAL LETTER A WITH GRAVE
-<dead_grave> <e> : "è" # LATIN SMALL LETTER E WITH GRAVE
-<dead_grave> <E> : "È" # LATIN CAPITAL LETTER E WITH GRAVE
-<dead_grave> <i> : "ì" # LATIN SMALL LETTER I WITH GRAVE
-<dead_grave> <I> : "Ì" # LATIN CAPITAL LETTER I WITH GRAVE
-<dead_grave> <o> : "ò" # LATIN SMALL LETTER O WITH GRAVE
-<dead_grave> <O> : "Ò" # LATIN CAPITAL LETTER O WITH GRAVE
-<dead_grave> <u> : "ù" # LATIN SMALL LETTER U WITH GRAVE
-<dead_grave> <U> : "Ù" # LATIN CAPITAL LETTER U WITH GRAVE
-<dead_grave> <w> : "ẁ" # LATIN SMALL LETTER W WITH GRAVE
-<dead_grave> <W> : "Ẁ" # LATIN CAPITAL LETTER W WITH GRAVE
-<dead_grave> <y> : "ỳ" # LATIN SMALL LETTER Y WITH GRAVE
-<dead_grave> <Y> : "Ỳ" # LATIN CAPITAL LETTER Y WITH GRAVE
+<dead_grave> <space> : "`" U0060 # GRAVE ACCENT
+<dead_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
+<dead_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
+<dead_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
+<dead_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+<dead_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
+<dead_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
+<dead_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
+<dead_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+<dead_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
+<dead_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
+<dead_grave> <w> : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE
+<dead_grave> <W> : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
+<dead_grave> <y> : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
+<dead_grave> <Y> : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
XCOMM Sequences with COMBINING MACRON / <dead_macron>
-<dead_macron> <space> : "¯" # MACRON
-<dead_macron> <a> : "ā" # LATIN SMALL LETTER A WITH MACRON
-<dead_macron> <A> : "Ā" # LATIN CAPITAL LETTER A WITH MACRON
-<dead_macron> <e> : "ē" # LATIN SMALL LETTER E WITH MACRON
-<dead_macron> <E> : "Ē" # LATIN CAPITAL LETTER E WITH MACRON
-<dead_macron> <i> : "ī" # LATIN SMALL LETTER I WITH MACRON
-<dead_macron> <I> : "Ī" # LATIN CAPITAL LETTER I WITH MACRON
-<dead_macron> <o> : "ō" # LATIN SMALL LETTER O WITH MACRON
-<dead_macron> <O> : "Ō" # LATIN CAPITAL LETTER O WITH MACRON
-<dead_macron> <u> : "ū" # LATIN SMALL LETTER U WITH MACRON
-<dead_macron> <U> : "Ū" # LATIN CAPITAL LETTER U WITH MACRON
-<dead_macron> <ae> : "ǣ" # LATIN SMALL LETTER AE WITH MACRON
-<dead_macron> <AE> : "Ǣ" # LATIN CAPITAL LETTER AE WITH MACRON
-<dead_macron> <adiaeresis> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-<dead_macron> <Adiaeresis> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <space> : "¯" U00AF # MACRON
+<dead_macron> <a> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
+<dead_macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
+<dead_macron> <e> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
+<dead_macron> <E> : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON
+<dead_macron> <i> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
+<dead_macron> <I> : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON
+<dead_macron> <o> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
+<dead_macron> <O> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
+<dead_macron> <u> : "ū" U016B # LATIN SMALL LETTER U WITH MACRON
+<dead_macron> <U> : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON
+<dead_macron> <ae> : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON
+<dead_macron> <AE> : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
+<dead_macron> <adiaeresis> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <Adiaeresis> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
-<dead_ogonek> <space> : "˛" # OGONEK
-<dead_ogonek> <a> : "ą" # LATIN SMALL LETTER A WITH OGONEK
-<dead_ogonek> <A> : "Ą" # LATIN CAPITAL LETTER A WITH OGONEK
-<dead_ogonek> <e> : "ę" # LATIN SMALL LETTER E WITH OGONEK
-<dead_ogonek> <E> : "Ę" # LATIN CAPITAL LETTER E WITH OGONEK
-<dead_ogonek> <i> : "į" # LATIN SMALL LETTER I WITH OGONEK
-<dead_ogonek> <I> : "Į" # LATIN CAPITAL LETTER I WITH OGONEK
-<dead_ogonek> <o> : "ǫ" # LATIN SMALL LETTER O WITH OGONEK
-<dead_ogonek> <O> : "Ǫ" # LATIN CAPITAL LETTER O WITH OGONEK
-<dead_ogonek> <u> : "ų" # LATIN SMALL LETTER U WITH OGONEK
-<dead_ogonek> <U> : "Ų" # LATIN CAPITAL LETTER U WITH OGONEK
+<dead_ogonek> <space> : "˛" U02DB # OGONEK
+<dead_ogonek> <a> : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK
+<dead_ogonek> <A> : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK
+<dead_ogonek> <e> : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK
+<dead_ogonek> <E> : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK
+<dead_ogonek> <i> : "į" U012F # LATIN SMALL LETTER I WITH OGONEK
+<dead_ogonek> <I> : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK
+<dead_ogonek> <o> : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK
+<dead_ogonek> <O> : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK
+<dead_ogonek> <u> : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK
+<dead_ogonek> <U> : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK
XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
-<dead_abovering> <space> : "°" # RING ABOVE
-<dead_abovering> <a> : "å" # LATIN SMALL LETTER A WITH RING ABOVE
-<dead_abovering> <A> : "Å" # LATIN CAPITAL LETTER A WITH RING ABOVE
-<dead_abovering> <u> : "ů" # LATIN SMALL LETTER U WITH RING ABOVE
-<dead_abovering> <U> : "Ů" # LATIN CAPITAL LETTER U WITH RING ABOVE
+<dead_abovering> <space> : "˚" U02DA # RING ABOVE
+<dead_abovering> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
+<dead_abovering> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
+<dead_abovering> <u> : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE
+<dead_abovering> <U> : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
XCOMM Sequences with COMBINING TILDE / <dead_tilde>
-<dead_tilde> <space> : "~" # TILDE
-<dead_tilde> <a> : "ã" # LATIN SMALL LETTER A WITH TILDE
-<dead_tilde> <A> : "Ã" # LATIN CAPITAL LETTER A WITH TILDE
-<dead_tilde> <e> : "ẽ" # LATIN SMALL LETTER E WITH TILDE
-<dead_tilde> <E> : "Ẽ" # LATIN CAPITAL LETTER E WITH TILDE
-<dead_tilde> <i> : "ĩ" # LATIN SMALL LETTER I WITH TILDE
-<dead_tilde> <I> : "Ĩ" # LATIN CAPITAL LETTER I WITH TILDE
-<dead_tilde> <n> : "ñ" # LATIN SMALL LETTER N WITH TILDE
-<dead_tilde> <N> : "Ñ" # LATIN CAPITAL LETTER N WITH TILDE
-<dead_tilde> <o> : "õ" # LATIN SMALL LETTER O WITH TILDE
-<dead_tilde> <O> : "Õ" # LATIN CAPITAL LETTER O WITH TILDE
-<dead_tilde> <u> : "ũ" # LATIN SMALL LETTER U WITH TILDE
-<dead_tilde> <U> : "Ũ" # LATIN CAPITAL LETTER U WITH TILDE
-<dead_tilde> <y> : "ỹ" # LATIN SMALL LETTER Y WITH TILDE
-<dead_tilde> <Y> : "Ỹ" # LATIN CAPITAL LETTER Y WITH TILDE
+<dead_tilde> <space> : "~" U007E # TILDE
+<dead_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
+<dead_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
+<dead_tilde> <e> : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE
+<dead_tilde> <E> : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE
+<dead_tilde> <i> : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE
+<dead_tilde> <I> : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE
+<dead_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
+<dead_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
+<dead_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
+<dead_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
+<dead_tilde> <u> : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE
+<dead_tilde> <U> : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE
+<dead_tilde> <y> : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE
+<dead_tilde> <Y> : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
XCOMM Sequences with AUXILIARY STROKE / <dead_stroke>
-<dead_stroke> <d> : "đ" # LATIN SMALL LETTER D WITH STROKE
-<dead_stroke> <D> : "Đ" # LATIN CAPITAL LETTER D WITH STROKE
-<dead_stroke> <g> : "ǥ" # LATIN SMALL LETTER G WITH STROKE
-<dead_stroke> <G> : "Ǥ" # LATIN CAPITAL LETTER G WITH STROKE
-<dead_stroke> <h> : "ħ" # LATIN SMALL LETTER H WITH STROKE
-<dead_stroke> <H> : "Ħ" # LATIN CAPITAL LETTER H WITH STROKE
-<dead_stroke> <l> : "ł" # LATIN SMALL LETTER L WITH STROKE
-<dead_stroke> <L> : "Ł" # LATIN CAPITAL LETTER L WITH STROKE
-<dead_stroke> <o> : "ø" # LATIN SMALL LETTER O WITH STROKE
-<dead_stroke> <O> : "Ø" # LATIN CAPITAL LETTER O WITH STROKE
-<dead_stroke> <t> : "ŧ" # LATIN SMALL LETTER T WITH STROKE
-<dead_stroke> <T> : "Ŧ" # LATIN CAPITAL LETTER T WITH STROKE
+<dead_stroke> <d> : "đ" U0111 # LATIN SMALL LETTER D WITH STROKE
+<dead_stroke> <D> : "Đ" U0110 # LATIN CAPITAL LETTER D WITH STROKE
+<dead_stroke> <g> : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE
+<dead_stroke> <G> : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE
+<dead_stroke> <h> : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE
+<dead_stroke> <H> : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE
+<dead_stroke> <l> : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE
+<dead_stroke> <L> : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE
+<dead_stroke> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
+<dead_stroke> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
+<dead_stroke> <t> : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE
+<dead_stroke> <T> : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE
XCOMM Sequences from Annex 4
XCOMM Sequences with COMBINING BREVE / <dead_breve>
-<dead_acute> <dead_breve> <a> : "ắ" # LATIN SMALL LETTER A WITH BREVE AND ACUTE
-<dead_belowdot> <dead_breve> <a> : "ặ" # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-<dead_grave> <dead_breve> <a> : "ằ" # LATIN SMALL LETTER A WITH BREVE AND GRAVE
-<dead_hook> <dead_breve> <a> : "ẳ" # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-<dead_tilde> <dead_breve> <a> : "ẵ" # LATIN SMALL LETTER A WITH BREVE AND TILDE
-<dead_acute> <dead_breve> <A> : "Ắ" # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-<dead_belowdot> <dead_breve> <A> : "Ặ" # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-<dead_grave> <dead_breve> <A> : "Ằ" # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-<dead_hook> <dead_breve> <A> : "Ẳ" # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-<dead_tilde> <dead_breve> <A> : "Ẵ" # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+<dead_acute> <dead_breve> <a> : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_belowdot> <dead_breve> <a> : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_grave> <dead_breve> <a> : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_hook> <dead_breve> <a> : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_tilde> <dead_breve> <a> : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_acute> <dead_breve> <A> : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_belowdot> <dead_breve> <A> : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_grave> <dead_breve> <A> : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_hook> <dead_breve> <A> : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_tilde> <dead_breve> <A> : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
-<dead_acute> <dead_circumflex> <a> : "ấ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <a> : "ậ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <a> : "ầ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <a> : "ẩ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <a> : "ẫ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <A> : "Ấ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <A> : "Ậ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <A> : "Ầ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <A> : "Ẩ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <A> : "Ẫ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <e> : "ế" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <e> : "ệ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <e> : "ề" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <e> : "ể" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <e> : "ễ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <E> : "Ề" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <E> : "Ể" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <E> : "Ễ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <o> : "ố" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <o> : "ộ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <o> : "ồ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <o> : "ổ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <o> : "ỗ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <O> : "Ố" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <O> : "Ộ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <O> : "Ồ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <O> : "Ổ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <O> : "Ỗ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <a> : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <a> : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <a> : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <a> : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <a> : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <A> : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <A> : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <A> : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <A> : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <A> : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <e> : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <e> : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <e> : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <e> : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <e> : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <E> : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <E> : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <E> : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <E> : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <o> : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <o> : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <o> : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <o> : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <o> : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <O> : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <O> : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <O> : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <O> : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <O> : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
-<dead_macron> <dead_diaeresis> <a> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-<dead_macron> <dead_diaeresis> <A> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <a> : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <A> : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
- <dead_abovedot> <a> : "ȧ" # LATIN SMALL LETTER A WITH DOT ABOVE
-<dead_macron> <dead_abovedot> <a> : "ǡ" # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
- <dead_abovedot> <A> : "Ȧ" # LATIN CAPITAL LETTER A WITH DOT ABOVE
-<dead_macron> <dead_abovedot> <A> : "Ǡ" # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+ <dead_abovedot> <a> : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
+<dead_macron> <dead_abovedot> <a> : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ <dead_abovedot> <A> : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
+<dead_macron> <dead_abovedot> <A> : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
XCOMM Sequences with COMBINING HOOK ABOVE / <dead_hook>
-<dead_hook> <a> : "ả" # LATIN SMALL LETTER A WITH HOOK ABOVE
-<dead_hook> <A> : "Ả" # LATIN CAPITAL LETTER A WITH HOOK ABOVE
-<dead_hook> <e> : "ẻ" # LATIN SMALL LETTER E WITH HOOK ABOVE
-<dead_hook> <E> : "Ẻ" # LATIN CAPITAL LETTER E WITH HOOK ABOVE
-<dead_hook> <i> : "ỉ" # LATIN SMALL LETTER I WITH HOOK ABOVE
-<dead_hook> <I> : "Ỉ" # LATIN CAPITAL LETTER I WITH HOOK ABOVE
-<dead_hook> <o> : "ỏ" # LATIN SMALL LETTER O WITH HOOK ABOVE
-<dead_hook> <O> : "Ỏ" # LATIN CAPITAL LETTER O WITH HOOK ABOVE
-<dead_hook> <u> : "ủ" # LATIN SMALL LETTER U WITH HOOK ABOVE
-<dead_hook> <U> : "Ủ" # LATIN CAPITAL LETTER U WITH HOOK ABOVE
-<dead_hook> <y> : "ỷ" # LATIN SMALL LETTER Y WITH HOOK ABOVE
-<dead_hook> <Y> : "Ỷ" # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+<dead_hook> <a> : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
+<dead_hook> <A> : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+<dead_hook> <e> : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
+<dead_hook> <E> : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+<dead_hook> <i> : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
+<dead_hook> <I> : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+<dead_hook> <o> : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
+<dead_hook> <O> : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+<dead_hook> <u> : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
+<dead_hook> <U> : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+<dead_hook> <y> : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
+<dead_hook> <Y> : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
XCOMM Sequences with COMBINING HORN / <dead_horn>
- <dead_horn> <o> : "ơ" # LATIN SMALL LETTER O WITH HORN
-<dead_acute> <dead_horn> <o> : "ớ" # LATIN SMALL LETTER O WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <o> : "ợ" # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <o> : "ỡ" # LATIN SMALL LETTER O WITH HORN AND TILDE
- <dead_horn> <O> : "Ơ" # LATIN CAPITAL LETTER O WITH HORN
-<dead_acute> <dead_horn> <O> : "Ớ" # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <O> : "Ợ" # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <O> : "Ờ" # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <O> : "Ở" # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <O> : "Ỡ" # LATIN CAPITAL LETTER O WITH HORN AND TILDE
- <dead_horn> <u> : "ư" # LATIN SMALL LETTER U WITH HORN
-<dead_acute> <dead_horn> <u> : "ứ" # LATIN SMALL LETTER U WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <u> : "ự" # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <u> : "ừ" # LATIN SMALL LETTER U WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <u> : "ử" # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <u> : "ữ" # LATIN SMALL LETTER U WITH HORN AND TILDE
- <dead_horn> <U> : "Ư" # LATIN CAPITAL LETTER U WITH HORN
-<dead_acute> <dead_horn> <U> : "Ứ" # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <U> : "Ự" # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <U> : "Ừ" # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <U> : "Ử" # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <U> : "Ữ" # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+ <dead_horn> <o> : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN
+<dead_acute> <dead_horn> <o> : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <o> : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <o> : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <o> : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
+ <dead_horn> <O> : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN
+<dead_acute> <dead_horn> <O> : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <O> : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <O> : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <O> : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <O> : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ <dead_horn> <u> : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN
+<dead_acute> <dead_horn> <u> : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <u> : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <u> : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <u> : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <u> : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
+ <dead_horn> <U> : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN
+<dead_acute> <dead_horn> <U> : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <U> : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <U> : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <U> : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <U> : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
-<dead_macron> <dead_ogonek> <o> : "ǭ" # LATIN SMALL LETTER O WITH OGONEK AND MACRON
-<dead_macron> <dead_ogonek> <O> : "Ǭ" # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <dead_ogonek> <O> : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
-<dead_acute> <dead_abovering> <a> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-<dead_acute> <dead_abovering> <A> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <dead_abovering> <a> : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <dead_abovering> <A> : "Ǻ" 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)
-<dead_hook> <f> : "ƒ" # LATIN SMALL LETTER F WITH HOOK
-<Multi_key> <f> <i> : "fi" # LATIN SMALL LIGATURE FI
-<Multi_key> <f> <l> : "fl" # LATIN SMALL LIGATURE FL
-<Multi_key> <i> <j> : "ij" # LATIN SMALL LIGATURE IJ
-<Multi_key> <I> <J> : "IJ" # LATIN CAPITAL LIGATURE IJ
-<dead_abovedot> <l> : "ŀ" # LATIN SMALL LETTER L WITH MIDDLE DOT
-<dead_abovedot> <L> : "Ŀ" # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-<Multi_key> <apostrophe> <space> <n> : "ʼn" # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-<dead_hook> <r> : "ɼ" # LATIN SMALL LETTER R WITH LONG LEG
-<Multi_key> <f> <s> : "ſ" # LATIN SMALL LETTER LONG S
-<dead_abovedot> <Multi_key> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-<Multi_key> <dead_abovedot> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-<dead_belowcomma> <s> : "ș" # LATIN SMALL LETTER S WITH COMMA BELOW
-<dead_belowcomma> <S> : "Ș" # LATIN CAPITAL LETTER S WITH COMMA BELOW
-<dead_belowcomma> <t> : "ț" # LATIN SMALL LETTER T WITH COMMA BELOW
-<dead_belowcomma> <T> : "Ț" # LATIN CAPITAL LETTER T WITH COMMA BELOW
+<dead_hook> <f> : "ƒ" U0192 # LATIN SMALL LETTER F WITH HOOK
+<Multi_key> <f> <i> : "fi" UFB01 # LATIN SMALL LIGATURE FI
+<Multi_key> <f> <l> : "fl" UFB02 # LATIN SMALL LIGATURE FL
+<Multi_key> <i> <j> : "ij" U0133 # LATIN SMALL LIGATURE IJ
+<Multi_key> <I> <J> : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ
+<dead_abovedot> <l> : "ŀ" U0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
+<dead_abovedot> <L> : "Ŀ" U013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+<Multi_key> <apostrophe> <space> <n> : "ʼn" U0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+<dead_hook> <r> : "ɼ" U027C # LATIN SMALL LETTER R WITH LONG LEG
+<Multi_key> <f> <s> : "ſ" U017F # LATIN SMALL LETTER LONG S
+<dead_abovedot> <Multi_key> <f> <s> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<Multi_key> <dead_abovedot> <f> <s> : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<dead_belowcomma> <s> : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <S> : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <t> : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW
+<dead_belowcomma> <T> : "Ț" 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 <sys/types.h>
- #include <sys/un.h>
- ])
+ [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])],
+ [],
+ [ #include <sys/types.h>
+ #include <sys/un.h>
+ ])
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 <limits.h>])],
- [[#include <sys/uio.h>]])],
- [[#include <limits.h>]])
+ [AC_CHECK_DECL([UIO_MAXIOV], [AC_DEFINE([IOV_MAX], [UIO_MAXIOV])],
+ [AC_DEFINE([IOV_MAX], [16], [Define if not provided by <limits.h>])],
+ [[#include <sys/uio.h>]])],
+ [[#include <limits.h>]])
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/src/man/xcb-examples.3 b/libxcb/man/xcb-examples.man
index c02fc0199..87a71f27f 100644
--- a/libxcb/src/man/xcb-examples.3
+++ b/libxcb/man/xcb-examples.man
@@ -1,4 +1,4 @@
-.TH xcb-examples 3 2011-12-11 "XCB" "XCB examples"
+.TH xcb-examples __libmansuffix__ __xorgversion__ "XCB examples"
.ad l
.SH NAME
xcb-examples \- manpage examples
@@ -52,8 +52,8 @@ 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)
+.BR xcb_connect (__libmansuffix__),
+.BR xcb_get_property (__libmansuffix__),
+.BR xcb_flush (__libmansuffix__)
.SH AUTHOR
Michael Stapelberg <michael+xcb at stapelberg dot de>
diff --git a/libxcb/src/man/xcb-requests.3 b/libxcb/man/xcb-requests.man
index 278bcff13..8d4a1dc5f 100644
--- a/libxcb/src/man/xcb-requests.3
+++ b/libxcb/man/xcb-requests.man
@@ -1,4 +1,4 @@
-.TH xcb-requests 3 2011-12-11 "XCB" "XCB examples"
+.TH xcb-requests __libmansuffix__ __xorgversion__ "XCB examples"
.ad l
.SH NAME
xcb-requests \- about request manpages
@@ -156,10 +156,10 @@ void my_example(xcb_connection *conn, xcb_window_t window) {
.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)
+.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 <michael+xcb at stapelberg dot de>
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/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.</p>
</dd>
-<dt><code>egl_glx</code></dt>
-<dd>
-
-<p>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.</p>
-</dd>
-</dl>
-
<h2>Packaging</h2>
<p>The ABI between the main library and its drivers are not stable. Nor is
@@ -262,10 +252,6 @@ is disabled by default.</p>
<code>src/egl/</code>. The sources of the <code>egl</code> state tracker can
be found at <code>src/gallium/state_trackers/egl/</code>.</p>
-<p>The suggested way to learn to write a EGL driver is to see how other drivers
-are written. <code>egl_glx</code> should be a good reference. It works in any
-environment that has GLX support, and it is simpler than most drivers.</p>
-
<h3>Lifetime of Display Resources</h3>
<p>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 @@
<h1>News</h1>
+<h2>February 3, 2014</h2>
+<p>
+<a href="relnotes/10.0.3.html">Mesa 10.0.3</a> is released.
+This is a bug-fix release.
+</p>
+
<h2>January 9, 2014</h2>
<p>
<a href="relnotes/10.0.2.html">Mesa 10.0.2</a> 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.
<ul>
<li><a href="relnotes/10.1.html">10.1 release notes</a>
+<li><a href="relnotes/10.0.3.html">10.0.3 release notes</a>
<li><a href="relnotes/10.0.2.html">10.0.2 release notes</a>
<li><a href="relnotes/10.0.1.html">10.0.1 release notes</a>
<li><a href="relnotes/10.0.html">10.0 release notes</a>
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 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 10.0.3 Release Notes / (February 3, 2014)</h1>
+
+<p>
+Mesa 10.0.3 is a bug fix release which fixes bugs found since the 10.0.2 release.
+</p>
+<p>
+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 <strong>only</strong> available if requested at context creation
+because compatibility contexts not supported.
+</p>
+
+
+<h2>MD5 checksums</h2>
+<pre>
+5f9f463ef08129f6762106b434910adb MesaLib-10.0.3.tar.bz2
+fb3997b6500e153bc32370cb3fc4ca9e MesaLib-10.0.3.tar.gz
+a07b4b6b9eb449b88a6cb5061e51c331 MesaLib-10.0.3.zip
+</pre>
+
+
+<h2>New features</h2>
+<p>None</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=72708">Bug 72708</a> - Master fails to build with older gcc due to -msse4.1</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=72926">Bug 72926</a> - [REGRESSION,swrast] Memory-related crash with anti-aliasing enabled</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73096">Bug 73096</a> - Query GL_RGBA_SIGNED_COMPONENTS_EXT missing</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73100">Bug 73100</a> - Please use AC_PATH_TOOL instead of AC_PATH_PROG for llvm-config</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73418">Bug 73418</a> - OpenCL hangs graphics on CAYMAN</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73473">Bug 73473</a> - Potential crash bug in src/gallium/auxiliary/rtasm/rtasm_execmem.c</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73915">Bug 73915</a> - sample shading + centroid broken since f5cfb4a</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=73956">Bug 73956</a> - SIGSEGV when passing GL_NONE to glReadBuffer</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=74026">Bug 74026</a> - Compiler rejects chained assignments involving array dereferences</li>
+
+</ul>
+
+<h2>Changes</h2>
+
+<p>The full set of changes can be viewed by using the following git command:</p>
+
+<pre>
+ git log mesa-10.0.2..mesa-10.0.3
+</pre>
+
+<p>Aaron Watry (2):</p>
+<ul>
+ <li>radeon: Move gfx/dma cs cleanup to r600_common_context_cleanup</li>
+ <li>st/dri: prevent leak of dri option default values</li>
+</ul>
+
+<p>Andreas Fänger (1):</p>
+<ul>
+ <li>swrast: fix delayed texel buffer allocation regression for OpenMP</li>
+</ul>
+
+<p>Anuj Phogat (3):</p>
+<ul>
+ <li>glsl: Disable ARB_texture_rectangle in shader version 100.</li>
+ <li>i965: Use sample barycentric coordinates with per sample shading</li>
+ <li>i965: Ignore 'centroid' interpolation qualifier in case of persample shading</li>
+</ul>
+
+<p>Brian Paul (3):</p>
+<ul>
+ <li>mesa: implement missing glGet(GL_RGBA_SIGNED_COMPONENTS_EXT) query</li>
+ <li>st/mesa: fix glReadBuffer(GL_NONE) segfault</li>
+ <li>draw: fix incorrect vertex size computation in LLVM drawing code</li>
+</ul>
+
+<p>Carl Worth (5):</p>
+<ul>
+ <li>Add md5sums for 10.0.2. release.</li>
+ <li>cherry-ignore: Ignore several patches not yet ready for the stable branch</li>
+ <li>Drop another couple of patches.</li>
+ <li>cherry-ignore: Ignore 4 patches at teh request of the author, (Anuj).</li>
+ <li>Update version to 10.0.3</li>
+</ul>
+
+<p>Chad Versace (1):</p>
+<ul>
+ <li>i965/gen6/blorp: Emit more flushes to workaround hangs</li>
+</ul>
+
+<p>Chris Forbes (1):</p>
+<ul>
+ <li>i965: fold offset into coord for textureOffset(gsampler2DRect)</li>
+</ul>
+
+<p>Emil Velikov (5):</p>
+<ul>
+ <li>mesa: use signed temporary variable to store _ColorDrawBufferIndexes</li>
+ <li>st/mesa: use signed temporary variable to store _ColorDrawBufferIndexes</li>
+ <li>nv50: access only the available amount of textures</li>
+ <li>nv50: access only the available amount of constbuf</li>
+ <li>gallium/rtasm: handle mmap failures appropriately</li>
+</ul>
+
+<p>Eric Anholt (2):</p>
+<ul>
+ <li>i965: Fix handling of MESA_pack_invert in blit (PBO) readpixels.</li>
+ <li>i965: Don't do the temporary-and-blit-copy for INVALIDATE_RANGE maps.</li>
+</ul>
+
+<p>Ian Romanick (2):</p>
+<ul>
+ <li>mesa: Add COMPRESSED_RGBA_S3TC_DXT1_EXT to COMPRESSED_TEXTURE_FORMATS for GLES</li>
+ <li>radeon / r200: Pass the API into _mesa_initialize_context</li>
+</ul>
+
+<p>Ilia Mirkin (2):</p>
+<ul>
+ <li>mesa: fix GL_COLOR_SUM enum for drivers without ARB_vertex_program</li>
+ <li>st/vdpau: don't return a device if the screen doesn't support NPOT</li>
+</ul>
+
+<p>José Fonseca (1):</p>
+<ul>
+ <li>mesa: Use IROUND instead of roundf.</li>
+</ul>
+
+<p>Kenneth Graunke (2):</p>
+<ul>
+ <li>glsl: Rename "expr" to "lhs_expr" in vector_extract munging code.</li>
+ <li>glsl: Fix chained assignments of vector channels.</li>
+</ul>
+
+<p>Lauri Kasanen (1):</p>
+<ul>
+ <li>mesa: Fix build to properly check for supported compiler flags</li>
+</ul>
+
+<p>Marek Olšák (2):</p>
+<ul>
+ <li>st/mesa: use sRGB formats for MSAA resolving if destination is sRGB</li>
+ <li>gallium/util: util_format_srgb should not return FORMAT_NONE for sRGB formats</li>
+</ul>
+
+<p>Matt Turner (2):</p>
+<ul>
+ <li>glcpp: Define GL_EXT_shader_integer_mix in both GL and ES.</li>
+ <li>glx: Update glxext.h to revision 24777.</li>
+</ul>
+
+<p>Michał Górny (1):</p>
+<ul>
+ <li>Use AC_PATH_TOOL instead of AC_PATH_PROG for llvm-config.</li>
+</ul>
+
+<p>Paul Berry (1):</p>
+<ul>
+ <li>i965: Ensure that all necessary state is re-emitted if we run out of aperture.</li>
+</ul>
+
+<p>Paul Seidler (1):</p>
+<ul>
+ <li>build: move ARCH_LIBS definition outside of ASM definition</li>
+</ul>
+
+<p>Thomas Sondergaard (4):</p>
+<ul>
+ <li>mesa: Preliminary support for MSVC_VERSION=12.0</li>
+ <li>mesa: Fix compile error with MSVC 2013</li>
+ <li>mesa: Work around internal compiler error</li>
+ <li>mesa: Namespace qualify fma to override ambiguity with fma from math.h</li>
+</ul>
+
+<p>Tom Stellard (1):</p>
+<ul>
+ <li>r600g/compute: Emit DEALLOC_STATE on cayman after dispatching a compute shader.</li>
+</ul>
+
+</div>
+</body>
+</html>
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.
<li>GL_ARB_draw_indirect on i965.</li>
<li>GL_ARB_clear_buffer_object</li>
<li>GL_ARB_viewport_array on i965.</li>
+<li>GL_ARB_map_buffer_alignment on all drivers that did not previously support
+it.</li>
<li>GL_AMD_shader_trinary_minmax.</li>
+<li>GL_EXT_framebuffer_blit on r200 and radeon.</li>
<li>Reduced memory usage for display lists.</li>
+<li>OpenGL 3.3 support on nv50, nvc0, r600 and radeonsi</li>
</ul>
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 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 10.2 Release Notes / TBD</h1>
+
+<p>
+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.
+</p>
+<p>
+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 <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>MD5 checksums</h2>
+<pre>
+TBD.
+</pre>
+
+
+<h2>New features</h2>
+
+<p>
+Note: some of the new features are only available with certain drivers.
+</p>
+
+<ul>
+</ul>
+
+
+<h2>Bug fixes</h2>
+
+TBD.
+
+<h2>Changes</h2>
+
+<ul>
+</ul>
+
+</div>
+</body>
+</html>
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 <limits.h>
#include <errno.h>
#include <process.h> // MSVCRT
+#include <stdlib.h>
/*
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;
@@ -510,6 +516,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.
*/
bool has_interpolation() const;
@@ -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().
+ */
+ }
}
@@ -868,6 +920,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
* compiled. For geometry shaders using {ARB,EXT}_geometry_shader4,
@@ -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 <stdarg.h>
#include <stdio.h>
#include <string.h>
+#ifdef HAVE_LIBUDEV
+#include <assert.h>
+#include <dlfcn.h>
+#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 <libudev.h>
+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 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_compute_shader" number="122">
+ <enum name="COMPUTE_SHADER" value="0x91B9"/>
+ <enum name="MAX_COMPUTE_UNIFORM_BLOCKS" value="0x91BB"/>
+ <enum name="MAX_COMPUTE_TEXTURE_IMAGE_UNITS" value="0x91BC"/>
+ <enum name="MAX_COMPUTE_IMAGE_UNIFORMS" value="0x91BD"/>
+ <enum name="MAX_COMPUTE_SHARED_MEMORY_SIZE" value="0x8262"/>
+ <enum name="MAX_COMPUTE_UNIFORM_COMPONENTS" value="0x8263"/>
+ <enum name="MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS" value="0x8264"/>
+ <enum name="MAX_COMPUTE_ATOMIC_COUNTERS" value="0x8265"/>
+ <enum name="MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS" value="0x8266"/>
+ <enum name="MAX_COMPUTE_WORK_GROUP_INVOCATIONS" value="0x90EB"/>
+ <enum name="MAX_COMPUTE_WORK_GROUP_COUNT" value="0x91BE"/>
+ <enum name="MAX_COMPUTE_WORK_GROUP_SIZE" value="0x91BF"/>
+ <enum name="COMPUTE_WORK_GROUP_SIZE" value="0x8267"/>
+ <enum name="UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER" value="0x90EC"/>
+ <enum name="ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER" value="0x90ED"/>
+ <enum name="DISPATCH_INDIRECT_BUFFER" value="0x90EE"/>
+ <enum name="DISPATCH_INDIRECT_BUFFER_BINDING" value="0x90EF"/>
+ <enum name="COMPUTE_SHADER_BIT" value="0x00000020"/>
+
+ <function name="DispatchCompute" offset="assign">
+ <param name="num_groups_x" type="GLuint"/>
+ <param name="num_groups_y" type="GLuint"/>
+ <param name="num_groups_z" type="GLuint"/>
+ </function>
+
+ <function name="DispatchComputeIndirect" offset="assign">
+ <param name="indirect" type="GLintptr"/>
+ </function>
+</category>
+
+</OpenGLAPI>
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 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_ARB_gpu_shader5" number="88">
+ <enum name="GEOMETRY_SHADER_INVOCATIONS" value="0x887F"/>
+ <enum name="MAX_GEOMETRY_SHADER_INVOCATIONS" value="0x8E5A"/>
+ <enum name="MIN_FRAGMENT_INTERPOLATION_OFFSET" value="0x8E5B"/>
+ <enum name="MAX_FRAGMENT_INTERPOLATION_OFFSET" value="0x8E5C"/>
+ <enum name="FRAGMENT_INTERPOLATION_OFFSET_BITS" value="0x8E5D"/>
+ <enum name="MAX_VERTEX_STREAMS" value="0x8E71"/>
+</category>
+
+</OpenGLAPI>
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 @@
<xi:include href="ARB_draw_indirect.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+<xi:include href="ARB_gpu_shader5.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
<category name="GL_ARB_transform_feedback3" number="94">
<enum name="MAX_TRANSFORM_FEEDBACK_BUFFERS" value="0x8E70"/>
<enum name="MAX_VERTEX_STREAMS" value="0x8E71"/>
@@ -8466,7 +8468,9 @@
<xi:include href="ARB_clear_buffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
-<!-- ARB extensions #122...#123 -->
+<xi:include href="ARB_compute_shader.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
+<!-- ARB extension #123 -->
<xi:include href="ARB_texture_view.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
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, &copypix->ArrayObj);
- _mesa_BindVertexArray(copypix->ArrayObj);
+ _mesa_GenVertexArrays(1, &copypix->VAO);
+ _mesa_BindVertexArray(copypix->VAO);
/* create vertex array buffer */
_mesa_GenBuffers(1, &copypix->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 <stdbool.h>
+
+#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 <mask> 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 <mask> 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 <mask> 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 <target> 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 <mask> 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 <mask> 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 <mask> 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,
@@ -203,15 +183,6 @@ _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,
GLsizei width, GLsizei height);
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 <target> 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,
@@ -103,11 +100,6 @@ _mesa_clear_texture_image(struct gl_context *ctx,
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, &param);
+ ctx->Driver.TexParameter(ctx, texObj, pname, &param);
}
}
@@ -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
@@ -279,6 +279,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.
*/
struct gl_program *
@@ -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
@@ -84,6 +84,11 @@ _mesa_init_geometry_program(struct gl_context *ctx,
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);
extern void
@@ -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 <rob.stradling@comodo.com>]
+
+ *) 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 <agl@chromium.org> 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 <rob.stradling@comodo.com>]
+
+ *) 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 <thoger@redhat.com>]
+
+ 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 <agl@chromium.org> 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 <inestlerode@us.ibm.com> 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 <inestlerode@us.ibm.com> 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 <openssl/bio.h>
#include <openssl/crypto.h>
+#include <openssl/rand.h>
#include <openssl/lhash.h>
#include <openssl/conf.h>
#include <openssl/x509.h>
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 <appro\@openssl.org>"
.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 <appro\@openssl.org>"
___
$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 <openssl/evp.h>
#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 <openssl/pem.h>
#include <openssl/conf.h>
+#include <openssl/x509.h>
#include <openssl/x509v3.h>
#ifndef OPENSSL_NO_ENGINE
#include <openssl/engine.h>
#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<openssl> B<rsa>
[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<RSAPublicKey> format is used instead.
+
=item B<-engine id>
specifying an engine (by its unique B<id> string) will cause B<rsa>
@@ -139,6 +145,11 @@ The PEM public key format uses the header and footer lines:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
+The PEM B<RSAPublicKey> format uses the header and footer lines:
+
+ -----BEGIN RSA PUBLIC KEY-----
+ -----END RSA PUBLIC KEY-----
+
The B<NET> 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<RSAPublicKey> 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<sig> of size
B<siglen> is a valid ECDSA signature of the hash value
-value B<dgst> of size B<dgstlen> using the public key B<eckey>.
+B<dgst> of size B<dgstlen> using the public key B<eckey>.
The parameter B<type> is ignored.
ECDSA_do_sign() is wrapper function for ECDSA_do_sign_ex with B<kinv>
@@ -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<cacert>. 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<ret> to find out the reason.
+=item 1
+
+The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
+established.
+
=item E<lt>0
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<ret> to find out the reason.
+=item 1
+
+The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
+established.
+
=item E<lt>0
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<ret> to find out the reason.
+=item 1
+
+The TLS/SSL handshake was successfully completed, a TLS/SSL connection has been
+established.
+
=item E<lt>0
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<SSL_get_error(3)|SSL_get_error(3)> 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' && i<sizeof(s->s3->client_random);i++) ;
+ for (i=0;p[i]=='\0' && i<sizeof(s->s3->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 <dbus/dbus.h>
-
-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 <dbus/dbus.h>
#include <sys/select.h>
-#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 <daniel@fooishbar.org>
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <dbus/dbus.h>
-#include <string.h>
-
-#include <X11/X.h>
-
-#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 <string.h>
#include <sys/select.h>
+#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 @@
-<!DOCTYPE busconfig PUBLIC
- "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
- <policy context="default">
- <allow own="org.x.config.display0"/>
- <allow send_destination="org.x.config.display0"/>
- <allow send_interface="org.x.config.display0"/>
- <allow own="org.x.config.display1"/>
- <allow send_destination="org.x.config.display1"/>
- <allow send_interface="org.x.config.display1"/>
- </policy>
-</busconfig>
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 <airlied@redhat.com>
- */
-
-/* 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/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 <scrnintstr.h>
-#include <xf86.h>
-#include <xf86str.h>
#include <pixmapstr.h>
#include <gcstruct.h>
#include <picturestr.h>
#include <fb.h>
#include <fbpict.h>
-#include <xf86xv.h>
+
/*
* 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(&region,
- 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(&region)->x1, RegionExtents(&region)->y1,
- RegionExtents(&region)->x2, RegionExtents(&region)->y2,
- RegionNumRects(&region));
-
- if (dst->pCompositeClip->data &&
- (!pixman_region_intersect(&region, &region, dst->pCompositeClip) ||
- region_is_empty(&region))) {
- DEBUGF("%s: zero-intersection between rectangles and clip\n",
- __FUNCTION__);
- pixman_region_fini(&region);
- return;
- }
-
- DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n",
- __FUNCTION__,
- RegionExtents(&region)->x1, RegionExtents(&region)->y1,
- RegionExtents(&region)->x2, RegionExtents(&region)->y2,
- RegionNumRects(&region));
-
- glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y);
- pixman_region_translate(&region, dst_x, dst_y);
-
- DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n",
- __FUNCTION__, dst_x, dst_y,
- RegionExtents(&region)->x1, RegionExtents(&region)->y1,
- RegionExtents(&region)->x2, RegionExtents(&region)->y2);
-
-
- boxes = pixman_region_rectangles(&region, &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,
- &region,
- 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, &region);
- DamageRegionProcessPending(&pixmap->drawable);
-
- if (need_free_region)
- pixman_region_fini(&region);
- 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(&region,
+ 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(&region)->x1, RegionExtents(&region)->y1,
+ RegionExtents(&region)->x2, RegionExtents(&region)->y2,
+ RegionNumRects(&region));
+
+ if (dst->pCompositeClip->data &&
+ (!pixman_region_intersect(&region, &region, dst->pCompositeClip) ||
+ RegionNil(&region))) {
+ DEBUGF("%s: zero-intersection between rectangles and clip\n",
+ __FUNCTION__);
+ pixman_region_fini(&region);
+ return;
+ }
+
+ DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n",
+ __FUNCTION__,
+ RegionExtents(&region)->x1, RegionExtents(&region)->y1,
+ RegionExtents(&region)->x2, RegionExtents(&region)->y2,
+ RegionNumRects(&region));
+
+ glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y);
+ pixman_region_translate(&region, dst_x, dst_y);
+
+ DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n",
+ __FUNCTION__, dst_x, dst_y,
+ RegionExtents(&region)->x1, RegionExtents(&region)->y1,
+ RegionExtents(&region)->x2, RegionExtents(&region)->y2);
+
+ boxes = pixman_region_rectangles(&region, &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,
+ &region, 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, &region);
+ DamageRegionProcessPending(&pixmap->drawable);
+
+ if (need_free_region)
+ pixman_region_fini(&region);
+ 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(&region, box, nbox);
- extent = RegionExtents(&region);
-
- 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(&region, dst_x_off, dst_y_off);
- if (!force_clip)
- clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv,
- &region, &n_dst_region, 0,
- reverse, upsidedown);
- else
- clipped_dst_regions = glamor_compute_clipped_regions_ext(dst_pixmap_priv,
- &region, &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(&region);
- } 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(&region, box, nbox);
+ extent = RegionExtents(&region);
+
+ 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(&region, dst_x_off, dst_y_off);
+ if (!force_clip)
+ clipped_dst_regions =
+ glamor_compute_clipped_regions(dst_pixmap_priv, &region,
+ &n_dst_region, 0, reverse,
+ upsidedown);
+ else
+ clipped_dst_regions =
+ glamor_compute_clipped_regions_ext(dst_pixmap_priv, &region,
+ &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(&region);
+ }
+ 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 <xorg-server.h>
@@ -60,50 +58,45 @@
#include <EGL/eglext.h>
#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 <zhigang.gong@gmail.com>
*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include "dix-config.h"
#include <xorg-server.h>
#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(&region, box, nbox);
- clipped_regions = glamor_compute_clipped_regions(pixmap_priv, &region, &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(&region);
- } 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(&region, box, nbox);
+ clipped_regions =
+ glamor_compute_clipped_regions(pixmap_priv, &region, &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(&region);
+ }
+ 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<<idx);
- idx = __fls(~bits);
- bits &= ~((1LL << idx) - 1);
- idx--;
- }
- }
- return -1;
+ int idx = 0;
+ unsigned int bits_mask;
+
+ bits_mask = ((1LL << bits_cnt) - 1);
+
+ if (_X_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 << 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(&current_region);
-
- extents = pixman_region_extents(&current_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(&current_region, extents);
- pixman_region_union(&list_region, &list_region, &current_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, &current_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(&current_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(&current_region);
+
+ extents = pixman_region_extents(&current_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(&current_region, extents);
+ pixman_region_union(&list_region, &list_region, &current_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, &current_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(&current_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, &copy_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, &copy_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, &copy_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, &copy_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(&region, &box, 1);
- if (!force_clip)
- clipped_regions = glamor_compute_clipped_regions(pixmap_priv, &region, &n_region, 0, 0, 0);
- else
- clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, &region, &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(&region);
- free(sub_bits);
- assert(0);
- return FALSE;
- }
- }
- RegionDestroy(clipped_regions[i].region);
- }
- free(sub_bits);
- free(clipped_regions);
- RegionUninit(&region);
- 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(&region, &box, 1);
+ if (!force_clip)
+ clipped_regions =
+ glamor_compute_clipped_regions(pixmap_priv, &region, &n_region,
+ 0, 0, 0);
+ else
+ clipped_regions =
+ glamor_compute_clipped_regions_ext(pixmap_priv, &region,
+ &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(&region);
+ free(sub_bits);
+ assert(0);
+ return FALSE;
+ }
+ }
+ RegionDestroy(clipped_regions[i].region);
+ }
+ free(sub_bits);
+ free(clipped_regions);
+ RegionUninit(&region);
+ 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(&region, &box, 1);
-
- if (!force_clip)
- clipped_regions = glamor_compute_clipped_regions(pixmap_priv, &region, &n_region, 0, 0, 0);
- else
- clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, &region, &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(&region);
- 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(&region);
- 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(&region, &box, 1);
+
+ if (!force_clip)
+ clipped_regions =
+ glamor_compute_clipped_regions(pixmap_priv, &region, &n_region,
+ 0, 0, 0);
+ else
+ clipped_regions =
+ glamor_compute_clipped_regions_ext(pixmap_priv, &region,
+ &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(&region);
+ 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(&region);
+ 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 <xorg-server.h>
#ifndef DEBUG
#define NDEBUG
#endif
#include "glamor.h"
-#include "compat-api.h"
-
-#define GL_GLEXT_PROTOTYPES
#ifdef GLAMOR_GLES2
#include <GLES2/gl2.h>
@@ -61,125 +54,110 @@
#include "glamor_debug.h"
#include <list.h>
-/* 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(&region,
- 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(&region);
- DEBUGF("first clipped when compositing.\n");
- DEBUGRegionPrint(&region);
- extent = RegionExtents(&region);
- 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,
- &region, 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,
- &region,
- x_source, y_source,
- x_mask, y_mask,
- x_dest, y_dest);
-
- REGION_UNINIT(dest->pDrawable->pScreen, &region);
-
- 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(&region,
+ 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(&region);
+ DEBUGF("first clipped when compositing.\n");
+ DEBUGRegionPrint(&region);
+ extent = RegionExtents(&region);
+ 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,
+ &region, 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,
+ &region,
+ x_source, y_source,
+ x_mask, y_mask, x_dest, y_dest);
+
+ REGION_UNINIT(dest->pDrawable->pScreen, &region);
+
+ 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(&region, &box, 1);
- clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv,
- &region, &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(&region);
- }
- 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(&region, &box, 1);
+ clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv,
+ &region,
+ &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(&region);
+ }
+ 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(&region,
- 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(&region);
- nbox = REGION_NUM_RECTS(&region);
- 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(&region,
+ 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(&region);
+ nbox = REGION_NUM_RECTS(&region);
+ 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, &region);
- }
-
- 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, &region);
+ }
+
+ 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 <X11/extensions/Xv.h>
#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 <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-#else
-#include <GL/gl.h>
-#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/glamor/compiler.h b/xorg-server/include/dbus-core.h
index fa2895976..b2d6d1b9e 100644
--- a/xorg-server/glamor/compiler.h
+++ b/xorg-server/include/dbus-core.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 Intel Corporation
+ * 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"),
@@ -16,44 +16,41 @@
* 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 <chris@chris-wilson.co.uk>
- *
- * Copied from sna
+ * LIABILITY, WHETHER IN AN ACTION 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 <hdegoede@redhat.com>
*/
-#ifndef _GLAMOR_COMPILER_H_
-#define _GLAMOR_COMPILER_H_
+#ifndef DBUS_CORE_H
+#define DBUS_CORE_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 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);
-#ifdef HAVE_VALGRIND
-#define VG(x) x
#else
-#define VG(x)
-#endif
-#define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s)))
+#define dbus_core_init()
+#define dbus_core_fini()
-#define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)]))
+#endif
-#endif /* _SNA_COMPILER_H_ */
+#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
@@ -100,6 +100,10 @@ static unsigned long pseudoramiXGeneration = 0;
static void
PseudoramiXTrace(const char *format, ...)
+ _X_ATTRIBUTE_PRINTF(1, 2);
+
+static void
+PseudoramiXTrace(const char *format, ...)
{
va_list ap;
@@ -110,6 +114,10 @@ PseudoramiXTrace(const char *format, ...)
static void
PseudoramiXDebug(const char *format, ...)
+ _X_ATTRIBUTE_PRINTF(1, 2);
+
+static void
+PseudoramiXDebug(const char *format, ...)
{
va_list ap;
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 <I01> = <XFER>;
<I02> = 130;
- alias <I03> = <NFER>;
<I04> = 132;
alias <I05> = <AE13>;
<I06> = 134;
@@ -287,7 +285,9 @@ xkb_keycodes "basic" {
<I7A> = 250;
<I7B> = 251;
<I7C> = 252;
+ alias <IR7C> = <I7C>;
<I7D> = 253;
+ alias <IR7D> = <I7D>;
<I7E> = 254;
<I7F> = 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 <ash@kambanaria.org>, 2002, 2005, 2006, 2007, 2008.
# Alexander Shopov <ash@kambanaria.org>, 2009, 2010, 2011, 2012, 2013.
+# Alexander Shopov <ash@kambanaria.org>, 2014.
# Damyan Ivanov <dam+gnome@ktnx.net>, 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 <ash@kambanaria.org>\n"
-"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\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 &lt;\\|&gt; 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 "&lt;Less/Greater&gt;"
msgstr "„&lt;&gt;“"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "„&lt;&gt;“ избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "„&lt;&gt;“ на 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+&lt;key&gt;) handled in a server"
msgstr "Специалните комбинации (Ctrl+Alt+&lt;клавиш&gt;) се обработват от сървъра"
-#: ../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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "„&lt;&gt;“ избира петото ниво и го заключва заедно с друг клавиш за пето ниво"
-#: ../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 <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Josep Ma. Ferrer <txemaq@gmail.com>, 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 <txemaq@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\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 &lt;\\|&gt; key)"
msgstr "Txec (amb la tecla &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Més petit/Més gran&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "3r nivell de &lt;Més petit/Més gran&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Tecles especials (Ctrl+Alt+&lt;tecla&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h: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 <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\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 &lt;\\|&gt; key)"
msgstr "Tjekkisk (med &lt;\\|&gt;-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 "&lt;Less/Greater&gt;"
msgstr "&lt;Mindre end/Større end&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "Tredje niveau for &lt;Mindre end/Større end&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Specialtaster (Ctrl+Alt+&lt;key&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h: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 &#x200C;, &#8204; or &zwnj;. 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 <Christian.Kirbach@googlemail.com>, 2009.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2009, 2010, 2011, 2012, 2013.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 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 <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Tschechisch (mit &lt;\\|&gt;-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 "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner als/größer als&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "Dritte Ebene von &lt;Kleiner als/größer als&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Spezialtasten für Server (Strg+Alt+&lt;Taste&gt;)"
-#: ../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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h: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 <fefcas@gmail.com>, 2008, 2009, 2010, 2011, 2012, 2013.
+# Felipe Castro <fefcas@gmail.com>, 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 <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Ĉeĥa (kun klavo &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Malpli-signo/Pli-signo&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Malpli-signo/Pli-signo&gt; elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "3-a nivelo de &lt;Malpli/Pli-signo&gt;"
# 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+&lt;key&gt;) handled in a server"
msgstr "Specialaj klavoj (Ctrl+Alt+&lt;klavo&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Malpli-signo/Pli-signo&gt; elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo"
-#: ../rules/base.xml.in.h: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 <serrador@cvs.gnome.org>, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
+# Facundo Dario Illanes <fdillanes@gmail.com>, 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 <aloriel@gmail.com>\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 <fdillanes@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\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 "&lt;Less/Greater&gt;"
-msgstr "&lt;Menor que/Mayor que&gt;"
+msgid "Generic 101-key PC"
+msgstr "PC genérico 101 teclas"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
-msgstr "&lt;Menor que/Mayor que&gt; (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 "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Menor que/Mayor que&gt; 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Menor que/Mayor que&gt; 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Menor que/Mayor que&gt; 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 &lt;\\|&gt; 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)"
+msgid "Sanskrit (KaGaPa phonetic)"
+msgstr "Sánscrito (fonético KaGaPa)"
-#: ../rules/base.xml.in.h:324
-msgid "Georgian (ergonomic)"
-msgstr "Georgiano (ergonómico)"
-
-#: ../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"
+msgid "Burmese"
+msgstr "Burmese"
-#: ../rules/base.xml.in.h:370
-msgid "Hexadecimal"
-msgstr "Hexadecimal"
+#: ../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 &lt;\\|&gt; 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"
+msgid "German (legacy)"
+msgstr "Alemán (arcaico)"
-#: ../rules/base.xml.in.h:512
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
-
-#: ../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+&lt;key&gt;) 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 ../rules/base.extras.xml.in.h:49
-msgid "ru"
-msgstr "ru"
+#: ../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 "sd"
-msgstr "sd"
+msgid "Any Win key (while pressed)"
+msgstr "Cualquier tecla Windows (al pulsarla)"
#: ../rules/base.xml.in.h:891
-msgid "si"
-msgstr "si"
+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 "sk"
-msgstr "sk"
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl derecho (mientras está pulsado)"
#: ../rules/base.xml.in.h:893
-msgid "sl"
-msgstr "sl"
+msgid "Right Alt"
+msgstr "Alt derecho"
#: ../rules/base.xml.in.h:894
-msgid "sq"
-msgstr "sq"
+msgid "Left Alt"
+msgstr "Alt izquierdo"
-#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:51
-msgid "sr"
-msgstr "sr"
+#: ../rules/base.xml.in.h:895
+msgid "Caps Lock"
+msgstr "Bloqueo de mayúsculas"
#: ../rules/base.xml.in.h:896
-msgid "sv"
-msgstr "sv"
+msgid "Shift+Caps Lock"
+msgstr "Mayús+Bloq Mayús"
#: ../rules/base.xml.in.h:897
-msgid "sw"
-msgstr "sw"
+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 "syc"
-msgstr "syc"
+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 "ta"
-msgstr "ta"
+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 "te"
-msgstr "te"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Bloq Mayús"
#: ../rules/base.xml.in.h:901
-msgid "tg"
-msgstr "tg"
+msgid "Both Shift keys together"
+msgstr "Ambas teclas Mayús juntas"
#: ../rules/base.xml.in.h:902
-msgid "th"
-msgstr "th"
+msgid "Both Alt keys together"
+msgstr "Ambas teclas Alt juntas"
#: ../rules/base.xml.in.h:903
-msgid "tk"
-msgstr "tk"
+msgid "Both Ctrl keys together"
+msgstr "Ambas teclas Ctrl juntas"
#: ../rules/base.xml.in.h:904
-msgid "tn"
-msgstr "tn"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Mayús"
#: ../rules/base.xml.in.h:905
-msgid "tr"
-msgstr "tr"
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl izquierdo + Mayús izquierdo"
#: ../rules/base.xml.in.h:906
-msgid "uk"
-msgstr "uk"
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl derecho + Mayús derecho"
#: ../rules/base.xml.in.h:907
-msgid "ur"
-msgstr "ur"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:908
-msgid "uz"
-msgstr "uz"
+msgid "Alt+Shift"
+msgstr "Alt+Mayús"
#: ../rules/base.xml.in.h:909
-msgid "vi"
-msgstr "vi"
+msgid "Left Alt+Left Shift"
+msgstr "Alt izquierdo + Mayús izquierdo"
#: ../rules/base.xml.in.h:910
-msgid "wo"
-msgstr "wo"
+msgid "Alt+Space"
+msgstr "Alt+Espacio"
#: ../rules/base.xml.in.h:911
-msgid "xsy"
-msgstr "xsy"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:912
-msgid "yo"
-msgstr "yo"
+msgid "Left Win"
+msgstr "Win izquierdo"
#: ../rules/base.xml.in.h:913
-msgid "zh"
-msgstr "zh"
+msgid "Right Win"
+msgstr "Windows derecho"
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL Keyboard Symbols"
-msgstr "Símbolos de teclado APL"
+#: ../rules/base.xml.in.h:914
+msgid "Left Shift"
+msgstr "Mayús izquierdo"
-#: ../rules/base.extras.xml.in.h:3
-msgid "Armenian (OLPC phonetic)"
-msgstr "Armenio (OLPC fonético)"
+#: ../rules/base.xml.in.h:915
+msgid "Right Shift"
+msgstr "Mayús derecho"
-#: ../rules/base.extras.xml.in.h:4
-msgid "Atsina"
-msgstr "Atsina"
+#: ../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 "&lt;Less/Greater&gt;"
+msgstr "&lt;Menor que/Mayor que&gt;"
+
+#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "&lt;Menor que/Mayor que&gt; 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 &lt;Less/Greater&gt;"
+msgstr "3er nivel de &lt;Menor que/Mayor que&gt;"
+
+#: ../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+&lt;key&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Menor que/Mayor que&gt; 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: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: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: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: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: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: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: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: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: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: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: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: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: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:1045
+msgid "Japanese keyboard options"
+msgstr "Opciones de teclado japonés"
+
+#: ../rules/base.xml.in.h:1046
+msgid "Kana Lock key is locking"
+msgstr "La tecla Bloq Kana está bloqueando"
+
+#: ../rules/base.xml.in.h:1047
+msgid "NICOLA-F style Backspace"
+msgstr "Retroceso estilo NICOLA-F"
+
+#: ../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:1049
+msgid "Adding Esperanto supersigned letters"
+msgstr "Añadir las tildes del esperanto"
+
+#: ../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:1051
+msgid "To the corresponding key in a Dvorak layout"
+msgstr "A la tecla correspondiente en un teclado Dvorak."
+
+#: ../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: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:1054
+msgid "Sun Key compatibility"
+msgstr "Compatibilidad con tecla Sun"
+
+#: ../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:1056
+msgid "Ctrl + Alt + Backspace"
+msgstr "Control + Alt + Retroceso"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "apl"
+msgstr "apl"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "APL keyboard symbols"
+msgstr "Símbolos de teclado APL"
#: ../rules/base.extras.xml.in.h:5
-msgid "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 "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+#~ msgstr "&lt;Menor que/Mayor que&gt; 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+#~ msgstr "&lt;Menor que/Mayor que&gt; 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 <jean-philippe.guerard@corbeaunoir.org>\n"
"Language-Team: French <traduc@traduc.org>\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 &lt;\\|&gt; key)"
msgstr "Tchèque (avec la touche &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Plus petit/Plus grand&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "Niveau 3 de &lt;Plus petit/Plus grand&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Les combinaisons spéciales (Ctrl+Alt+&lt;touche&gt;) sont traitées par le serveur X"
-#: ../rules/base.xml.in.h: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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h: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 <timar@fsf.hu>, 2004.
# Szilveszter Farkas <Szilveszter.Farkas@gmail.com>, 2006.
-# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Gabor Kelemen <kelemeng@gnome.hu>, 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 <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Cseh (az &lt;\\|&gt; 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 "&lt;Less/Greater&gt;"
msgstr "&lt;Kisebb/nagyobb&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kisebb/nagyobb&gt; 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 &lt;Less/Greater&gt;"
msgstr "3. szintű &lt;kisebb/nagyobb&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "A speciális billentyűket (Ctrl+Alt+&lt;billentyű&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kisebb/nagyobb&gt; 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 <jadied@gmail.com>, 2008.
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010.
-# Andika Triwidada <andika@gmail.com>, 2012.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010, 2014.
+# Andika Triwidada <andika@gmail.com>, 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 <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\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 "&lt;Less/Greater&gt;"
-msgstr "&lt;Lebih Kecil/Lebih Besar&gt;"
+msgid "Generic 101-key PC"
+msgstr "PC 101-tombol Generik "
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
-msgstr "&lt;Lebih Kecil/Lebih Besar&gt; 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Lebih Kecil/Lebih Besar&gt; 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 &lt;\\|&gt; key)"
-msgstr "Ceko (dengan tombol &lt;\\|&gt;)"
+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)"
+msgid "English (Workman, international with dead keys)"
+msgstr "Inggris (Workman,internasional dengan tombol mati)"
-#: ../rules/base.xml.in.h:211
-msgid "English (Colemak)"
-msgstr "Inggris (Colemak)"
-
-#: ../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 &lt;\\|&gt; key)"
+msgstr "Ceko (dengan tombol &lt;\\|&gt;)"
#: ../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"
-
-#: ../rules/base.xml.in.h:548
-msgid "Microsoft Internet Keyboard"
-msgstr "Papan Ketik Internet Microsoft"
+msgid "Icelandic (Dvorak)"
+msgstr "Islandia (Dvorak)"
-#: ../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"
+msgid "Norwegian (Colemak)"
+msgstr "Norwegia (Colemak)"
-#: ../rules/base.xml.in.h:643
-msgid "Right Ctrl+Right Shift"
-msgstr "Ctrl Kanan+Shift Kanan"
-
-#: ../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+&lt;key&gt;) handled in a server"
-msgstr "Tombol spesial (Ctrl+Alt+&lt;key&gt;) 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 "&lt;Less/Greater&gt;"
+msgstr "&lt;Lebih Kecil/Lebih Besar&gt;"
+
+#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
+msgstr "&lt;Lebih Kecil/Lebih Besar&gt; 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"
-#. Keyboard indicator for Sindhi layouts
#: ../rules/base.xml.in.h:965
-msgid "sd"
-msgstr "sd"
+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"
-#. Keyboard indicator for Sinhala layouts
#: ../rules/base.xml.in.h:967
-msgid "si"
-msgstr "si"
+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"
-#. Keyboard indicator for Slovak layouts
#: ../rules/base.xml.in.h:969
-msgid "sk"
-msgstr "sk"
+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"
-#. Keyboard indicator for Slovenian layouts
#: ../rules/base.xml.in.h:971
-msgid "sl"
-msgstr "sl"
+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"
-#. Keyboard indicator for Albanian layouts
#: ../rules/base.xml.in.h:973
-msgid "sq"
-msgstr "sq"
+msgid "Swap ESC and Caps Lock"
+msgstr "Tukar ESC dan Caps Lock"
-#. 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: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"
-#. Keyboard indicator for Swedish layouts
#: ../rules/base.xml.in.h:977
-msgid "sv"
-msgstr "sv"
+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)"
-#. Keyboard indicator for Swahili layouts
#: ../rules/base.xml.in.h:979
-msgid "sw"
-msgstr "sw"
+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"
-#. Keyboard indicator for Syriac layouts
#: ../rules/base.xml.in.h:981
-msgid "syc"
-msgstr "syc"
+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"
-#. Keyboard indicator for Tamil layouts
#: ../rules/base.xml.in.h:983
-msgid "ta"
-msgstr "ta"
+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)"
-#. Keyboard indicator for Telugu layouts
#: ../rules/base.xml.in.h:985
-msgid "te"
-msgstr "te"
+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"
-#. Keyboard indicator for Tajik layouts
#: ../rules/base.xml.in.h:987
-msgid "tg"
-msgstr "tg"
+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"
-#. Keyboard indicator for Thai layouts
#: ../rules/base.xml.in.h:989
-msgid "th"
-msgstr "th"
+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"
-#. Keyboard indicator for Turkmen layouts
#: ../rules/base.xml.in.h:991
-msgid "tk"
-msgstr "tk"
+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"
-#. Keyboard indicator for Tswana layouts
#: ../rules/base.xml.in.h:993
-msgid "tn"
-msgstr "tn"
+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"
-#. Keyboard indicator for Turkish layouts
#: ../rules/base.xml.in.h:995
-msgid "tr"
-msgstr "tr"
+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"
-#. Keyboard indicator for Ukranian layouts
#: ../rules/base.xml.in.h:997
-msgid "uk"
-msgstr "uk"
+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"
-#. Keyboard indicator for Urdu layouts
#: ../rules/base.xml.in.h:999
-msgid "ur"
-msgstr "ur"
+msgid "3rd level of &lt;Less/Greater&gt;"
+msgstr "Tingkat 3 dari &lt;Lebih Kecil/Lebih Besar&gt;"
+
+#: ../rules/base.xml.in.h:1000
+msgid "Pause"
+msgstr "Pause"
-#. Keyboard indicator for Uzbek layouts
#: ../rules/base.xml.in.h:1001
-msgid "uz"
-msgstr "uz"
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:1002
+msgid "Miscellaneous compatibility options"
+msgstr "Pilihan kompabilitas lain-lain"
-#. Keyboard indicator for Vietnamese layouts
#: ../rules/base.xml.in.h:1003
-msgid "vi"
-msgstr "vi"
+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)"
-#. Keyboard indicator for Wolof layouts
#: ../rules/base.xml.in.h:1005
-msgid "wo"
-msgstr "wo"
+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"
-#. Keyboard indicator for Saisiyat layouts
#: ../rules/base.xml.in.h:1007
-msgid "xsy"
-msgstr "xsy"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Tombol spesial (Ctrl+Alt+&lt;key&gt;) 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)"
-#. Keyboard indicator for Yoruba layouts
#: ../rules/base.xml.in.h:1009
-msgid "yo"
-msgstr "yo"
+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"
-#. Keyboard indicator for Taiwanese layouts
#: ../rules/base.xml.in.h:1011
-msgid "zh"
-msgstr "zh"
+msgid "Both Shift keys together toggle Caps Lock"
+msgstr "Kedua tombol Shift bersamaan menjungkitkan Caps Lock"
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL Keyboard Symbols"
-msgstr "Simbol Papan Tik APL"
+#: ../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.extras.xml.in.h:3
-msgid "Armenian (OLPC phonetic)"
-msgstr "Armenia (fonetik OLPC)"
+#: ../rules/base.xml.in.h:1013
+msgid "Both Shift keys together toggle ShiftLock"
+msgstr "Kedua tombol Shift bersamaan menjungkitkan ShiftLock"
-#: ../rules/base.extras.xml.in.h:4
-msgid "Atsina"
-msgstr "Atsina"
+#: ../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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Lebih Kecil/Lebih Besar&gt; 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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../rules/base.xml.in.h:1034
+msgid "Non-breakable space character at fourth level"
+msgstr "Karakter spasi yang tidak pecah pada level 4"
+
+#: ../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"
+
+#: ../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)"
+
+#: ../rules/base.xml.in.h:1037
+msgid "Zero-width non-joiner character at second level"
+msgstr "Karakter non-penggabung lebar-nol pada level kedua"
+
+#: ../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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../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"
+
+#: ../rules/base.xml.in.h:1045
+msgid "Japanese keyboard options"
+msgstr "Pilihan papan ketik Jepang"
+
+#: ../rules/base.xml.in.h:1046
+msgid "Kana Lock key is locking"
+msgstr "Tombol Kana Lock terkunci"
+
+#: ../rules/base.xml.in.h:1047
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F style Backspace"
+
+#: ../rules/base.xml.in.h:1048
+msgid "Make Zenkaku Hankaku an additional ESC"
+msgstr "Buat Zenkaku Hankaku sebagai tambahan ESC"
+
+#: ../rules/base.xml.in.h:1049
+msgid "Adding Esperanto supersigned letters"
+msgstr "Menambah huruf supersigned Esperanto"
+
+#: ../rules/base.xml.in.h:1050
+msgid "To the corresponding key in a Qwerty layout"
+msgstr "Ke tombol terkait dalam tata letak Qwerty"
+
+#: ../rules/base.xml.in.h:1051
+msgid "To the corresponding key in a Dvorak layout"
+msgstr "Ke tombol terkait dalam tata letak Dvorak"
+
+#: ../rules/base.xml.in.h:1052
+msgid "To the corresponding key in a Colemak layout"
+msgstr "Ke tombol terkait dalam tata letak Colemak"
+
+#: ../rules/base.xml.in.h:1053
+msgid "Maintain key compatibility with old Solaris keycodes"
+msgstr "Memelihara kompatibilitas tombol dengan kode tombol Solaris tua"
+
+#: ../rules/base.xml.in.h:1054
+msgid "Sun Key compatibility"
+msgstr "Kompatibilitas Tombol Sun"
+
+#: ../rules/base.xml.in.h:1055
+msgid "Key sequence to kill the X server"
+msgstr "Sekuensi kunci untuk mematikan server X"
+
+#: ../rules/base.xml.in.h:1056
+msgid "Ctrl + Alt + Backspace"
+msgstr "Ctrl + Alt + Backspace"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "apl"
+msgstr "apl"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "APL keyboard symbols"
+msgstr "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:21
+msgid "Lithuanian (Sun Type 6/7)"
+msgstr "Lithuania (Sun Tipe 6/7)"
-#: ../rules/base.extras.xml.in.h:19
+#: ../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 <tcwitte@cs.uu.nl>, 2003, 2004, 2005, 2006.
# Tino Meinen <tino.meinen@gmail.com>, 2007, 2008, 2009, 2011, 2012.
-# Benno Schulenberg <benno@vertaalt.nl>, 2013.
+# Benno Schulenberg <benno@vertaalt.nl>, 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 <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\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 &lt;\\|&gt; key)"
msgstr "Tsjechisch (met &lt;\\|&gt;-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 "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner dan/Groter dan&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kleiner dan/Groter dan&gt;, 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 &lt;Less/Greater&gt;"
msgstr "derde niveau van &lt;Kleiner dan/Groter dan&gt;"
# 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+&lt;key&gt;) handled in a server"
msgstr "Speciale toetsen (Ctrl+Alt+&lt;toets&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kleiner dan/Groter dan&gt; 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 <qboosh@pld-linux.org>, 2009-2013.
+# Jakub Bogusz <qboosh@pld-linux.org>, 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 <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Czeski (z klawiszem &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Mniejsze/Większe&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "Poziom 3. klawisza &lt;Mniejsze/Większe&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Klawisze specjalne (Ctrl+Alt+&lt;klawisz&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h: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 <gabriellhrn@gmail.com>, 2012.
-# Enrico Nicoletto <liverig@gmail.com>, 2013.
+# Enrico Nicoletto <liverig@gmail.com>, 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 <liverig@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Tcheco (com a tecla &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Menor que/Maior que&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Less/Greater&gt; escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionadas em conjunto com outra escolha de 3º nível"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "Terceiro nível de &lt;Menor que/Maior que&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Teclas especiais (Ctrl+Alt+&lt;key&gt;) 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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Menor que/Maior que&gt; escolhe 5º nível, bloqueia quando pressionada junto com outra tecla de 5º nível"
-#: ../rules/base.xml.in.h: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 <nshmyrev@yandex.ru>, 2006.
# Misha Shnurapet <zayzayats@yandex.ru>, 2010.
# ChALkeR <chalkerx@gmail.com>, 2010.
-# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2013.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2013, 2014.
# Pavel Maryanov <acid@jack.kiev.ua>, 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 <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\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 &lt;\\|&gt; key)"
msgstr "Чешская (с клавишей &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Меньше чем/Больше чем&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Меньше чем/Больше чем&gt; выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "3-й ряд &lt;Меньше чем/Больше чем&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Специальные клавиши (Ctrl+Alt+&lt;клв&gt;) обрабатываются сервером"
-#: ../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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
-#: ../rules/base.xml.in.h: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 <arysin@bcsii.com>, 2007, 2008.
# Andriy Rysin <arysin@gmail.com>, 2008.
# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2011.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013.
+# Yuri Chornoivan <yurchor@ukr.net>, 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 <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\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 &lt;\\|&gt; key)"
msgstr "Чеська (з клавішею &lt;\\|&gt;)"
-#: ../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 "&lt;Less/Greater&gt;"
msgstr "&lt;Менше ніж/Більше ніж&gt;"
-#: ../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 "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Менше/Більше&gt; вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
msgstr "3-ій рівень &lt;Менше/Більше&gt;"
-#: ../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+&lt;key&gt;) handled in a server"
msgstr "Сліпі клавіші (Ctrl+Alt+&lt;key&gt;) обробляються на сервері"
-#: ../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 "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h: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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 &lt;\\|&gt; 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 "&lt;Less/Greater&gt;"
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 ""
"&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed "
"together with another 3rd-level-chooser"
msgstr ""
-#: ../rules/base.xml.in.h: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 &lt;Less/Greater&gt;"
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+&lt;key&gt;) 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 ""
"&lt;Less/Greater&gt; 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 @@
<variant>
<configItem>
<name>dyalog</name>
- <shortDescription>dlg</shortDescription>
- <description>APL keyboard symbols (Dyalog)</description>
+ <_shortDescription>dlg</_shortDescription>
+ <_description>APL keyboard symbols (Dyalog)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>sax</name>
- <shortDescription>sax</shortDescription>
- <description>APL keyboard symbols (sax)</description>
+ <_shortDescription>sax</_shortDescription>
+ <_description>APL keyboard symbols (sax)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>unified</name>
- <shortDescription>ufd</shortDescription>
- <description>APL keyboard symbols (unified)</description>
+ <_shortDescription>ufd</_shortDescription>
+ <_description>APL keyboard symbols (unified)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>apl2</name>
- <shortDescription>apl2</shortDescription>
- <description>APL keyboard symbols (IBM APL2)</description>
+ <_shortDescription>apl2</_shortDescription>
+ <_description>APL keyboard symbols (IBM APL2)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>aplplusII</name>
- <shortDescription>aplII</shortDescription>
- <description>APL keyboard symbols (Manugistics APL*PLUS II)</description>
+ <_shortDescription>aplII</_shortDescription>
+ <_description>APL keyboard symbols (Manugistics APL*PLUS II)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>aplx</name>
- <shortDescription>aplx</shortDescription>
- <description>APL keyboard symbols (APLX unified)</description>
+ <_shortDescription>aplx</_shortDescription>
+ <_description>APL keyboard symbols (APLX unified)</_description>
</configItem>
</variant>
</variantList>
@@ -264,7 +264,7 @@
<variant>
<configItem>
<name>cz_sk_de</name>
- <description>Czech Slovak and German (US)</description>
+ <_description>Czech Slovak and German (US)</_description>
<languageList><iso639Id>eng</iso639Id>
<iso639Id>cze</iso639Id>
<iso639Id>slo</iso639Id>
@@ -371,7 +371,7 @@
<variant>
<configItem>
<name>chu</name>
- <description>Church Slavonic</description>
+ <_description>Church Slavonic</_description>
<languageList><iso639Id>chu</iso639Id></languageList>
</configItem>
</variant>
@@ -776,6 +776,33 @@
</variant>
</variantList>
</layout>
+ <layout>
+ <configItem>
+ <name>eu</name>
+ <!-- Keyboard indicator for European layouts -->
+ <_shortDescription>eu</_shortDescription>
+ <_description>EurKEY (US based layout with european letters)</_description>
+ <languageList>
+ <iso639Id>cat</iso639Id>
+ <iso639Id>dan</iso639Id>
+ <iso639Id>eng</iso639Id>
+ <iso639Id>est</iso639Id>
+ <iso639Id>fao</iso639Id>
+ <iso639Id>fin</iso639Id>
+ <iso639Id>ger</iso639Id>
+ <iso639Id>gre</iso639Id>
+ <iso639Id>gsw</iso639Id>
+ <iso639Id>ita</iso639Id>
+ <iso639Id>lav</iso639Id>
+ <iso639Id>lit</iso639Id>
+ <iso639Id>nld</iso639Id>
+ <iso639Id>nor</iso639Id>
+ <iso639Id>por</iso639Id>
+ <iso639Id>spa</iso639Id>
+ <iso639Id>swe</iso639Id>
+ </languageList>
+ </configItem>
+ </layout>
</layoutList>
<optionList/>
</xkbConfigRegistry>
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 @@
<variant>
<configItem>
<name>eeyek</name>
- <description>Manipuri (Eeyek)</description>
+ <_description>Manipuri (Eeyek)</_description>
<languageList><iso639Id>mni</iso639Id></languageList>
</configItem>
</variant>
@@ -1925,7 +1925,7 @@
<name>mal_enhanced</name>
<!-- Keyboard indicator for Malayalam layouts -->
<_shortDescription>ml</_shortDescription>
- <_description>Malayalam (enhanced Inscript with Rupee Sign)</_description>
+ <_description>Malayalam (enhanced Inscript, with rupee sign)</_description>
<languageList><iso639Id>mal</iso639Id></languageList>
</configItem>
</variant>
@@ -2110,7 +2110,7 @@
<name>eng</name>
<!-- Keyboard indicator for English layouts -->
<_shortDescription>en</_shortDescription>
- <_description>English (India, with RupeeSign)</_description>
+ <_description>English (India, with rupee sign)</_description>
<languageList>
<iso639Id>eng</iso639Id>
</languageList>
@@ -2132,13 +2132,13 @@
<variant>
<configItem>
<name>alternatequotes</name>
- <_description>Bosnian (use guillemets for quotes)</_description>
+ <_description>Bosnian (with guillemets for quotes)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>unicode</name>
- <_description>Bosnian (use Bosnian digraphs)</_description>
+ <_description>Bosnian (with Bosnian digraphs)</_description>
</configItem>
</variant>
<variant>
@@ -2559,13 +2559,13 @@
<variant>
<configItem>
<name>alternatequotes</name>
- <_description>Croatian (use guillemets for quotes)</_description>
+ <_description>Croatian (with guillemets for quotes)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>unicode</name>
- <_description>Croatian (use Croatian digraphs)</_description>
+ <_description>Croatian (with Croatian digraphs)</_description>
</configItem>
</variant>
<variant>
@@ -2644,6 +2644,12 @@
</variant>
<variant>
<configItem>
+ <name>winkeys</name>
+ <_description>Danish (Winkeys)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>mac</name>
<_description>Danish (Macintosh)</_description>
</configItem>
@@ -2749,7 +2755,7 @@
<variant>
<configItem>
<name>pes_keypad</name>
- <_description>Persian (with Persian Keypad)</_description>
+ <_description>Persian (with Persian keypad)</_description>
</configItem>
</variant>
<variant>
@@ -2898,6 +2904,12 @@
</variant>
<variant>
<configItem>
+ <name>winkeys</name>
+ <_description>Finnish (Winkeys)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>smi</name>
<_description>Northern Saami (Finland)</_description>
<languageList><iso639Id>sme</iso639Id></languageList>
@@ -3279,6 +3291,15 @@
</variant>
<variant>
<configItem>
+ <name>tr</name>
+ <_description>Turkish (Germany)</_description>
+ <languageList>
+ <iso639Id>tr</iso639Id>
+ </languageList>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>ru</name>
<!-- Keyboard indicator for Russian layouts -->
<_shortDescription>ru</_shortDescription>
@@ -3547,6 +3568,12 @@
</variant>
<variant>
<configItem>
+ <name>winkeys</name>
+ <_description>Italian (Winkeys)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>mac</name>
<_description>Italian (Macintosh)</_description>
</configItem>
@@ -3984,6 +4011,12 @@
</variant>
<variant>
<configItem>
+ <name>winkeys</name>
+ <_description>Norwegian (Winkeys)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>dvorak</name>
<_description>Norwegian (Dvorak)</_description>
</configItem>
@@ -4079,7 +4112,7 @@
<variant>
<configItem>
<name>szl</name>
- <description>Silesian</description>
+ <_description>Silesian</_description>
<languageList><iso639Id>szl</iso639Id></languageList>
</configItem>
</variant>
@@ -4443,7 +4476,7 @@
<variant>
<configItem>
<name>alternatequotes</name>
- <_description>Slovenian (use guillemets for quotes)</_description>
+ <_description>Slovenian (with guillemets for quotes)</_description>
</configItem>
</variant>
<variant>
@@ -4504,6 +4537,12 @@
</variant>
<variant>
<configItem>
+ <name>winkeys</name>
+ <_description>Spanish (Winkeys)</_description>
+ </configItem>
+ </variant>
+ <variant>
+ <configItem>
<name>deadtilde</name>
<_description>Spanish (include dead tilde)</_description>
</configItem>
@@ -6343,7 +6382,7 @@
<option>
<configItem>
<name>altwin:hyper_win</name>
- <_description>Hyper is mapped to Win-keys</_description>
+ <_description>Hyper is mapped to Win keys</_description>
</configItem>
</option>
<option>
diff --git a/xorg-server/xkeyboard-config/symbols/Makefile.am b/xorg-server/xkeyboard-config/symbols/Makefile.am
index 509a549cd..77ec0ff0e 100644
--- a/xorg-server/xkeyboard-config/symbols/Makefile.am
+++ b/xorg-server/xkeyboard-config/symbols/Makefile.am
@@ -11,7 +11,7 @@ bt bw by \
ca cd ch \
cm cn cz \
de dk \
-ee es et epo \
+ee es et epo eu \
fi fo fr \
gb ge gh gn \
gr hr hu \
diff --git a/xorg-server/xkeyboard-config/symbols/af b/xorg-server/xkeyboard-config/symbols/af
index b93019a95..67f07c862 100644
--- a/xorg-server/xkeyboard-config/symbols/af
+++ b/xorg-server/xkeyboard-config/symbols/af
@@ -26,7 +26,7 @@ xkb_symbols "basic" {
key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] };
key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] };
key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] };
- key <AE12> { [ plus, equal ] };
+ key <AE12> { [ equal, plus ] };
key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] };
key <AD02> { [ Arabic_sad, Arabic_dammatan ] };
@@ -97,7 +97,7 @@ xkb_symbols "ps" {
key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] };
key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] };
key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] };
- key <AE12> { [ plus, equal ] };
+ key <AE12> { [ equal, plus ] };
key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] };
key <AD02> { [ Arabic_sad, Arabic_dammatan, 0x1000653 ] };
@@ -168,7 +168,7 @@ xkb_symbols "uz" {
key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] };
key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] };
key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] };
- key <AE12> { [ plus, equal ] };
+ key <AE12> { [ equal, plus ] };
key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] };
key <AD02> { [ Arabic_sad, Arabic_dammatan, 0x1000653 ] };
@@ -229,7 +229,7 @@ xkb_symbols "olpc-ps" {
key <AE09> { [ 0x10006F9, parenright, enfilledcircbullet ] }; // Arabic nine
key <AE10> { [ 0x10006F0, parenleft, degree ] }; // Arabic zero
key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel
- key <AE12> { [ plus, equal, division ] };
+ key <AE12> { [ equal, plus, division ] };
key <AD01> { [ 0x1000636, 0x1000652, EuroSign ] }; // Arabic dad, Arabic sukun
key <AD02> { [ 0x1000635, 0x100064C, 0x1000671 ] }; // Arabic sad, Arabic dammatan, Arabic alef walsa
@@ -290,7 +290,7 @@ xkb_symbols "fa-olpc" {
key <AE09> { [ 0x10006F9, parenright, 0x100200E ] }; // Arabic nine, left-to-right mark
key <AE10> { [ 0x10006F0, parenleft, 0x100200F ] }; // Arabic zero, right-to-left mark
key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel
- key <AE12> { [ plus, equal ] };
+ key <AE12> { [ equal, plus ] };
key <AD01> { [ 0x1000636, 0x1000652, degree ] }; // Arabic dad, Arabic sukun
key <AD02> { [ 0x1000635, 0x100064C ] }; // Arabic sad, Arabic dammatan
@@ -351,7 +351,7 @@ xkb_symbols "uz-olpc" {
key <AE09> { [ 0x10006F9, parenright, 0x100200E ] }; // Arabic nine, left-to-right mark
key <AE10> { [ 0x10006F0, parenleft, 0x100200F ] }; // Arabic zero, right-to-left mark
key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel
- key <AE12> { [ plus, equal ] };
+ key <AE12> { [ equal, plus ] };
key <AD01> { [ 0x1000636, 0x1000652, degree ] }; // Arabic dad, Arabic sukun
key <AD02> { [ 0x1000635, 0x100064C, 0x1000653 ] }; // Arabic sad, Arabic dammatan, Arabic maddah above
diff --git a/xorg-server/xkeyboard-config/symbols/ba b/xorg-server/xkeyboard-config/symbols/ba
index 0cc4988d4..63331b858 100644
--- a/xorg-server/xkeyboard-config/symbols/ba
+++ b/xorg-server/xkeyboard-config/symbols/ba
@@ -1,40 +1,34 @@
default partial alphanumeric_keys
xkb_symbols "basic" {
- name[Group1]="Bosnian";
-
include "rs(latin)"
+ name[Group1]="Bosnian";
};
partial alphanumeric_keys
xkb_symbols "us" {
- name[Group1]= "Bosnian (US keyboard with Bosnian letters)";
-
include "rs(latinyz)"
+ name[Group1]= "Bosnian (US keyboard with Bosnian letters)";
};
-
partial alphanumeric_keys
xkb_symbols "alternatequotes" {
- name[Group1]= "Bosnian (use guillemets for quotes)";
-
include "rs(latinalternatequotes)"
+ name[Group1]= "Bosnian (with guillemets for quotes)";
};
partial alphanumeric_keys
xkb_symbols "unicode" {
- name[Group1]= "Bosnian (use Bosnian digraphs)";
-
include "rs(latinunicode)"
+ name[Group1]= "Bosnian (with Bosnian digraphs)";
};
partial alphanumeric_keys
xkb_symbols "unicodeus" {
- name[Group1]= "Bosnian (US keyboard with Bosnian digraphs)";
-
include "rs(latinunicodeyz)"
+ name[Group1]= "Bosnian (US keyboard with Bosnian digraphs)";
};
diff --git a/xorg-server/xkeyboard-config/symbols/ca b/xorg-server/xkeyboard-config/symbols/ca
index abfbbd9f7..2ba48b480 100644
--- a/xorg-server/xkeyboard-config/symbols/ca
+++ b/xorg-server/xkeyboard-config/symbols/ca
@@ -122,10 +122,10 @@ xkb_symbols "fr-dvorak" {
partial
xkb_symbols "fr-legacy" {
- name[Group1] = "French (Canada, legacy)";
-
include "ca(fr)"
+ name[Group1] = "French (Canada, legacy)";
+
key <TLDE> { [ degree, degree, notsign ] };
key <AE01> { [ 1, exclam, onesuperior ] };
@@ -168,10 +168,10 @@ xkb_symbols "fr-legacy" {
partial
xkb_symbols "multi" {
- name[Group1] = "Canadian Multilingual (first part)";
-
include "ca(fr)"
+ name[Group1] = "Canadian Multilingual (first part)";
+
key <TLDE> { [ slash, backslash, bar ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
@@ -259,7 +259,6 @@ xkb_symbols "multi-2gr" {
key <AB08> { [ Greek_horizbar, multiply ] };
key <AB09> { [ periodcentered, division ] };
key <AB10> { [ NoSymbol, dead_abovedot ] };
-
};
// based on
@@ -466,8 +465,8 @@ xkb_symbols "olpc" {
partial alphanumeric_keys
xkb_symbols "eng" {
- name[Group1] = "English (Canada)";
include "us(basic)"
+ name[Group1] = "English (Canada)";
};
// EXTRAS:
diff --git a/xorg-server/xkeyboard-config/symbols/cm b/xorg-server/xkeyboard-config/symbols/cm
index 6404c97aa..6b7a51854 100644
--- a/xorg-server/xkeyboard-config/symbols/cm
+++ b/xorg-server/xkeyboard-config/symbols/cm
@@ -96,8 +96,8 @@ xkb_symbols "basic" {
partial alphanumeric_keys
xkb_symbols "french"
{
- name[Group1]="French (Cameroon)";
include "latin"
+ name[Group1]="French (Cameroon)";
key <AE01> { [ ampersand, 1, onesuperior, exclamdown ] };
key <AE02> { [ eacute, 2, asciitilde, oneeighth ] };
@@ -133,13 +133,11 @@ xkb_symbols "french"
include "level3(ralt_switch)"
};
-
partial alphanumeric_keys
xkb_symbols "azerty"
{
- name[Group1] = "Cameroon Multilingual (azerty)";
- include "level3(ralt_switch)"
include "cm(basic)"
+ name[Group1] = "Cameroon Multilingual (azerty)";
key <AB01> { [ w, W, U1E85, U1E84 ] }; // SMALL LETTER W, CAPITAL LETTER W, SMALL LETTER W WITH DIAERESIS, CAPITAL LETTER W WITH DIAERESIS
key <AB02> { [ x, X, U2039, U203A ] }; // SMALL LETTER X, CAPITAL LETTER X, SINGLE LEFT-POINTING ANGLE QUOTATION MARK, SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
key <AB03> { [ c, C, U0327, copyright ] }; // SMALL LETTER C, CAPITAL LETTER C, COMBINING CEDILLA, COPYRIGHT SIGN
@@ -189,14 +187,14 @@ xkb_symbols "azerty"
key <LSGT> { [ U003C, U003E, U00AB, U00BB ] }; // LESS THAN, GREATER THAN, LEFT GUILLEMET, RIGHT GUILLEMET
key <TLDE> { [ U0024, U20AC, U00B2, U00B3 ] }; // DOLLAR, EURO, SUPERSCRIPT 2, SUPERSCRIPT 3
include "cm(exclamation_switch)"
+ include "level3(ralt_switch)"
};
partial alphanumeric_keys
xkb_symbols "qwerty"
{
- name[Group1] = "Cameroon Multilingual (qwerty)";
- include "level3(ralt_switch)"
include "cm(basic)"
+ name[Group1] = "Cameroon Multilingual (qwerty)";
key <AB01> { [ z, Z, U2026, U2020 ] }; // SMALL LETTER Z, CAPITAL LETTER Z, ELLIPSIS, DAGGER
key <AB02> { [ x, X ] }; // SMALL LETTER X, CAPITAL LETTER X
key <AB03> { [ c, C, U0327, U00A9 ] }; // SMALL LETTER C, CAPITAL LETTER C, CEDILLA, COPYRIGHT
@@ -242,15 +240,14 @@ xkb_symbols "qwerty"
key <BKSL> { [ U005C, U007C ] }; // BACKSLASH, BAR
key <TLDE> { [ U030D, U0303, U0060, U007E ] }; // COMBINING VERTICAL LINE ABOVE, COMBINING TILDE ABOVE, GRAVE ACCENT, TILDE
include "cm(semicolon_switch)"
+ include "level3(ralt_switch)"
};
-
partial alphanumeric_keys
xkb_symbols "dvorak"
{
- name[Group1] = "Cameroon Multilingual (Dvorak)";
- include "level3(ralt_switch)"
include "us(dvorak)"
+ name[Group1] = "Cameroon Multilingual (Dvorak)";
key <AB01> { [ semicolon, colon ] }; // SEMICOLON, COLON
key <AB02> { [ q, Q, U2014, U2013 ] }; // SMALL LETTER Q, CAPITAL LETTER Q, EM DASH, EN DASH
key <AB03> { [ j, J, U0330, U0323 ] }; // SMALL LETTER J, CAPITAL LETTER J, COMBINING TILDE (NASAL) BELOW, COMBINING DOT BELOW
@@ -299,6 +296,7 @@ xkb_symbols "dvorak"
key <BKSL> { [ backslash, bar ] }; // BACKSLASH, BAR
key <TLDE> { [ U030D, U0303, U0060, U007E ] }; // COMBINING VERTICAL LINE ABOVE, COMBINING TILDE ABOVE, GRAVE ACCENT, TILDE
include "cm(semicolon_switch_dvorak)"
+ include "level3(ralt_switch)"
};
// The following code creates the "Cameroon key" phenomenon.
diff --git a/xorg-server/xkeyboard-config/symbols/de b/xorg-server/xkeyboard-config/symbols/de
index a497d7f48..150c081c9 100644
--- a/xorg-server/xkeyboard-config/symbols/de
+++ b/xorg-server/xkeyboard-config/symbols/de
@@ -526,10 +526,8 @@ xkb_symbols "mac_nodeadkeys" {
partial alphanumeric_keys
xkb_symbols "dsb"
{
- name[Group1] = "Lower Sorbian";
include "latin(basic)"
- include "level3(ralt_switch)"
- include "kpdl(comma)"
+ name[Group1] = "Lower Sorbian";
key <AB01> { [ z, Z, zcaron, Zcaron ] };
key <AB02> { [ x, X, zacute, Zacute ] };
key <AB03> { [ c, C, cacute, Cacute ] };
@@ -544,15 +542,15 @@ xkb_symbols "dsb"
key <AD04> { [ r, R, racute, Racute ] };
key <AD05> { [ t, T, U20B5, EuroSign ] };
key <AD09> { [ o, O, oacute, Oacute ] };
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
};
partial alphanumeric_keys
xkb_symbols "dsb_qwertz"
{
- name[Group1] = "Lower Sorbian (qwertz)";
include "latin(basic)"
- include "level3(ralt_switch)"
- include "kpdl(comma)"
+ name[Group1] = "Lower Sorbian (qwertz)";
key <AB01> { [ y, Y ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C, cacute, Cacute ] };
@@ -569,6 +567,8 @@ xkb_symbols "dsb_qwertz"
key <AD06> { [ z, Z, zcaron, Zcaron ] };
key <AD07> { [ u, U, zacute, Zacute ] };
key <AD09> { [ o, O, oacute, Oacute ] };
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
};
partial alphanumeric_keys
@@ -681,6 +681,24 @@ xkb_symbols "htcdream" {
include "level3(alt_switch)"
};
+partial alphanumeric_keys
+xkb_symbols "tr" {
+
+ // add turkish-specific letters to the basic German layout.
+ // Turkish symbols are accessible with combination of <AltGr> and
+ // 'i', 's', 'g', 'c'' (+<Shift> for capital letters).
+
+ include "de(basic)"
+
+ name[Group1]="Turkish (Germany)";
+
+ key <AD08> { [ i, I, U0131, U0130 ] };
+ key <AC02> { [ s, S, U015F, U015E ] };
+ key <AC05> { [ g, G, U011F, U011E ] };
+ key <AB03> { [ c, C, U0E7, U0C7 ] };
+
+};
+
// EXTRAS:
partial alphanumeric_keys
diff --git a/xorg-server/xkeyboard-config/symbols/dk b/xorg-server/xkeyboard-config/symbols/dk
index 838478bf8..509802753 100644
--- a/xorg-server/xkeyboard-config/symbols/dk
+++ b/xorg-server/xkeyboard-config/symbols/dk
@@ -42,6 +42,14 @@ xkb_symbols "nodeadkeys" {
};
+partial alphanumeric_keys
+xkb_symbols "winkeys" {
+
+ include "dk(basic)"
+ name[Group1] = "Danish (Winkeys)";
+ include "eurosign(5)"
+};
+
// Copied from macintosh_vndr/dk
partial alphanumeric_keys
xkb_symbols "mac" {
diff --git a/xorg-server/xkeyboard-config/symbols/es b/xorg-server/xkeyboard-config/symbols/es
index 9e963a23f..749a86d71 100644
--- a/xorg-server/xkeyboard-config/symbols/es
+++ b/xorg-server/xkeyboard-config/symbols/es
@@ -26,6 +26,14 @@ xkb_symbols "basic" {
include "level3(ralt_switch)"
};
+partial alphanumeric
+xkb_symbols "winkeys" {
+
+ include "es(basic)"
+ name[Group1]="Spanish (Winkeys)";
+ include "eurosign(5)"
+};
+
partial alphanumeric_keys
xkb_symbols "Sundeadkeys" {
diff --git a/xorg-server/xkeyboard-config/symbols/eu b/xorg-server/xkeyboard-config/symbols/eu
new file mode 100644
index 000000000..0a4d31a21
--- /dev/null
+++ b/xorg-server/xkeyboard-config/symbols/eu
@@ -0,0 +1,63 @@
+// Based on <http://eurkey.steffen.bruentjen.eu/>
+// Copyright: Copyright 2012 Steffen Bruentjen (eurkey (at) steffen dot bruentjen dot de)
+// License: GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html>
+// modified by Christoph Roeper <spam (at) roeper dot biz> (use firstName to mail)
+
+default partial alphanumeric_keys modifier_keys
+xkb_symbols "basic" {
+
+ include "us(basic)"
+
+ name[Group1] = "EurKEY (US based layout with european letters)";
+
+ key <AB01> { [ z, Z, agrave, Agrave ] };
+ key <AB02> { [ x, X, aacute, Aacute ] };
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+ key <AB04> { [ v, V, igrave, Igrave ] };
+ key <AB05> { [ b, B, iacute, Iacute ] };
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB07> { [ m, M, Multi_key, Multi_key ] };
+ key <AB08> { [ comma, less, ograve, Ograve ] };
+ key <AB09> { [ period, greater, oacute, Oacute ] };
+ key <AB10> { [ slash, question, questiondown, 0x1002026 ] };
+ key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
+ key <AC02> { [ s, S, ssharp, section ] };
+ key <AC03> { [ d, D, eth, Eth ] };
+ key <AC04> { [ f, F, egrave, Egrave ] };
+ key <AC05> { [ g, G, eacute, Eacute ] };
+ key <AC06> { [ h, H, ugrave, Ugrave ] };
+ key <AC07> { [ j, J, uacute, Uacute ] };
+ key <AC08> { [ k, K, U0133, U0132 ] };
+ key <AC09> { [ l, L, oslash, Oslash ] };
+ key <AC10> { [ semicolon, colon, dead_diaeresis, periodcentered ] };
+ key <AC11> { [ apostrophe, quotedbl, dead_acute, dagger] };
+ key <AD01> { [ q, Q, ae, AE ] };
+ key <AD02> { [ w, W, aring, Aring ] };
+ key <AD03> { [ e, E, ediaeresis, Ediaeresis ] };
+ key <AD04> { [ r, R, yacute, Yacute ] };
+ key <AD05> { [ t, T, thorn, Thorn ] };
+ key <AD06> { [ y, Y, ydiaeresis, Ydiaeresis ] };
+ key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
+ key <AD08> { [ i, I, idiaeresis, Idiaeresis ] };
+ key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
+ key <AD10> { [ p, P, oe, OE ] };
+ key <AD11> { [ bracketleft, braceleft, guillemotleft, U2039 ] };
+ key <AD12> { [ bracketright, braceright, guillemotright, U203A ] };
+ key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
+ key <AE02> { [ 2, at, ordfeminine, twosuperior ] };
+ key <AE03> { [ 3, numbersign, masculine, threesuperior ] };
+ key <AE04> { [ 4, dollar, sterling, yen ] };
+ key <AE05> { [ 5, percent, EuroSign, cent ] };
+ key <AE06> { [ 6, asciicircum, dead_circumflex, dead_caron ] };
+ key <AE07> { [ 7, ampersand, dead_abovering, dead_macron ] };
+ key <AE08> { [ 8, asterisk, doublelowquotemark, singlelowquotemark ] };
+ key <AE09> { [ 9, parenleft, leftdoublequotemark, leftsinglequotemark ] };
+ key <AE10> { [ 0, parenright, rightdoublequotemark, rightsinglequotemark ] };
+ key <AE11> { [ minus, underscore, copyright, numerosign ] };
+ key <AE12> { [ equal, plus, multiply, division ] };
+ key <BKSL> { [ backslash, bar, notsign, brokenbar ] };
+ key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
+ key <KPDL> { [ KP_Delete, KP_Decimal, comma, comma ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/fi b/xorg-server/xkeyboard-config/symbols/fi
index 4fdcc2a25..1818243dd 100644
--- a/xorg-server/xkeyboard-config/symbols/fi
+++ b/xorg-server/xkeyboard-config/symbols/fi
@@ -83,6 +83,14 @@ xkb_symbols "kotoistus" {
};
partial alphanumeric_keys
+xkb_symbols "winkeys" {
+
+ include "fi(kotoistus)"
+ name[Group1]="Finnish (Winkeys)";
+ include "eurosign(5)"
+};
+
+partial alphanumeric_keys
xkb_symbols "classic" {
include "fi(fi)"
diff --git a/xorg-server/xkeyboard-config/symbols/fr b/xorg-server/xkeyboard-config/symbols/fr
index 9c89db825..3898b1c57 100644
--- a/xorg-server/xkeyboard-config/symbols/fr
+++ b/xorg-server/xkeyboard-config/symbols/fr
@@ -36,8 +36,6 @@ xkb_symbols "basic" {
key <AB09> { [ colon, slash, periodcentered, division ] };
key <AB10> { [ exclam, section, dead_belowdot, dead_abovedot ] };
- include "kpdl(comma)"
-
include "level3(ralt_switch)"
};
diff --git a/xorg-server/xkeyboard-config/symbols/hr b/xorg-server/xkeyboard-config/symbols/hr
index 1ec0c809a..61fc39221 100644
--- a/xorg-server/xkeyboard-config/symbols/hr
+++ b/xorg-server/xkeyboard-config/symbols/hr
@@ -1,9 +1,8 @@
default partial alphanumeric_keys
xkb_symbols "basic" {
- name[Group1]="Croatian";
-
include "rs(latin)"
+ name[Group1]="Croatian";
// Redefine these keys to match XFree86 Croatian layout
key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] };
@@ -16,9 +15,8 @@ xkb_symbols "basic" {
partial alphanumeric_keys
xkb_symbols "us" {
- name[Group1]= "Croatian (US keyboard with Croatian letters)";
-
include "us"
+ name[Group1]= "Croatian (US keyboard with Croatian letters)";
key <AD01> { [ any, any, backslash ] };
key <AD02> { [ any, any, bar ] };
@@ -44,30 +42,25 @@ xkb_symbols "us" {
key <BKSL> { [ any, any, zcaron, Zcaron ] };
include "level3(ralt_switch)"
-
};
-
partial alphanumeric_keys
xkb_symbols "alternatequotes" {
- name[Group1]= "Croatian (use guillemets for quotes)";
-
include "rs(latinalternatequotes)"
+ name[Group1]= "Croatian (with guillemets for quotes)";
};
partial alphanumeric_keys
xkb_symbols "unicode" {
- name[Group1]= "Croatian (use Croatian digraphs)";
-
include "rs(latinunicode)"
+ name[Group1]= "Croatian (with Croatian digraphs)";
};
partial alphanumeric_keys
xkb_symbols "unicodeus" {
- name[Group1]= "Croatian (US keyboard with Croatian digraphs)";
-
include "rs(latinunicodeyz)"
+ name[Group1]= "Croatian (US keyboard with Croatian digraphs)";
};
diff --git a/xorg-server/xkeyboard-config/symbols/in b/xorg-server/xkeyboard-config/symbols/in
index f70e215e6..054671513 100644
--- a/xorg-server/xkeyboard-config/symbols/in
+++ b/xorg-server/xkeyboard-config/symbols/in
@@ -107,7 +107,7 @@ partial alphanumeric_keys
xkb_symbols "bolnagri" {
name[Group1] = "Hindi (Bolnagri)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
+
// Roman digits
key <TLDE> { [ U0902, U0901, apostrophe, asciitilde ] }; // apostrophe: anusvara, candrabindu
key <AE01> { [ 1, exclam, U0967, exclam ] };
@@ -393,8 +393,6 @@ xkb_symbols "ben_baishakhi" {
// modifier_map Shift { Shift_L };
// modifier_map Lock { Caps_Lock };
// modifier_map Control{ Control_L };
-
-
};
xkb_symbols "ben_inscript" {
@@ -536,8 +534,6 @@ xkb_symbols "ben_gitanjali" {
// modifier_map Shift { Shift_L };
// modifier_map Lock { Caps_Lock };
// modifier_map Control{ Control_L };
-
-
};
@@ -613,7 +609,6 @@ xkb_symbols "ben_bornona" {
// modifier_map Control{ Control_L };
// third level with right-alt
include "level3(ralt_switch)"
-
};
partial alphanumeric_keys
@@ -842,7 +837,6 @@ xkb_symbols "mal" {
include "rupeesign(4)"
include "level3(ralt_switch)"
-
};
//Name : Lalitha
@@ -854,7 +848,7 @@ partial alphanumeric_keys
xkb_symbols "mal_lalitha" {
name[Group1] = "Malayalam (Lalitha)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
+
// Roman digits
key <TLDE> { [ U0D4D, U0D02, apostrophe, asciitilde ] }; // apostrophe: virama(chandrakala),anusvara
key <AE01> { [ 1, exclam, U0D67, exclam ] };
@@ -1237,7 +1231,6 @@ xkb_symbols "tam_TSCII" {
key <AB07> { [ 0x10000ab, 0x10000ac ] }; // a, A
key <AB08> { [ 0x10000fe, 0x10000ae ] }; // i, I
-};
partial alphanumeric_keys
xkb_symbols "tam_TAB" {
@@ -1462,7 +1455,7 @@ partial alphanumeric_keys
xkb_symbols "jhelum" {
name[Group1] = "Punjabi (Gurmukhi Jhelum)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
+
// Roman digits
key <TLDE> { [ apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu
key <AE01> { [ 1,exclam, U0A67, exclam ] };
@@ -1660,12 +1653,10 @@ xkb_symbols "hin-wx" {
partial alphanumeric_keys
xkb_symbols "eng" {
- name[Group1]= "English (India, with RupeeSign)";
-
include "us(basic)"
+ name[Group1]= "English (India, with rupee sign)";
include "rupeesign(4)"
-
include "level3(ralt_switch)"
};
@@ -1681,7 +1672,7 @@ xkb_symbols "eng" {
partial alphanumeric_keys
xkb_symbols "mal_enhanced" {
- name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)";
+ name[Group1] = "Malayalam (enhanced Inscript, with rupee sign)";
//From grave to backslash (\)
@@ -1744,11 +1735,8 @@ xkb_symbols "mal_enhanced" {
key <AB09> { [ period , U0d7d ] }; //chillu l
key <AB10> { [ U0d2f , question ] };
- // hope this includes the rupee sign at alt + 4
-
include "rupeesign(4)"
include "level3(ralt_switch)"
-
};
@@ -1780,13 +1768,12 @@ xkb_symbols "hin-kagapa" {
name[Group1] = "Hindi (KaGaPa phonetic)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
// Roman digits
key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark
key <AE01> { [ 1, exclam, U0967 ] };
key <AE02> { [ 2, at, U0968, U20A8 ] }; // U20A8: generic rupee sign (Rs)
key <AE03> { [ 3, numbersign, U0969 ] };
- key <AE04> { [ 4, dollar, U096A, U20B9 ] }; // U20B9: new Indian Rupee sign
+ key <AE04> { [ 4, dollar, U096A, U20B9 ] }; // U20B9: new Indian rupee sign
key <AE05> { [ 5, percent, U096B ] };
key <AE06> { [ 6, asciicircum, U096C, U200C ] }; // ZWNJ
key <AE07> { [ 7, ampersand, U096D, U200D ] }; // ZWJ
@@ -1824,7 +1811,6 @@ xkb_symbols "hin-kagapa" {
key <AC10> { [ semicolon, colon, U1CF2, U1CF3 ] }; // U1CF2/3: ardhavisarga/rotated ardhavisarga
key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta
// U201D: Right double quotation mark
-
//Z Row
key <AB01> { [ U091E, U0919 ] }; // Z: nya, nga
key <AB02> { [ U0937, U093C, U0934 ] }; // X: ssa, nukta below, lla-nukta
@@ -1844,17 +1830,15 @@ xkb_symbols "hin-kagapa" {
// Sanskrit uses Devanagari layout of Hindi
partial alphanumeric_keys
xkb_symbols "san-kagapa" {
- name[Group1] = "Sanskrit (KaGaPa phonetic)";
include "in(hin-kagapa)"
-
+ name[Group1] = "Sanskrit (KaGaPa phonetic)";
};
// Marathi uses Devanagari layout of Hindi
partial alphanumeric_keys
xkb_symbols "mar-kagapa" {
- name[Group1] = "Marathi (KaGaPa phonetic)";
include "in(hin-kagapa)"
-
+ name[Group1] = "Marathi (KaGaPa phonetic)";
};
@@ -1875,13 +1859,12 @@ xkb_symbols "kan-kagapa" {
name[Group1] = "Kannada (KaGaPa phonetic)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
// Roman digits
key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark
key <AE01> { [ 1, exclam, U0CE7 ] };
key <AE02> { [ 2, at, U0CE8, U20A8 ] }; // U20A8: generic rupee sign (Rs)
key <AE03> { [ 3, numbersign, U0CE9 ] };
- key <AE04> { [ 4, dollar, U0CEA, U20B9 ] }; // U20B9: new Indian Rupee sign
+ key <AE04> { [ 4, dollar, U0CEA, U20B9 ] }; // U20B9: new Indian rupee sign
key <AE05> { [ 5, percent, U0CEB ] };
key <AE06> { [ 6, asciicircum, U0CEC, U200C ] }; // ZWNJ
key <AE07> { [ 7, ampersand, U0CED, U200D ] }; // ZWJ
@@ -1919,7 +1902,6 @@ xkb_symbols "kan-kagapa" {
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta
// U201D: Right double quotation mark
-
//Z Row
key <AB01> { [ U0C9E, U0C99 ] }; // Z: nya, nga
key <AB02> { [ U0CB7, U0CBC, U0CDE ] }; // X: ssa, nukta below, LLLA
@@ -1954,13 +1936,12 @@ xkb_symbols "tel-kagapa" {
name[Group1] = "Telugu (KaGaPa phonetic)";
key.type="FOUR_LEVEL";
- //Top Alphanumeric row
// Roman digits
key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark
key <AE01> { [ 1, exclam, U0C67 ] };
key <AE02> { [ 2, at, U0C68, U20A8 ] }; // U20A8: generic rupee sign (Rs)
key <AE03> { [ 3, numbersign, U0C69 ] };
- key <AE04> { [ 4, dollar, U0C6A, U20B9 ] }; // U20B9: new Indian Rupee sign
+ key <AE04> { [ 4, dollar, U0C6A, U20B9 ] }; // U20B9: new Indian rupee sign
key <AE05> { [ 5, percent, U0C6B ] };
key <AE06> { [ 6, asciicircum, U0C6C, U200C ] }; // ZWNJ
key <AE07> { [ 7, ampersand, U0C6D, U200D ] }; // ZWJ
@@ -1998,7 +1979,6 @@ xkb_symbols "tel-kagapa" {
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta
// U201D: Right double quotation mark
-
//Z Row
key <AB01> { [ U0C1E, U0C19 ] }; // Z: nya, nga
key <AB02> { [ U0C37 ] }; // X: ssa
@@ -2026,7 +2006,6 @@ xkb_symbols "eeyek" {
name[Group1]= "Manipuri (Eeyek)";
- // Alphanumeric section
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ Uabf1, exclam ] };
key <AE02> { [ Uabf2, at ] };
@@ -2078,7 +2057,6 @@ xkb_symbols "eeyek" {
key <AB10> { [ slash, question ] };
key <BKSL> { [ backslash, bar ] };
- // End alphanumeric section
include "level3(ralt_switch)"
};
diff --git a/xorg-server/xkeyboard-config/symbols/inet b/xorg-server/xkeyboard-config/symbols/inet
index fe21f1ed7..f7ccc6f81 100644
--- a/xorg-server/xkeyboard-config/symbols/inet
+++ b/xorg-server/xkeyboard-config/symbols/inet
@@ -256,7 +256,7 @@ xkb_symbols "acer_c300" {
key <I30> { [ XF86AudioRaiseVolume ] };
key <I5E> { [ XF86Launch2 ] };
key <I75> { [ Help ] };
- key <XFER> { [ XF86Launch1 ] };
+ key <IR7C> { [ XF86Launch1 ] };
};
// Acer Ferrari 4000 Keyboard
@@ -461,7 +461,7 @@ xkb_symbols "cherryblue" {
key <I26> { [ XF86AudioMute ] };
key <I63> { [ XF86Standby ] };
key <PRSC> { [ XF86Terminal ] };
- key <XFER> { [ XF86Go ] };
+ key <IR7C> { [ XF86Go ] };
};
// Cherry CyMotion Master XPress
@@ -488,7 +488,7 @@ xkb_symbols "cherryblueb" {
key <I71> { [ XF86Book ] };
key <I72> { [ XF86Book ] };
key <PRSC> { [ XF86Terminal ] };
- key <XFER> { [ XF86Go ] };
+ key <IR7C> { [ XF86Go ] };
};
// Cherry Blue Line CyBo@rd (alternate option)
@@ -505,7 +505,7 @@ xkb_symbols "cherrycyboard" {
key <FK17> { [ XF86Search ] };
key <I02> { [ XF86HomePage ] };
key <K67> { [ XF86Terminal ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
// Cherry CyMotion Expert
@@ -695,8 +695,8 @@ xkb_symbols "inspiron" {
key <I04> { [ XF86AudioNext ] };
key <I21> { [ XF86Eject ] };
key <I56> { [ XF86Display ] };
- key <NFER> { [ XF86AudioPrev ] };
- key <XFER> { [ XF86AudioPlay, XF86AudioPause ] };
+ key <IR7D> { [ XF86AudioPrev ] };
+ key <IR7C> { [ XF86AudioPlay, XF86AudioPause ] };
};
// DELL USB Multimedia Keyboard (former 8135, generalized, superset of 8125)
@@ -707,7 +707,7 @@ xkb_symbols "dellusbmm" {
include "inet(media_nav_acpi_common)"
key <I02> { [ XF86HomePage ] };
key <K67> { [ XF86MyComputer ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
@@ -727,7 +727,7 @@ xkb_symbols "diamond" {
partial alphanumeric_keys
xkb_symbols "ennyah_dkb1008" {
include "inet(media_nav_acpi_common)"
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
@@ -1033,7 +1033,7 @@ xkb_symbols "logitech_set3" {
key <I55> { [ XF86Save ] }; // F8
key <I56> { [ XF86Documents ] }; // F10
key <I69> { [ XF86Go ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
// Logitech Access Keyboard
@@ -1170,7 +1170,7 @@ xkb_symbols "logidinovo" {
key <I21> { [ XF86AudioRaiseVolume ] };
key <K66> { [ XF86AudioLowerVolume ] };
key <KPDC> { [ XF86AudioMute ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
partial alphanumeric_keys
@@ -1179,7 +1179,7 @@ xkb_symbols "logidinovoedge" {
key <I02> { [ XF86HomePage ] };
key <I6C> { [ XF86Mail ] };
key <FK17> { [ XF86Search ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
partial alphanumeric_keys
@@ -1218,8 +1218,8 @@ xkb_symbols "logitech_g15" {
key <K74> { [ XF86WWW ] };
key <K75> { [ XF86LaunchE ] };
key <II5D> { [ XF86Launch1 ] };
- key <NFER> { [ XF86Launch2 ] };
- key <XFER> { [ XF86Launch8 ] };
+ key <IR7D> { [ XF86Launch2 ] };
+ key <IR7C> { [ XF86Launch8 ] };
};
@@ -1364,7 +1364,7 @@ xkb_symbols "microsoftprose" {
key <I63> { [ XF86Standby ] };
key <I68> { [ XF86AudioStop ] };
key <PRSC> { [ XF86MyComputer ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
// Microsoft Office Keyboard
@@ -1511,7 +1511,7 @@ xkb_symbols "samsung4500" {
key <I18> { [ XF86Eject ] };
key <I26> { [ Help ] };
key <I59> { [ XF86Explorer ] };
- key <NFER> { [ XF86Launch2 ] };
+ key <IR7D> { [ XF86Launch2 ] };
};
// Samsung SDM 4510P
@@ -1521,7 +1521,7 @@ xkb_symbols "samsung4510" {
key <I02> { [ XF86Launch1 ] };
key <I04> { [ XF86Launch3 ] };
key <I18> { [ XF86Eject ] };
- key <NFER> { [ XF86Launch2 ] };
+ key <IR7D> { [ XF86Launch2 ] };
};
@@ -1748,7 +1748,7 @@ xkb_symbols "cymotionlinux" {
key <I78> { [ XF86Copy ] };
key <K65> { [ XF86Paste ] };
key <K75> { [ XF86ScrollUp ] };
- key <XFER> { [ XF86AudioMedia ] };
+ key <IR7C> { [ XF86AudioMedia ] };
};
partial alphanumeric_keys
diff --git a/xorg-server/xkeyboard-config/symbols/ir b/xorg-server/xkeyboard-config/symbols/ir
index 983bf60d9..1be5e7a22 100644
--- a/xorg-server/xkeyboard-config/symbols/ir
+++ b/xorg-server/xkeyboard-config/symbols/ir
@@ -26,7 +26,7 @@ xkb_symbols "pes" {
partial alphanumeric_keys
xkb_symbols "pes_keypad" {
- name[Group1]= "Persian (with Persian Keypad)";
+ name[Group1]= "Persian (with Persian keypad)";
include "ir(pes_part_basic)"
include "ir(pes_part_keypad)"
diff --git a/xorg-server/xkeyboard-config/symbols/is b/xorg-server/xkeyboard-config/symbols/is
index 34d6bed33..93af3f803 100644
--- a/xorg-server/xkeyboard-config/symbols/is
+++ b/xorg-server/xkeyboard-config/symbols/is
@@ -193,11 +193,12 @@ xkb_symbols "mac" {
// Icelandic Dvorak
partial alphanumeric_keys
xkb_symbols "dvorak" {
- name[Group1]= "Icelandic (Dvorak)";
include "us(dvorak)"
include "eurosign(4)"
+ name[Group1]= "Icelandic (Dvorak)";
+
key <AD11> { [ slash, question, U201e, U201c ] };
key <AC06> { [ d, D, eth, ETH ] };
key <AC10> { [ s, S, ae, AE ] };
diff --git a/xorg-server/xkeyboard-config/symbols/it b/xorg-server/xkeyboard-config/symbols/it
index 8a66a306a..8dd4365de 100644
--- a/xorg-server/xkeyboard-config/symbols/it
+++ b/xorg-server/xkeyboard-config/symbols/it
@@ -33,8 +33,6 @@ xkb_symbols "basic" {
key <LSGT> { [ less, greater,guillemotleft,guillemotright] };
- include "kpdl(comma)"
-
include "level3(ralt_switch)"
};
@@ -63,6 +61,14 @@ xkb_symbols "nodeadkeys" {
key <BKSL> { [ ugrave, section, grave, breve ] };
};
+partial alphanueric_keys
+xkb_symbols "winkeys" {
+
+ include "it(basic)"
+ name[Group1]="Italian (Winkeys)";
+ include "eurosign(5)"
+};
+
// Copied from macintosh_vndr/it
partial alphanumeric_keys
xkb_symbols "mac" {
diff --git a/xorg-server/xkeyboard-config/symbols/jp b/xorg-server/xkeyboard-config/symbols/jp
index 52f574623..f0b2c4d75 100644
--- a/xorg-server/xkeyboard-config/symbols/jp
+++ b/xorg-server/xkeyboard-config/symbols/jp
@@ -243,8 +243,8 @@ xkb_symbols "nicola_f_bs" {
// Copied from macintosh_vndr/jp
partial alphanumeric_keys
xkb_symbols "mac" {
- name[Group1]= "Japanese (Macintosh)";
include "jp(kana)"
+ name[Group1]= "Japanese (Macintosh)";
replace key <CAPS> { [ Caps_Lock ] };
};
@@ -256,8 +256,8 @@ xkb_symbols "hztg_escape" {
partial alphanumeric_keys
xkb_symbols "dvorak" {
- name[Group1]= "Japanese (Dvorak)";
include "jp(OADG109A)"
+ name[Group1]= "Japanese (Dvorak)";
key <AE11> { [ at, grave ] };
diff --git a/xorg-server/xkeyboard-config/symbols/ma b/xorg-server/xkeyboard-config/symbols/ma
index 2d128837e..db7b5bb38 100644
--- a/xorg-server/xkeyboard-config/symbols/ma
+++ b/xorg-server/xkeyboard-config/symbols/ma
@@ -82,9 +82,9 @@ xkb_symbols "tifinagh" {
partial alphanumeric_keys
xkb_symbols "tifinagh-phonetic" {
+ include "ma(tifinagh)"
name[Group1]="Berber (Morocco, Tifinagh phonetic)";
- include "ma(tifinagh)"
key <LatA> { [ 0x1002d30 ] };
key <LatZ> { [ 0x1002d63, 0x1002d65 ] };
diff --git a/xorg-server/xkeyboard-config/symbols/nl b/xorg-server/xkeyboard-config/symbols/nl
index 1dde405f8..76cb0183e 100644
--- a/xorg-server/xkeyboard-config/symbols/nl
+++ b/xorg-server/xkeyboard-config/symbols/nl
@@ -49,8 +49,6 @@ xkb_symbols "basic" {
key <LSGT> { [bracketright, bracketleft, bar, brokenbar ] };
- include "kpdl(comma)"
-
include "level3(ralt_switch)"
};
diff --git a/xorg-server/xkeyboard-config/symbols/no b/xorg-server/xkeyboard-config/symbols/no
index 5609de06e..fe79d9ba4 100644
--- a/xorg-server/xkeyboard-config/symbols/no
+++ b/xorg-server/xkeyboard-config/symbols/no
@@ -52,6 +52,14 @@ xkb_symbols "nodeadkeys" {
key <AB09> { [ period, colon, periodcentered, abovedot ] };
};
+partial alphanumeric_keys
+xkb_symbols "winkeys" {
+
+ include "no(basic)"
+ name[Group1]="Norwegian (Winkeys)";
+ include "eurosign(5)"
+};
+
// Norwegian Dvorak
partial alphanumeric_keys
xkb_symbols "dvorak" {
diff --git a/xorg-server/xkeyboard-config/symbols/rs b/xorg-server/xkeyboard-config/symbols/rs
index 86b54632a..06025e17e 100644
--- a/xorg-server/xkeyboard-config/symbols/rs
+++ b/xorg-server/xkeyboard-config/symbols/rs
@@ -40,12 +40,10 @@ xkb_symbols "latin" {
partial alphanumeric_keys
xkb_symbols "yz" {
- // Cyrillic_zhe and Cyrillic_ze swapped.
-
- name[Group1]= "Serbian (Cyrillic, Z and ZHE swapped)";
-
include "rs(basic)"
+ name[Group1]= "Serbian (Cyrillic, ZE and ZHE swapped)";
+
key <AD06> { [ Cyrillic_zhe, Cyrillic_ZHE, any,any ] }; // y
key <AB01> { [ Cyrillic_ze, Cyrillic_ZE, any,any ] }; // z
};
@@ -247,9 +245,10 @@ xkb_symbols "latinunicode" {
// This mapping supports the Unicode characters 0x1c4-0x1cc (dz, lj, and nj
// as single character). You get the title form with AltGr+Shift.
+ include "rs(latin)"
+
name[Group1]= "Serbian (Latin Unicode)";
- include "rs(latin)"
include "rs(twoletter)"
};
@@ -257,10 +256,10 @@ partial alphanumeric_keys
xkb_symbols "latinyz" {
// For those who insist on using "english-position" Z and Y.
- name[Group1]= "Serbian (Latin qwerty)";
-
include "rs(latin)"
+ name[Group1]= "Serbian (Latin qwerty)";
+
key <AD06> { [ y, Y, any,any ] }; // y
key <AB01> { [ z, Z, any,any ] }; // z
};
@@ -269,10 +268,10 @@ partial alphanumeric_keys
xkb_symbols "latinunicodeyz" {
// Unicode, ZHE and Z swapped.
- name[Group1]= "Serbian (Latin Unicode qwerty)";
-
include "rs(latinunicode)"
+ name[Group1]= "Serbian (Latin Unicode qwerty)";
+
key <AD06> { [ zcaron, Zcaron, any,any ] }; // y
key <AB01> { [ z, Z, any,any ] }; // z
};
@@ -280,10 +279,10 @@ xkb_symbols "latinunicodeyz" {
xkb_symbols "alternatequotes" {
// Another acceptable »pair of quotes« for Serbian
- name[Group1]= "Serbian (Cyrillic with guillemets)";
-
include "rs(basic)"
+ name[Group1]= "Serbian (Cyrillic with guillemets)";
+
key <AC02> { [ any,any, guillemotright, NoSymbol ] }; // s
key <AC03> { [ any,any, guillemotleft, NoSymbol ] }; // d
};
@@ -291,10 +290,10 @@ xkb_symbols "alternatequotes" {
xkb_symbols "latinalternatequotes" {
// Another acceptable »pair of quotes« for Serbian
- name[Group1]= "Serbian (Latin with guillemets)";
-
include "rs(latin)"
+ name[Group1]= "Serbian (Latin with guillemets)";
+
key <AC02> { [ any,any, guillemotright, NoSymbol ] }; // s
key <AC03> { [ any,any, guillemotleft, NoSymbol ] }; // d
};
@@ -306,10 +305,10 @@ xkb_symbols "rue" {
// Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga@zoho.com>
// Mihajlo Hornjak <smeceiotpad@gmail.com>
- name[Group1]= "Pannonian Rusyn";
-
include "rs(basic)"
+ name[Group1]= "Pannonian Rusyn";
+
key <TLDE> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; // `
key <AD01> { [ Cyrillic_ya, Cyrillic_YA ] }; // q
@@ -330,10 +329,10 @@ xkb_symbols "combiningkeys" {
// Raw combining characters instead of dead keys,
// especially good for post-accenting texts.
- name[Group1]= "Serbian (combining accents instead of dead keys)";
-
include "rs(basic)"
+ name[Group1]= "Serbian (combining accents instead of dead keys)";
+
key <AE03> { [ any,any, U0302, dead_circumflex ] }; // 3, U0302 = COMBINING CIRCUMFLEX ACCENT
key <AE07> { [ any,any, U0300, NoSymbol ] }; // 7, U0300 = COMBINING GRAVE ACCENT
key <AE08> { [ any,any, U030F, NoSymbol ] }; // 8, U030F = COMBINING DOUBLE GRAVE ACCENT
diff --git a/xorg-server/xkeyboard-config/symbols/ru b/xorg-server/xkeyboard-config/symbols/ru
index 043e011e6..782a3d75a 100644
--- a/xorg-server/xkeyboard-config/symbols/ru
+++ b/xorg-server/xkeyboard-config/symbols/ru
@@ -201,7 +201,7 @@ xkb_symbols "phonetic" {
key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AE12> { [ Cyrillic_softsign, Cyrillic_softsign ] };
+ key <AE12> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
key <BKSL> { [ Cyrillic_e, Cyrillic_E ] };
};
@@ -214,7 +214,7 @@ xkb_symbols "phonetic_winkeys" {
key <LatX> { [ Cyrillic_ha, Cyrillic_HA ] };
key <LatH> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AE12> { [ Cyrillic_softsign, Cyrillic_softsign ] };
+ key <AE12> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
};
diff --git a/xorg-server/xkeyboard-config/symbols/se b/xorg-server/xkeyboard-config/symbols/se
index 7c37d2a1d..320a1861d 100644
--- a/xorg-server/xkeyboard-config/symbols/se
+++ b/xorg-server/xkeyboard-config/symbols/se
@@ -48,10 +48,10 @@ xkb_symbols "nodeadkeys" {
partial alphanumeric_keys
xkb_symbols "dvorak" {
- name[Group1]="Swedish (Dvorak)";
-
include "se(basic)"
+ name[Group1]="Swedish (Dvorak)";
+
key <AD01> { [ aring, Aring, backslash ] };
key <AD02> { [ adiaeresis, Adiaeresis, braceleft, bracketleft ] };
key <AD03> { [ odiaeresis, Odiaeresis, braceright, bracketright ] };
@@ -202,10 +202,10 @@ xkb_symbols "mac" {
partial alphanumeric_keys
xkb_symbols "svdvorak" {
- name[Group1]="Swedish (Svdvorak)";
-
include "se(basic)"
+ name[Group1]="Swedish (Svdvorak)";
+
key <AD01> { [ aring, Aring, braceleft ] };
key <AD02> { [ comma, semicolon, bracketleft ] };
key <AD03> { [ period, colon, bracketright ] };
diff --git a/xorg-server/xkeyboard-config/symbols/si b/xorg-server/xkeyboard-config/symbols/si
index cff5f5602..7e214fba8 100644
--- a/xorg-server/xkeyboard-config/symbols/si
+++ b/xorg-server/xkeyboard-config/symbols/si
@@ -1,30 +1,29 @@
default partial alphanumeric_keys
xkb_symbols "basic" {
- name[Group1]="Slovenian";
-
include "rs(latin)"
+ name[Group1]="Slovenian";
+
key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] };
};
partial alphanumeric_keys
xkb_symbols "us" {
- name[Group1]= "Slovenian (US keyboard with Slovenian letters)";
-
include "rs(latinyz)"
+ name[Group1]= "Slovenian (US keyboard with Slovenian letters)";
+
key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] };
};
-
partial alphanumeric_keys
xkb_symbols "alternatequotes" {
- name[Group1]= "Slovenian (use guillemets for quotes)";
-
include "rs(latinalternatequotes)"
+ name[Group1]= "Slovenian (with guillemets for quotes)";
+
key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] };
};
diff --git a/xorg-server/xkeyboard-config/symbols/tm b/xorg-server/xkeyboard-config/symbols/tm
index e861b35c3..6c71f48bf 100644
--- a/xorg-server/xkeyboard-config/symbols/tm
+++ b/xorg-server/xkeyboard-config/symbols/tm
@@ -3,9 +3,10 @@
// Default layout (based on Vista Turkmen layout)
default partial
xkb_symbols "basic" {
- name[Group1]="Turkmen";
include "us"
+ name[Group1]="Turkmen";
+
key <TLDE> { [ zcaron, Zcaron, grave, asciitilde ] };
key <AD01> { [ adiaeresis, Adiaeresis, q, Q ] };
@@ -25,9 +26,9 @@ xkb_symbols "basic" {
// This layout provides turkmen letter via the AltGr key
partial
xkb_symbols "alt" {
- name[Group1]="Turkmen (Alt-Q)";
include "us"
+ name[Group1]="Turkmen (Alt-Q)";
key <AD06> { [ y, Y, yacute, Yacute ] };
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
@@ -41,5 +42,4 @@ xkb_symbols "alt" {
key <AB06> { [ n, N, ncaron, Ncaron ] };
include "level3(ralt_switch)"
-
};
diff --git a/xorg-server/xkeyboard-config/symbols/tw b/xorg-server/xkeyboard-config/symbols/tw
index 8ea31dda6..3a2287222 100644
--- a/xorg-server/xkeyboard-config/symbols/tw
+++ b/xorg-server/xkeyboard-config/symbols/tw
@@ -1,10 +1,10 @@
default partial alphanumeric_keys
xkb_symbols "tw" {
- name[Group1]= "Taiwanese";
-
include "us(basic)"
+ name[Group1]= "Taiwanese";
+
key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
key <AE01> { [ 1, exclam, U030D, exclamdown ] };
key <AE02> { [ 2, at, U0358, twosuperior ] };
@@ -49,10 +49,10 @@ xkb_symbols "tw" {
partial alphanumeric_keys
xkb_symbols "indigenous" {
- name[Group1]= "Taiwanese (indigenous)";
-
include "tw(tw)"
+ name[Group1]= "Taiwanese (indigenous)";
+
key <AC11> { [ U02BC, quotedbl, apostrophe, dead_doubleacute ] };
include "level3(ralt_switch)"
@@ -61,10 +61,10 @@ xkb_symbols "indigenous" {
partial alphanumeric_keys
xkb_symbols "saisiyat" {
- name[Group1]= "Saisiyat (Taiwan)";
-
include "tw(indigenous)"
+ name[Group1]= "Saisiyat (Taiwan)";
+
key <AC10> { [ U02D0, colon, semicolon, dead_diaeresis ] };
include "level3(ralt_switch)"
diff --git a/xorg-server/xkeyboard-config/symbols/ua b/xorg-server/xkeyboard-config/symbols/ua
index 9aea09e05..81d696ec4 100644
--- a/xorg-server/xkeyboard-config/symbols/ua
+++ b/xorg-server/xkeyboard-config/symbols/ua
@@ -12,7 +12,7 @@ xkb_symbols "unicode" {
name[Group1]= "Ukrainian";
key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol
- key <AE02> { [ 1, exclam, onesuperior ] };
+ key <AE01> { [ 1, exclam, onesuperior ] };
key <AE02> { [ 2, quotedbl, twosuperior ] };
key <AE03> { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign
key <AE04> { [ 4, semicolon, dollar, EuroSign ] };
diff --git a/xorg-server/xkeyboard-config/symbols/us b/xorg-server/xkeyboard-config/symbols/us
index 4948a6345..d5a6c18e4 100644
--- a/xorg-server/xkeyboard-config/symbols/us
+++ b/xorg-server/xkeyboard-config/symbols/us
@@ -59,9 +59,8 @@ xkb_symbols "basic" {
partial alphanumeric_keys
xkb_symbols "euro" {
- name[Group1]= "English (US, with euro on 5)";
-
include "us(basic)"
+ name[Group1]= "English (US, with euro on 5)";
include "eurosign(5)"
@@ -72,9 +71,8 @@ xkb_symbols "euro" {
partial alphanumeric_keys
xkb_symbols "intl" {
- name[Group1]= "English (US, international with dead keys)";
-
include "us(basic)"
+ name[Group1]= "English (US, international with dead keys)";
key <TLDE> { [dead_grave, dead_tilde, grave, asciitilde ] };
key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
@@ -163,9 +161,8 @@ xkb_symbols "intl" {
partial alphanumeric_keys
xkb_symbols "alt-intl" {
- name[Group1]= "English (US, alternative international)";
-
include "us"
+ name[Group1]= "English (US, alternative international)";
key <TLDE> { [ dead_grave, dead_tilde, grave, asciitilde ] };
key <AE05> { [ 5, percent, EuroSign ] };
@@ -257,9 +254,8 @@ xkb_symbols "dvorak" {
partial alphanumeric_keys
xkb_symbols "dvorak-intl" {
- name[Group1]= "English (Dvorak, international with dead keys)";
-
include "us(dvorak)"
+ name[Group1]= "English (Dvorak, international with dead keys)";
key <TLDE> { [dead_grave, dead_tilde, grave, asciitilde ] };
@@ -336,9 +332,8 @@ xkb_symbols "dvorak-intl" {
partial alphanumeric_keys
xkb_symbols "dvorak-alt-intl" {
- name[Group1]= "English (Dvorak alternative international no dead keys)";
-
include "us(dvorak)"
+ name[Group1]= "English (Dvorak alternative international no dead keys)";
key <AE04> { [ 4, dollar, EuroSign ] };
@@ -548,8 +543,8 @@ xkb_symbols "dvorak-classic" {
// symbols that usually follows, accented characters are possible for I18N.
partial alphanumeric_keys
xkb_symbols "dvp" {
- include "us(dvorak)"
+ include "us(dvorak)"
name[Group1] = "English (programmer Dvorak)";
// Unmodified Shift AltGr Shift+AltGr
@@ -619,9 +614,8 @@ xkb_symbols "dvp" {
partial alphanumeric_keys
xkb_symbols "rus" {
- name[Group1]= "Russian (US, phonetic)";
-
include "us(basic)"
+ name[Group1]= "Russian (US, phonetic)";
key.type[group1]="FOUR_LEVEL_ALPHABETIC";
@@ -732,6 +726,7 @@ xkb_symbols "mac" {
partial alphanumeric_keys
xkb_symbols "colemak" {
+
include "us"
name[Group1]= "English (Colemak)";
@@ -812,9 +807,8 @@ xkb_symbols "colemak" {
partial alphanumeric_keys
xkb_symbols "altgr-intl" {
- name[Group1]= "English (international AltGr dead keys)";
-
include "us(intl)"
+ name[Group1]= "English (international AltGr dead keys)";
// five dead keys moved into level3:
@@ -1175,9 +1169,8 @@ xkb_symbols "chr" {
partial alphanumeric_keys
xkb_symbols "hbs" {
- name[Group1]= "Serbo-Croatian (US)";
-
include "us"
+ name[Group1]= "Serbo-Croatian (US)";
key <TLDE> { [ grave, asciitilde ] };
key <AE06> { [ 6, dead_caron, asciicircum, asciicircum ] };
@@ -1247,9 +1240,8 @@ xkb_symbols "htcdream" {
partial alphanumeric_keys
xkb_symbols "workman" {
- name[Group1]= "English (Workman)";
-
include "us(basic)"
+ name[Group1]= "English (Workman)";
key <AD01> { [ q, Q ] };
key <AD02> { [ d, D ] };
@@ -1289,9 +1281,8 @@ xkb_symbols "workman" {
partial alphanumeric_keys
xkb_symbols "workman-intl" {
- name[Group1]= "English (Workman, international with dead keys)";
-
include "us(intl)"
+ name[Group1]= "English (Workman, international with dead keys)";
key <AD01> { [ q, Q, adiaeresis, Adiaeresis ] };
key <AD02> { [ d, D, eth, ETH ] };
@@ -1337,11 +1328,9 @@ xkb_symbols "workman-intl" {
partial alphanumeric_keys
xkb_symbols "norman" {
- name[Group1]= "English (Norman)";
-
include "us(basic)"
+ name[Group1]= "English (Norman)";
- // Alphanumeric section
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ d, D ] };
@@ -1371,7 +1360,6 @@ xkb_symbols "norman" {
key <AB05> { [ b, B ] };
key <AB06> { [ p, P ] };
key <AB07> { [ m, M ] };
- // End alphanumeric section
key <CAPS> { [ BackSpace ] };
@@ -1383,6 +1371,7 @@ xkb_symbols "norman" {
// Czech, Slovak and German charecters added as third level symbols to US keyboard layout.
partial alphanumeric_keys
xkb_symbols "cz_sk_de" {
+
include "us"
name[Group1]="Czech Slovak and German (US)";
@@ -1518,7 +1507,6 @@ partial alphanumeric_keys
xkb_symbols "ats" {
include "us"
-
name[Group1]= "Atsina";
//Using Dead key to get COMBINING COMMA ABOVE for ejectives on
@@ -1548,7 +1536,6 @@ partial alphanumeric_keys
xkb_symbols "crd" {
include "us"
-
name[Group1]= "Coeur d'Alene Salish";
key <AD02> { [ w, W, U02B7, U02B7 ] };