anv/pipeline: Add a subpass field to anv_pipeline
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 22 Mar 2017 22:36:46 +0000 (15:36 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 3 May 2017 18:25:46 +0000 (11:25 -0700)
This simplifies the code a variety of places.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/intel/vulkan/anv_pipeline.c
src/intel/vulkan/anv_private.h

index 599286c216945f1783f4a1464e5cb939c46bfb00..85b3290e7b4c7959cc98d5fc655720418ac58b2d 100644 (file)
@@ -279,7 +279,6 @@ populate_wm_prog_key(const struct anv_pipeline *pipeline,
                      struct brw_wm_prog_key *key)
 {
    const struct gen_device_info *devinfo = &pipeline->device->info;
-   ANV_FROM_HANDLE(anv_render_pass, render_pass, info->renderPass);
 
    memset(key, 0, sizeof(*key));
 
@@ -297,8 +296,7 @@ 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 =
-      render_pass->subpasses[info->subpass].color_count;
+   key->nr_color_regions = pipeline->subpass->color_count;
 
    key->replicate_alpha = key->nr_color_regions > 1 &&
                           info->pMultisampleState &&
@@ -1028,8 +1026,7 @@ copy_non_dynamic_state(struct anv_pipeline *pipeline,
                        const VkGraphicsPipelineCreateInfo *pCreateInfo)
 {
    anv_cmd_dirty_mask_t states = ANV_CMD_DIRTY_DYNAMIC_ALL;
-   ANV_FROM_HANDLE(anv_render_pass, pass, pCreateInfo->renderPass);
-   struct anv_subpass *subpass = &pass->subpasses[pCreateInfo->subpass];
+   struct anv_subpass *subpass = pipeline->subpass;
 
    pipeline->dynamic_state = default_dynamic_state;
 
@@ -1232,6 +1229,11 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
       alloc = &device->alloc;
 
    pipeline->device = device;
+
+   ANV_FROM_HANDLE(anv_render_pass, render_pass, pCreateInfo->renderPass);
+   assert(pCreateInfo->subpass < render_pass->subpass_count);
+   pipeline->subpass = &render_pass->subpasses[pCreateInfo->subpass];
+
    pipeline->layout = anv_pipeline_layout_from_handle(pCreateInfo->layout);
 
    result = anv_reloc_list_init(&pipeline->batch_relocs, alloc);
index 4e742170da2d81e2394038a4af0396d2189b97bd..e0725b708dee2ed738fe49a33167d03638e1d1ac 100644 (file)
@@ -1797,6 +1797,7 @@ struct anv_pipeline {
    uint32_t                                     dynamic_state_mask;
    struct anv_dynamic_state                     dynamic_state;
 
+   struct anv_subpass *                         subpass;
    struct anv_pipeline_layout *                 layout;
 
    bool                                         needs_data_cache;