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/path.h b/src/compute/skc/path.h
new file mode 100644
index 0000000..effcb05
--- /dev/null
+++ b/src/compute/skc/path.h
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can
+ * be found in the LICENSE file.
+ *
+ */
+
+#ifndef SKC_ONCE_PATH
+#define SKC_ONCE_PATH
+
+//
+//
+//
+
+#include "block.h"
+
+//
+//
+//
+
+union skc_path_header
+{
+ skc_uint4 u32v4;
+
+ struct {
+ skc_uint handle; // host handle
+ skc_uint blocks; // # of S-segment blocks in path
+ skc_uint nodes; // # of S-segment node blocks -- not including header
+ skc_uint prims; // # of path elements: lines, quads, cubics, rat-quads, rat-cubics
+ };
+};
+
+union skc_path_bounds
+{
+ skc_float4 f32v4;
+
+ struct {
+ skc_float x0;
+ skc_float y0;
+ skc_float x1;
+ skc_float y1;
+ };
+};
+
+//
+// This head structure aliases a block.
+//
+// Blocks are at least 16 words.
+//
+
+struct skc_path_head
+{
+ union skc_path_header header; // 4
+ union skc_path_bounds bounds; // 4
+ union skc_tagged_block_id tag_ids[]; // 8+ ids
+};
+
+#define SKC_PATH_HEAD_WORDS 8
+
+#define SKC_PATH_HEAD_OFFSET_HANDLE 0
+#define SKC_PATH_HEAD_OFFSET_BLOCKS 1
+#define SKC_PATH_HEAD_OFFSET_NODES 2
+#define SKC_PATH_HEAD_OFFSET_PRIMS 3
+
+#define SKC_PATH_HEAD_OFFSET_IDS 8
+
+#define SKC_PATH_HEAD_WORDS_CALC (sizeof(struct skc_path_head) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_HANDLE_CALC (SKC_OFFSET_OF(struct skc_path_head,header.handle) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_BLOCKS_CALC (SKC_OFFSET_OF(struct skc_path_head,header.blocks) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_NODES_CALC (SKC_OFFSET_OF(struct skc_path_head,header.nodes) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_PRIMS_CALC (SKC_OFFSET_OF(struct skc_path_head,header.prims) / sizeof(skc_uint))
+#define SKC_PATH_HEAD_OFFSET_IDS_CALC (SKC_OFFSET_OF(struct skc_path_head,tag_ids) / sizeof(skc_uint))
+
+//
+// NOT ALL OPENCL PREPROCESSORS ARE HAPPY WITH CALCULATING OFFSET_OF()
+//
+// - Intel ioc compiler failed in the past
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_WORDS == SKC_PATH_HEAD_WORDS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_HANDLE == SKC_PATH_HEAD_OFFSET_HANDLE_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_BLOCKS == SKC_PATH_HEAD_OFFSET_BLOCKS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_NODES == SKC_PATH_HEAD_OFFSET_NODES_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_PRIMS == SKC_PATH_HEAD_OFFSET_PRIMS_CALC);
+SKC_STATIC_ASSERT(SKC_PATH_HEAD_OFFSET_IDS == SKC_PATH_HEAD_OFFSET_IDS_CALC);
+#endif
+
+//
+// This node structure aliases a block.
+//
+// Blocks are at least 16 words.
+//
+// The last word in the block points to the next block
+//
+// The tag indicating a 'next' pointer is zero.
+//
+
+#if !defined(__OPENCL_C_VERSION__)
+struct skc_path_node
+{
+ union skc_tagged_block_id tag_ids[];
+};
+#endif
+
+//
+//
+//
+
+#endif
+
+//
+//
+//