summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-09-29 11:10:22 -0700
committerJason Ekstrand <[email protected]>2017-10-12 22:39:31 -0700
commit6b31229592df76eefc1aa41d5b936ad2bb6b5598 (patch)
treeb7bea6bde45b61644995b2a78d659aea9b96280c
parent63c938fd1838d372674db70b7ff0199594a85cd0 (diff)
anv/pipeline: Grow the param array for images
Before, we were calculating up-front and then filling in later. Now we just grow as needed in anv_nir_apply_pipeline_layout. Reviewed-by: Jordan Justen <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/intel/vulkan/anv_nir_apply_pipeline_layout.c5
-rw-r--r--src/intel/vulkan/anv_pipeline.c7
2 files changed, 5 insertions, 7 deletions
diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
index f5a274d1a53..26e7dccc79d 100644
--- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
+++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
@@ -473,8 +473,10 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline,
}
}
+ uint32_t *param = brw_stage_prog_data_add_params(prog_data,
+ map->image_count *
+ BRW_IMAGE_PARAM_SIZE);
struct anv_push_constants *null_data = NULL;
- uint32_t *param = prog_data->param + (shader->num_uniforms / 4);
const struct brw_image_param *image_param = null_data->images;
for (uint32_t i = 0; i < map->image_count; i++) {
setup_vec4_uniform_value(param + BRW_IMAGE_PARAM_SURFACE_IDX_OFFSET,
@@ -493,6 +495,7 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline,
param += BRW_IMAGE_PARAM_SIZE;
image_param ++;
}
+ assert(param == prog_data->param + prog_data->nr_params);
shader->num_uniforms += map->image_count * BRW_IMAGE_PARAM_SIZE * 4;
}
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index bac2a1eeea6..97bc840e617 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -405,12 +405,7 @@ anv_pipeline_compile(struct anv_pipeline *pipeline,
prog_data->nr_params += MAX_PUSH_CONSTANTS_SIZE / sizeof(float);
}
- if (nir->info.num_images > 0) {
- prog_data->nr_params += nir->info.num_images * BRW_IMAGE_PARAM_SIZE;
- pipeline->needs_data_cache = true;
- }
-
- if (nir->info.num_ssbos > 0)
+ if (nir->info.num_ssbos > 0 || nir->info.num_images > 0)
pipeline->needs_data_cache = true;
if (prog_data->nr_params > 0) {