Mesa (master): ilo: use multiple entry points for shader creation

Chia-I Wu olv at kemper.freedesktop.org
Tue Jun 25 06:45:05 UTC 2013


Module: Mesa
Branch: master
Commit: f0afedeb750d9f696242294c730827a28bdaac70
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0afedeb750d9f696242294c730827a28bdaac70

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Thu Jun 20 12:46:36 2013 +0800

ilo: use multiple entry points for shader creation

Replace ilo_shader_state_create() by

 ilo_shader_create_vs()
 ilo_shader_create_gs()
 ilo_shader_create_fs()
 ilo_shader_create_cs()

Rename ilo_shader_state_destroy() to ilo_shader_destroy().  The old
ilo_shader_destroy() is renamed to ilo_shader_destroy_kernel().

---

 src/gallium/drivers/ilo/ilo_shader.c               |   84 +++++++++++++++----
 src/gallium/drivers/ilo/ilo_shader.h               |   22 +++++-
 src/gallium/drivers/ilo/ilo_state.c                |   16 ++--
 src/gallium/drivers/ilo/shader/ilo_shader_gs.c     |    2 +-
 .../drivers/ilo/shader/ilo_shader_internal.h       |    2 +-
 src/gallium/drivers/ilo/shader/ilo_shader_vs.c     |    2 +-
 6 files changed, 96 insertions(+), 32 deletions(-)

diff --git a/src/gallium/drivers/ilo/ilo_shader.c b/src/gallium/drivers/ilo/ilo_shader.c
index 765cc03..0f22ebb 100644
--- a/src/gallium/drivers/ilo/ilo_shader.c
+++ b/src/gallium/drivers/ilo/ilo_shader.c
@@ -495,7 +495,7 @@ ilo_shader_info_parse_tokens(struct ilo_shader_info *info)
 /**
  * Create a shader state.
  */
-struct ilo_shader_state *
+static struct ilo_shader_state *
 ilo_shader_state_create(const struct ilo_context *ilo,
                         int type, const void *templ)
 {
@@ -533,7 +533,7 @@ ilo_shader_state_create(const struct ilo_context *ilo,
    /* guess and compile now */
    ilo_shader_variant_guess(&variant, &state->info, ilo);
    if (!ilo_shader_state_use_variant(state, &variant)) {
-      ilo_shader_state_destroy(state);
+      ilo_shader_destroy(state);
       return NULL;
    }
 
@@ -541,21 +541,6 @@ ilo_shader_state_create(const struct ilo_context *ilo,
 }
 
 /**
- * Destroy a shader state.
- */
-void
-ilo_shader_state_destroy(struct ilo_shader_state *state)
-{
-   struct ilo_shader *sh, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(sh, next, &state->variants, list)
-      ilo_shader_destroy(sh);
-
-   FREE((struct tgsi_token *) state->info.tokens);
-   FREE(state);
-}
-
-/**
  * Add a compiled shader to the shader state.
  */
 static void
@@ -598,7 +583,7 @@ ilo_shader_state_gc(struct ilo_shader_state *state)
    /* remove from the tail as the most recently ones are at the head */
    LIST_FOR_EACH_ENTRY_SAFE_REV(sh, next, &state->variants, list) {
       ilo_shader_state_remove_shader(state, sh);
-      ilo_shader_destroy(sh);
+      ilo_shader_destroy_kernel(sh);
 
       if (state->total_size <= limit / 2)
          break;
@@ -692,3 +677,66 @@ ilo_shader_state_use_variant(struct ilo_shader_state *state,
 
    return true;
 }
+
+struct ilo_shader_state *
+ilo_shader_create_vs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile)
+{
+   struct ilo_shader_state *shader;
+
+   shader = ilo_shader_state_create(precompile, PIPE_SHADER_VERTEX, state);
+
+   return shader;
+}
+
+struct ilo_shader_state *
+ilo_shader_create_gs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile)
+{
+   struct ilo_shader_state *shader;
+
+   shader = ilo_shader_state_create(precompile, PIPE_SHADER_GEOMETRY, state);
+
+   return shader;
+}
+
+struct ilo_shader_state *
+ilo_shader_create_fs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile)
+{
+   struct ilo_shader_state *shader;
+
+   shader = ilo_shader_state_create(precompile, PIPE_SHADER_FRAGMENT, state);
+
+   return shader;
+}
+
+struct ilo_shader_state *
+ilo_shader_create_cs(const struct ilo_dev_info *dev,
+                     const struct pipe_compute_state *state,
+                     const struct ilo_context *precompile)
+{
+   struct ilo_shader_state *shader;
+
+   shader = ilo_shader_state_create(precompile, PIPE_SHADER_COMPUTE, state);
+
+   return shader;
+}
+
+/**
+ * Destroy a shader state.
+ */
+void
+ilo_shader_destroy(struct ilo_shader_state *shader)
+{
+   struct ilo_shader *sh, *next;
+
+   LIST_FOR_EACH_ENTRY_SAFE(sh, next, &shader->variants, list)
+      ilo_shader_destroy_kernel(sh);
+
+   FREE((struct tgsi_token *) shader->info.tokens);
+   FREE(shader);
+}
diff --git a/src/gallium/drivers/ilo/ilo_shader.h b/src/gallium/drivers/ilo/ilo_shader.h
index f286a9f..5e457b9 100644
--- a/src/gallium/drivers/ilo/ilo_shader.h
+++ b/src/gallium/drivers/ilo/ilo_shader.h
@@ -55,10 +55,26 @@ ilo_shader_cache_upload(struct ilo_shader_cache *shc,
                         bool incremental);
 
 struct ilo_shader_state *
-ilo_shader_state_create(const struct ilo_context *ilo,
-                        int type, const void *templ);
+ilo_shader_create_vs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_gs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_fs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_cs(const struct ilo_dev_info *dev,
+                     const struct pipe_compute_state *state,
+                     const struct ilo_context *precompile);
 
 void
-ilo_shader_state_destroy(struct ilo_shader_state *state);
+ilo_shader_destroy(struct ilo_shader_state *shader);
 
 #endif /* ILO_SHADER_H */
diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c
index 80fa741..69fe383 100644
--- a/src/gallium/drivers/ilo/ilo_state.c
+++ b/src/gallium/drivers/ilo/ilo_state.c
@@ -354,7 +354,7 @@ ilo_create_fs_state(struct pipe_context *pipe,
    struct ilo_context *ilo = ilo_context(pipe);
    struct ilo_shader_state *shader;
 
-   shader = ilo_shader_state_create(ilo, PIPE_SHADER_FRAGMENT, state);
+   shader = ilo_shader_create_fs(ilo->dev, state, ilo);
    assert(shader);
 
    ilo_shader_cache_add(ilo->shader_cache, shader);
@@ -379,7 +379,7 @@ ilo_delete_fs_state(struct pipe_context *pipe, void *state)
    struct ilo_shader_state *fs = (struct ilo_shader_state *) state;
 
    ilo_shader_cache_remove(ilo->shader_cache, fs);
-   ilo_shader_state_destroy(fs);
+   ilo_shader_destroy(fs);
 }
 
 static void *
@@ -389,7 +389,7 @@ ilo_create_vs_state(struct pipe_context *pipe,
    struct ilo_context *ilo = ilo_context(pipe);
    struct ilo_shader_state *shader;
 
-   shader = ilo_shader_state_create(ilo, PIPE_SHADER_VERTEX, state);
+   shader = ilo_shader_create_vs(ilo->dev, state, ilo);
    assert(shader);
 
    ilo_shader_cache_add(ilo->shader_cache, shader);
@@ -414,7 +414,7 @@ ilo_delete_vs_state(struct pipe_context *pipe, void *state)
    struct ilo_shader_state *vs = (struct ilo_shader_state *) state;
 
    ilo_shader_cache_remove(ilo->shader_cache, vs);
-   ilo_shader_state_destroy(vs);
+   ilo_shader_destroy(vs);
 }
 
 static void *
@@ -424,7 +424,7 @@ ilo_create_gs_state(struct pipe_context *pipe,
    struct ilo_context *ilo = ilo_context(pipe);
    struct ilo_shader_state *shader;
 
-   shader = ilo_shader_state_create(ilo, PIPE_SHADER_GEOMETRY, state);
+   shader = ilo_shader_create_gs(ilo->dev, state, ilo);
    assert(shader);
 
    ilo_shader_cache_add(ilo->shader_cache, shader);
@@ -449,7 +449,7 @@ ilo_delete_gs_state(struct pipe_context *pipe, void *state)
    struct ilo_shader_state *gs = (struct ilo_shader_state *) state;
 
    ilo_shader_cache_remove(ilo->shader_cache, gs);
-   ilo_shader_state_destroy(gs);
+   ilo_shader_destroy(gs);
 }
 
 static void *
@@ -992,7 +992,7 @@ ilo_create_compute_state(struct pipe_context *pipe,
    struct ilo_context *ilo = ilo_context(pipe);
    struct ilo_shader_state *shader;
 
-   shader = ilo_shader_state_create(ilo, PIPE_SHADER_COMPUTE, state);
+   shader = ilo_shader_create_cs(ilo->dev, state, ilo);
    assert(shader);
 
    ilo_shader_cache_add(ilo->shader_cache, shader);
@@ -1017,7 +1017,7 @@ ilo_delete_compute_state(struct pipe_context *pipe, void *state)
    struct ilo_shader_state *cs = (struct ilo_shader_state *) state;
 
    ilo_shader_cache_remove(ilo->shader_cache, cs);
-   ilo_shader_state_destroy(cs);
+   ilo_shader_destroy(cs);
 }
 
 static void
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_gs.c b/src/gallium/drivers/ilo/shader/ilo_shader_gs.c
index c4266f4..79a6acb 100644
--- a/src/gallium/drivers/ilo/shader/ilo_shader_gs.c
+++ b/src/gallium/drivers/ilo/shader/ilo_shader_gs.c
@@ -1398,7 +1398,7 @@ append_gs_to_vs(struct ilo_shader *vs, struct ilo_shader *gs, int num_verts)
    vs->gs_offsets[num_verts - 1] = gs_offset;
    vs->gs_start_grf = gs->in.start_grf;
 
-   ilo_shader_destroy(gs);
+   ilo_shader_destroy_kernel(gs);
 
    return true;
 }
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_internal.h b/src/gallium/drivers/ilo/shader/ilo_shader_internal.h
index c444e56..a73b339 100644
--- a/src/gallium/drivers/ilo/shader/ilo_shader_internal.h
+++ b/src/gallium/drivers/ilo/shader/ilo_shader_internal.h
@@ -203,7 +203,7 @@ ilo_shader_compile_cs(const struct ilo_shader_state *state,
                       const struct ilo_shader_variant *variant);
 
 static inline void
-ilo_shader_destroy(struct ilo_shader *sh)
+ilo_shader_destroy_kernel(struct ilo_shader *sh)
 {
    FREE(sh->kernel);
    FREE(sh);
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_vs.c b/src/gallium/drivers/ilo/shader/ilo_shader_vs.c
index fcb9cb5..dc166d7 100644
--- a/src/gallium/drivers/ilo/shader/ilo_shader_vs.c
+++ b/src/gallium/drivers/ilo/shader/ilo_shader_vs.c
@@ -1280,7 +1280,7 @@ ilo_shader_compile_vs(const struct ilo_shader_state *state,
 
       if (!ilo_shader_compile_gs_passthrough(state, variant,
                so_mapping, vcc.shader)) {
-         ilo_shader_destroy(vcc.shader);
+         ilo_shader_destroy_kernel(vcc.shader);
          vcc.shader = NULL;
       }
    }




More information about the mesa-commit mailing list