anv/pipeline: Refactor setup of the prog_data::param array
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 29 Sep 2017 18:18:04 +0000 (11:18 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 13 Oct 2017 05:39:31 +0000 (22:39 -0700)
Now that the only thing we put in the array up-front are client push
constants, we can simplify anv_pipeline_compile a bit.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/vulkan/anv_pipeline.c

index 97bc840e6177af05b91833dfc5153b64179a9e8c..7bfdb5c550914d1ccdd62845dd0bb2c9d44e74c2 100644 (file)
@@ -393,22 +393,15 @@ anv_pipeline_compile(struct anv_pipeline *pipeline,
 
    nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
 
-   /* Figure out the number of parameters */
-   prog_data->nr_params = 0;
-
    if (nir->num_uniforms > 0) {
+      assert(prog_data->nr_params == 0);
+
       /* If the shader uses any push constants at all, we'll just give
        * them the maximum possible number
        */
       assert(nir->num_uniforms <= MAX_PUSH_CONSTANTS_SIZE);
       nir->num_uniforms = MAX_PUSH_CONSTANTS_SIZE;
       prog_data->nr_params += MAX_PUSH_CONSTANTS_SIZE / sizeof(float);
-   }
-
-   if (nir->info.num_ssbos > 0 || nir->info.num_images > 0)
-      pipeline->needs_data_cache = true;
-
-   if (prog_data->nr_params > 0) {
       prog_data->param = ralloc_array(mem_ctx, uint32_t, prog_data->nr_params);
 
       /* We now set the param values to be offsets into a
@@ -417,14 +410,16 @@ anv_pipeline_compile(struct anv_pipeline *pipeline,
        * params array, it doesn't really matter what we put here.
        */
       struct anv_push_constants *null_data = NULL;
-      if (nir->num_uniforms > 0) {
-         /* Fill out the push constants section of the param array */
-         for (unsigned i = 0; i < MAX_PUSH_CONSTANTS_SIZE / sizeof(float); i++)
-            prog_data->param[i] = ANV_PARAM_PUSH(
-               (uintptr_t)&null_data->client_data[i * sizeof(float)]);
+      /* Fill out the push constants section of the param array */
+      for (unsigned i = 0; i < MAX_PUSH_CONSTANTS_SIZE / sizeof(float); i++) {
+         prog_data->param[i] = ANV_PARAM_PUSH(
+            (uintptr_t)&null_data->client_data[i * sizeof(float)]);
       }
    }
 
+   if (nir->info.num_ssbos > 0 || nir->info.num_images > 0)
+      pipeline->needs_data_cache = true;
+
    /* Apply the actual pipeline layout to UBOs, SSBOs, and textures */
    if (pipeline->layout)
       anv_nir_apply_pipeline_layout(pipeline, nir, prog_data, map);