-
Notifications
You must be signed in to change notification settings - Fork 782
Add VK_KHR_pipeline_binary sample #1418
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Introduce a new Vulkan sample demonstrating VK_KHR_pipeline_binary usage. It includes querying pipeline keys, capturing pipeline binaries, and managing them explicitly. The sample is accompanied by documentation, CMake lists, shaders, and updates to the Vulkan framework mapping.
- Add detailed logging for pipeline binary operations. - Introduce UI overlay in `PipelineBinary` to display aggregated log information. - General code clean-up and formatting adjustments.
gary-sweet
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can only really say that this builds ok as we don't currently support pipeline binaries.
asuessenbach
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice little sample. Just a few comments...
| LOGI("VK_KHR_pipeline_binary supported feature: pipelineBinaries = {}", pb); | ||
| char buf[256]; | ||
| snprintf(buf, sizeof(buf), "VK_KHR_pipeline_binary supported feature: pipelineBinaries = %s\n", pb); | ||
| log_text_ += buf; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of all those fixed-size buffers, you could as well use std::format:
std::string message = std::format( "VK_KHR_pipeline_binary supported feature: pipelineBinaries = {}", pb );
or maybe
std::string message = std::format("VK_KHR_pipeline_binary supported feature: pipelineBinaries = {}", static_cast<bool>(features.pipelineBinaries));
| const char *pic = props.pipelineBinaryPrefersInternalCache ? "true" : "false"; | ||
| const char *pic2 = props.pipelineBinaryPrecompiledInternalCache ? "true" : "false"; | ||
| const char *cd = props.pipelineBinaryCompressedData ? "true" : "false"; | ||
| LOGI("VK_KHR_pipeline_binary properties: internalCache={}, internalCacheControl={}, prefersInternalCache={}, precompiledInternalCache={}, compressedData={}", ic, icc, pic, pic2, cd); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe add some newlines and tabs to make the output more readable.
| } | ||
| } | ||
|
|
||
| void PipelineBinary::on_update_ui_overlay(vkb::Drawer &drawer) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Despite overriding on_update_ui_overlay, I don't see any UI.
Don't know why.
| - VK_EXT_graphics_pipeline_library reduces link-time work, but doesn’t hand you the final binary for persistence. | ||
| - VK_EXT_shader_object changes the binding model, not binary persistence. | ||
|
|
||
| == How it works (TL;DR) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could consider linking to https://www.khronos.org/blog/bringing-explicit-pipeline-caching-control-to-vulkan somewhere, which has some graphs that could help understand these better.
# Conflicts: # framework/vulkan_type_mapping.h # samples/extensions/README.adoc
…etrics Add interactive GUI to demonstrate pipeline recreation from scratch vs. from cached binaries with timing measurements. Implement binary persistence (save/load to disk) and display performance statistics including speedup calculations. Update documentation to reflect new interactive features and workflow.
Description
Introduce a new Vulkan sample demonstrating VK_KHR_pipeline_binary usage. It includes querying pipeline keys, capturing pipeline binaries, and managing them explicitly. The sample is accompanied by documentation, CMake lists, shaders, and updates to the Vulkan framework mapping.
General Checklist:
Please ensure the following points are checked:
Note: The Samples CI runs a number of checks including:
If this PR contains framework changes:
batchcommand line argument to make sure all samples still work properlySample Checklist
If your PR contains a new or modified sample, these further checks must be carried out in addition to the General Checklist: