Good catch.

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

On 13.01.2016 13:32, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

I'm not sure about the consequences of this bug, but it's definitely
dangerous.

This applies to SI, CIK, VI.

Cc: 11.0 11.1 <mesa-sta...@lists.freedesktop.org>
---
  src/gallium/drivers/radeonsi/si_state_shaders.c | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 35b226f..8ff70b4 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1317,6 +1317,7 @@ static bool si_update_spi_tmpring_size(struct si_context 
*sctx)
                si_get_max_scratch_bytes_per_wave(sctx);
        unsigned scratch_needed_size = scratch_bytes_per_wave *
                sctx->scratch_waves;
+       unsigned spi_tmpring_size;
        int r;

        if (scratch_needed_size > 0) {
@@ -1386,8 +1387,12 @@ static bool si_update_spi_tmpring_size(struct si_context 
*sctx)
        assert((scratch_needed_size & ~0x3FF) == scratch_needed_size &&
                "scratch size should already be aligned correctly.");

-       sctx->spi_tmpring_size = S_0286E8_WAVES(sctx->scratch_waves) |
-                               S_0286E8_WAVESIZE(scratch_bytes_per_wave >> 10);
+       spi_tmpring_size = S_0286E8_WAVES(sctx->scratch_waves) |
+                          S_0286E8_WAVESIZE(scratch_bytes_per_wave >> 10);
+       if (spi_tmpring_size != sctx->spi_tmpring_size) {
+               sctx->spi_tmpring_size = spi_tmpring_size;
+               sctx->emit_scratch_reloc = true;
+       }
        return true;
  }


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to