Skip to content

Conversation

@solidpixel
Copy link
Contributor

@solidpixel solidpixel commented Dec 9, 2025

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::injectedInstanceExtensions and Instance::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_boundary in the layer_gpu_timeline layer, 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

@solidpixel solidpixel linked an issue Dec 9, 2025 that may be closed by this pull request
@solidpixel solidpixel marked this pull request as draft December 9, 2025 14:20
@solidpixel solidpixel force-pushed the issue_36 branch 3 times, most recently from 5a86ab2 to 962a758 Compare December 15, 2025 11:45
@solidpixel solidpixel marked this pull request as ready for review December 17, 2025 16:03
@solidpixel solidpixel requested a review from Copilot December 17, 2025 19:51
Copy link

Copilot AI left a 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 injectedInstanceExtensions and injectedDeviceExtensions properties to allow layers to declare additional extension support
  • Implements VK_EXT_frame_boundary emulation in layer_gpu_timeline to 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.

@solidpixel solidpixel merged commit 57968aa into main Dec 17, 2025
6 checks passed
@solidpixel solidpixel deleted the issue_36 branch December 17, 2025 20:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support VK_EXT_frame_boundary in addition to vkQueuePresent

2 participants