ilo: use multiple entry points for shader creation
authorChia-I Wu <olvaffe@gmail.com>
Thu, 20 Jun 2013 04:46:36 +0000 (12:46 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Tue, 25 Jun 2013 03:54:14 +0000 (11:54 +0800)
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
src/gallium/drivers/ilo/ilo_shader.h
src/gallium/drivers/ilo/ilo_state.c
src/gallium/drivers/ilo/shader/ilo_shader_gs.c
src/gallium/drivers/ilo/shader/ilo_shader_internal.h
src/gallium/drivers/ilo/shader/ilo_shader_vs.c

index 765cc037806ed352fc7c01e6b952b3dc29be8430..0f22ebb4dd815eb2005e4ef3547e97876c2fcbf3 100644 (file)
@@ -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,28 +533,13 @@ 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;
    }
 
    return state;
 }
 
-/**
- * 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.
  */
@@ -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);
+}
index f286a9f785f6e1563bdd0e970b758d43df34ad39..5e457b91e11efc4ff96b474b278cdd233f6d53d7 100644 (file)
@@ -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 */
index 80fa7414e825fd1e8b59b59c2aa0c520284c0c58..69fe383379314cff8d719ca77fca2bb2e67402d3 100644 (file)
@@ -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
index c4266f41b0c3a8572715a3058c82415bc8647ee2..79a6acb7a280dfdc9586dd51cd3e1c97338aebd6 100644 (file)
@@ -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;
 }
index c444e564dab9f72d2c9dd8058ac7d1b26af070fd..a73b3393fe384a5263e636f8330e353b7c97c869 100644 (file)
@@ -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);
index fcb9cb53e55094443748b77380739a46648d8f9f..dc166d7cc484cf43a8480c45d2f5936b83123d07 100644 (file)
@@ -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;
       }
    }