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