blob: 306c8cf2fe5b8bd0ea42e78dacaa36aaec9d8e81 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_GRAPHICS_LIB_COMPUTE_SPINEL_INCLUDE_SPINEL_SPINEL_H_
#define SRC_GRAPHICS_LIB_COMPUTE_SPINEL_INCLUDE_SPINEL_SPINEL_H_
//
//
//
#include "spinel/spinel_result.h"
#include "spinel/spinel_types.h"
//
//
//
#ifdef __cplusplus
extern "C" {
#endif
//
// CONTEXT
//
spinel_result_t
spinel_context_retain(spinel_context_t context);
spinel_result_t
spinel_context_release(spinel_context_t context);
spinel_result_t
spinel_context_reset(spinel_context_t context);
spinel_result_t
spinel_context_get_limits(spinel_context_t context, spinel_context_limits_t * limits);
//
// PATH BUILDER
//
spinel_result_t
spinel_path_builder_create(spinel_context_t context, spinel_path_builder_t * path_builder);
spinel_result_t
spinel_path_builder_retain(spinel_path_builder_t path_builder);
spinel_result_t
spinel_path_builder_release(spinel_path_builder_t path_builder);
spinel_result_t
spinel_path_builder_flush(spinel_path_builder_t path_builder);
//
// PATH OPS
//
spinel_result_t
spinel_path_builder_begin(spinel_path_builder_t path_builder);
spinel_result_t
spinel_path_builder_end(spinel_path_builder_t path_builder, spinel_path_t * path);
spinel_result_t
spinel_path_builder_move_to(spinel_path_builder_t path_builder, float x0, float y0);
spinel_result_t
spinel_path_builder_line_to(spinel_path_builder_t path_builder, float x1, float y1);
spinel_result_t
spinel_path_builder_cubic_to(spinel_path_builder_t path_builder, //
float x1,
float y1,
float x2,
float y2,
float x3,
float y3);
spinel_result_t
spinel_path_builder_cubic_smooth_to(spinel_path_builder_t path_builder, //
float x2,
float y2,
float x3,
float y3);
spinel_result_t
spinel_path_builder_quad_to(spinel_path_builder_t path_builder, //
float x1,
float y1,
float x2,
float y2);
spinel_result_t
spinel_path_builder_quad_smooth_to(spinel_path_builder_t path_builder, //
float x2,
float y2);
spinel_result_t
spinel_path_builder_rat_quad_to(spinel_path_builder_t path_builder, //
float x1,
float y1,
float x2,
float y2,
float w1);
spinel_result_t
spinel_path_builder_rat_cubic_to(spinel_path_builder_t path_builder, //
float x1,
float y1,
float x2,
float y2,
float x3,
float y3,
float w1,
float w2);
//
// PATH RETAIN/RELEASE
//
spinel_result_t
spinel_path_retain(spinel_context_t context, spinel_path_t const * paths, uint32_t count);
spinel_result_t
spinel_path_release(spinel_context_t context, spinel_path_t const * paths, uint32_t count);
//
// RASTER BUILDER
//
spinel_result_t
spinel_raster_builder_create(spinel_context_t context, spinel_raster_builder_t * raster_builder);
spinel_result_t
spinel_raster_builder_retain(spinel_raster_builder_t raster_builder);
spinel_result_t
spinel_raster_builder_release(spinel_raster_builder_t raster_builder);
spinel_result_t
spinel_raster_builder_flush(spinel_raster_builder_t raster_builder);
//
// RASTER OPS
//
spinel_result_t
spinel_raster_builder_begin(spinel_raster_builder_t raster_builder);
spinel_result_t
spinel_raster_builder_end(spinel_raster_builder_t raster_builder, spinel_raster_t * raster);
spinel_result_t
spinel_raster_builder_add(spinel_raster_builder_t raster_builder,
spinel_path_t const * paths,
spinel_transform_weakref_t * transform_weakrefs,
spinel_transform_t const * transforms,
spinel_clip_weakref_t * clip_weakrefs,
spinel_clip_t const * clips,
uint32_t count);
//
// RASTER RETAIN/RELEASE
//
spinel_result_t
spinel_raster_retain(spinel_context_t context, spinel_raster_t const * rasters, uint32_t count);
spinel_result_t
spinel_raster_release(spinel_context_t context, spinel_raster_t const * rasters, uint32_t count);
//
// COMPOSITION STATE
//
spinel_result_t
spinel_composition_create(spinel_context_t context, spinel_composition_t * composition);
spinel_result_t
spinel_composition_retain(spinel_composition_t composition);
spinel_result_t
spinel_composition_release(spinel_composition_t composition);
//
// TODO(allanmac): evaluate a per-place clip
// TODO(allanmac): implement "tile activation" clear
//
spinel_result_t
spinel_composition_place(spinel_composition_t composition,
spinel_raster_t const * rasters,
spinel_layer_id const * layer_ids,
spinel_txty_t const * txtys,
uint32_t count);
spinel_result_t
spinel_composition_seal(spinel_composition_t composition);
spinel_result_t
spinel_composition_unseal(spinel_composition_t composition);
spinel_result_t
spinel_composition_reset(spinel_composition_t composition);
spinel_result_t
spinel_composition_set_clip(spinel_composition_t composition, spinel_pixel_clip_t const * clip);
//
// TODO: COMPOSITION CLIP
//
// Produce a new composition from a simple clip rect.
//
//
// TODO: COMPOSITION "BOOLEAN ALGEBRA" OPERATIONS
//
// Produce a new composition from the union or intersection of two
// existing compositions.
//
//
// TODO: COMPOSITION "HIT DETECTION"
//
// Report which layers and tiles are intersected by one or more
// device-space (x,y) points
//
//
// STYLING STATE
//
spinel_result_t
spinel_styling_create(spinel_context_t context,
spinel_styling_create_info_t const * create_info,
spinel_styling_t * styling);
spinel_result_t
spinel_styling_retain(spinel_styling_t styling);
spinel_result_t
spinel_styling_release(spinel_styling_t styling);
spinel_result_t
spinel_styling_seal(spinel_styling_t styling);
spinel_result_t
spinel_styling_unseal(spinel_styling_t styling);
spinel_result_t
spinel_styling_reset(spinel_styling_t styling);
//
// STYLING GROUPS AND LAYERS
//
spinel_result_t
spinel_styling_group_alloc(spinel_styling_t styling, spinel_group_id * const group_id);
spinel_result_t
spinel_styling_group_enter(spinel_styling_t styling,
spinel_group_id const group_id,
uint32_t const n,
uint32_t ** const cmds);
spinel_result_t
spinel_styling_group_leave(spinel_styling_t styling,
spinel_group_id const group_id,
uint32_t const n,
uint32_t ** const cmds);
//
// n:
//
// The number of parent groups above this group.
//
// parents:
//
// The sequence of parent group ids leading from the top of
// hierarchy to the parent of 'group_id'.
//
spinel_result_t
spinel_styling_group_parents(spinel_styling_t styling,
spinel_group_id const group_id,
uint32_t const n,
uint32_t ** const parents);
spinel_result_t
spinel_styling_group_range_lo(spinel_styling_t styling,
spinel_group_id const group_id,
spinel_layer_id const layer_lo);
spinel_result_t
spinel_styling_group_range_hi(spinel_styling_t styling,
spinel_group_id const group_id,
spinel_layer_id const layer_hi);
spinel_result_t
spinel_styling_group_layer(spinel_styling_t styling,
spinel_group_id const group_id,
spinel_layer_id const layer_id,
uint32_t const n,
spinel_styling_cmd_t ** const cmds);
//
// TODO(allanmac) -- styling command encoders will be opaque
//
void
spinel_styling_layer_fill_rgba_encoder(spinel_styling_cmd_t * cmds, float const rgba[4]);
void
spinel_styling_background_over_encoder(spinel_styling_cmd_t * cmds, float const rgba[4]);
//
//
//
#ifdef SPN_DISABLE_UNTIL_INTEGRATED
void
spinel_styling_layer_fill_gradient_encoder(spinel_styling_cmd_t * cmds,
float x0,
float y0,
float x1,
float y1,
spinel_styling_gradient_type_e type,
uint32_t n,
float const stops[],
float const colors[]);
#endif
//
// SWAPCHAIN
//
spinel_result_t
spinel_swapchain_create(spinel_context_t context,
spinel_swapchain_create_info_t const * create_info,
spinel_swapchain_t * swapchain);
spinel_result_t
spinel_swapchain_retain(spinel_swapchain_t swapchain);
spinel_result_t
spinel_swapchain_release(spinel_swapchain_t swapchain);
spinel_result_t
spinel_swapchain_submit(spinel_swapchain_t swapchain, //
spinel_swapchain_submit_t const * submit);
//
// TODO(allanmac): COORDINATED EXTERNAL OPERATIONS
//
// Examples include:
//
// - Transforming an intermediate layer with a blur, sharpen, rotation or scaling kernel.
// - Subpixel antialiasing using neighboring pixel color and coverage data.
// - Performing a blit from one region to another region on a surface.
// - Blitting from one surface to another.
// - Loading and processing from one region and storing to another region.
// - Rendezvousing with an external pipeline.
//
//
//
//
#ifdef __cplusplus
}
#endif
//
//
//
#endif // SRC_GRAPHICS_LIB_COMPUTE_SPINEL_INCLUDE_SPINEL_SPINEL_H_