mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
zink: fix setting VkShaderCreateInfoEXT::nextStage
nextStage has some restrictions depending on the current stage. Fixes:cd6625c6eb("zink: use EXT_shader_object to (re)implement separate shaders") Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24558> (cherry picked from commit478a18aa3d)
This commit is contained in:
parent
982b3d8fc8
commit
83428a9933
2 changed files with 25 additions and 3 deletions
|
|
@ -9754,7 +9754,7 @@
|
|||
"description": "zink: fix setting VkShaderCreateInfoEXT::nextStage",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "cd6625c6eb9699245b2fb6c9c704607d762a95ea",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -3137,6 +3137,29 @@ zink_shader_dump(const struct zink_shader *zs, void *words, size_t size, const c
|
|||
}
|
||||
}
|
||||
|
||||
static VkShaderStageFlagBits
|
||||
zink_get_next_stage(gl_shader_stage stage)
|
||||
{
|
||||
switch (stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
return VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
|
||||
VK_SHADER_STAGE_GEOMETRY_BIT |
|
||||
VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
case MESA_SHADER_TESS_CTRL:
|
||||
return VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
|
||||
case MESA_SHADER_TESS_EVAL:
|
||||
return VK_SHADER_STAGE_GEOMETRY_BIT |
|
||||
VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
case MESA_SHADER_GEOMETRY:
|
||||
return VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
case MESA_SHADER_COMPUTE:
|
||||
return 0;
|
||||
default:
|
||||
unreachable("invalid shader stage");
|
||||
}
|
||||
}
|
||||
|
||||
struct zink_shader_object
|
||||
zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, struct spirv_shader *spirv, bool can_shobj, struct zink_program *pg)
|
||||
{
|
||||
|
|
@ -3155,8 +3178,7 @@ zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, st
|
|||
|
||||
sci.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT;
|
||||
sci.stage = mesa_to_vk_shader_stage(zs->info.stage);
|
||||
if (sci.stage != VK_SHADER_STAGE_FRAGMENT_BIT)
|
||||
sci.nextStage = VK_SHADER_STAGE_ALL_GRAPHICS & ~VK_SHADER_STAGE_VERTEX_BIT;
|
||||
sci.nextStage = zink_get_next_stage(zs->info.stage);
|
||||
sci.codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT;
|
||||
sci.codeSize = spirv->num_words * sizeof(uint32_t);
|
||||
sci.pCode = spirv->words;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue