anv/pipeline: Plumb pipeline shader stage create flags
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 22 Feb 2019 21:21:13 +0000 (15:21 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Wed, 24 Jul 2019 17:55:40 +0000 (12:55 -0500)
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/intel/vulkan/anv_pipeline.c

index 5266fb0..ae3693d 100644 (file)
@@ -353,6 +353,7 @@ populate_sampler_prog_key(const struct gen_device_info *devinfo,
 
 static void
 populate_base_prog_key(const struct gen_device_info *devinfo,
+                       VkPipelineShaderStageCreateFlags flags,
                        struct brw_base_prog_key *key)
 {
    key->subgroup_size_type = BRW_SUBGROUP_SIZE_API_CONSTANT;
@@ -362,11 +363,12 @@ populate_base_prog_key(const struct gen_device_info *devinfo,
 
 static void
 populate_vs_prog_key(const struct gen_device_info *devinfo,
+                     VkPipelineShaderStageCreateFlags flags,
                      struct brw_vs_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 
    /* XXX: Handle vertex input work-arounds */
 
@@ -375,43 +377,47 @@ populate_vs_prog_key(const struct gen_device_info *devinfo,
 
 static void
 populate_tcs_prog_key(const struct gen_device_info *devinfo,
+                      VkPipelineShaderStageCreateFlags flags,
                       unsigned input_vertices,
                       struct brw_tcs_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 
    key->input_vertices = input_vertices;
 }
 
 static void
 populate_tes_prog_key(const struct gen_device_info *devinfo,
+                      VkPipelineShaderStageCreateFlags flags,
                       struct brw_tes_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 }
 
 static void
 populate_gs_prog_key(const struct gen_device_info *devinfo,
+                     VkPipelineShaderStageCreateFlags flags,
                      struct brw_gs_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 }
 
 static void
 populate_wm_prog_key(const struct gen_device_info *devinfo,
+                     VkPipelineShaderStageCreateFlags flags,
                      const struct anv_subpass *subpass,
                      const VkPipelineMultisampleStateCreateInfo *ms_info,
                      struct brw_wm_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 
    /* We set this to 0 here and set to the actual value before we call
     * brw_compile_fs.
@@ -458,11 +464,12 @@ populate_wm_prog_key(const struct gen_device_info *devinfo,
 
 static void
 populate_cs_prog_key(const struct gen_device_info *devinfo,
+                     VkPipelineShaderStageCreateFlags flags,
                      struct brw_cs_prog_key *key)
 {
    memset(key, 0, sizeof(*key));
 
-   populate_base_prog_key(devinfo, &key->base);
+   populate_base_prog_key(devinfo, flags, &key->base);
 }
 
 struct anv_pipeline_stage {
@@ -1044,21 +1051,22 @@ anv_pipeline_compile_graphics(struct anv_pipeline *pipeline,
       const struct gen_device_info *devinfo = &pipeline->device->info;
       switch (stage) {
       case MESA_SHADER_VERTEX:
-         populate_vs_prog_key(devinfo, &stages[stage].key.vs);
+         populate_vs_prog_key(devinfo, sinfo->flags, &stages[stage].key.vs);
          break;
       case MESA_SHADER_TESS_CTRL:
-         populate_tcs_prog_key(devinfo,
+         populate_tcs_prog_key(devinfo, sinfo->flags,
                                info->pTessellationState->patchControlPoints,
                                &stages[stage].key.tcs);
          break;
       case MESA_SHADER_TESS_EVAL:
-         populate_tes_prog_key(devinfo, &stages[stage].key.tes);
+         populate_tes_prog_key(devinfo, sinfo->flags, &stages[stage].key.tes);
          break;
       case MESA_SHADER_GEOMETRY:
-         populate_gs_prog_key(devinfo, &stages[stage].key.gs);
+         populate_gs_prog_key(devinfo, sinfo->flags, &stages[stage].key.gs);
          break;
       case MESA_SHADER_FRAGMENT:
-         populate_wm_prog_key(devinfo, pipeline->subpass,
+         populate_wm_prog_key(devinfo, sinfo->flags,
+                              pipeline->subpass,
                               info->pMultisampleState,
                               &stages[stage].key.wm);
          break;
@@ -1352,7 +1360,8 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
 
    struct anv_shader_bin *bin = NULL;
 
-   populate_cs_prog_key(&pipeline->device->info, &stage.key.cs);
+   populate_cs_prog_key(&pipeline->device->info, info->stage.flags,
+                        &stage.key.cs);
 
    ANV_FROM_HANDLE(anv_pipeline_layout, layout, info->layout);