Skia Compute core files

Bug: skia:
Change-Id: I4bba49cf20eff013e581800a3f114c85acd8498c
Reviewed-on: https://skia-review.googlesource.com/135782
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/compute/skc/grid.h b/src/compute/skc/grid.h
new file mode 100644
index 0000000..006625e
--- /dev/null
+++ b/src/compute/skc/grid.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#pragma once
+
+//
+//
+//
+
+#include "handle.h"
+#include "scheduler.h"
+
+//
+// The requirement is that every grid struct begin with an skc_grid_t
+//
+
+typedef struct skc_grid      * skc_grid_t;
+typedef struct skc_grid_deps * skc_grid_deps_t;
+
+//
+//
+//
+
+typedef void (* skc_grid_pfn)(skc_grid_t const grid);
+
+//
+//
+//
+
+#define SKC_IS_GRID_INVALID(grid)  (grid == NULL)
+
+//
+//
+//
+
+#define SKC_GRID_DEPS_ATTACH(deps,addr,data,waiting_pfn,execute_pfn,dispose_pfn) \
+  skc_grid_deps_attach(deps,addr,data,                                  \
+                       waiting_pfn,execute_pfn,dispose_pfn,             \
+                       #waiting_pfn,#execute_pfn,#dispose_pfn)          \
+//
+//
+//
+
+skc_grid_deps_t
+skc_grid_deps_create(struct skc_runtime   * const runtime,
+                     struct skc_scheduler * const scheduler,
+                     skc_uint               const handle_pool_size);
+
+void
+skc_grid_deps_dispose(skc_grid_deps_t const deps);
+
+//
+//
+//
+
+#ifndef NDEBUG
+void
+skc_grid_deps_debug(struct skc_grid_deps const * const deps);
+#endif
+
+//
+//
+//
+
+skc_grid_t
+skc_grid_deps_attach(skc_grid_deps_t const deps,
+                     skc_grid_t    * const addr,
+                     void          * const data,
+                     skc_grid_pfn          waiting_pfn,  // upon READY         > WAITING
+                     skc_grid_pfn          execute_pfn,  // upon READY/WAITING > EXECUTING
+                     skc_grid_pfn          dispose_pfn,  // upon EXECUTING     > COMPLETE
+                     char    const * const waiting_name,
+                     char    const * const execute_name,
+                     char    const * const dispose_name);
+
+#if 0
+//
+// Not using this yet -- needs to properly detach and reclaim a ready
+// grid's resources
+//
+void
+skc_grid_detach(skc_grid_t const grid);
+#endif
+
+//
+//
+//
+
+void *
+skc_grid_get_data(skc_grid_t const grid);
+
+void
+skc_grid_set_data(skc_grid_t const grid, void * const data);
+
+//
+//
+//
+
+void
+skc_grid_map(skc_grid_t const grid, skc_handle_t const handle);
+
+//
+//
+//
+
+void
+skc_grid_deps_force(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count);
+
+void
+skc_grid_deps_unmap(skc_grid_deps_t      const deps,
+                    skc_handle_t const * const handles,
+                    skc_uint             const count);
+
+//
+//
+//
+
+void
+skc_grid_happens_after_grid(skc_grid_t const after,
+                            skc_grid_t const before);
+
+void
+skc_grid_happens_after_handle(skc_grid_t   const after,
+                              skc_handle_t const before);
+
+//
+// should be called by host
+//
+
+void
+skc_grid_start(skc_grid_t const grid);
+
+void
+skc_grid_force(skc_grid_t const grid);
+
+//
+// should be called by the scheduler
+//
+
+void
+skc_grid_complete(skc_grid_t const grid);
+
+//
+//
+//
+
+#if 0
+//
+// delete when ready
+//
+skc_grid_t
+skc_grid_move(skc_grid_t         const grid,
+              skc_grid_state_e * const state,
+              skc_grid_t       * const addr,
+              void             * const data);
+#endif
+
+//
+//
+//