From b0e3d00a5d53635debfd90c6bf18e14e7d5dd603 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 26 Jul 2024 17:21:01 -0700 Subject: [PATCH] nv2a/vk: Drop fragment shader when only depth attachment is cleared --- hw/xbox/nv2a/pgraph/vk/draw.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/hw/xbox/nv2a/pgraph/vk/draw.c b/hw/xbox/nv2a/pgraph/vk/draw.c index 49f8e2b882..3784aa1aca 100644 --- a/hw/xbox/nv2a/pgraph/vk/draw.c +++ b/hw/xbox/nv2a/pgraph/vk/draw.c @@ -448,20 +448,24 @@ static void create_clear_pipeline(PGRAPHState *pg) bool partial_color_clear = clear_any_color_channels && !clear_all_color_channels; - VkPipelineShaderStageCreateInfo shader_stages[] = { + int num_active_shader_stages = 0; + VkPipelineShaderStageCreateInfo shader_stages[2]; + shader_stages[num_active_shader_stages++] = (VkPipelineShaderStageCreateInfo){ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, .stage = VK_SHADER_STAGE_VERTEX_BIT, .module = r->quad_vert_module->module, .pName = "main", - }, - (VkPipelineShaderStageCreateInfo){ - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .stage = VK_SHADER_STAGE_FRAGMENT_BIT, - .module = r->solid_frag_module->module, - .pName = "main", - }, - }; + }; + if (clear_any_color_channels) { + shader_stages[num_active_shader_stages++] = + (VkPipelineShaderStageCreateInfo){ + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .stage = VK_SHADER_STAGE_FRAGMENT_BIT, + .module = r->solid_frag_module->module, + .pName = "main", + }; + } VkPipelineVertexInputStateCreateInfo vertex_input = { .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, @@ -565,7 +569,7 @@ static void create_clear_pipeline(PGRAPHState *pg) VkGraphicsPipelineCreateInfo pipeline_info = { .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, - .stageCount = ARRAY_SIZE(shader_stages), + .stageCount = num_active_shader_stages, .pStages = shader_stages, .pVertexInputState = &vertex_input, .pInputAssemblyState = &input_assembly,