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
+
+//
+//
+//