summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-01-24 11:51:08 -0800
committerJason Ekstrand <[email protected]>2018-01-24 19:05:36 -0800
commitdf13588d2176dcf4800a882d926f389667772b46 (patch)
treeddb15ae73798396562e909237f17ed6841d64eab
parent20f70ae3858bc213e052a8434f0e637eb36203c4 (diff)
i965: Stop disabling aux during texture preparation
Previously, we were handling self-dependencies by marking the render buffer and then passing disable_aux=true to prepare_texture so that it would do a resolve. This works but ends us up doing to much resolving in some cases. Specifically, if we're doing something such as mipmap generation, this would cause us to resolve all levels of the texture if even one of them is overlapping. Instead, this commit makes us wait until we process the framebuffer to do these resolves and we only resolve the slices needed for rendering. Doing this resolve puts them into the pass-through state so, even if we do texture using CCS_E, the CCS data will effectively be ignored and the real surface contents read. Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_draw.c12
-rw-r--r--src/mesa/drivers/dri/i965/intel_mipmap_tree.c5
-rw-r--r--src/mesa/drivers/dri/i965/intel_mipmap_tree.h3
3 files changed, 8 insertions, 12 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index 268c200f4a9..50cf8b12c74 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -439,15 +439,15 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
num_layers = INTEL_REMAINING_LAYERS;
}
- const bool disable_aux = rendering &&
+ if (rendering) {
intel_disable_rb_aux_buffer(brw, draw_aux_buffer_disabled,
tex_obj->mt, min_level, num_levels,
"for sampling");
+ }
intel_miptree_prepare_texture(brw, tex_obj->mt, view_format,
min_level, num_levels,
- min_layer, num_layers,
- disable_aux);
+ min_layer, num_layers);
/* If any programs are using it with texelFetch, we may need to also do
* a prepare with an sRGB format to ensure texelFetch works "properly".
@@ -458,8 +458,7 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
if (txf_format != view_format) {
intel_miptree_prepare_texture(brw, tex_obj->mt, txf_format,
min_level, num_levels,
- min_layer, num_layers,
- disable_aux);
+ min_layer, num_layers);
}
}
@@ -531,8 +530,7 @@ brw_predraw_resolve_framebuffer(struct brw_context *brw,
if (irb) {
intel_miptree_prepare_texture(brw, irb->mt, irb->mt->surf.format,
irb->mt_level, 1,
- irb->mt_layer, irb->layer_count,
- false);
+ irb->mt_layer, irb->layer_count);
}
}
}
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index c8081ee1095..c480eade93b 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -2649,10 +2649,9 @@ intel_miptree_prepare_texture(struct brw_context *brw,
struct intel_mipmap_tree *mt,
enum isl_format view_format,
uint32_t start_level, uint32_t num_levels,
- uint32_t start_layer, uint32_t num_layers,
- bool disable_aux)
+ uint32_t start_layer, uint32_t num_layers)
{
- enum isl_aux_usage aux_usage = disable_aux ? ISL_AUX_USAGE_NONE :
+ enum isl_aux_usage aux_usage =
intel_miptree_texture_aux_usage(brw, mt, view_format);
bool clear_supported = aux_usage != ISL_AUX_USAGE_NONE;
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
index 6135af14528..7fcf09f118a 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
@@ -642,8 +642,7 @@ intel_miptree_prepare_texture(struct brw_context *brw,
struct intel_mipmap_tree *mt,
enum isl_format view_format,
uint32_t start_level, uint32_t num_levels,
- uint32_t start_layer, uint32_t num_layers,
- bool disable_aux);
+ uint32_t start_layer, uint32_t num_layers);
void
intel_miptree_prepare_image(struct brw_context *brw,
struct intel_mipmap_tree *mt);