--- src/intel/vulkan/anv_pipeline.c | 42 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 907b24a..613cfca 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -290,21 +290,19 @@ populate_gs_prog_key(const struct gen_device_info *devinfo, } static void -populate_wm_prog_key(const struct anv_pipeline *pipeline, - const VkGraphicsPipelineCreateInfo *info, +populate_wm_prog_key(const struct gen_device_info *devinfo, + const VkPipelineMultisampleStateCreateInfo *ms_info, + unsigned color_count, struct brw_wm_prog_key *key) { - const struct gen_device_info *devinfo = &pipeline->device->info; - memset(key, 0, sizeof(*key)); populate_sampler_prog_key(devinfo, &key->tex); - /* TODO: we could set this to 0 based on the information in nir_shader, but - * this function is called before spirv_to_nir. */ - const struct brw_vue_map *vue_map = - &anv_pipeline_get_last_vue_prog_data(pipeline)->vue_map; - key->input_slots_valid = vue_map->slots_valid; + /* We set this to 0 here and set to the actual value before we call + * brw_compile_fs. + */ + key->input_slots_valid = 0; /* Vulkan doesn't specify a default */ key->high_quality_derivatives = false; @@ -312,25 +310,22 @@ populate_wm_prog_key(const struct anv_pipeline *pipeline, /* XXX Vulkan doesn't appear to specify */ key->clamp_fragment_color = false; - key->nr_color_regions = pipeline->subpass->color_count; + key->nr_color_regions = color_count; key->replicate_alpha = key->nr_color_regions > 1 && - info->pMultisampleState && - info->pMultisampleState->alphaToCoverageEnable; + ms_info && ms_info->alphaToCoverageEnable; - if (info->pMultisampleState) { + if (ms_info) { /* We should probably pull this out of the shader, but it's fairly * harmless to compute it and then let dead-code take care of it. */ - if (info->pMultisampleState->rasterizationSamples > 1) { + if (ms_info->rasterizationSamples > 1) { key->persample_interp = - (info->pMultisampleState->minSampleShading * - info->pMultisampleState->rasterizationSamples) > 1; + (ms_info->minSampleShading * ms_info->rasterizationSamples) > 1; key->multisample_fbo = true; } - key->frag_coord_adds_sample_pos = - info->pMultisampleState->sampleShadingEnable; + key->frag_coord_adds_sample_pos = ms_info->sampleShadingEnable; } } @@ -839,7 +834,16 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline, struct anv_shader_bin *bin = NULL; unsigned char sha1[20]; - populate_wm_prog_key(pipeline, info, &key); + populate_wm_prog_key(&pipeline->device->info, + info->pMultisampleState, + pipeline->subpass->color_count, &key); + + /* TODO: we could set this to 0 based on the information in nir_shader, but + * we need this before we call spirv_to_nir. + */ + const struct brw_vue_map *vue_map = + &anv_pipeline_get_last_vue_prog_data(pipeline)->vue_map; + key.input_slots_valid = vue_map->slots_valid; if (cache) { anv_pipeline_hash_shader(pipeline, module, entrypoint, -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev