anv/pipeline: Use nir's num_images for allocating image_params
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 18 Feb 2016 19:44:26 +0000 (11:44 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 18 Feb 2016 19:44:26 +0000 (11:44 -0800)
src/intel/vulkan/anv_nir_apply_pipeline_layout.c
src/intel/vulkan/anv_pipeline.c

index 4600872d1f6c07532764e73ae4ea46d199b4977e..4be630bcbe86df8f10ae4f5f7e2d98341aa08075 100644 (file)
@@ -280,6 +280,7 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline,
    struct anv_pipeline_bind_map map = {
       .surface_count = 0,
       .sampler_count = 0,
+      .image_count = 0,
    };
 
    for (uint32_t set = 0; set < layout->num_sets; set++) {
@@ -351,6 +352,7 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline,
    }
 
    if (map.image_count > 0) {
+      assert(map.image_count <= MAX_IMAGES);
       nir_foreach_variable(var, &shader->uniforms) {
          if (glsl_type_is_image(var->type) ||
              (glsl_type_is_array(var->type) &&
@@ -369,7 +371,8 @@ anv_nir_apply_pipeline_layout(struct anv_pipeline *pipeline,
       }
 
       struct anv_push_constants *null_data = NULL;
-      const gl_constant_value **param = prog_data->param + shader->num_uniforms;
+      const gl_constant_value **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,
index 2f1ce3956a95dd5fa6aa530fcdacc685df5520b1..27872d2769ad67ff9d009b8a1fb6458d1e611be1 100644 (file)
@@ -341,9 +341,8 @@ anv_pipeline_compile(struct anv_pipeline *pipeline,
    if (pipeline->layout && pipeline->layout->stage[stage].has_dynamic_offsets)
       prog_data->nr_params += MAX_DYNAMIC_BUFFERS * 2;
 
-   if (pipeline->bindings[stage].image_count > 0)
-      prog_data->nr_params += pipeline->bindings[stage].image_count *
-                              BRW_IMAGE_PARAM_SIZE;
+   if (nir->info.num_images > 0)
+      prog_data->nr_params += nir->info.num_images * BRW_IMAGE_PARAM_SIZE;
 
    if (prog_data->nr_params > 0) {
       /* XXX: I think we're leaking this */