OSDN Git Service

radeonsi: don't miss changes to SPI_TMPRING_SIZE
authorMarek Olšák <marek.olsak@amd.com>
Wed, 13 Jan 2016 17:42:02 +0000 (18:42 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 22 Jan 2016 14:45:57 +0000 (14:45 +0000)
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-stable@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
(cherry picked from commit dc96a18d24409102e36cdfd7de0552f66c3925bf)

src/gallium/drivers/radeonsi/si_state_shaders.c

index 1ba9c85..5ef2c89 100644 (file)
@@ -1198,6 +1198,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) {
@@ -1280,8 +1281,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;
 }