etnaviv: add support for extended pe formats
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Fri, 14 Jun 2019 06:22:07 +0000 (08:22 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Mon, 25 Nov 2019 19:12:52 +0000 (20:12 +0100)
Use the extended format if an such a format was passed.

v1 -> v2:
 - set FORMAT_MASK bit when using ext PE format as suggested
   by Wladimir J. van der Laan

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Jonathan Marek <jonathan@marek.ca>
src/gallium/drivers/etnaviv/etnaviv_state.c

index e913fe7783cbf5d3c0714b72199fc32efa76a5fa..5c8448315f0c0f574e5fd50f0a0709eb957778f4 100644 (file)
@@ -141,12 +141,18 @@ etna_set_framebuffer_state(struct pipe_context *pctx,
       struct etna_surface *cbuf = etna_surface(fb->cbufs[0]);
       struct etna_resource *res = etna_resource(cbuf->base.texture);
       bool color_supertiled = (res->layout & ETNA_LAYOUT_BIT_SUPER) != 0;
+      uint32_t fmt = translate_pe_format(cbuf->base.format);
 
       assert(res->layout & ETNA_LAYOUT_BIT_TILE); /* Cannot render to linear surfaces */
       etna_update_render_resource(pctx, etna_resource(cbuf->prsc));
 
-      cs->PE_COLOR_FORMAT =
-         VIVS_PE_COLOR_FORMAT_FORMAT(translate_pe_format(cbuf->base.format)) |
+      if (fmt >= PE_FORMAT_R16F)
+          cs->PE_COLOR_FORMAT = VIVS_PE_COLOR_FORMAT_FORMAT_EXT(fmt) |
+                                VIVS_PE_COLOR_FORMAT_FORMAT_MASK;
+      else
+          cs->PE_COLOR_FORMAT = VIVS_PE_COLOR_FORMAT_FORMAT(fmt);
+
+      cs->PE_COLOR_FORMAT |=
          VIVS_PE_COLOR_FORMAT_COMPONENTS__MASK |
          VIVS_PE_COLOR_FORMAT_OVERWRITE |
          COND(color_supertiled, VIVS_PE_COLOR_FORMAT_SUPER_TILED) |