You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
SPV_HUAWEI_subpass_shading do not provide new SPIR-VExecution 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;
...
}
}
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
Environment:
VK_LAYER_KHRONOS_validation
Describe the Issue
I used
VK_HUAWEI_subpass_shading
device extension, but faced with VVL error:, 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
extendVkShaderStageFlagBits
withVK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
.SPV_HUAWEI_subpass_shading
do not provide new SPIR-V Execution Model and just add new Capability -SubpassShadingHUAWEI
.ExecutionModelToShaderStageFlagBits
function see only Execution Model and decide that if Execution Model is equal toGLCompute
, then shader stage isVK_SHADER_STAGE_COMPUTE_BIT
. But it's wrong. Function should also see Capabilities, because if Execution Model isGLCompute
and Capability isSubpassShadingHUAWEI
, then shader stage exactly isVK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
:Valid Usage IDs
VUID-VkComputePipelineCreateInfo-stage-00701
VUID-VkPipelineShaderStageCreateInfo-pName-00707
The text was updated successfully, but these errors were encountered: