-
Notifications
You must be signed in to change notification settings - Fork 6
Support VK_EXT_frame_boundary #160
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
Conversation
5a86ab2 to
962a758
Compare
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.
Pull request overview
This PR adds infrastructure for layers to expose and emulate Vulkan extensions not supported by the underlying driver, specifically implementing VK_EXT_frame_boundary in the layer_gpu_timeline layer. The changes introduce a standardized mechanism for extension injection and provide an example implementation of frame boundary tracking.
Key changes:
- Introduces
injectedInstanceExtensionsandinjectedDeviceExtensionsproperties to allow layers to declare additional extension support - Implements
VK_EXT_frame_boundaryemulation inlayer_gpu_timelineto mark frame boundaries in metadata - Refactors extension enumeration functions to support both driver-native and layer-injected extensions
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| source_common/framework/manual_functions.hpp | Adds function declaration for VK_EXT_frame_boundary emulation |
| source_common/framework/manual_functions.cpp | Implements extension enumeration logic and frame boundary emulation handling |
| source_common/trackers/render_pass.cpp | Updates copyright year to 2025 |
| layer_gpu_timeline/source/layer_instance_functions.hpp | Declares custom instance-level function overrides for extension support |
| layer_gpu_timeline/source/layer_instance_functions.cpp | Implements feature query patching and device creation for frame boundary support |
| layer_gpu_timeline/source/layer_device_functions_queue.cpp | Adds frame boundary detection in queue submission functions |
| layer_gpu_timeline/source/layer_device_functions.hpp | Adds declaration for vkQueueBindSparse override |
| layer_gpu_timeline/source/instance.hpp | Updates extension property declarations with new injection mechanism |
| layer_gpu_timeline/source/instance.cpp | Initializes injected extension lists including frame boundary |
| layer_gpu_timeline/source/device.hpp | Adds flag to track frame boundary emulation status |
| layer_gpu_timeline/source/CMakeLists.txt | Adds new instance functions source file to build |
| layer_gpu_support/source/layer_device_functions_image.cpp | Refactors variable naming for consistency |
| layer_gpu_support/source/instance.hpp | Updates extension property declarations |
| layer_gpu_support/source/instance.cpp | Initializes empty injected extension lists |
| layer_gpu_profile/source/instance.hpp | Updates extension property declarations |
| layer_gpu_profile/source/instance.cpp | Initializes empty injected extension lists |
| layer_example/source/instance.hpp | Updates extension property declarations |
| layer_example/source/instance.cpp | Initializes empty injected extension lists |
| generator/vk_layer/source/instance.hpp | Updates extension property declarations |
| generator/vk_layer/source/instance.cpp | Initializes empty injected extension lists |
| docs/extension_support.md | Adds comprehensive documentation for implementing extension support in layers |
Comments suppressed due to low confidence (1)
layer_example/source/instance.hpp:1
- Double space between 'instance' and 'extensions' should be single space.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The high level goal of this PR set is to allow layers to support
VK_EXT_frame_boundary, even though the underlying driver does not need to because this is a tooling feature. However, adding support for this requires a number of new general purpose infrastructure improvements that can be used for other extensions in future.The first part of this PR provides a standard means for any layer to declare support for new Instance or Device extensions, by adding properties to
Instance::injectedInstanceExtensionsandInstance::injectedDeviceExtensions. Any other functions implemented still need to be implemented by the layer itself, as required support is not generic enough to support centrally. Existing layers rebased on top of this change need to provide implementations of these two static class members (which can be empty).The second part is an implementation of
VK_EXT_frame_boundaryin thelayer_gpu_timelinelayer, implementing it as a way to demarcate frames in the exported metadata. Other layers wanting to support this will be added in other PRs.Fixes #36