Hi 2017-02-09 13:18 GMT+01:00 Wladimir J. van der Laan <laa...@gmail.com>: > - Use the same instruction area on GC3000 as the Vivante driver. > This allows the same number of instructions on GC3000 as GC2000 > instead of half. > > - Makes sure that the "PE to FE" stall before updating the shader code > or constants is hit (which is conditional on vs_offset > 0x4000). This > is necessary on GC3000 too, it increases stability.
Missing Signed-off-by line - will add it for you - git commit -s may be your friend! Reviewed-by: Christian Gmeiner <christian.gmei...@gmail.com> > --- > src/gallium/drivers/etnaviv/etnaviv_screen.c | 26 +++++++++++++++++++++----- > 1 file changed, 21 insertions(+), 5 deletions(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c > b/src/gallium/drivers/etnaviv/etnaviv_screen.c > index 8c66f79..1507967 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c > @@ -626,14 +626,30 @@ etna_get_specs(struct etna_screen *screen) > screen->specs.has_new_sin_cos = > VIV_FEATURE(screen, chipMinorFeatures3, HAS_FAST_TRANSCENDENTALS); > > - if (instruction_count > 256) { /* unified instruction memory? */ > + if (VIV_FEATURE(screen, chipMinorFeatures3, INSTRUCTION_CACHE)) { > + /* GC3000 - this core is capable of loading shaders from > + * memory. It can also run shaders from registers, as a fallback, but > + * "max_instructions" does not have the correct value. It has place for > + * 2*256 instructions just like GC2000, but the offsets are slightly > + * different. > + */ > screen->specs.vs_offset = 0xC000; > - screen->specs.ps_offset = 0xD000; /* like vivante driver */ > + /* State 08000-0C000 mirrors 0C000-0E000, and the Vivante driver uses > + * this mirror for writing PS instructions, probably safest to do the > + * same. > + */ > + screen->specs.ps_offset = 0x8000 + 0x1000; > screen->specs.max_instructions = 256; > } else { > - screen->specs.vs_offset = 0x4000; > - screen->specs.ps_offset = 0x6000; > - screen->specs.max_instructions = instruction_count / 2; > + if (instruction_count > 256) { /* unified instruction memory? */ > + screen->specs.vs_offset = 0xC000; > + screen->specs.ps_offset = 0xD000; /* like vivante driver */ > + screen->specs.max_instructions = 256; > + } else { > + screen->specs.vs_offset = 0x4000; > + screen->specs.ps_offset = 0x6000; > + screen->specs.max_instructions = instruction_count / 2; > + } > } > > if (VIV_FEATURE(screen, chipMinorFeatures1, HALTI0)) { > -- > 2.7.4 > > _______________________________________________ > etnaviv mailing list > etna...@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/etnaviv greets -- Christian Gmeiner, MSc https://www.youtube.com/user/AloryOFFICIAL https://soundcloud.com/christian-gmeiner _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev