We can set active_stages much more directly and then it's just candy around setting pipeline->stages[stage]. --- src/intel/vulkan/anv_pipeline.c | 30 ++++++++++++------------------ src/intel/vulkan/genX_pipeline.c | 2 -- 2 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index ec14c73..0e58f83 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -533,15 +533,6 @@ anv_pipeline_upload_kernel(struct anv_pipeline *pipeline, } -static void -anv_pipeline_add_compiled_stage(struct anv_pipeline *pipeline, - gl_shader_stage stage, - struct anv_shader_bin *shader) -{ - pipeline->shaders[stage] = shader; - pipeline->active_stages |= mesa_to_vk_shader_stage(stage); -} - static VkResult anv_pipeline_compile_vs(struct anv_pipeline *pipeline, struct anv_pipeline_cache *cache, @@ -600,7 +591,7 @@ anv_pipeline_compile_vs(struct anv_pipeline *pipeline, ralloc_free(mem_ctx); } - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_VERTEX, bin); + pipeline->shaders[MESA_SHADER_VERTEX] = bin; return VK_SUCCESS; } @@ -761,8 +752,8 @@ anv_pipeline_compile_tcs_tes(struct anv_pipeline *pipeline, ralloc_free(mem_ctx); } - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_TESS_CTRL, tcs_bin); - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_TESS_EVAL, tes_bin); + pipeline->shaders[MESA_SHADER_TESS_CTRL] = tcs_bin; + pipeline->shaders[MESA_SHADER_TESS_EVAL] = tes_bin; return VK_SUCCESS; } @@ -826,7 +817,7 @@ anv_pipeline_compile_gs(struct anv_pipeline *pipeline, ralloc_free(mem_ctx); } - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_GEOMETRY, bin); + pipeline->shaders[MESA_SHADER_GEOMETRY] = bin; return VK_SUCCESS; } @@ -942,7 +933,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline, ralloc_free(mem_ctx); } - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_FRAGMENT, bin); + pipeline->shaders[MESA_SHADER_FRAGMENT] = bin; return VK_SUCCESS; } @@ -954,11 +945,15 @@ anv_pipeline_compile_graphics(struct anv_pipeline *pipeline, { struct anv_pipeline_stage stages[MESA_SHADER_STAGES] = {}; + pipeline->active_stages = 0; + VkResult result; for (uint32_t i = 0; i < info->stageCount; i++) { gl_shader_stage stage = vk_to_mesa_shader_stage(info->pStages[i].stage); const VkPipelineShaderStageCreateInfo *sinfo = &info->pStages[i]; + pipeline->active_stages |= info->pStages[i].stage; + stages[stage].stage = stage; stages[stage].module = anv_shader_module_from_handle(sinfo->module); stages[stage].entrypoint = sinfo->pName; @@ -1005,7 +1000,7 @@ anv_pipeline_compile_graphics(struct anv_pipeline *pipeline, anv_pipeline_cache_search(cache, &stages[s].cache_key, sizeof(stages[s].cache_key)); if (bin) - anv_pipeline_add_compiled_stage(pipeline, s, bin); + pipeline->shaders[s] = bin; } } @@ -1124,7 +1119,8 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline, ralloc_free(mem_ctx); } - anv_pipeline_add_compiled_stage(pipeline, MESA_SHADER_COMPUTE, bin); + pipeline->active_stages = VK_SHADER_STAGE_COMPUTE_BIT; + pipeline->shaders[MESA_SHADER_COMPUTE] = bin; return VK_SUCCESS; } @@ -1381,8 +1377,6 @@ anv_pipeline_init(struct anv_pipeline *pipeline, */ memset(pipeline->shaders, 0, sizeof(pipeline->shaders)); - pipeline->active_stages = 0; - result = anv_pipeline_compile_graphics(pipeline, cache, pCreateInfo); if (result != VK_SUCCESS) { anv_reloc_list_finish(&pipeline->batch_relocs, alloc); diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index c2fa9c0..b52ed6e 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -1786,8 +1786,6 @@ compute_pipeline_create( */ memset(pipeline->shaders, 0, sizeof(pipeline->shaders)); - pipeline->active_stages = 0; - pipeline->needs_data_cache = false; assert(pCreateInfo->stage.stage == VK_SHADER_STAGE_COMPUTE_BIT); -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev