Skip to content
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

Dynamic state3 multisample rasterization #856

Open
wants to merge 58 commits into
base: main
Choose a base branch
from

Conversation

pawel-jastrzebski-mobica
Copy link
Contributor

@pawel-jastrzebski-mobica pawel-jastrzebski-mobica commented Nov 28, 2023

Overview

This sample demonstrates one of the functionalities of VK_EXT_extended_dynamic_state3 related to rasterization samples.
The extension can be used to dynamically change sampling without any need to restart the application.
image

Enabling the extension

To be able to use this extension in Vulkan API:

  1. At least Vulkan API version 1.1 must be supported.
  2. Set of VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, VkPhysicalDeviceExtendedDynamicState2FeaturesEXT, VkPhysicalDeviceExtendedDynamicState3FeaturesEXT
    must be added to the feature chain of VkPhysicalDeviceProperties2 and VkPhysicalDeviceExtendedDynamicState3PropertiesEXT must be added to VkPhysicalDeviceProperties2.

Using the extension

To use the extension:

  1. VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT must be added to VkPipelineDynamicStateCreateInfo.
  2. Method void vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples) should be called between
    vkCmdBeginRenderPass and vkCmdEndRenderPass.

Known issues

The extension always reports the following validation error when enabled:

[error] [framework\core\instance.cpp:50] -1100021871 - UNASSIGNED-GeneralParameterError-UnrecognizedValue: Validation Error: [ UNASSIGNED-GeneralParameterError-UnrecognizedValue ] Object 0: handle = 0x15d301ca4e0, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xbe6eff91 | vkCreateGraphicsPipelines: value of pCreateInfos[0].pDynamicState->pDynamicStates[2] (1000455005) does not fall within the begin..end range of the core VkDynamicState enumeration tokens and is not an extension added token

This implies several other validation errors during runtime:

[error] [framework\core\instance.cpp:50] -1052047544 - VUID-vkCmdDraw-rasterizationSamples-04740: Validation Error: [ VUID-vkCmdDraw-rasterizationSamples-04740 ] Object 0: handle = 0xf6d9250000000139, type = VK_OBJECT_TYPE_PIPELINE; Object 1: handle = 0xfc06e9000000013d, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0xc14b0748 | vkCmdDraw: In VkPipeline 0xf6d9250000000139[] the sample count is VK_SAMPLE_COUNT_1_BIT while the current VkRenderPass 0xfc06e9000000013d[] has VK_SAMPLE_COUNT_4_BIT and they need to be the same. The Vulkan spec states: If rasterization is not disabled in the bound graphics pipeline, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then VkPipelineMultisampleStateCreateInfo::rasterizationSamples must be the same as the current subpass color and/or depth/stencil attachments (https://vulkan.lunarg.com/doc/view/1.3.216.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdDraw-rasterizationSamples-04740)
[error] [framework\core\instance.cpp:50] 1349015333 - VUID-vkCmdDraw-renderPass-02684: Validation Error: [ VUID-vkCmdDraw-renderPass-02684 ] Object 0: handle = 0xfc06e9000000013d, type = VK_OBJECT_TYPE_RENDER_PASS; Object 1: handle = 0xab64de0000000020, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x50685725 | vkCmdDraw: RenderPasses incompatible between active render pass w/ VkRenderPass 0xfc06e9000000013d[] and pipeline state object w/ VkRenderPass 0xab64de0000000020[] Attachment 0 is not compatible with 0: They have different samples.. The Vulkan spec states: The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS (https://vulkan.lunarg.com/doc/view/1.3.216.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdDraw-renderPass-02684)
[error] [framework\core\instance.cpp:50] -329854293 - VUID-vkCmdDrawIndexed-rasterizationSamples-04740: Validation Error: [ VUID-vkCmdDrawIndexed-rasterizationSamples-04740 ] Object 0: handle = 0x9f9b41000000003c, type = VK_OBJECT_TYPE_PIPELINE; Object 1: handle = 0xfc06e9000000013d, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0xec56d2ab | vkCmdDrawIndexed: In VkPipeline 0x9f9b41000000003c[] the sample count is VK_SAMPLE_COUNT_1_BIT while the current VkRenderPass 0xfc06e9000000013d[] has VK_SAMPLE_COUNT_4_BIT and they need to be the same. The Vulkan spec states: If rasterization is not disabled in the bound graphics pipeline, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then VkPipelineMultisampleStateCreateInfo::rasterizationSamples must be the same as the current subpass color and/or depth/stencil attachments (https://vulkan.lunarg.com/doc/view/1.3.216.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdDrawIndexed-rasterizationSamples-04740)
[error] [framework\core\instance.cpp:50] -1934215230 - VUID-vkCmdDrawIndexed-renderPass-02684: Validation Error: [ VUID-vkCmdDrawIndexed-renderPass-02684 ] Object 0: handle = 0xfc06e9000000013d, type = VK_OBJECT_TYPE_RENDER_PASS; Object 1: handle = 0xab64de0000000020, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x8cb637c2 | vkCmdDrawIndexed: RenderPasses incompatible between active render pass w/ VkRenderPass 0xfc06e9000000013d[] and pipeline state object w/ VkRenderPass 0xab64de0000000020[] Attachment 0 is not compatible with 0: They have different samples.. The Vulkan spec states: The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS (https://vulkan.lunarg.com/doc/view/1.3.216.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdDrawIndexed-renderPass-02684)

Resources

https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationSamplesEXT.html

Please ensure the following points are checked:

  • My code follows the coding style
  • I have reviewed file licenses
  • I have commented any added functions (in line with Doxygen)
  • I have commented any code that could be hard to understand
  • My changes do not add any new compiler warnings
  • My changes do not add any new validation layer errors or warnings
  • I have used existing framework/helper functions where possible
  • My changes do not add any regressions
  • I have tested every sample to ensure everything runs correctly
  • This PR describes the scope and expected impact of the changes I am making

Note: The Samples CI runs a number of checks including:

  • I have updated the header Copyright to reflect the current year (CI build will fail if Copyright is out of date)
  • My changes build on Windows, Linux, macOS and Android. Otherwise I have documented any exceptions

Signed-off-by: Pawel Jastrzebski <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
@pawel-jastrzebski-mobica pawel-jastrzebski-mobica marked this pull request as ready for review November 29, 2023 14:10
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
@SaschaWillems
Copy link
Collaborator

We should wait until validation is fixed. The error is per draw call, so with validation the sample right now will spam lots of (the same) validation errors.

framework/gui.cpp Outdated Show resolved Hide resolved
VkSampler get_sampler() const;

VkImageView get_font_image_view() const;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would stay on the same abstraction level as this class, and return a vkb::core::Sampler const &, and vkb::core::ImageView const &, respectively.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since sampler and image_view are defined as std::unique_ptr's it would mean that it's either returned by std::move - not a good idea to change ownership of a pointer of internal class member. Or alternatively, in my opinion even worse to return raw pointer. It could be also defined as std::shared_ptr and this means a design change. What do you think?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think, returning a vkb::core::Sampler const & and a vkb::core::ImageView const & would be right.
As as they both don't support copy construction or copy assignment, you would not be able to accidentally assign or copy them.

Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
Signed-off-by: pawel-jastrzebski-mobica <pawel.jastrzebski@mobica.com>
@Mateusz-Kowalewski-Mobica
Copy link
Contributor

Status of resolving VVL issues:

  1. rasterizationSamples-07474 -> waiting for VVL team response (they are working on updating code for dynamic state's)
  2. vkCmdDraw-renderPass-02684 -> after initial investigation I think that can be resolved by implementing dynamic rendering in this sample.
  3. VUID-VkSubpassDescription-pResolveAttachments-00848 -> resolved on Samples side

About second VL It have issue when sample count is changed (by creating new renderpass/framebuffer and invoking vkCmdSetRasterizationSamplesEXT) to other from value which have been set on pipeline creation.
From my point of view it can be avoided by using dynamic rendering extension, so renderpass can be replace with dynamic rendering structs.

Is my thoughts make sense?

@Mateusz-Kowalewski-Mobica
Copy link
Contributor

After implementing dynamic rendering into that Sample I solved all previous VL issues.

Unfortunately I found new one related to necessary image transition (same as was presented in dynamic_rendering sample).
VL error:
SYNC-HAZARD-WRITE-AFTER-READ: Validation Error: [ SYNC-HAZARD-WRITE-AFTER-READ ] Object 0: handle = 0x555556f1c930, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x376bc9df | vkQueueSubmit(): Hazard WRITE_AFTER_READ for entry 0, VkCommandBuffer 0x555558e8b710[], Submitted access info (submitted_usage: SYNC_IMAGE_LAYOUT_TRANSITION, command: vkCmdPipelineBarrier, seq_no: 1, VkImage 0xe7f79a0000000005[], reset_no: 2). Access info (prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_ACQUIRE_READ_SYNCVAL, read_barriers: VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT, , batch_tag: 52, vkAcquireNextImageKHR aquire_tag:52: VkSwapchainKHR 0xf56c9b0000000004[], image_index: 0image: VkImage 0xe7f79a0000000005[]).

I checked Dynamic Rendering sample and the same issue is visible there. After resolving that on this PR I will create new one to fix it in Dynamic Rendering sample.

Copy link
Contributor

@asuessenbach asuessenbach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On startup, I get this VL error:
Validation Error: [ VUID-vkDestroyImageView-imageView-parameter ] Object 0: handle = 0x2647997b740, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe0208096 | vkDestroyImageView(): imageView Invalid VkImageView Object 0xcdcdcdcdcdcdcdcd. The Vulkan spec states: If imageView is not VK_NULL_HANDLE, imageView must be a valid VkImageView handle (https://vulkan.lunarg.com/doc/view/1.3.275.0/windows/1.3-extensions/vkspec.html#VUID-vkDestroyImageView-imageView-parameter)
=> Would you please initialize the members of ImageData in api_vulkan_sample.h with VK_NULL_HANDLE?

When resizing or maximizing the window, I get this one:
Validation Error: [ VUID-VkFramebufferCreateInfo-pAttachments-00881 ] Object 0: handle = 0xab64de0000000020, type = VK_OBJECT_TYPE_RENDER_PASS; Object 1: handle = 0x947e98000000126c, type = VK_OBJECT_TYPE_IMAGE_VIEW; Object 2: handle = 0x4549ee000000126a, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x2ff52eec | vkCreateFramebuffer(): pCreateInfo->pAttachments[1] has VK_SAMPLE_COUNT_4_BIT samples that do not match the VK_SAMPLE_COUNT_1_BIT samples used by the corresponding attachment for VkRenderPass 0xab64de0000000020[]. The Vulkan spec states: If flags does not include VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of pAttachments must have been created with a samples value that matches the samples value specified by the corresponding VkAttachmentDescription in renderPass (https://vulkan.lunarg.com/doc/view/1.3.275.0/windows/1.3-extensions/vkspec.html#VUID-VkFramebufferCreateInfo-pAttachments-00881)

@Mateusz-Kowalewski-Mobica
Copy link
Contributor

Fix for synchronization issue was provided.
That issue was known and here is explanation of my changes #7129 breaks dynamic rendering examples


== Using the extension

To use the extension:
1) `VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT` must be added to `VkPipelineDynamicStateCreateInfo`.
2) Method `void vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples)` should be called between `vkCmdBeginRenderPass` and `vkCmdEndRenderPass`.
2) Method `void vkCmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits rasterizationSamples)` should be called inside active command buffer.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe: with the active command buffer ?


== Known issues

The extension always reports the following validation errors when enabled:
....
VUID-vkCmdDraw-rasterizationSamples-07474(ERROR / SPEC): msgNum: -2007336333 - Validation Error: [ VUID-vkCmdDraw-rasterizationSamples-07474 ] Object 0: handle = 0x1ab5b866f50, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x885a7a73 | vkCmdDraw(): Render pass attachment 1 samples VK_SAMPLE_COUNT_1_BIT does not match samples VK_SAMPLE_COUNT_4_BIT set with vkCmdSetRasterizationSamplesEXT(). The Vulkan spec states: If the bound graphics pipeline state was created with the VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT state enabled, and neither the VK_AMD_mixed_attachment_samples nor the VK_NV_framebuffer_mixed_samples extensions are enabled, then the rasterizationSamples in the last call to vkCmdSetRasterizationSamplesEXT must be the same as the current subpass color and/or depth/stencil attachments (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-rasterizationSamples-07474)
VUID-vkCmdDraw-renderPass-02684: Validation Error: [ VUID-vkCmdDraw-renderPass-02684 ] Object 0: handle = 0x7533b600000006c9, type = VK_OBJECT_TYPE_RENDER_PASS; Object 1: handle = 0x30f5a50000000020, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x50685725 | vkCmdDraw(): RenderPasses incompatible between active render pass w/ VkRenderPass 0x7533b600000006c9[] and pipeline state object w/ VkRenderPass 0x30f5a50000000020[] Attachment 0 is not compatible with 0: They have different samples.. The Vulkan spec states: The current render pass must be compatible with the renderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to VK_PIPELINE_BIND_POINT_GRAPHICS (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdDraw-renderPass-02684)
SYNC-HAZARD-WRITE-AFTER-READ: Validation Error: [ SYNC-HAZARD-WRITE-AFTER-READ ] Object 0: handle = 0x555556f0b520, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x376bc9df | vkQueueSubmit(): Hazard WRITE_AFTER_READ for entry 0, VkCommandBuffer 0x555558e50aa0[], Submitted access info (submitted_usage: SYNC_IMAGE_LAYOUT_TRANSITION, command: vkCmdPipelineBarrier, seq_no: 1, VkImage 0xcb3ee80000000007[], reset_no: 6). Access info (prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_ACQUIRE_READ_SYNCVAL, read_barriers: VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT, , batch_tag: 158, vkAcquireNextImageKHR aquire_tag:158: VkSwapchainKHR 0xf56c9b0000000004[], image_index: 2image: VkImage 0xcb3ee80000000007[]).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some explanation on this validation error? Is it wrong, or just not yet resolved, or what?

}
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT requested_feature = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT};
requested_feature.extendedDynamicState3RasterizationSamples = VK_TRUE;
gpu.request_extension_features<VkPhysicalDeviceExtendedDynamicState3FeaturesEXT>(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT) = requested_feature;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahm, no... this code sequence was supposed to be inside the (now removed) if-clause, checking if that feature is supported.

@asuessenbach
Copy link
Contributor

When I start this sample, I get this error message:
Validation Error: [ VUID-VkRenderingInfo-pNext-pNext ] Object 0: handle = 0x2cff0107020, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xdc5df1d | vkCmdBeginRenderingKHR(): pRenderingInfo->pNext<VkMultisampledRenderToSingleSampledInfoEXT> extended struct requires the extensions VK_EXT_multisampled_render_to_single_sampled. The Vulkan spec states: Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDeviceGroupRenderPassBeginInfo, VkMultisampledRenderToSingleSampledInfoEXT, VkMultiviewPerViewAttributesInfoNVX, VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM, VkRenderPassStripeBeginInfoARM, VkRenderingFragmentDensityMapAttachmentInfoEXT, or VkRenderingFragmentShadingRateAttachmentInfoKHR (https://vulkan.lunarg.com/doc/view/1.3.280.0/windows/1.3-extensions/vkspec.html#VUID-VkRenderingInfo-pNext-pNext)

That is, you would need to
add_device_extension(VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME);

@Mateusz-Kowalewski-Mobica
Copy link
Contributor

Thanks for letting me know about that VL error. On which platform do you test? I didn't see that issue on ubuntu, but I will add that line and please give me feedback if that resolve your VL issue.

@Mateusz-Kowalewski-Mobica
Copy link
Contributor

Strange, I can use structs from this extension without add add_device_extension(VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_EXTENSION_NAME);

but when I add that line I get error because of not having that extension available on my GPU.
That extension have very low amount of device supported: https://vulkan.gpuinfo.org/listdevicescoverage.php?extension=VK_EXT_multisampled_render_to_single_sampled&platform=all

I think something is not right, because I obviously can use features of that extension without adding it to application.

@asuessenbach
Copy link
Contributor

On which platform do you test?

I see that on Win10, using an NVIDIA GPU, Vulkan SDK 1.3.280.
And yes, that extension seems to be available on some mobile devices only.

@SaschaWillems SaschaWillems self-requested a review May 15, 2024 15:14
Copy link
Collaborator

@SaschaWillems SaschaWillems left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works fine on my setup (Win 11, NV RTX 4070). Validation is clean, and changing MSAA modes has a clear visual effect. 👍🏻

I only noticed a few minor issues not directly related to the rendering part itself.

Those should be easy to fix, and once done I'll approve this :)

{
title = "DynamicState3 Multisample Rasterization";

set_api_version(VK_API_VERSION_1_2);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't we lower this to VK_API_VERSION_1_1? None of the extension used requires 1.2, and the readme also states 1.1 as the base line.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about Dynamic Rendering? In spec I read that extension was introduced in Vulkan 1.2.197.

Also if you check dynamic rendering sample it also have Vulkan version set on 1.2.
When I lower version to 1.1 bunch of new VL errors appear.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the actual VL error you get? Dynamic rendering works fine with 1.1 if you meed the criteria described under https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_dynamic_rendering.html#_extension_and_version_dependencies. Maybe you were missing some of the extensions required when using 1.1?

If that's too big of a change, I'm fine with the 1.2 requirement.

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.

None yet

5 participants