summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_blit.c
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-06-14 13:55:12 +0200
committerSamuel Pitoiset <[email protected]>2017-06-18 14:10:38 +0200
commit6ff6863c329434cfc3d1424db7ca0f614eff63fd (patch)
tree78974b9450953e6c0a6fddecfef6a2c71e757b9a /src/gallium/drivers/radeonsi/si_blit.c
parent06ed251c328ebf5c635b972b14039165077d05df (diff)
radeonsi: reduce overhead for resident textures which need color decompression
This is done by introducing a separate list. si_decompress_textures() is now 5x faster. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_blit.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_blit.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
index 06a99fbc8a2..b240c4d355e 100644
--- a/src/gallium/drivers/radeonsi/si_blit.c
+++ b/src/gallium/drivers/radeonsi/si_blit.c
@@ -693,18 +693,13 @@ static void si_check_render_feedback(struct si_context *sctx)
static void si_decompress_resident_textures(struct si_context *sctx)
{
- util_dynarray_foreach(&sctx->resident_tex_handles,
+ util_dynarray_foreach(&sctx->resident_tex_needs_color_decompress,
struct si_texture_handle *, tex_handle) {
struct pipe_sampler_view *view = (*tex_handle)->view;
- struct si_sampler_view *sview = (struct si_sampler_view *)view;
struct r600_texture *tex = (struct r600_texture *)view->texture;
- if (view->texture->target == PIPE_BUFFER)
- continue;
-
- if ((*tex_handle)->needs_color_decompress)
- si_decompress_color_texture(sctx, tex, view->u.tex.first_level,
- view->u.tex.last_level);
+ si_decompress_color_texture(sctx, tex, view->u.tex.first_level,
+ view->u.tex.last_level);
}
util_dynarray_foreach(&sctx->resident_tex_needs_depth_decompress,
@@ -722,17 +717,13 @@ static void si_decompress_resident_textures(struct si_context *sctx)
static void si_decompress_resident_images(struct si_context *sctx)
{
- util_dynarray_foreach(&sctx->resident_img_handles,
+ util_dynarray_foreach(&sctx->resident_img_needs_color_decompress,
struct si_image_handle *, img_handle) {
struct pipe_image_view *view = &(*img_handle)->view;
struct r600_texture *tex = (struct r600_texture *)view->resource;
- if (view->resource->target == PIPE_BUFFER)
- continue;
-
- if ((*img_handle)->needs_color_decompress)
- si_decompress_color_texture(sctx, tex, view->u.tex.level,
- view->u.tex.level);
+ si_decompress_color_texture(sctx, tex, view->u.tex.level,
+ view->u.tex.level);
}
}