mesa/st: allow using nir for ff-fragment shaders
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Tue, 18 Apr 2023 20:05:28 +0000 (22:05 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 19 May 2023 13:51:19 +0000 (13:51 +0000)
This is similar to what we do for ff-vertex shaders.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22755>

src/mesa/state_tracker/st_program.c

index 31a57c9..2f16a6c 100644 (file)
@@ -865,7 +865,7 @@ st_translate_fragment_program(struct st_context *st,
 
    /* Translate to NIR.  ATI_fs translates at variant time. */
    if (!prog->ati_fs) {
-      if (prog->nir)
+      if (prog->nir && prog->arb.Instructions)
          ralloc_free(prog->nir);
 
       if (prog->serialized_nir) {
@@ -874,8 +874,11 @@ st_translate_fragment_program(struct st_context *st,
       }
 
       prog->state.type = PIPE_SHADER_IR_NIR;
-      prog->nir = st_translate_prog_to_nir(st, prog,
-                                           MESA_SHADER_FRAGMENT);
+      if (prog->arb.Instructions)
+         prog->nir = st_translate_prog_to_nir(st, prog,
+                                             MESA_SHADER_FRAGMENT);
+      else
+         st_prog_to_nir_postprocess(st, prog->nir, prog);
       prog->info = prog->nir->info;
    }