vk/compiler: Rework create_params_array
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 11 Sep 2015 22:55:54 +0000 (15:55 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 11 Sep 2015 22:55:54 +0000 (15:55 -0700)
src/vulkan/anv_compiler.cpp

index 06ae61aea5c83a4f9bcc12b92c82180fdcc429d6..e19486ac95da2fcc1d5cd4fab0a083f2db6d466b 100644 (file)
@@ -116,32 +116,26 @@ upload_kernel(struct anv_pipeline *pipeline, const void *data, size_t size)
 }
 
 static void
-create_params_array(struct anv_device *device,
+create_params_array(struct anv_pipeline *pipeline,
                     struct gl_shader *shader,
                     struct brw_stage_prog_data *prog_data)
 {
-   unsigned num_client_params;
+   VkShaderStage stage = anv_vk_shader_stage_for_mesa_stage(shader->Stage);
+   unsigned num_params = 0;
+
    if (shader->num_uniform_components) {
       /* If the shader uses any push constants at all, we'll just give
        * them the maximum possible number
        */
-      num_client_params = MAX_PUSH_CONSTANTS_SIZE / sizeof(float);
-   } else {
-      num_client_params = 0;
+      num_params += MAX_PUSH_CONSTANTS_SIZE / sizeof(float);
    }
 
-   /* We'll need to add space here for images, texture rectangle, uniform
-    * offsets, etc.
-    */
-   unsigned num_driver_params = 0;
-
-   unsigned num_total_params = num_client_params + num_driver_params;
-
-   if (num_total_params == 0)
+   if (num_params == 0)
       return;
 
    prog_data->param = (const gl_constant_value **)
-      anv_device_alloc(device, num_total_params * sizeof(gl_constant_value *),
+      anv_device_alloc(pipeline->device,
+                       num_params * sizeof(gl_constant_value *),
                        8, VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER);
 
    /* We now set the param values to be offsets into a
@@ -150,7 +144,7 @@ create_params_array(struct anv_device *device,
     * params array, it doesn't really matter what we put here.
     */
    struct anv_push_constants *null_data = NULL;
-   for (unsigned i = 0; i < num_client_params; i++)
+   for (unsigned i = 0; i < num_params; i++)
       prog_data->param[i] =
          (const gl_constant_value *)&null_data->client_data[i * sizeof(float)];
 }
@@ -207,7 +201,6 @@ really_do_vs_prog(struct brw_context *brw,
    GLuint program_size;
    const GLuint *program;
    struct brw_vs_prog_data *prog_data = &pipeline->vs_prog_data;
-   struct brw_stage_prog_data *stage_prog_data = &prog_data->base.base;
    void *mem_ctx;
    struct gl_shader *vs = NULL;
 
@@ -218,7 +211,7 @@ really_do_vs_prog(struct brw_context *brw,
 
    mem_ctx = ralloc_context(NULL);
 
-   create_params_array(pipeline->device, vs, stage_prog_data);
+   create_params_array(pipeline, vs, &prog_data->base.base);
 
    GLbitfield64 outputs_written = vp->program.Base.OutputsWritten;
    prog_data->inputs_read = vp->program.Base.InputsRead;
@@ -507,7 +500,7 @@ really_do_wm_prog(struct brw_context *brw,
 
    prog_data->computed_depth_mode = computed_depth_mode(&fp->program);
 
-   create_params_array(pipeline->device, fs, &prog_data->base);
+   create_params_array(pipeline, fs, &prog_data->base);
 
    prog_data->barycentric_interp_modes =
       brw_compute_barycentric_interp_modes(brw, key->flat_shade,
@@ -613,7 +606,7 @@ brw_codegen_cs_prog(struct brw_context *brw,
 
    set_binding_table_layout(&prog_data->base, pipeline, VK_SHADER_STAGE_COMPUTE);
 
-   create_params_array(pipeline->device, cs, &prog_data->base);
+   create_params_array(pipeline, cs, &prog_data->base);
 
    program = brw_cs_emit(brw, mem_ctx, key, prog_data,
                          &cp->program, prog, &program_size);