1//go:build linux
2
3package vkdevice
4
5import (
6 "golang.org/x/sys/unix"
7 "os"
8 "testing"
9)
10
11func TestModifierIntersection(t *testing.T) {
12 tranches := []Format{{XRGB8888, 11}, {ARGB8888, 22}, {XRGB8888, 33}, {ARGB8888, 44}}
13 for _, tc := range []struct {
14 alpha bool
15 available map[uint64]bool
16 want uint64
17 }{
18 {false, map[uint64]bool{11: true, 33: true}, 11},
19 {false, map[uint64]bool{33: true}, 33},
20 {true, map[uint64]bool{11: true, 22: true, 44: true}, 22},
21 {true, map[uint64]bool{11: true, 44: true}, 44},
22 } {
23 got, err := ChooseModifier(tranches, tc.alpha, tc.available)
24 if err != nil || got.Value != tc.want {
25 t.Fatalf("alpha=%v want=%d got=%+v err=%v", tc.alpha, tc.want, got, err)
26 }
27 }
28 if _, err := ChooseModifier(tranches, true, map[uint64]bool{11: true, 33: true}); err == nil {
29 t.Fatal("transparent accepted XRGB")
30 }
31}
32
33func TestExportableModifiersHardware(t *testing.T) {
34 path := os.Getenv("NEFERGUI_RENDER_NODE")
35 if path == "" {
36 t.Skip("set NEFERGUI_RENDER_NODE to matching DRM render node")
37 }
38 var stat unix.Stat_t
39 if err := unix.Stat(path, &stat); err != nil {
40 t.Fatal(err)
41 }
42 d, err := Open(DeviceIdentity(uint64(stat.Rdev)))
43 if err != nil {
44 t.Fatal(err)
45 }
46 defer d.Close()
47 mods, err := d.ExportableModifiers()
48 if err != nil {
49 t.Fatal(err)
50 }
51 if len(mods) == 0 {
52 t.Fatal("matched Vulkan device has no one-plane exportable B8G8R8A8 color+readback modifiers")
53 }
54 for mod := range mods {
55 t.Logf("render node %s exportable DRM modifier %#x", path, mod)
56 }
57}