panfrost: 8x MRT support
authorIcecream95 <ixn@keemail.me>
Tue, 14 Jul 2020 00:05:47 +0000 (12:05 +1200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 20 Jul 2020 14:15:49 +0000 (14:15 +0000)
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5892>

docs/features.txt
src/gallium/drivers/panfrost/pan_mfbd.c
src/gallium/drivers/panfrost/pan_screen.c
src/panfrost/include/panfrost-job.h

index 9d5198e62d34db4dca23aba2883628d51df66f37..44d0ec26b1965992047d2f258fa252e6f4b3f2ed 100644 (file)
@@ -64,7 +64,7 @@ GL 3.0, GLSL 1.30 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llv
   Depth format cube textures                            DONE (panfrost)
   GLX_ARB_create_context (GLX 1.4 is required)          DONE (panfrost, v3d)
   Multisample anti-aliasing                             DONE (freedreno/a5xx+, freedreno (*), llvmpipe (*), softpipe (*), swr (*), panfrost)
-  8 draw buffers                                        DONE ()
+  8 draw buffers                                        DONE (panfrost/t760+)
 
 (*) freedreno (a2xx-a4xx), llvmpipe, softpipe, and swr have fake Multisample anti-aliasing support
 
index 0ee904e9b5ab9ebfba0a7bb0134a05914794737c..d253b897b98417dfd981b31063fd8ac59df4e7ad 100644 (file)
@@ -401,7 +401,7 @@ panfrost_mfbd_upload(struct panfrost_batch *batch,
         size_t total_sz =
                 sizeof(struct mali_framebuffer) +
                 (has_extra ? sizeof(struct mali_framebuffer_extra) : 0) +
-                sizeof(struct mali_render_target) * 4;
+                sizeof(struct mali_render_target) * 8;
 
         struct panfrost_transfer m_f_trans =
                 panfrost_pool_alloc(&batch->pool, total_sz);
@@ -413,7 +413,7 @@ panfrost_mfbd_upload(struct panfrost_batch *batch,
         if (has_extra)
                 UPLOAD(m_f_trans, offset, fbx, total_sz);
 
-        for (unsigned c = 0; c < 4; ++c) {
+        for (unsigned c = 0; c < 8; ++c) {
                 UPLOAD(m_f_trans, offset, &rts[c], total_sz);
         }
 
@@ -541,7 +541,7 @@ panfrost_mfbd_fragment(struct panfrost_batch *batch, bool has_draws)
 
         struct mali_framebuffer fb = panfrost_emit_mfbd(batch, has_draws);
         struct mali_framebuffer_extra fbx = {0};
-        struct mali_render_target rts[4] = {0};
+        struct mali_render_target rts[8] = {0};
 
         /* We always upload at least one dummy GL_NONE render target */
 
index e776add1f20b8bc336562cbf3ecc3f69c3f49afb..a9f7c4e1aa95d3c3776d8319c90877442a30eb68 100644 (file)
@@ -120,7 +120,7 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
         case PIPE_CAP_MAX_RENDER_TARGETS:
         case PIPE_CAP_FBFETCH:
         case PIPE_CAP_FBFETCH_COHERENT:
-                return has_mrt ? 4 : 1;
+                return has_mrt ? 8 : 1;
 
         case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
                 return 1;
@@ -300,7 +300,7 @@ panfrost_get_shader_param(struct pipe_screen *screen,
                 return 16;
 
         case PIPE_SHADER_CAP_MAX_OUTPUTS:
-                return shader == PIPE_SHADER_FRAGMENT ? 4 : 16;
+                return shader == PIPE_SHADER_FRAGMENT ? 8 : 16;
 
         case PIPE_SHADER_CAP_MAX_TEMPS:
                 return 256; /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
index c6fd0647ca34f6de7c987be8518e557d3e251df6..8ac799b81f2c2004c04625bdc35ffe0acbb6bf34 100644 (file)
@@ -1849,8 +1849,8 @@ struct mali_framebuffer {
         u32 zero3;
         u16 width2, height2;
         u32 unk1 : 19; // = 0x01000
-        u32 rt_count_1 : 2; // off-by-one (use MALI_POSITIVE)
-        u32 unk2 : 3; // = 0
+        u32 rt_count_1 : 3; // off-by-one (use MALI_POSITIVE)
+        u32 unk2 : 2; // = 0
         u32 rt_count_2 : 3; // no off-by-one
         u32 zero4 : 5;
         /* 0x30 */