Accelerated 3D sometimes works, sometimes doesn't

Wednesday, April 12, 2017

Working 3D accelerated guest on Big

It looks like accelerated 3D works well on Big, if I follow the same setup as on March 6. There are a few selinux warnings, but they don't seem to have any visible negative side effect.

On Muse, it does not always work well when connected over VNC

[Apr12 18:30] ------------[ cut here ]------------

[ +0.000014] WARNING: CPU: 3 PID: 265 at drivers/gpu/drm/drm_atomic_helper.c:1549 drm_atomic_helper_commit_hw_done+0xa6/0xb0 [drm_kms_helper] [ +0.000001] Modules linked in: uinput nf_conntrack_netbios_ns nf_conntrack_broadcast ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 xt_conntrack ip_set nfnetlink ebtable_broute bridge stp llc ebtable_nat ip6table_raw ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security iptable_raw iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security ebtable_filter ebtables ip6table_filter ip6_tables snd_hda_codec_generic snd_hda_intel snd_hda_codec snd_hda_core crct10dif_pclmul crc32_pclmul snd_hwdep virtio_gpu snd_seq ppdev ghash_clmulni_intel snd_seq_device ttm snd_pcm joydev acpi_cpufreq tpm_tis drm_kms_helper snd_timer tpm_tis_core tpm drm i2c_piix4 parport_pc snd qemu_fw_cfg soundcore parport virtio_balloon nfsd auth_rpcgss [ +0.000033] nfs_acl lockd grace sunrpc btrfs xor raid6_pq virtio_net virtio_console virtio_blk virtio_rng ata_generic crc32c_intel pata_acpi serio_raw virtio_pci virtio_ring virtio [ +0.000011] CPU: 3 PID: 265 Comm: kworker/3:2 Not tainted 4.8.6-300.fc25.x86_64 #1 [ +0.000001] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 [ +0.000017] Workqueue: events drm_mode_rmfb_work_fn [drm] [ +0.000002] 0000000000000286 0000000071d03eb4 ffffa24036a23c08 ffffffffb23e5ebd [ +0.000003] 0000000000000000 0000000000000000 ffffa24036a23c48 ffffffffb20a0e8b [ +0.000002] 0000060d00000000 0000000000000000 ffffa2406dcc5a80 ffffffffc074c420 [ +0.000002] Call Trace: [ +0.000005] [] dump_stack+0x63/0x86 [ +0.000004] [] __warn+0xcb/0xf0 [ +0.000003] [] warn_slowpath_null+0x1d/0x20 [ +0.000006] [] drm_atomic_helper_commit_hw_done+0xa6/0xb0 [drm_kms_helper] [ +0.000004] [] vgdev_atomic_commit_tail+0x40/0x60 [virtio_gpu] [ +0.000006] [] commit_tail+0x3c/0x60 [drm_kms_helper] [ +0.000005] [] drm_atomic_helper_commit+0x85/0xa0 [drm_kms_helper] [ +0.000012] [] drm_atomic_commit+0x37/0x60 [drm] [ +0.000006] [] drm_atomic_helper_set_config+0x7d/0xb0 [drm_kms_helper] [ +0.000010] [] drm_mode_set_config_internal+0x65/0x110 [drm] [ +0.000010] [] drm_framebuffer_remove+0x106/0x150 [drm] [ +0.000009] [] drm_mode_rmfb_work_fn+0x43/0x60 [drm] [ +0.000002] [] process_one_work+0x184/0x430 [ +0.000002] [] worker_thread+0x4e/0x480 [ +0.000001] [] ? process_one_work+0x430/0x430 [ +0.000002] [] ? process_one_work+0x430/0x430 [ +0.000003] [] kthread+0xd8/0xf0 [ +0.000008] [] ret_from_fork+0x1f/0x40 [ +0.000002] [] ? kthread_worker_fn+0x180/0x180 [ +0.000002] ---[ end trace aaf156a1b3357b9f ]--- [ +10.414366] [drm:drm_atomic_helper_commit_cleanup_done [drm_kms_helper]] *ERROR* [CRTC:25:crtc-0] flip_done timed out [ +2.320508] fuse init (API version 7.25) [ +8.821306] input: spice vdagent tablet as /devices/virtual/input/input6

On-line meetings are exhausting

Three days spent in on-line meetings. This is quite exhausting, actually (they finish around 10PM my time), I'm starting to feel the drain.

Tao3D minor fix

Since I had reconstructed my 3D Fedora25 guest on Big (different disk, copies were not reliable), I had to reconstruct Tao3D. I did things differently this time, apparently, since I did it before updates.

By the way, being able to ssh into my guests easily is just great. Means I can easily have remote X11 on my primary machine (a MacBook with 3 monitors connected to it), so I can put my windows wherever I want, etc. Of course, when I get Spice really working, that will be a good alternative, but for now, it is not.

It turns out that there is a bug in the Qt 5.7.0 moc tool, which apparently forgets to set QT_VERSION. This results in build errors if you have a header that depends on this symbol. This is the case for the Tao3D help viewer. You get an error like this:

moc installdialog.h
compiling moc_installdialog.cpp
moc_installdialog.cpp: In static member function ‘static void InstallDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)’:
moc_installdialog.cpp:105:21: error: ‘class InstallDialog’ has no member named readResponseHeader’
         case 4: _t->readResponseHeader((*reinterpret_cast< const QHttpResponseHeader(*)>(_a[1]))); break;
                     ^~~~~~~~~~~~~~~~~~
moc_installdialog.cpp:105:66: error: ISO C++ forbids declaration of ‘type name’ with no type [-fpermissive]
         case 4: _t->readResponseHeader((*reinterpret_cast< const QHttpResponseHeader(*)>(_a[1]))); break;
                                                                  ^~~~~~~~~~~~~~~~~~~
moc_installdialog.cpp:105:66: error: expected ‘>’ before ‘QHttpResponseHeader’
moc_installdialog.cpp:105:66: error: expected ‘(’ before ‘QHttpResponseHeader’
moc_installdialog.cpp:105:87: error: expected primary-expression before ‘)’ token
 ->readResponseHeader((*reinterpret_cast< const QHttpResponseHeader(*)>(_a[1]))); break;
                                                                     ^
moc_installdialog.cpp:105:87: error: ‘QHttpResponseHeader’ was not declared in this scope
M

The fix is relatively easy, if a little bit on the dirty side.