Vulkan-ValidationLayers icon indicating copy to clipboard operation
Vulkan-ValidationLayers copied to clipboard

VK_HUAWEI_subpass_shading and VUID-VkPipelineShaderStageCreateInfo-pName-00707

Open Karpov-Ruslan opened this issue 1 year ago • 4 comments

Environment:

  • Mobile Device: Huawei Mate 60 Pro+
  • Layer: VK_LAYER_KHRONOS_validation

Describe the Issue

I used VK_HUAWEI_subpass_shading device extension, but faced with VVL error:

ERROR: [3012269921][VUID-VkPipelineShaderStageCreateInfo-pName-00707] : Validation Error: [ VUID-VkPipelineShaderStageCreateInfo-pName-00707 ] | MessageID = 0xb38b9761 | vkCreateComputePipelines(): pCreateInfos[0].stage.pName `main` entrypoint not found for stage VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI. The Vulkan spec states: pName must be the name of an OpEntryPoint in module with an execution model that matches stage (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkPipelineShaderStageCreateInfo-pName-00707)

, but I used example-like code from Vulkan Spec (Example at the bottom of the page).

Expected behavior

There should be no error.

Where to start the search

I think you can start with the ExecutionModelToShaderStageFlagBits function (location: <repo>/layers/state_tracker/shader_module.cpp), which is a little bit wrong:

  • VK_HUAWEI_subpass_shading extend VkShaderStageFlagBits with VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI.
  • SPV_HUAWEI_subpass_shading do not provide new SPIR-V Execution Model and just add new Capability - SubpassShadingHUAWEI.
  • But ExecutionModelToShaderStageFlagBits function see only Execution Model and decide that if Execution Model is equal to GLCompute, then shader stage is VK_SHADER_STAGE_COMPUTE_BIT. But it's wrong. Function should also see Capabilities, because if Execution Model is GLCompute and Capability is SubpassShadingHUAWEI, then shader stage exactly is VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI:
    static uint32_t ExecutionModelToShaderStageFlagBits(uint32_t mode) {
        switch (mode) {
            ...
                return VK_SHADER_STAGE_FRAGMENT_BIT;
            case spv::ExecutionModelGLCompute:
                return VK_SHADER_STAGE_COMPUTE_BIT; // <------------ Problem here
            case spv::ExecutionModelRayGenerationKHR:
                return VK_SHADER_STAGE_RAYGEN_BIT_KHR;
            ...
        }
    }
    

Valid Usage IDs VUID-VkComputePipelineCreateInfo-stage-00701 VUID-VkPipelineShaderStageCreateInfo-pName-00707

Karpov-Ruslan avatar Sep 19 '24 16:09 Karpov-Ruslan

Thanks for reporting this (and the related spec issue https://github.com/KhronosGroup/Vulkan-Docs/issues/2438) !

For Vendor extensions we rely on vendors to add validation themselves, I have never used/looked at VK_HUAWEI_subpass_shading and couldn't write a test for it (which is what we need as well)

Happy to take PRs, but with all the other backlogs we have, I will not be able to get to this anytime in the near future

spencer-lunarg avatar Sep 19 '24 17:09 spencer-lunarg

cc @PanGao-h

spencer-lunarg avatar Sep 19 '24 18:09 spencer-lunarg

Got it. We'll fix it soon.

PanGao-h avatar Sep 27 '24 08:09 PanGao-h

Got it. We'll fix it soon.

That's great! I hope this also applies to https://github.com/KhronosGroup/Vulkan-Docs/issues/2438.

Karpov-Ruslan avatar Sep 30 '24 11:09 Karpov-Ruslan