[Mesa-dev] [PATCH 2/2] etnaviv: Set shader instruction area correctly for GC3000

Christian Gmeiner christian.gmeiner at gmail.com
Sun Feb 12 19:43:39 UTC 2017


Hi

2017-02-09 13:18 GMT+01:00 Wladimir J. van der Laan <laanwj at 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.gmeiner at 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
> etnaviv at 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


More information about the mesa-dev mailing list