anv: Keep track of whether the data cache should be enabled in L3
authorJordan Justen <jordan.l.justen@intel.com>
Sat, 2 Apr 2016 20:44:55 +0000 (13:44 -0700)
committerJordan Justen <jordan.l.justen@intel.com>
Tue, 17 May 2016 20:04:03 +0000 (13:04 -0700)
If images or shader buffers are used, we will enable the data cache in
the the L3 config.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_pipeline.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/genX_pipeline.c

index 7d265d8d2158e3c3033179a7ee972883b6a99dfd..a17a1bb04f4d7b1f19b35d453a0c3ff0e7de3cf2 100644 (file)
@@ -332,8 +332,13 @@ 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 (nir->info.num_images > 0)
+   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)
+      pipeline->needs_data_cache = true;
 
    if (prog_data->nr_params > 0) {
       /* XXX: I think we're leaking this */
@@ -1113,6 +1118,8 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
 
    pipeline->use_repclear = extra && extra->use_repclear;
 
+   pipeline->needs_data_cache = false;
+
    /* When we free the pipeline, we detect stages based on the NULL status
     * of various prog_data pointers.  Make them NULL by default.
     */
index 99436771249878da230259ef659b2e78ec977255..8afd47ffb0dcbc58d8a57e53c54f5633acc7169d 100644 (file)
@@ -1403,6 +1403,7 @@ struct anv_pipeline {
    struct anv_pipeline_bind_map                 bindings[MESA_SHADER_STAGES];
 
    bool                                         use_repclear;
+   bool                                         needs_data_cache;
 
    const struct brw_stage_prog_data *           prog_data[MESA_SHADER_STAGES];
    uint32_t                                     scratch_start[MESA_SHADER_STAGES];
index 2328920b657e0099f7d56dd0b50aa7e2d7ab00fb..2a41b2d91faa890c42dbb3a7f51b9e7907d5ee90 100644 (file)
@@ -74,6 +74,8 @@ genX(compute_pipeline_create)(
    pipeline->active_stages = 0;
    pipeline->total_scratch = 0;
 
+   pipeline->needs_data_cache = false;
+
    assert(pCreateInfo->stage.stage == VK_SHADER_STAGE_COMPUTE_BIT);
    ANV_FROM_HANDLE(anv_shader_module, module,  pCreateInfo->stage.module);
    anv_pipeline_compile_cs(pipeline, cache, pCreateInfo, module,