/* * 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 #include "composition.h" #include "assert_state.h" #include "grid.h" #include "extent_cl_12.h" #include "extent_ring.h" // // composition states // typedef enum skc_composition_state_e { SKC_COMPOSITION_STATE_UNSEALING, SKC_COMPOSITION_STATE_UNSEALED, SKC_COMPOSITION_STATE_SEALING, SKC_COMPOSITION_STATE_SEALED } skc_composition_state_e; // // IMPL // struct skc_composition_impl { struct skc_composition * composition; struct skc_runtime * runtime; SKC_ASSERT_STATE_DECLARE(skc_composition_state_e); skc_int lock_count; // wip renders struct { skc_grid_t sort; skc_grid_t place; } grids; cl_command_queue cq; struct { cl_kernel place; cl_kernel segment; } kernels; // raster ids must be held until the composition is reset or // released and then their refcounts can be decremented struct { struct skc_extent_phrw extent; skc_uint count; } saved; struct { struct skc_extent_ring ring; // how many slots left? struct skc_extent_phw1g_tdrNs extent; // wip command extent } cmds; // composition extent length struct skc_extent_phr_pdrw atomics; // composition ttck extent struct skc_extent_pdrw keys; // key offsets in sealed and sorted ttck extent struct skc_extent_pdrw offsets; }; // // ATOMICS // struct skc_place_atomics { skc_uint keys; skc_uint offsets; }; // // ONLY VISIBLE WITHIN THIS RUNTIME // void skc_composition_retain_and_lock(struct skc_composition * const composition); void skc_composition_unlock_and_release(struct skc_composition * const composition); // // //