i965: Don't disable CCS for RT dependencies when dispatching compute.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 23 Oct 2017 22:46:47 +0000 (15:46 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 24 Oct 2017 18:31:33 +0000 (11:31 -0700)
Compute shaders don't have access to the framebuffer, so there's no
point in worrying whether a texture is bound as a render target.

This saves a bunch of resolves in GFXBench4 Manhattan 3.1, but doesn't
seem to impact performance at all, at least on Apollolake.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/mesa/drivers/dri/i965/brw_compute.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_draw.c

index c1b2df590b798475b5f7872bb10b9aceed3e0c12..9be7523bab374c08e0efdea8144ae9b24d6b9a7f 100644 (file)
@@ -177,7 +177,7 @@ brw_dispatch_compute_common(struct gl_context *ctx)
 
    brw_validate_textures(brw);
 
-   brw_predraw_resolve_inputs(brw);
+   brw_predraw_resolve_inputs(brw, false);
 
    /* Flush the batch if the batch/state buffers are nearly full.  We can
     * grow them if needed, but this is not free, so we'd like to avoid it.
index 26e71e62b54f5f2fb197d622e17d973c85e9c24f..0102f154248564a6a09be6708a10df940b8d22f9 100644 (file)
@@ -1234,7 +1234,7 @@ void intel_update_renderbuffers(__DRIcontext *context,
                                 __DRIdrawable *drawable);
 void intel_prepare_render(struct brw_context *brw);
 
-void brw_predraw_resolve_inputs(struct brw_context *brw);
+void brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering);
 
 void intel_resolve_for_dri2_flush(struct brw_context *brw,
                                   __DRIdrawable *drawable);
index b74ab8bde23c9c254bf2543969520ac007a31a69..80d4891f6f6170c3985f5ba2c9ccb8ff8df64047 100644 (file)
@@ -381,7 +381,7 @@ intel_disable_rb_aux_buffer(struct brw_context *brw,
  * enabled depth texture, and flush the render cache for any dirty textures.
  */
 void
-brw_predraw_resolve_inputs(struct brw_context *brw)
+brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering)
 {
    struct gl_context *ctx = &brw->ctx;
    struct intel_texture_object *tex_obj;
@@ -416,7 +416,7 @@ brw_predraw_resolve_inputs(struct brw_context *brw)
          num_layers = INTEL_REMAINING_LAYERS;
       }
 
-      const bool disable_aux =
+      const bool disable_aux = rendering &&
          intel_disable_rb_aux_buffer(brw, tex_obj->mt, min_level, num_levels,
                                      "for sampling");
 
@@ -678,7 +678,7 @@ brw_prepare_drawing(struct gl_context *ctx,
     * and finalizing textures but before setting up any hardware state for
     * this draw call.
     */
-   brw_predraw_resolve_inputs(brw);
+   brw_predraw_resolve_inputs(brw, true);
    brw_predraw_resolve_framebuffer(brw);
 
    /* Bind all inputs, derive varying and size information: