Along with Vulkan 1.3, Khronos also introduced Vulkan Profiles into the Vulkan ecosystem:
“The new Vulkan profile mechanism enables the precise specification and management of sets of API capabilities. Each profile specifies a core version of Vulkan plus a set of required extensions, with supported limits, features, and formats. Profiles provide a way to precisely communicate functionality requirements and device capabilities between participants in the Vulkan ecosystem to streamline the development and deployment of portable applications.”
The initial wave of profiles includes a Vulkan 2022 roadmap profile, an Android 2021 baseline profile and a LunarG desktop portability profile. Each defining their own sets of requirements.
Similar to extensions, features and structures, support for these varies, so adding them to the database was a natural fit.
The first new addition is reading and storing the list of supported profiles for device reports. This is similar to supported extensions, and the information is displayed in each report, in the report compare function and as a global coverage listing where you can check support for a given profile and platform.
Profile layer JSON downloads deprecates DevSim
The second change affects the device simulation layer. That layer allowed a user to simulate device limitations without actual access to that device using a JSON file. For some time now, the database allowed you to generate a JSON format for the device simulation layer from almost all reports. These allowed you to validate your application against limitations of device you don’t have access too.
That device simulation layer has been deprecated with the introduction of Vulkan Profiles, so all api routes and download links for device simulation layer JSON files have been removed.
Instead it’s now possible to generate a Vulkan Profile for a given report that you can then use with vkconfig (from LunarG’s SDK) to simulate that device.
These profile JSON files are generated at runtime, making them available for almost all reports in the database (except for some very early reports). So you can download profiles even for reports that have been uploaded with older versions of the client application. Making this possible wasn’t easy due to how data is stored in the database und how some devices report features and properties. I wanted to make sure that the generated profiles validate 100% clean against the used schemas, so the code to generate profiles is more complex than one might initially think. While implementing this I e.g. noticed that some reports seem to report “non-valid” api versions like 1.3.194 (first header for 1.3 was 204) which caused some troubles with selecting and validating against the proper JSON schema. But together with Christophe Riccio from LunarG we came up with a good solution: Schemas for the profiles are named by the header revision, so when generating a profile for a report, I use the schema that matches the header revision of the api (in above case 194). To then make sure that the profile is properly validating, I remove extensions and feature and property structures not defined in that api version (via the schema file). So for most reports in the database, you should be able to get 100% clean profile files to use with LunarG’s layer. Additional notes on how this works with regards to the database can be found here.
Vulkan Hardware Capability Viewer 3.2
The new version of the client application is available for Windows, Linux (X11 and Wayland), Mac OSX and Android on the download page. If you have already submitted a device with an older version, you may be able to update the device report with the newly added profile information.