mesa/st: move shader completion into mesa
authorDave Airlie <airlied@redhat.com>
Mon, 20 Dec 2021 05:27:50 +0000 (15:27 +1000)
committerMarge Bot <emma+marge@anholt.net>
Fri, 21 Jan 2022 01:18:19 +0000 (01:18 +0000)
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14632>

src/mesa/main/shaderapi.c
src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_cb_program.h

index 03eac97..d181bd9 100644 (file)
@@ -69,6 +69,7 @@
 
 #include "state_tracker/st_cb_program.h"
 #include "state_tracker/st_context.h"
+#include "state_tracker/st_program.h"
 
 #ifdef ENABLE_SHADER_CACHE
 #if CUSTOM_SHADER_REPLACEMENT
@@ -705,6 +706,34 @@ check_tes_query(struct gl_context *ctx, const struct gl_shader_program *shProg)
    return false;
 }
 
+static bool
+get_shader_program_completion_status(struct gl_context *ctx,
+                                     struct gl_shader_program *shprog)
+{
+   struct pipe_screen *screen = ctx->screen;
+
+   if (!screen->is_parallel_shader_compilation_finished)
+      return true;
+
+   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
+      struct gl_linked_shader *linked = shprog->_LinkedShaders[i];
+      void *sh = NULL;
+
+      if (!linked || !linked->Program)
+         continue;
+
+      if (st_program(linked->Program)->variants)
+         sh = st_program(linked->Program)->variants->driver_shader;
+
+      unsigned type = pipe_shader_type_from_mesa(i);
+
+      if (sh &&
+          !screen->is_parallel_shader_compilation_finished(screen, sh, type))
+         return false;
+   }
+   return true;
+}
+
 /**
  * Return the length of a string, or 0 if the pointer passed in is NULL
  */
@@ -755,7 +784,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
       *params = shProg->DeletePending;
       return;
    case GL_COMPLETION_STATUS_ARB:
-      *params = st_get_shader_program_completion_status(ctx, shProg);
+      *params = get_shader_program_completion_status(ctx, shProg);
       return;
    case GL_LINK_STATUS:
       *params = shProg->data->LinkStatus ? GL_TRUE : GL_FALSE;
index 4c19c27..2ba3ad6 100644 (file)
@@ -142,34 +142,6 @@ st_new_ati_fs(struct gl_context *ctx, struct ati_fragment_shader *curProg)
    return prog;
 }
 
-bool
-st_get_shader_program_completion_status(struct gl_context *ctx,
-                                        struct gl_shader_program *shprog)
-{
-   struct pipe_screen *screen = st_context(ctx)->screen;
-
-   if (!screen->is_parallel_shader_compilation_finished)
-      return true;
-
-   for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
-      struct gl_linked_shader *linked = shprog->_LinkedShaders[i];
-      void *sh = NULL;
-
-      if (!linked || !linked->Program)
-         continue;
-
-      if (st_program(linked->Program)->variants)
-         sh = st_program(linked->Program)->variants->driver_shader;
-
-      unsigned type = pipe_shader_type_from_mesa(i);
-
-      if (sh &&
-          !screen->is_parallel_shader_compilation_finished(screen, sh, type))
-         return false;
-   }
-   return true;
-}
-
 /**
  * Plug in the program and shader-related device driver functions.
  */
index fc60cb8..c917f0a 100644 (file)
@@ -42,9 +42,6 @@ GLboolean st_program_string_notify(struct gl_context *ctx,
                                    struct gl_program *prog);
 struct gl_program *st_new_ati_fs(struct gl_context *ctx, struct ati_fragment_shader *curProg);
 
-bool st_get_shader_program_completion_status(struct gl_context *ctx,
-                                             struct gl_shader_program *shprog);
-
 #ifdef __cplusplus
 }
 #endif