Hello community, here is the log from the commit of package vkmark for openSUSE:Factory checked in at 2020-06-11 14:53:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/vkmark (Old) and /work/SRC/openSUSE:Factory/.vkmark.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vkmark" Thu Jun 11 14:53:47 2020 rev:5 rq:813427 version:2017.08+git.20200521 Changes: -------- --- /work/SRC/openSUSE:Factory/vkmark/vkmark.changes 2019-12-21 12:31:26.751365076 +0100 +++ /work/SRC/openSUSE:Factory/.vkmark.new.3606/vkmark.changes 2020-06-11 14:54:57.827326747 +0200 @@ -1,0 +2,15 @@ +Fri May 22 07:09:01 UTC 2020 - Martin Pluskal <[email protected]> + +- Update to version 2017.08+git.20200521: + * core: Use generated map of pixel formats to handle --pixel-format option + * core: Fix crash with newer vulkan-hpp + * doc: Update README.md with new wayland dependencies + * ci: Update packages dependencies for wayland + * wayland: Port to xdg-shell + * wayland: Mark the whole surface as opaque + * wayland: Retain native size in hidpi scaled outputs + * ci: Add build and test github workflow + * Fix build against glm-0.9.9.6 + * build: Specify meson version as 0.45 + +------------------------------------------------------------------- Old: ---- vkmark-2017.08+git.20191115.obscpio New: ---- _servicedata vkmark-2017.08+git.20200521.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ vkmark.spec ++++++ --- /var/tmp/diff_new_pack.KGpWLD/_old 2020-06-11 14:55:06.239352699 +0200 +++ /var/tmp/diff_new_pack.KGpWLD/_new 2020-06-11 14:55:06.243352711 +0200 @@ -1,7 +1,7 @@ # # spec file for package vkmark # -# Copyright (c) 2019 SUSE LLC +# Copyright (c) 2020 SUSE LLC # Copyright (c) 2018-2019 Malcolm J Lewis <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -18,7 +18,7 @@ Name: vkmark -Version: 2017.08+git.20191115 +Version: 2017.08+git.20200521 Release: 0 Summary: Vulkan benchmark utility License: LGPL-2.1-or-later @@ -26,12 +26,13 @@ Source0: %{name}-%{version}.tar.xz BuildRequires: gcc-c++ BuildRequires: glm-devel -BuildRequires: meson +BuildRequires: meson >= 0.45 BuildRequires: pkgconfig BuildRequires: pkgconfig(assimp) BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(vulkan) +BuildRequires: pkgconfig(wayland-protocols) BuildRequires: pkgconfig(xcb) BuildRequires: pkgconfig(xcb-icccm) ExcludeArch: %{arm} %{ix86} ++++++ _servicedata ++++++ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/vkmark/vkmark</param> <param name="changesrevision">e8c0720f3251e50aa8e777f44e3c2406dceb919c</param></service></servicedata>++++++ vkmark-2017.08+git.20191115.obscpio -> vkmark-2017.08+git.20200521.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/.github/workflows/build.yml new/vkmark-2017.08+git.20200521/.github/workflows/build.yml --- old/vkmark-2017.08+git.20191115/.github/workflows/build.yml 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/.github/workflows/build.yml 2020-05-21 12:17:11.000000000 +0200 @@ -16,7 +16,7 @@ - name: Install dependencies run: > sudo apt install meson libvulkan-dev libglm-dev libassimp-dev - libxcb1-dev libxcb-icccm4-dev libwayland-dev + libxcb1-dev libxcb-icccm4-dev libwayland-dev wayland-protocols libdrm-dev libgbm-dev - name: Setup run: meson setup build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/README.md new/vkmark-2017.08+git.20200521/README.md --- old/vkmark-2017.08+git.20191115/README.md 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/README.md 2020-05-21 12:17:11.000000000 +0200 @@ -21,6 +21,7 @@ for the wayland backend: * libwayland-client and development files + * wayland-protocols >= 1.12 for the KMS backend: @@ -29,7 +30,7 @@ On a recent Debian/Ubuntu system you can get all the dependencies with: - `$ sudo apt install meson libvulkan-dev libglm-dev libassimp-dev libxcb1-dev libxcb-icccm4-dev libwayland-dev libdrm-dev libgbm-dev` + `$ sudo apt install meson libvulkan-dev libglm-dev libassimp-dev libxcb1-dev libxcb-icccm4-dev libwayland-dev wayland-protocols libdrm-dev libgbm-dev` # Building and installing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/meson.build new/vkmark-2017.08+git.20200521/meson.build --- old/vkmark-2017.08+git.20191115/meson.build 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/meson.build 2020-05-21 12:17:11.000000000 +0200 @@ -1,6 +1,6 @@ project( 'vkmark', - 'cpp', + ['cpp', 'c'], default_options : ['cpp_std=c++14'], version : '2017.08', meson_version: '>=0.45' @@ -16,7 +16,7 @@ cpp = meson.get_compiler('cpp') -vulkan_dep = cpp.find_library('vulkan') +vulkan_dep = dependency('vulkan') dl_dep = cpp.find_library('dl') glm_dep = dependency('glm', required: false) if not glm_dep.found() and not cpp.has_header('glm/glm.hpp') @@ -27,6 +27,9 @@ xcb_dep = dependency('xcb', required : get_option('xcb') == 'true') xcb_icccm_dep = dependency('xcb-icccm', required : get_option('xcb') == 'true') wayland_client_dep = dependency('wayland-client', required : get_option('wayland') == 'true') +wayland_protocols_dep = dependency('wayland-protocols', version : '>= 1.12', + required : get_option('wayland') == 'true') +wayland_scanner_dep = dependency('wayland-scanner', required : get_option('wayland') == 'true') libdrm_dep = dependency('libdrm', required : get_option('kms') == 'true') gbm_dep = dependency('gbm', required : get_option('kms') == 'true') has_vulkan_intel_header = cpp.has_header('vulkan/vulkan_intel.h', dependencies: vulkan_dep) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/gen_format_map.py new/vkmark-2017.08+git.20200521/src/gen_format_map.py --- old/vkmark-2017.08+git.20191115/src/gen_format_map.py 1970-01-01 01:00:00.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/gen_format_map.py 2020-05-21 12:17:11.000000000 +0200 @@ -0,0 +1,41 @@ +# Copyright © 2017 Collabora Ltd. +# +# This file is part of vkmark. +# +# vkmark is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 2.1 of the License, or (at your option) any later version. +# +# vkmark is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with vkmark. If not, see <http://www.gnu.org/licenses/>. +# +# Authors: +# Alexandros Frantzis <[email protected]> + +import sys + +infile = sys.argv[1] +outfile = sys.argv[2] + +in_formats = False + +with open(infile, 'r') as inf, open(outfile, 'w') as outf: + print("#include <unordered_map>", file=outf); + print("static std::unordered_map<std::string, vk::Format> format_map = {", file=outf) + for line in inf: + line = line.strip() + if in_formats: + if line.startswith('e'): + enum = line.split('=')[0].strip() + print(' {"%s", vk::Format::%s},' % (enum[1:].upper(), enum), file=outf) + if line.endswith('};'): + break + elif line.startswith('enum class Format'): + in_formats = True + print("};", file=outf) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/meson.build new/vkmark-2017.08+git.20200521/src/meson.build --- old/vkmark-2017.08+git.20191115/src/meson.build 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/meson.build 2020-05-21 12:17:11.000000000 +0200 @@ -1,3 +1,18 @@ +prog_python = find_program('python3') + +vulkan_hpp = join_paths([ + vulkan_dep.get_pkgconfig_variable('includedir'), + 'vulkan', + 'vulkan.hpp' + ]) + +format_map_gen_h = custom_target( + 'format_map_gen.h', + output: 'format_map_gen.h', + input: vulkan_hpp, + command: [prog_python, files('gen_format_map.py'), '@INPUT@', '@OUTPUT@'] + ) + core_sources = files( 'benchmark.cpp', 'benchmark_collection.cpp', @@ -12,7 +27,7 @@ 'util.cpp', 'vulkan_state.cpp', 'window_system_loader.cpp' - ) + ) + [format_map_gen_h] vkutil_sources = files( 'vkutil/buffer_builder.cpp', @@ -71,11 +86,30 @@ endif if build_wayland_ws + wayland_scanner = find_program(wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner')) + wayland_protocols_dir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir') + + xdg_shell_xml_path = wayland_protocols_dir + '/stable/xdg-shell/xdg-shell.xml' + xdg_shell_client_header = custom_target( + 'xdg-shell client-header', + command: [ wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@' ], + input: xdg_shell_xml_path, + output: 'xdg-shell-client-protocol.h', + ) + xdg_shell_private_code = custom_target( + 'xdg-shell private-code', + command: [ wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@' ], + input: xdg_shell_xml_path, + output: 'xdg-shell-protocol.c', + ) + wayland_ws = shared_module( 'wayland', 'ws/wayland_window_system_plugin.cpp', 'ws/wayland_native_system.cpp', 'ws/swapchain_window_system.cpp', + xdg_shell_client_header, + xdg_shell_private_code, dependencies : [vulkan_dep, wayland_client_dep], name_prefix : '', install : true, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/options.cpp new/vkmark-2017.08+git.20200521/src/options.cpp --- old/vkmark-2017.08+git.20191115/src/options.cpp 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/options.cpp 2020-05-21 12:17:11.000000000 +0200 @@ -28,6 +28,8 @@ #include "options.h" #include "util.h" +#include "format_map_gen.h" // Generated map from string to vk::Format + namespace { @@ -92,13 +94,9 @@ vk::Format parse_pixel_format(std::string const& str) { - for (auto e = static_cast<vk::Format>(VK_FORMAT_BEGIN_RANGE); - e < static_cast<vk::Format>(VK_FORMAT_END_RANGE); - e = static_cast<vk::Format>(static_cast<int>(e) + 1)) - { - if (normalize_pixel_format(to_string(e)) == normalize_pixel_format(str)) - return e; - } + auto const format_iter = format_map.find(normalize_pixel_format(str)); + if (format_iter != format_map.end()) + return format_iter->second; return vk::Format::eUndefined; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/vulkan_state.cpp new/vkmark-2017.08+git.20200521/src/vulkan_state.cpp --- old/vkmark-2017.08+git.20191115/src/vulkan_state.cpp 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/vulkan_state.cpp 2020-05-21 12:17:11.000000000 +0200 @@ -42,7 +42,7 @@ Log::info(" Vendor ID: 0x%X\n", props.vendorID); Log::info(" Device ID: 0x%X\n", props.deviceID); - Log::info(" Device Name: %s\n", props.deviceName); + Log::info(" Device Name: %s\n", static_cast<char const*>(props.deviceName)); Log::info(" Driver Version: %u\n", props.driverVersion); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/ws/wayland_native_system.cpp new/vkmark-2017.08+git.20200521/src/ws/wayland_native_system.cpp --- old/vkmark-2017.08+git.20191115/src/ws/wayland_native_system.cpp 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/ws/wayland_native_system.cpp 2020-05-21 12:17:11.000000000 +0200 @@ -48,11 +48,6 @@ { } -void handle_output_scale( - void* /*data*/, wl_output* /*wl_output*/, int32_t /*factor*/) -{ -} - void handle_keyboard_keymap( void* /*data*/, wl_keyboard* /*wl_keyboard*/, uint32_t /*format*/, int32_t /*fd*/, uint32_t /*size*/) @@ -84,17 +79,48 @@ { } +void handle_xdg_wm_base_ping( + void* /*data*/, xdg_wm_base* xdg_wm_base, uint32_t serial) +{ + xdg_wm_base_pong(xdg_wm_base, serial); +} + +void handle_xdg_surface_configure( + void* /*data*/, xdg_surface* xdg_surface, uint32_t serial) +{ + xdg_surface_ack_configure(xdg_surface, serial); +} + +void handle_xdg_toplevel_configure( + void* /*data*/, struct xdg_toplevel* /*xdg_toplevel*/, + int32_t /*width*/, int32_t /*height*/, wl_array* /*states*/) +{ } +} + +xdg_wm_base_listener const WaylandNativeSystem::xdg_wm_base_listener{ + handle_xdg_wm_base_ping, +}; + +xdg_toplevel_listener const WaylandNativeSystem::xdg_toplevel_listener{ + handle_xdg_toplevel_configure, + WaylandNativeSystem::handle_xdg_toplevel_close, +}; + +xdg_surface_listener const WaylandNativeSystem::xdg_surface_listener{ + handle_xdg_surface_configure, +}; + wl_seat_listener const WaylandNativeSystem::seat_listener{ WaylandNativeSystem::handle_seat_capabilities }; wl_output_listener const WaylandNativeSystem::output_listener{ handle_output_geometry, - handle_output_mode, + WaylandNativeSystem::handle_output_mode, handle_output_done, - handle_output_scale + WaylandNativeSystem::handle_output_scale }; wl_keyboard_listener const WaylandNativeSystem::keyboard_listener{ @@ -109,7 +135,12 @@ WaylandNativeSystem::WaylandNativeSystem(int width, int height) : requested_width{width}, requested_height{height}, - should_quit_{false} + should_quit_{false}, + display_fd{0}, + output_width{0}, + output_height{0}, + output_refresh{0}, + output_scale{1} { create_native_window(); } @@ -203,32 +234,57 @@ if (!surface) throw std::runtime_error("Failed to create Wayland surface"); - shell_surface = ManagedResource<wl_shell_surface*>{ - wl_shell_get_shell_surface(shell, surface), - wl_shell_surface_destroy}; - if (!shell_surface) - throw std::runtime_error("Failed to create Wayland shell surface"); + if (!xdg_wm_base) + { + throw std::runtime_error( + "Failed to create Wayland xdg_surface, xdg_wm_base not supported"); + } + + xdg_surface = ManagedResource<struct xdg_surface*>{ + xdg_wm_base_get_xdg_surface(xdg_wm_base, surface), + xdg_surface_destroy}; + if (!xdg_surface) + throw std::runtime_error("Failed to create Wayland xdg_surface"); + + xdg_surface_add_listener(xdg_surface, &xdg_surface_listener, this); + + xdg_toplevel = ManagedResource<struct xdg_toplevel*>{ + xdg_surface_get_toplevel(xdg_surface), + xdg_toplevel_destroy}; + if (!xdg_toplevel) + throw std::runtime_error("Failed to create Wayland xdg_toplevel"); + + xdg_toplevel_add_listener(xdg_toplevel, &xdg_toplevel_listener, this); - wl_shell_surface_set_title(shell_surface, "vkmark " VKMARK_VERSION_STR); + xdg_toplevel_set_app_id(xdg_toplevel, "com.github.vkmark.vkmark"); + xdg_toplevel_set_title(xdg_toplevel, "vkmark " VKMARK_VERSION_STR); if (fullscreen_requested()) { - wl_shell_surface_set_fullscreen( - shell_surface, - WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER, - output_refresh, - output); + xdg_toplevel_set_fullscreen(xdg_toplevel, output); vk_extent = vk::Extent2D{ static_cast<uint32_t>(output_width), static_cast<uint32_t>(output_height)}; } else { - wl_shell_surface_set_toplevel(shell_surface); vk_extent = vk::Extent2D{ static_cast<uint32_t>(requested_width), static_cast<uint32_t>(requested_height)}; } + + if (wl_proxy_get_version(reinterpret_cast<wl_proxy*>(output.raw)) >= + WL_OUTPUT_SCALE_SINCE_VERSION) + { + wl_surface_set_buffer_scale(surface, output_scale); + } + + auto const opaque_region = ManagedResource<wl_region*>{ + wl_compositor_create_region(compositor), wl_region_destroy}; + wl_region_add(opaque_region, 0, 0, vk_extent.width, vk_extent.height); + wl_surface_set_opaque_region(surface, opaque_region); + + wl_surface_commit(surface); } bool WaylandNativeSystem::fullscreen_requested() @@ -246,16 +302,18 @@ if (interface == "wl_compositor") { auto compositor_raw = static_cast<wl_compositor*>( - wl_registry_bind(registry, id, &wl_compositor_interface, 1)); + wl_registry_bind(registry, id, &wl_compositor_interface, + std::min(version, 4U))); wws->compositor = ManagedResource<wl_compositor*>{ std::move(compositor_raw), wl_compositor_destroy}; } - else if (interface == "wl_shell") + else if (interface == "xdg_wm_base") { - auto shell_raw = static_cast<wl_shell*>( - wl_registry_bind(registry, id, &wl_shell_interface, 1)); - wws->shell = ManagedResource<wl_shell*>{ - std::move(shell_raw), wl_shell_destroy}; + auto xdg_wm_base_raw = static_cast<struct xdg_wm_base*>( + wl_registry_bind( + registry, id, &xdg_wm_base_interface, std::min(version, 2U))); + wws->xdg_wm_base = ManagedResource<struct xdg_wm_base*>{ + std::move(xdg_wm_base_raw), xdg_wm_base_destroy}; } else if (interface == "wl_seat") { @@ -271,7 +329,8 @@ if (!wws->output) { auto output_raw = static_cast<wl_output*>( - wl_registry_bind(registry, id, &wl_output_interface, 1)); + wl_registry_bind(registry, id, &wl_output_interface, + std::min(version, 2U))); wws->output = ManagedResource<wl_output*>{ std::move(output_raw), wl_output_destroy}; @@ -281,6 +340,13 @@ } } +void WaylandNativeSystem::handle_xdg_toplevel_close( + void* data, struct xdg_toplevel* /*xdg_toplevel*/) +{ + auto const wws = static_cast<WaylandNativeSystem*>(data); + wws->should_quit_ = true; +} + void WaylandNativeSystem::handle_seat_capabilities( void* data, wl_seat* seat, uint32_t capabilities) { @@ -314,6 +380,13 @@ } } +void WaylandNativeSystem::handle_output_scale( + void* data, wl_output* /*output*/, int32_t factor) +{ + auto const wws = static_cast<WaylandNativeSystem*>(data); + wws->output_scale = factor; +} + void WaylandNativeSystem::handle_keyboard_key( void* data, wl_keyboard* /*wl_keyboard*/, uint32_t /*serial*/, uint32_t /*time*/, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vkmark-2017.08+git.20191115/src/ws/wayland_native_system.h new/vkmark-2017.08+git.20200521/src/ws/wayland_native_system.h --- old/vkmark-2017.08+git.20191115/src/ws/wayland_native_system.h 2019-11-15 10:20:50.000000000 +0100 +++ new/vkmark-2017.08+git.20200521/src/ws/wayland_native_system.h 2020-05-21 12:17:11.000000000 +0200 @@ -24,6 +24,7 @@ #define VK_USE_PLATFORM_WAYLAND_KHR #include "native_system.h" +#include "xdg-shell-client-protocol.h" #include <wayland-client.h> @@ -47,11 +48,15 @@ static void handle_registry_global( void* data, wl_registry* registry, uint32_t id, char const* interface, uint32_t version); + static void handle_xdg_toplevel_close( + void* data, xdg_toplevel* xdg_toplevel); static void handle_seat_capabilities( void* data, wl_seat* seat, uint32_t capabilities); static void handle_output_mode( void* data, wl_output* output, uint32_t flags, int32_t width, int32_t height, int32_t refresh); + static void handle_output_scale( + void* data, wl_output* output, int32_t factor); static void handle_keyboard_key( void* data, wl_keyboard* wl_keyboard, uint32_t serial, uint32_t time, @@ -60,6 +65,9 @@ static wl_seat_listener const seat_listener; static wl_keyboard_listener const keyboard_listener; static wl_output_listener const output_listener; + static struct xdg_wm_base_listener const xdg_wm_base_listener; + static struct xdg_toplevel_listener const xdg_toplevel_listener; + static struct xdg_surface_listener const xdg_surface_listener; int const requested_width; int const requested_height; @@ -67,15 +75,17 @@ ManagedResource<wl_display*> display; ManagedResource<wl_compositor*> compositor; - ManagedResource<wl_shell*> shell; + ManagedResource<struct xdg_wm_base*> xdg_wm_base; ManagedResource<wl_seat*> seat; ManagedResource<wl_output*> output; ManagedResource<wl_keyboard*> keyboard; ManagedResource<wl_surface*> surface; - ManagedResource<wl_shell_surface*> shell_surface; + ManagedResource<struct xdg_surface*> xdg_surface; + ManagedResource<struct xdg_toplevel*> xdg_toplevel; int display_fd; int32_t output_width; int32_t output_height; int32_t output_refresh; + int32_t output_scale; vk::Extent2D vk_extent; }; ++++++ vkmark.obsinfo ++++++ --- /var/tmp/diff_new_pack.KGpWLD/_old 2020-06-11 14:55:06.423353267 +0200 +++ /var/tmp/diff_new_pack.KGpWLD/_new 2020-06-11 14:55:06.427353279 +0200 @@ -1,5 +1,5 @@ name: vkmark -version: 2017.08+git.20191115 -mtime: 1573809650 -commit: 54f29c885b2c2c9f6a083cdfd171dcc814c2a306 +version: 2017.08+git.20200521 +mtime: 1590056231 +commit: e8c0720f3251e50aa8e777f44e3c2406dceb919c
