blob: 1cfd51161e7e654a657cdd095a02844d1863d2e3 [file] [log] [blame]
/*
* 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 "skc.h"
#include "runtime.h"
#include "cq_pool_cl.h"
#include "handle_pool_cl_12.h"
#include "block_pool_cl_12.h"
#include "allocator_device_cl.h"
//
// FIXME -- two parts:
//
// 1. directly access the structures in the runtime sub-struct implementations
// 2. possibly wall off the non-platform-specific structs into a sub structure
//
struct skc_runtime
{
//
// state visible to device
//
struct {
cl_context context;
cl_device_id device_id;
cl_uint align_bytes;
} cl;
struct {
struct skc_allocator_host host;
struct skc_allocator_device device;
} allocator;
struct skc_cq_pool cq_pool;
struct skc_block_pool block_pool;
struct skc_handle_pool handle_pool;
//
// state that is slightly opaque (for now)
//
struct skc_scheduler * scheduler;
struct skc_grid_deps * deps;
struct skc_config const * config; // FIXME: config will be determined by device with some opportunities to resize
struct skc_device * device; // opaque bundle of kernels
struct hs_cl const * hs; // opaque hotsort
};
//
// Creation and disposal intitializes context and may rely on other
// context resources like the scheduler
//
skc_err
skc_runtime_cl_12_create(struct skc_context * const context,
cl_context context_cl,
cl_device_id device_id_cl);
skc_err
skc_runtime_cl_12_dispose(struct skc_context * const context);
//
// HOST HANDLE RETAIN/RELEASE/FLUSH
//
skc_err
skc_runtime_path_host_retain(struct skc_runtime * const runtime,
skc_path_t const * paths,
uint32_t count);
skc_err
skc_runtime_raster_host_retain(struct skc_runtime * const runtime,
skc_raster_t const * rasters,
uint32_t count);
skc_err
skc_runtime_path_host_release(struct skc_runtime * const runtime,
skc_path_t const * paths,
uint32_t count);
skc_err
skc_runtime_raster_host_release(struct skc_runtime * const runtime,
skc_raster_t const * rasters,
uint32_t count);
skc_err
skc_runtime_path_host_flush(struct skc_runtime * const runtime,
skc_path_t const * paths,
uint32_t count);
skc_err
skc_runtime_raster_host_flush(struct skc_runtime * const runtime,
skc_raster_t const * rasters,
uint32_t count);
//
// DEVICE/PIPELINE HANDLE ACQUIRE/RETAIN/RELEASE
//
// The retain operations pre-validate handles
//
skc_handle_t
skc_runtime_handle_device_acquire(struct skc_runtime * const runtime);
skc_err
skc_runtime_handle_device_validate_retain(struct skc_runtime * const runtime,
skc_typed_handle_type_e const handle_type,
skc_typed_handle_t const * typed_handles,
uint32_t count);
void
skc_runtime_handle_device_retain(struct skc_runtime * const runtime,
skc_handle_t const * handles,
uint32_t count);
void
skc_runtime_path_device_release(struct skc_runtime * const runtime,
skc_handle_t const * handles,
uint32_t count);
void
skc_runtime_raster_device_release(struct skc_runtime * const runtime,
skc_handle_t const * handles,
uint32_t count);
//
// We only use in-order command queues in the pipeline
//
cl_command_queue
skc_runtime_acquire_cq_in_order(struct skc_runtime * const runtime);
void
skc_runtime_release_cq_in_order(struct skc_runtime * const runtime,
cl_command_queue cq);
//
// DEVICE MEMORY ALLOCATION
//
cl_mem
skc_runtime_device_perm_alloc(struct skc_runtime * const runtime,
cl_mem_flags const flags,
size_t const size);
void
skc_runtime_device_perm_free(struct skc_runtime * const runtime,
cl_mem const mem);
cl_mem
skc_runtime_device_temp_alloc(struct skc_runtime * const runtime,
cl_mem_flags const flags,
size_t const size,
skc_subbuf_id_t * const subbuf_id,
size_t * const subbuf_size);
void
skc_runtime_device_temp_free(struct skc_runtime * const runtime,
cl_mem const mem,
skc_subbuf_id_t const subbuf_id);
//
//
//
void
skc_runtime_cl_12_debug(struct skc_context * const context);
//
//
//