panfrost: Call the Bifrost compiler on bi devices
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 6 Apr 2020 20:44:17 +0000 (16:44 -0400)
committerTomeu Vizoso <tomeu.vizoso@collabora.com>
Fri, 10 Apr 2020 14:53:47 +0000 (16:53 +0200)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4505>

src/gallium/drivers/panfrost/pan_assemble.c

index 5d5a0f332485dc4aa496ffbe790079b642e22774..1486d22d70d7e0d89ff0da2d88c26ade972df668 100644 (file)
 #include "pan_bo.h"
 #include "pan_context.h"
 #include "pan_util.h"
+#include "panfrost-quirks.h"
 
 #include "compiler/nir/nir.h"
 #include "nir/tgsi_to_nir.h"
 #include "midgard/midgard_compile.h"
+#include "bifrost/bifrost_compile.h"
 #include "util/u_dynarray.h"
 
 #include "tgsi/tgsi_dump.h"
@@ -64,8 +66,12 @@ panfrost_shader_compile(struct panfrost_context *ctx,
                 .alpha_ref = state->alpha_state.ref_value
         };
 
-        midgard_compile_shader_nir(s, &program, false, 0, dev->gpu_id,
-                        pan_debug & PAN_DBG_PRECOMPILE);
+        if (dev->quirks & IS_BIFROST) {
+                bifrost_compile_shader_nir(s, &program, dev->gpu_id);
+        } else {
+                midgard_compile_shader_nir(s, &program, false, 0, dev->gpu_id,
+                                pan_debug & PAN_DBG_PRECOMPILE);
+        }
 
         /* Prepare the compiled binary for upload */
         int size = program.compiled.size;
@@ -78,10 +84,12 @@ panfrost_shader_compile(struct panfrost_context *ctx,
         if (size) {
                 state->bo = pan_bo_create(dev, size, PAN_BO_EXECUTE);
                 memcpy(state->bo->cpu, dst, size);
-                state->first_tag = program.first_tag;
-        } else {
-                /* No shader. Use dummy tag to avoid INSTR_INVALID_ENC */
-                state->first_tag = 1;
+        }
+
+        if (!(dev->quirks & IS_BIFROST)) {
+                /* If size = 0, no shader. Use dummy tag to avoid
+                 * INSTR_INVALID_ENC */
+                state->first_tag = size ? program.first_tag : 1;
         }
 
         util_dynarray_fini(&program.compiled);