Whitespace cleanup again
Change-Id: I38ab9ff141eb088084a4c0e664f327ceb89fcf70 Reviewed-on: https://skia-review.googlesource.com/140784 Commit-Queue: Hal Canary <halcanary@google.com> Auto-Submit: Hal Canary <halcanary@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
This commit is contained in:
parent
7e83f89dd6
commit
1419534a00
@ -104,8 +104,8 @@ color_linear_to_srgb_rgb_f32(float rgb[3])
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
float
|
||||
static
|
||||
float
|
||||
lerpf(float const a, float const b, float const t)
|
||||
{
|
||||
return fmaf(t, b, fmaf(-t, a, a));
|
||||
@ -115,8 +115,8 @@ lerpf(float const a, float const b, float const t)
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
color_linear_lerp_rgba_f32(float rgba_m[4],
|
||||
void
|
||||
color_linear_lerp_rgba_f32(float rgba_m[4],
|
||||
float const rgba_a[4],
|
||||
float const rgba_b[4],
|
||||
float const t)
|
||||
|
@ -59,7 +59,7 @@ void color_linear_to_srgb_rgb_f32(float rgb[3]);
|
||||
//
|
||||
//
|
||||
|
||||
void color_linear_lerp_rgba_f32(float rgba_m[4],
|
||||
void color_linear_lerp_rgba_f32(float rgba_m[4],
|
||||
float const rgba_a[4],
|
||||
float const rgba_b[4],
|
||||
float const t);
|
||||
|
@ -147,7 +147,7 @@ assert_cl(cl_int const code, char const * const file, int const line, bool const
|
||||
//
|
||||
|
||||
void
|
||||
cl_get_event_info(cl_event event,
|
||||
cl_get_event_info(cl_event event,
|
||||
cl_int * const status,
|
||||
cl_command_type * const type)
|
||||
{
|
||||
@ -169,7 +169,7 @@ cl_get_event_info(cl_event event,
|
||||
}
|
||||
|
||||
|
||||
char const *
|
||||
char const *
|
||||
cl_get_event_command_status_string(cl_int const status)
|
||||
{
|
||||
switch (status)
|
||||
@ -177,14 +177,14 @@ cl_get_event_command_status_string(cl_int const status)
|
||||
CL_VAL_TO_STRING(CL_QUEUED);
|
||||
CL_VAL_TO_STRING(CL_SUBMITTED);
|
||||
CL_VAL_TO_STRING(CL_RUNNING);
|
||||
CL_VAL_TO_STRING(CL_COMPLETE);
|
||||
CL_VAL_TO_STRING(CL_COMPLETE);
|
||||
|
||||
default:
|
||||
return "UNKNOWN COMMAND STATUS";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char const *
|
||||
char const *
|
||||
cl_get_event_command_type_string(cl_command_type const type)
|
||||
{
|
||||
switch (type)
|
||||
|
@ -19,13 +19,13 @@
|
||||
//
|
||||
//
|
||||
|
||||
char const *
|
||||
char const *
|
||||
cl_get_error_string(cl_int const err);
|
||||
|
||||
cl_int
|
||||
assert_cl(cl_int const code,
|
||||
char const * const file,
|
||||
int const line,
|
||||
cl_int
|
||||
assert_cl(cl_int const code,
|
||||
char const * const file,
|
||||
int const line,
|
||||
bool const abort);
|
||||
|
||||
//
|
||||
@ -40,14 +40,14 @@ assert_cl(cl_int const code,
|
||||
//
|
||||
|
||||
void
|
||||
cl_get_event_info(cl_event event,
|
||||
cl_get_event_info(cl_event event,
|
||||
cl_int * const status,
|
||||
cl_command_type * const type);
|
||||
|
||||
char const *
|
||||
char const *
|
||||
cl_get_event_command_status_string(cl_int const status);
|
||||
|
||||
char const *
|
||||
char const *
|
||||
cl_get_event_command_type_string(cl_command_type const type);
|
||||
|
||||
//
|
||||
|
@ -42,7 +42,7 @@ clFindIdsByName(char const * const target_platform_substring,
|
||||
// get number of platforms
|
||||
//
|
||||
cl_uint platform_count;
|
||||
|
||||
|
||||
cl(GetPlatformIDs(0,NULL,&platform_count));
|
||||
|
||||
cl_platform_id * const platform_ids = ALLOCA(sizeof(*platform_ids) * platform_count);
|
||||
@ -94,13 +94,13 @@ clFindIdsByName(char const * const target_platform_substring,
|
||||
&device_count);
|
||||
|
||||
cl_device_id * const device_ids = ALLOCA(sizeof(*device_ids) * device_count);
|
||||
|
||||
|
||||
cl_err = clGetDeviceIDs(platform_ids[ii],
|
||||
CL_DEVICE_TYPE_ALL,
|
||||
device_count,
|
||||
device_ids,
|
||||
NULL);
|
||||
|
||||
|
||||
if (cl_err != CL_DEVICE_NOT_FOUND)
|
||||
cl_ok(cl_err);
|
||||
|
||||
@ -135,7 +135,7 @@ clFindIdsByName(char const * const target_platform_substring,
|
||||
driver_version_size,
|
||||
driver_version,
|
||||
NULL));
|
||||
|
||||
|
||||
if (!match_device && match_platform && (strstr(device_name,target_device_substring) != NULL))
|
||||
{
|
||||
match_device = true;
|
||||
@ -148,7 +148,7 @@ clFindIdsByName(char const * const target_platform_substring,
|
||||
if (matched_device_name_size >= 1)
|
||||
matched_device_name[matched_device_name_size-1] = 0;
|
||||
|
||||
if (matched_device_name_size > 1)
|
||||
if (matched_device_name_size > 1)
|
||||
{
|
||||
bytes = MIN_MACRO(device_name_size,matched_device_name_size-1);
|
||||
|
||||
@ -202,7 +202,7 @@ clFindIdsByName(char const * const target_platform_substring,
|
||||
}
|
||||
|
||||
return CL_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <intrin.h>
|
||||
#include <intrin.h>
|
||||
|
||||
//
|
||||
//
|
||||
|
@ -84,11 +84,11 @@ hs_cpu_sort_u32(uint32_t * a, uint32_t const count)
|
||||
}
|
||||
|
||||
extern "C"
|
||||
char const *
|
||||
char const *
|
||||
hs_cpu_sort_u64(uint64_t * a, uint32_t const count)
|
||||
{
|
||||
#if defined ( HS_USE_PARALLEL_SORT )
|
||||
std::sort(std::execution::par_unseq,a,a+count);
|
||||
std::sort(std::execution::par_unseq,a,a+count);
|
||||
return "std::sort(std::execution::par_unseq)()";
|
||||
#elif defined ( HS_USE_STD_SORT )
|
||||
std::sort(a,a+count);
|
||||
|
@ -1,26 +1,26 @@
|
||||
//
|
||||
// Copyright 2016 Google Inc.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
//
|
||||
|
||||
#ifndef HS_CL_ONCE
|
||||
#define HS_CL_ONCE
|
||||
|
||||
#define HS_LANES_PER_WARP_LOG2 3
|
||||
#define HS_LANES_PER_WARP (1 << HS_LANES_PER_WARP_LOG2)
|
||||
#define HS_BS_WARPS 16
|
||||
#define HS_BS_WARPS_LOG2_RU 4
|
||||
#define HS_BC_WARPS_LOG2_MAX 4
|
||||
#define HS_FM_BLOCKS_LOG2_MIN 1
|
||||
#define HS_HM_BLOCKS_LOG2_MIN 1
|
||||
#define HS_KEYS_PER_LANE 16
|
||||
#define HS_REG_LAST(c) c##16
|
||||
#define HS_KEY_WORDS 2
|
||||
#define HS_KEY_TYPE ulong
|
||||
#define HS_EMPTY
|
||||
|
||||
//
|
||||
// Copyright 2016 Google Inc.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
//
|
||||
|
||||
#ifndef HS_CL_ONCE
|
||||
#define HS_CL_ONCE
|
||||
|
||||
#define HS_LANES_PER_WARP_LOG2 3
|
||||
#define HS_LANES_PER_WARP (1 << HS_LANES_PER_WARP_LOG2)
|
||||
#define HS_BS_WARPS 16
|
||||
#define HS_BS_WARPS_LOG2_RU 4
|
||||
#define HS_BC_WARPS_LOG2_MAX 4
|
||||
#define HS_FM_BLOCKS_LOG2_MIN 1
|
||||
#define HS_HM_BLOCKS_LOG2_MIN 1
|
||||
#define HS_KEYS_PER_LANE 16
|
||||
#define HS_REG_LAST(c) c##16
|
||||
#define HS_KEY_WORDS 2
|
||||
#define HS_KEY_TYPE ulong
|
||||
#define HS_EMPTY
|
||||
|
||||
#define HS_SLAB_ROWS() \
|
||||
HS_SLAB_ROW( 1, 0 ) \
|
||||
HS_SLAB_ROW( 2, 1 ) \
|
||||
@ -39,7 +39,7 @@
|
||||
HS_SLAB_ROW( 15, 14 ) \
|
||||
HS_SLAB_ROW( 16, 15 ) \
|
||||
HS_EMPTY
|
||||
|
||||
|
||||
#define HS_TRANSPOSE_SLAB() \
|
||||
HS_TRANSPOSE_STAGE( 1 ) \
|
||||
HS_TRANSPOSE_STAGE( 2 ) \
|
||||
@ -85,38 +85,38 @@
|
||||
HS_TRANSPOSE_REMAP( u, 15, 14 ) \
|
||||
HS_TRANSPOSE_REMAP( u, 16, 16 ) \
|
||||
HS_EMPTY
|
||||
|
||||
#define HS_FM_BLOCKS_LOG2_1 0
|
||||
#define HS_FM_BLOCKS_LOG2_2 1
|
||||
#define HS_FM_BLOCKS_LOG2_3 2
|
||||
#define HS_FM_BLOCKS_LOG2_4 3
|
||||
#define HS_FM_BLOCKS_LOG2_5 4
|
||||
#define HS_FM_BLOCKS_LOG2_6 5
|
||||
#define HS_HM_BLOCKS_LOG2_5 0
|
||||
#define HS_FM_BLOCKS_LOG2_7 6
|
||||
#define HS_HM_BLOCKS_LOG2_6 1
|
||||
#define HS_FM_BLOCKS_LOG2_8 7
|
||||
#define HS_HM_BLOCKS_LOG2_7 2
|
||||
#define HS_FM_BLOCKS_LOG2_9 8
|
||||
#define HS_HM_BLOCKS_LOG2_8 3
|
||||
#define HS_FM_BLOCKS_LOG2_10 9
|
||||
#define HS_HM_BLOCKS_LOG2_9 4
|
||||
#define HS_FM_BLOCKS_LOG2_11 10
|
||||
#define HS_HM_BLOCKS_LOG2_10 5
|
||||
#define HS_FM_BLOCKS_LOG2_12 11
|
||||
#define HS_HM_BLOCKS_LOG2_11 6
|
||||
#define HS_FM_BLOCKS_LOG2_13 12
|
||||
#define HS_HM_BLOCKS_LOG2_12 7
|
||||
#define HS_FM_BLOCKS_LOG2_14 13
|
||||
#define HS_HM_BLOCKS_LOG2_13 8
|
||||
#define HS_FM_BLOCKS_LOG2_15 14
|
||||
#define HS_HM_BLOCKS_LOG2_14 9
|
||||
#define HS_FM_BLOCKS_LOG2_16 15
|
||||
#define HS_HM_BLOCKS_LOG2_15 10
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
#define HS_FM_BLOCKS_LOG2_1 0
|
||||
#define HS_FM_BLOCKS_LOG2_2 1
|
||||
#define HS_FM_BLOCKS_LOG2_3 2
|
||||
#define HS_FM_BLOCKS_LOG2_4 3
|
||||
#define HS_FM_BLOCKS_LOG2_5 4
|
||||
#define HS_FM_BLOCKS_LOG2_6 5
|
||||
#define HS_HM_BLOCKS_LOG2_5 0
|
||||
#define HS_FM_BLOCKS_LOG2_7 6
|
||||
#define HS_HM_BLOCKS_LOG2_6 1
|
||||
#define HS_FM_BLOCKS_LOG2_8 7
|
||||
#define HS_HM_BLOCKS_LOG2_7 2
|
||||
#define HS_FM_BLOCKS_LOG2_9 8
|
||||
#define HS_HM_BLOCKS_LOG2_8 3
|
||||
#define HS_FM_BLOCKS_LOG2_10 9
|
||||
#define HS_HM_BLOCKS_LOG2_9 4
|
||||
#define HS_FM_BLOCKS_LOG2_11 10
|
||||
#define HS_HM_BLOCKS_LOG2_10 5
|
||||
#define HS_FM_BLOCKS_LOG2_12 11
|
||||
#define HS_HM_BLOCKS_LOG2_11 6
|
||||
#define HS_FM_BLOCKS_LOG2_13 12
|
||||
#define HS_HM_BLOCKS_LOG2_12 7
|
||||
#define HS_FM_BLOCKS_LOG2_14 13
|
||||
#define HS_HM_BLOCKS_LOG2_13 8
|
||||
#define HS_FM_BLOCKS_LOG2_15 14
|
||||
#define HS_HM_BLOCKS_LOG2_14 9
|
||||
#define HS_FM_BLOCKS_LOG2_16 15
|
||||
#define HS_HM_BLOCKS_LOG2_15 10
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
|
@ -774,7 +774,7 @@ hs_fm_launcher(struct hs_state * const state,
|
||||
// how many full-sized scaled flip-merge spans are there?
|
||||
state->fm.full = state->bx.ru / full_span_warps;
|
||||
state->fm.frac = 0;
|
||||
|
||||
|
||||
// initialize down_warps
|
||||
*down_warps = state->fm.full * full_span_warps;
|
||||
|
||||
@ -787,10 +787,10 @@ hs_fm_launcher(struct hs_state * const state,
|
||||
uint32_t const frac_rem = span_rem - half_span_warps;
|
||||
uint32_t const frac_rem_pow2 = pow2_ru_u32(frac_rem);
|
||||
|
||||
if (frac_rem_pow2 >= half_span_warps)
|
||||
if (frac_rem_pow2 >= half_span_warps)
|
||||
{
|
||||
*down_warps += full_span_warps;
|
||||
state->fm.full += 1;
|
||||
state->fm.full += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -895,7 +895,7 @@ hs_pad(uint32_t const count,
|
||||
|
||||
void
|
||||
hs_sort(cl_command_queue cq, // out-of-order cq
|
||||
cl_mem vin,
|
||||
cl_mem vin,
|
||||
cl_mem vout,
|
||||
uint32_t const count,
|
||||
uint32_t const count_padded_in,
|
||||
@ -1019,7 +1019,7 @@ hs_sort(cl_command_queue cq, // out-of-order cq
|
||||
}
|
||||
}
|
||||
|
||||
if (linearize)
|
||||
if (linearize)
|
||||
{
|
||||
// launch linearize;
|
||||
hs_transpose_launcher(&state,cq);
|
||||
@ -1113,7 +1113,7 @@ hs_create(cl_context context,
|
||||
HS_CREATE_KERNELS(bc_kernels);
|
||||
HS_CREATE_KERNELS(fm_kernels);
|
||||
HS_CREATE_KERNELS(hm_kernels);
|
||||
HS_CREATE_KERNELS(transpose_kernels);
|
||||
HS_CREATE_KERNELS(transpose_kernels);
|
||||
|
||||
cl(ReleaseProgram(program));
|
||||
}
|
||||
|
@ -882,7 +882,7 @@ hsg_bs_flip_merge_level(struct hsg_op * ops,
|
||||
uint32_t const level,
|
||||
uint32_t const s_pairs)
|
||||
{
|
||||
//
|
||||
//
|
||||
// Note there are a number of ways to flip merge these warps. There
|
||||
// is a magic number in the merge structure that indicates which
|
||||
// warp to activate as well as what network size to invoke.
|
||||
@ -917,7 +917,7 @@ hsg_bs_flip_merge_level(struct hsg_op * ops,
|
||||
|
||||
uint32_t s_rows = s_pairs * 2;
|
||||
uint32_t base = 0;
|
||||
|
||||
|
||||
while (s_rows > 0)
|
||||
{
|
||||
uint32_t active = merge->warps;
|
||||
@ -934,7 +934,7 @@ hsg_bs_flip_merge_level(struct hsg_op * ops,
|
||||
// how many equal number of rows to merge?
|
||||
uint32_t loops = s_rows / active;
|
||||
|
||||
// decrement
|
||||
// decrement
|
||||
s_rows -= loops * active;
|
||||
|
||||
for (uint32_t ss=0; ss<loops; ss++)
|
||||
@ -998,7 +998,7 @@ hsg_bs_flip_merge(struct hsg_op * ops, struct hsg_merge const * const merge)
|
||||
{
|
||||
uint32_t const count = merge->levels[level].count;
|
||||
|
||||
if (count == 0)
|
||||
if (count == 0)
|
||||
continue;
|
||||
|
||||
uint32_t const r_mid = hsg_config.thread.regs/2 + 1;
|
||||
|
@ -51,7 +51,7 @@ hsg_target_cuda_sm3x(struct hsg_file * const files,
|
||||
uint32_t const bc_max = msb_idx_u32(pow2_rd_u32(merge[0].warps));
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_HEADER].file,
|
||||
"// \n"
|
||||
"// \n"
|
||||
"// Copyright 2016 Google Inc. \n"
|
||||
"// \n"
|
||||
"// Use of this source code is governed by a BSD-style \n"
|
||||
@ -86,7 +86,7 @@ hsg_target_cuda_sm3x(struct hsg_file * const files,
|
||||
files[HSG_FILE_TYPE_SOURCE].name);
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"// \n"
|
||||
"// \n"
|
||||
"// Copyright 2016 Google Inc. \n"
|
||||
"// \n"
|
||||
"// Use of this source code is governed by a BSD-style \n"
|
||||
@ -461,12 +461,12 @@ hsg_target_cuda_sm3x(struct hsg_file * const files,
|
||||
break;
|
||||
|
||||
case HSG_OP_TYPE_CMP_FLIP:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"HS_CMP_FLIP(r%-3u,r%-3u,r%-3u)\n",ops->a,ops->b,ops->c);
|
||||
break;
|
||||
|
||||
case HSG_OP_TYPE_CMP_HALF:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"HS_CMP_HALF(r%-3u,r%-3u)\n",ops->a,ops->b);
|
||||
break;
|
||||
|
||||
|
@ -21,15 +21,15 @@
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
char
|
||||
hsg_transpose_reg_prefix(uint32_t const cols_log2)
|
||||
{
|
||||
return 'a' + (('r' + cols_log2 - 'a') % 26);
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
static
|
||||
void
|
||||
hsg_transpose_blend(uint32_t const cols_log2,
|
||||
uint32_t const row_ll, // lower-left
|
||||
uint32_t const row_ur, // upper-right
|
||||
@ -41,10 +41,10 @@ hsg_transpose_blend(uint32_t const cols_log2,
|
||||
hsg_transpose_reg_prefix(cols_log2-1),
|
||||
hsg_transpose_reg_prefix(cols_log2),
|
||||
cols_log2,row_ll+1,row_ur+1);
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
static
|
||||
void
|
||||
hsg_transpose_remap(uint32_t const row_from,
|
||||
uint32_t const row_to,
|
||||
FILE * file)
|
||||
@ -54,7 +54,7 @@ hsg_transpose_remap(uint32_t const row_from,
|
||||
" HS_TRANSPOSE_REMAP( %c, %3u, %3u ) \\\n",
|
||||
hsg_transpose_reg_prefix(msb_idx_u32(hsg_config.warp.lanes)),
|
||||
row_from+1,row_to+1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
@ -89,7 +89,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
uint32_t const warp_lanes_log2 = msb_idx_u32(hsg_config.warp.lanes);
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_HEADER].file,
|
||||
"// \n"
|
||||
"// \n"
|
||||
"// Copyright 2016 Google Inc. \n"
|
||||
"// \n"
|
||||
"// Use of this source code is governed by a BSD-style \n"
|
||||
@ -125,7 +125,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_HEADER].file,
|
||||
"#define HS_SLAB_ROWS() \\\n");
|
||||
|
||||
|
||||
for (uint32_t ii=1; ii<=hsg_config.thread.regs; ii++)
|
||||
fprintf(files[HSG_FILE_TYPE_HEADER].file,
|
||||
" HS_SLAB_ROW( %3u, %3u ) \\\n",ii,ii-1);
|
||||
@ -147,13 +147,13 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
files[HSG_FILE_TYPE_HEADER].file,
|
||||
hsg_transpose_blend,
|
||||
hsg_transpose_remap);
|
||||
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_HEADER].file,
|
||||
" HS_EMPTY\n"
|
||||
" \n");
|
||||
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"// \n"
|
||||
"// \n"
|
||||
"// Copyright 2016 Google Inc. \n"
|
||||
"// \n"
|
||||
"// Use of this source code is governed by a BSD-style \n"
|
||||
@ -215,11 +215,11 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
"HS_TRANSPOSE_SLAB()\n");
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case HSG_OP_TYPE_BS_KERNEL_PROTO:
|
||||
{
|
||||
struct hsg_merge const * const m = merge + ops->a;
|
||||
|
||||
|
||||
uint32_t const tpb = m->warps * hsg_config.warp.lanes;
|
||||
uint32_t const bs = pow2_ru_u32(m->warps);
|
||||
uint32_t const msb = msb_idx_u32(bs);
|
||||
@ -236,7 +236,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
msb);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case HSG_OP_TYPE_BS_KERNEL_PREAMBLE:
|
||||
{
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
@ -466,12 +466,12 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
break;
|
||||
|
||||
case HSG_OP_TYPE_CMP_FLIP:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"HS_CMP_FLIP(%-3u,r%-3u,r%-3u)\n",ops->a,ops->b,ops->c);
|
||||
break;
|
||||
|
||||
case HSG_OP_TYPE_CMP_HALF:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"HS_CMP_HALF(%-3u,r%-3u)\n",ops->a,ops->b);
|
||||
break;
|
||||
|
||||
@ -523,7 +523,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
ops->c,
|
||||
ops->a);
|
||||
break;
|
||||
|
||||
|
||||
case HSG_OP_TYPE_BS_REG_SHARED_LOAD_LEFT:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"HS_KEY_TYPE r%u_%-3u = (shared.m + smem_l_idx)[%u];\n",
|
||||
@ -598,7 +598,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case HSG_OP_TYPE_BC_MERGE_H_PREAMBLE:
|
||||
{
|
||||
struct hsg_merge const * const m = merge + ops->a;
|
||||
@ -613,7 +613,7 @@ hsg_target_igp_genx(struct hsg_file * const files,
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case HSG_OP_TYPE_BX_MERGE_H_PRED:
|
||||
fprintf(files[HSG_FILE_TYPE_SOURCE].file,
|
||||
"if (get_sub_group_id() < %u)\n",
|
||||
|
@ -33,7 +33,7 @@ hsg_transpose(uint32_t const cols_log2,
|
||||
{
|
||||
// get mapping array
|
||||
uint32_t * map_curr = ALLOCA(rows * sizeof(*map_curr));
|
||||
uint32_t * map_next = ALLOCA(rows * sizeof(*map_next));
|
||||
uint32_t * map_next = ALLOCA(rows * sizeof(*map_next));
|
||||
|
||||
// init the mapping array
|
||||
for (uint32_t ii=0; ii<rows; ii++)
|
||||
@ -53,7 +53,7 @@ hsg_transpose(uint32_t const cols_log2,
|
||||
{
|
||||
for (uint32_t jj=0; jj<rows; jj++)
|
||||
{
|
||||
if (map_curr[jj] == stay)
|
||||
if (map_curr[jj] == stay)
|
||||
{
|
||||
map_next[jj] = stay;
|
||||
map_next[ii] = stay + (rows << (cc-1));
|
||||
@ -88,7 +88,7 @@ hsg_transpose(uint32_t const cols_log2,
|
||||
static uint32_t cols; // implicit on SIMD/GPU
|
||||
|
||||
static
|
||||
void
|
||||
void
|
||||
hsg_debug_remap(uint32_t const row_from,
|
||||
uint32_t const row_to,
|
||||
uint32_t * const r)
|
||||
@ -99,9 +99,9 @@ hsg_debug_remap(uint32_t const row_from,
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
void
|
||||
hsg_debug_blend(uint32_t const cols_log2,
|
||||
uint32_t const row_ll, // lower-left
|
||||
uint32_t const row_ll, // lower-left
|
||||
uint32_t const row_ur, // upper-right
|
||||
uint32_t * m)
|
||||
{
|
||||
|
@ -33,7 +33,7 @@
|
||||
//
|
||||
|
||||
void *
|
||||
skc_runtime_host_perm_alloc(struct skc_runtime * const runtime,
|
||||
skc_runtime_host_perm_alloc(struct skc_runtime * const runtime,
|
||||
skc_mem_flags_e const flags,
|
||||
size_t const size)
|
||||
{
|
||||
@ -42,7 +42,7 @@ skc_runtime_host_perm_alloc(struct skc_runtime * const runtime,
|
||||
}
|
||||
|
||||
void
|
||||
skc_runtime_host_perm_free(struct skc_runtime * const runtime,
|
||||
skc_runtime_host_perm_free(struct skc_runtime * const runtime,
|
||||
void * const mem)
|
||||
{
|
||||
SKC_ALIGNED_FREE(mem);
|
||||
@ -65,11 +65,11 @@ skc_runtime_host_temp_alloc(struct skc_runtime * const runtime,
|
||||
|
||||
if (subbuf_size != NULL)
|
||||
*subbuf_size = 0;
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return runtime->allocator.host.temp.extent +
|
||||
return runtime->allocator.host.temp.extent +
|
||||
skc_suballocator_subbuf_alloc(&runtime->allocator.host.temp.suballocator,
|
||||
runtime->scheduler,
|
||||
size,subbuf_id,subbuf_size);
|
||||
@ -101,7 +101,7 @@ skc_allocator_host_create(struct skc_runtime * const runtime)
|
||||
SKC_RUNTIME_HOST_CACHELINE_SIZE,
|
||||
runtime->config->suballocator.host.size);
|
||||
|
||||
runtime->allocator.host.temp.extent =
|
||||
runtime->allocator.host.temp.extent =
|
||||
skc_runtime_host_perm_alloc(runtime,
|
||||
SKC_MEM_FLAGS_READ_WRITE,
|
||||
runtime->config->suballocator.host.size);
|
||||
|
@ -28,7 +28,7 @@
|
||||
//
|
||||
|
||||
skc_err
|
||||
skc_context_create_cl(skc_context_t * context,
|
||||
skc_context_create_cl(skc_context_t * context,
|
||||
cl_context context_cl,
|
||||
cl_device_id device_id_cl)
|
||||
{
|
||||
|
@ -49,7 +49,7 @@ struct skc_context
|
||||
skc_err (* path_flush )(struct skc_runtime * const runtime,
|
||||
skc_path_t const * paths,
|
||||
uint32_t count);
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
@ -99,17 +99,17 @@ skc_extent_ring_snap_alloc(struct skc_runtime * const runtime,
|
||||
{
|
||||
skc_subbuf_id_t id;
|
||||
|
||||
struct skc_extent_ring_snap * snap =
|
||||
struct skc_extent_ring_snap * snap =
|
||||
skc_runtime_host_temp_alloc(runtime,
|
||||
SKC_MEM_FLAGS_READ_WRITE,
|
||||
sizeof(*snap),&id,NULL);
|
||||
// save the id
|
||||
snap->id = id;
|
||||
|
||||
|
||||
// back point to parent
|
||||
snap->ring = ring;
|
||||
snap->next = NULL;
|
||||
|
||||
|
||||
// save the inner boundaries of the ring to the snapshot
|
||||
snap->reads = ring->inner.reads;
|
||||
snap->writes = ring->inner.reads = ring->inner.writes;
|
||||
@ -123,7 +123,7 @@ skc_extent_ring_snap_alloc(struct skc_runtime * const runtime,
|
||||
ring->head = snap;
|
||||
ring->last = snap;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
ring->last->next = snap;
|
||||
ring->last = snap;
|
||||
@ -156,7 +156,7 @@ skc_extent_ring_snap_free(struct skc_runtime * const runtime,
|
||||
do {
|
||||
// increment read counter
|
||||
ring->outer.reads = curr->writes;
|
||||
|
||||
|
||||
struct skc_extent_ring_snap * const next = curr->next;
|
||||
|
||||
skc_runtime_host_temp_free(runtime,curr,curr->id);
|
||||
@ -164,7 +164,7 @@ skc_extent_ring_snap_free(struct skc_runtime * const runtime,
|
||||
curr = next;
|
||||
|
||||
// this was the last snap...
|
||||
if (curr == NULL)
|
||||
if (curr == NULL)
|
||||
{
|
||||
ring->last = NULL;
|
||||
break;
|
||||
|
@ -113,7 +113,7 @@ struct skc_grid
|
||||
struct skc_grid_pfn_name waiting; // optional - if defined, typically used to yank the grid away from host
|
||||
struct skc_grid_pfn_name execute; // optional - starts execution of waiting grid
|
||||
struct skc_grid_pfn_name dispose; // optional - invoked when grid is complete
|
||||
|
||||
|
||||
struct {
|
||||
skc_uint words[SKC_GRID_SIZE_WORDS]; // 0:inactive, 1:active
|
||||
skc_uint count;
|
||||
@ -535,7 +535,7 @@ skc_grid_clear_dependency(skc_grid_t const after, skc_uint const before)
|
||||
|
||||
after->before.count -= 1;
|
||||
|
||||
if ((after->before.count == 0) && ((after->state == SKC_GRID_STATE_WAITING) ||
|
||||
if ((after->before.count == 0) && ((after->state == SKC_GRID_STATE_WAITING) ||
|
||||
(after->state == SKC_GRID_STATE_FORCED)))
|
||||
{
|
||||
// schedule grid for execution
|
||||
|
@ -39,7 +39,7 @@ typedef enum skc_typed_handle_type_e
|
||||
SKC_TYPED_HANDLE_TYPE_IS_PATH = 0x40000000,
|
||||
SKC_TYPED_HANDLE_TYPE_IS_RASTER = 0x80000000
|
||||
} skc_typed_handle_type_e;
|
||||
|
||||
|
||||
typedef skc_uint skc_typed_handle_t;
|
||||
typedef skc_uint skc_handle_t;
|
||||
|
||||
|
@ -52,7 +52,7 @@ void
|
||||
skc_interop_blit(struct skc_interop * interop);
|
||||
|
||||
void
|
||||
skc_interop_get_size(struct skc_interop * interop,
|
||||
skc_interop_get_size(struct skc_interop * interop,
|
||||
uint32_t * width,
|
||||
uint32_t * height);
|
||||
//
|
||||
|
@ -194,7 +194,7 @@ main(int argc, char** argv)
|
||||
// rasterize, render and reclaim svg until escape
|
||||
//
|
||||
skc_pipeline_start_at_e pipeline_start_at_base = SKC_PIPELINE_START_AT_DEFINE_PATHS;
|
||||
skc_pipeline_start_at_e pipeline_start_at_loop = SKC_PIPELINE_START_AT_DEFINE_PATHS;
|
||||
skc_pipeline_start_at_e pipeline_start_at_loop = SKC_PIPELINE_START_AT_DEFINE_PATHS;
|
||||
skc_path_t * paths;
|
||||
skc_raster_t * rasters;
|
||||
|
||||
@ -269,7 +269,7 @@ main(int argc, char** argv)
|
||||
// do we only want to run part of the pipeline?
|
||||
if ((key >= SKC_PIPELINE_START_AT_DEFINE_PATHS) && (key <= SKC_PIPELINE_START_AT_RENDER))
|
||||
pipeline_start_at_base = key;
|
||||
|
||||
|
||||
// valid for a loop
|
||||
pipeline_start_at_loop = pipeline_start_at_base;
|
||||
|
||||
|
@ -55,10 +55,10 @@ struct skc_coords_rem_count_cubic
|
||||
struct skc_path_builder
|
||||
{
|
||||
struct skc_context * context;
|
||||
|
||||
|
||||
struct skc_path_builder_impl * impl;
|
||||
|
||||
void (* begin )(struct skc_path_builder_impl * const impl);
|
||||
void (* begin )(struct skc_path_builder_impl * const impl);
|
||||
void (* end )(struct skc_path_builder_impl * const impl, skc_path_t * const path);
|
||||
void (* new_line )(struct skc_path_builder_impl * const impl);
|
||||
void (* new_quad )(struct skc_path_builder_impl * const impl);
|
||||
|
@ -57,7 +57,7 @@ skc_runtime_device_temp_alloc(struct skc_runtime * const runtime,
|
||||
|
||||
if (subbuf_size != NULL)
|
||||
*subbuf_size = 0;
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ skc_runtime_device_temp_alloc(struct skc_runtime * const runtime,
|
||||
|
||||
|
||||
void
|
||||
skc_runtime_device_temp_free(struct skc_runtime * const runtime,
|
||||
skc_runtime_device_temp_free(struct skc_runtime * const runtime,
|
||||
cl_mem const mem,
|
||||
skc_subbuf_id_t const subbuf_id)
|
||||
{
|
||||
@ -92,7 +92,7 @@ skc_runtime_device_temp_free(struct skc_runtime * const runtime,
|
||||
|
||||
skc_suballocator_subbuf_free(&runtime->allocator.device.temp.suballocator,subbuf_id);
|
||||
|
||||
cl(ReleaseMemObject(mem));
|
||||
cl(ReleaseMemObject(mem));
|
||||
}
|
||||
|
||||
//
|
||||
@ -116,7 +116,7 @@ skc_allocator_device_create(struct skc_runtime * const runtime)
|
||||
cl_mem_flags const flags = CL_MEM_READ_WRITE;
|
||||
#endif
|
||||
|
||||
runtime->allocator.device.temp.extent =
|
||||
runtime->allocator.device.temp.extent =
|
||||
skc_runtime_device_perm_alloc(runtime,
|
||||
flags,
|
||||
runtime->config->suballocator.device.size);
|
||||
|
@ -28,7 +28,7 @@ struct skc_allocator_device
|
||||
{
|
||||
#if 0
|
||||
struct {
|
||||
|
||||
|
||||
} perm;
|
||||
#endif
|
||||
|
||||
|
@ -118,7 +118,7 @@ struct skc_composition_place
|
||||
|
||||
static
|
||||
void
|
||||
skc_composition_unseal_block(struct skc_composition_impl * const impl,
|
||||
skc_composition_unseal_block(struct skc_composition_impl * const impl,
|
||||
skc_bool const block);
|
||||
|
||||
//
|
||||
@ -140,7 +140,7 @@ skc_composition_pfn_release(struct skc_composition_impl * const impl)
|
||||
skc_composition_unseal_block(impl,true); // block
|
||||
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
|
||||
|
||||
// free host composition
|
||||
skc_runtime_host_perm_free(runtime,impl->composition);
|
||||
|
||||
@ -149,7 +149,7 @@ skc_composition_pfn_release(struct skc_composition_impl * const impl)
|
||||
|
||||
// release kernels
|
||||
cl(ReleaseKernel(impl->kernels.place));
|
||||
cl(ReleaseKernel(impl->kernels.segment));
|
||||
cl(ReleaseKernel(impl->kernels.segment));
|
||||
|
||||
// release extents
|
||||
skc_extent_phw1g_tdrNs_free(runtime,&impl->cmds.extent);
|
||||
@ -158,7 +158,7 @@ skc_composition_pfn_release(struct skc_composition_impl * const impl)
|
||||
|
||||
skc_extent_pdrw_free (runtime,&impl->keys);
|
||||
skc_extent_pdrw_free (runtime,&impl->offsets);
|
||||
|
||||
|
||||
// free composition impl
|
||||
skc_runtime_host_perm_free(runtime,impl);
|
||||
}
|
||||
@ -204,7 +204,7 @@ void
|
||||
skc_composition_place_read_cb(cl_event event, cl_int status, skc_grid_t const grid)
|
||||
{
|
||||
SKC_CL_CB(status);
|
||||
|
||||
|
||||
struct skc_composition_place * const place = skc_grid_get_data(grid);
|
||||
struct skc_composition_impl * const impl = place->impl;
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
@ -288,7 +288,7 @@ skc_composition_snap(struct skc_composition_impl * const impl)
|
||||
|
||||
// set grid data
|
||||
skc_grid_set_data(impl->grids.place,place);
|
||||
|
||||
|
||||
// acquire command queue
|
||||
place->cq = skc_runtime_acquire_cq_in_order(impl->runtime);
|
||||
|
||||
@ -297,7 +297,7 @@ skc_composition_snap(struct skc_composition_impl * const impl)
|
||||
|
||||
// make a snapshot
|
||||
skc_extent_phw1g_tdrNs_snap_init(impl->runtime,&impl->cmds.ring,&place->cmds);
|
||||
|
||||
|
||||
// unmap the snapshot (could be a copy)
|
||||
skc_extent_phw1g_tdrNs_snap_alloc(impl->runtime,
|
||||
&impl->cmds.extent,
|
||||
@ -382,7 +382,7 @@ skc_composition_sort_grid_pfn_execute(skc_grid_t const grid)
|
||||
{
|
||||
struct skc_composition_impl * const impl = skc_grid_get_data(grid);
|
||||
|
||||
// we should be sealing
|
||||
// we should be sealing
|
||||
assert(impl->state == SKC_COMPOSITION_STATE_SEALING);
|
||||
|
||||
struct skc_place_atomics * const atomics = impl->atomics.hr;
|
||||
@ -422,7 +422,7 @@ skc_composition_sort_grid_pfn_execute(skc_grid_t const grid)
|
||||
|
||||
// next stage needs to know number of key segments
|
||||
skc_extent_phr_pdrw_read(&impl->atomics,impl->cq,&complete);
|
||||
|
||||
|
||||
// register a callback
|
||||
cl(SetEventCallback(complete,CL_COMPLETE,skc_composition_sort_execute_cb,impl));
|
||||
cl(ReleaseEvent(complete));
|
||||
@ -456,7 +456,7 @@ skc_composition_raster_release(struct skc_composition_impl * const impl)
|
||||
|
||||
static
|
||||
void
|
||||
skc_composition_unseal_block(struct skc_composition_impl * const impl,
|
||||
skc_composition_unseal_block(struct skc_composition_impl * const impl,
|
||||
skc_bool const block)
|
||||
{
|
||||
// return if already unsealed
|
||||
@ -526,7 +526,7 @@ skc_composition_reset(struct skc_composition_impl * const impl)
|
||||
|
||||
static
|
||||
void
|
||||
skc_composition_unseal_block_reset(struct skc_composition_impl * const impl,
|
||||
skc_composition_unseal_block_reset(struct skc_composition_impl * const impl,
|
||||
skc_bool const block,
|
||||
skc_bool const reset)
|
||||
{
|
||||
@ -590,7 +590,7 @@ skc_composition_pfn_place(struct skc_composition_impl * const impl,
|
||||
SKC_TYPED_HANDLE_TYPE_IS_RASTER,
|
||||
rasters,
|
||||
count);
|
||||
if (err)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
skc_runtime_handle_device_retain(impl->runtime,rasters,count);
|
||||
@ -614,7 +614,7 @@ skc_composition_pfn_place(struct skc_composition_impl * const impl,
|
||||
do {
|
||||
skc_uint rem;
|
||||
|
||||
// find out how much room is left in then ring's snap
|
||||
// find out how much room is left in then ring's snap
|
||||
// if the place ring is full -- let it drain
|
||||
SKC_SCHEDULER_WAIT_WHILE(impl->runtime->scheduler,(rem = skc_extent_ring_wip_rem(&impl->cmds.ring)) == 0);
|
||||
|
||||
|
@ -38,15 +38,15 @@ typedef enum skc_composition_state_e {
|
||||
//
|
||||
|
||||
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 {
|
||||
struct {
|
||||
skc_grid_t place;
|
||||
skc_grid_t sort;
|
||||
} grids;
|
||||
|
@ -27,10 +27,10 @@ struct skc_config
|
||||
} host; // alignment determined by compiler
|
||||
struct {
|
||||
skc_uint size;
|
||||
skc_uint subbufs;
|
||||
skc_uint subbufs;
|
||||
} device; // alignment determined by device
|
||||
} suballocator;
|
||||
|
||||
|
||||
struct {
|
||||
skc_uint size;
|
||||
} scheduler;
|
||||
@ -58,7 +58,7 @@ struct skc_config
|
||||
struct {
|
||||
skc_uint size; // a large fraction of block pool size
|
||||
skc_uint width; // determines number of launched reclamation subgroups
|
||||
skc_uint recs; // how many in-flight width-subgroup reclamation grids
|
||||
skc_uint recs; // how many in-flight width-subgroup reclamation grids
|
||||
} handle_pool;
|
||||
|
||||
struct {
|
||||
|
@ -46,7 +46,7 @@ static
|
||||
cl_command_queue
|
||||
skc_runtime_cl_12_create_cq(struct skc_runtime * const runtime,
|
||||
struct skc_cq_pool * const pool)
|
||||
|
||||
|
||||
{
|
||||
cl_command_queue cq;
|
||||
|
||||
@ -59,7 +59,7 @@ skc_runtime_cl_12_create_cq(struct skc_runtime * const runtime,
|
||||
cq = clCreateCommandQueue(runtime->cl.context,
|
||||
runtime->cl.device_id,
|
||||
pool->cq_props,
|
||||
&cl_err); cl_ok(cl_err);
|
||||
&cl_err); cl_ok(cl_err);
|
||||
#else
|
||||
if (runtime_cl->version.major < 2)
|
||||
{
|
||||
@ -71,7 +71,7 @@ skc_runtime_cl_12_create_cq(struct skc_runtime * const runtime,
|
||||
cq = clCreateCommandQueue(runtime_cl->context,
|
||||
runtime_cl->device_id,
|
||||
(cl_command_queue_properties)type,
|
||||
&cl_err); cl_ok(cl_err);
|
||||
&cl_err); cl_ok(cl_err);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -135,7 +135,7 @@ skc_cq_pool_dispose(struct skc_runtime * const runtime,
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
skc_cq_pool_write(struct skc_cq_pool * const pool,
|
||||
cl_command_queue cq)
|
||||
@ -174,7 +174,7 @@ skc_cq_pool_expand(struct skc_runtime * const runtime,
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
cl_command_queue
|
||||
skc_cq_pool_read(struct skc_runtime * const runtime,
|
||||
struct skc_cq_pool * const pool)
|
||||
@ -199,7 +199,7 @@ skc_runtime_acquire_cq_in_order(struct skc_runtime * const runtime)
|
||||
}
|
||||
|
||||
void
|
||||
skc_runtime_release_cq_in_order(struct skc_runtime * const runtime,
|
||||
skc_runtime_release_cq_in_order(struct skc_runtime * const runtime,
|
||||
cl_command_queue cq)
|
||||
{
|
||||
skc_cq_pool_write(&runtime->cq_pool,cq);
|
||||
|
@ -14,7 +14,7 @@
|
||||
// Why we need to wrap command queue creation:
|
||||
//
|
||||
// - command queue creation is expensive
|
||||
//
|
||||
//
|
||||
// - the CL 1.2 function is deprecated in 2.0
|
||||
//
|
||||
|
||||
|
@ -33,7 +33,7 @@ typedef enum skc_device_kernel_id {
|
||||
|
||||
SKC_DEVICE_KERNEL_ID_FILLS_EXPAND,
|
||||
|
||||
SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL,
|
||||
SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL,
|
||||
SKC_DEVICE_KERNEL_ID_RASTERIZE_LINES,
|
||||
SKC_DEVICE_KERNEL_ID_RASTERIZE_QUADS,
|
||||
SKC_DEVICE_KERNEL_ID_RASTERIZE_CUBICS,
|
||||
@ -69,12 +69,12 @@ void
|
||||
skc_device_dispose(struct skc_runtime * const runtime);
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
// multi-threading/context/device requires multiple kernel instances
|
||||
//
|
||||
|
||||
cl_kernel
|
||||
skc_device_acquire_kernel(struct skc_device * const device,
|
||||
skc_device_acquire_kernel(struct skc_device * const device,
|
||||
skc_device_kernel_id const type);
|
||||
|
||||
void
|
||||
@ -85,13 +85,13 @@ skc_device_release_kernel(struct skc_device * const device,
|
||||
// grid shape can vary greatly by target platform
|
||||
//
|
||||
void
|
||||
skc_device_enqueue_kernel(struct skc_device * const device,
|
||||
skc_device_enqueue_kernel(struct skc_device * const device,
|
||||
skc_device_kernel_id const type,
|
||||
cl_command_queue cq,
|
||||
cl_kernel kernel,
|
||||
size_t const work_size,
|
||||
size_t const work_size,
|
||||
cl_uint num_events_in_wait_list,
|
||||
cl_event const * const event_wait_list,
|
||||
cl_event const * const event_wait_list,
|
||||
cl_event * const event);
|
||||
|
||||
//
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "skc.h"
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
skc_err
|
||||
@ -23,7 +23,7 @@ skc_path_builder_cl_12_create(struct skc_context * const context,
|
||||
struct skc_path_builder * * const path_builder);
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
skc_err
|
||||
|
@ -127,7 +127,7 @@ skc_extent_phr_pdrw_read(struct skc_extent_phr_pdrw * const extent,
|
||||
if (extent->size == 0)
|
||||
return;
|
||||
|
||||
cl(EnqueueReadBuffer(cq,
|
||||
cl(EnqueueReadBuffer(cq,
|
||||
extent->drw,
|
||||
CL_FALSE,
|
||||
0,
|
||||
@ -191,7 +191,7 @@ skc_extent_thr_tdrw_read(struct skc_extent_thr_tdrw * const extent,
|
||||
if (extent->size == 0)
|
||||
return;
|
||||
|
||||
cl(EnqueueReadBuffer(cq,
|
||||
cl(EnqueueReadBuffer(cq,
|
||||
extent->drw,
|
||||
CL_FALSE,
|
||||
0,
|
||||
|
@ -40,7 +40,7 @@
|
||||
// DURABLE R/W HOST EXTENT -- STANDARD CACHED MEMORY
|
||||
//
|
||||
|
||||
struct skc_extent_phrw
|
||||
struct skc_extent_phrw
|
||||
{
|
||||
void * hrw;
|
||||
};
|
||||
@ -58,7 +58,7 @@ skc_extent_phrw_free(struct skc_runtime * const runtime,
|
||||
// DURABLE R/W DEVICE EXTENT -- ALLOCATED FROM DEVICE HEAP
|
||||
//
|
||||
|
||||
struct skc_extent_pdrw
|
||||
struct skc_extent_pdrw
|
||||
{
|
||||
cl_mem drw;
|
||||
};
|
||||
@ -76,7 +76,7 @@ skc_extent_pdrw_free(struct skc_runtime * const runtime,
|
||||
// EPHEMERAL DEVICE R/W EXTENT -- ALLOCATED QUICKLY FROM A MANAGED RING
|
||||
//
|
||||
|
||||
struct skc_extent_tdrw
|
||||
struct skc_extent_tdrw
|
||||
{
|
||||
size_t size;
|
||||
cl_mem drw;
|
||||
|
@ -88,7 +88,7 @@ union skc_handle_reclaim_rec
|
||||
{
|
||||
// ELEMENT 0
|
||||
struct skc_runtime * runtime;
|
||||
|
||||
|
||||
// ELEMENT 1
|
||||
struct {
|
||||
skc_uint rem; // # of available records
|
||||
|
@ -132,7 +132,7 @@ void
|
||||
skc_interop_key_callback(GLFWwindow * window, int key, int scancode, int action, int mods)
|
||||
{
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
|
||||
|
||||
if (action == GLFW_RELEASE)
|
||||
return;
|
||||
|
||||
@ -182,7 +182,7 @@ void
|
||||
skc_interop_window_size_callback(GLFWwindow * window, int width, int height)
|
||||
{
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
|
||||
|
||||
interop->width = width;
|
||||
interop->height = height;
|
||||
interop->is_resized = true;
|
||||
@ -217,7 +217,7 @@ skc_interop_scroll_callback(GLFWwindow * window, double xoffset, double yoffset)
|
||||
if (!ctrl)
|
||||
return;
|
||||
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
|
||||
skc_interop_scale(interop,yoffset);
|
||||
|
||||
@ -242,7 +242,7 @@ static
|
||||
void
|
||||
skc_interop_cursor_position_callback(GLFWwindow * window, double x, double y)
|
||||
{
|
||||
|
||||
|
||||
int const state = glfwGetMouseButton(window,GLFW_MOUSE_BUTTON_LEFT);
|
||||
|
||||
static bool is_mouse_dragging = false;
|
||||
@ -253,8 +253,8 @@ skc_interop_cursor_position_callback(GLFWwindow * window, double x, double y)
|
||||
|
||||
if (state == GLFW_PRESS)
|
||||
{
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
|
||||
struct skc_interop * interop = glfwGetWindowUserPointer(window);
|
||||
|
||||
if (is_mouse_dragging)
|
||||
{
|
||||
const bool ctrl =
|
||||
@ -294,7 +294,7 @@ skc_interop_cursor_position_callback(GLFWwindow * window, double x, double y)
|
||||
mx - x_prev,
|
||||
my - y_prev);
|
||||
}
|
||||
|
||||
|
||||
interop->is_transform = true;
|
||||
}
|
||||
else
|
||||
@ -417,7 +417,7 @@ skc_interop_create()
|
||||
|
||||
// save back pointer
|
||||
glfwSetWindowUserPointer(interop->window,interop);
|
||||
|
||||
|
||||
glfwMakeContextCurrent(interop->window);
|
||||
|
||||
// set up GLAD
|
||||
@ -519,7 +519,7 @@ skc_interop_transform(struct skc_interop * interop,
|
||||
// spinner...
|
||||
if (interop->is_spinning)
|
||||
interop->rotate_theta = fmodf(interop->rotate_theta + SKC_ROTATE_STEP,(float)(M_PI*2.0));
|
||||
|
||||
|
||||
// always rotate and scale around surface center point
|
||||
skc_transform_stack_push_rotate_scale_xy(ts,
|
||||
interop->rotate_theta,
|
||||
@ -673,7 +673,7 @@ skc_interop_poll(struct skc_interop * interop, int * key)
|
||||
bool const is_transform = interop->is_transform || interop->is_spinning;
|
||||
|
||||
interop->is_transform = false;
|
||||
|
||||
|
||||
return is_transform;
|
||||
}
|
||||
|
||||
@ -736,7 +736,7 @@ skc_interop_should_exit(struct skc_interop * interop)
|
||||
//
|
||||
|
||||
void
|
||||
skc_interop_get_size(struct skc_interop * interop,
|
||||
skc_interop_get_size(struct skc_interop * interop,
|
||||
uint32_t * width,
|
||||
uint32_t * height)
|
||||
{
|
||||
|
@ -90,7 +90,7 @@
|
||||
// FIXME -- move these to log2 values where appropriate
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
struct skc_config const config =
|
||||
{
|
||||
.suballocator = {
|
||||
@ -102,7 +102,7 @@ struct skc_config const config =
|
||||
.size = 128 * 1024 * 1024,
|
||||
.subbufs = 1024 // must be <= (1 << (8 * sizeof(skc_subbuf_id_t)))
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
.scheduler = {
|
||||
.size = 4096 // 128 // FIXME -- this is just for testing -- way too big -- schedulees should bring their own state
|
||||
@ -382,7 +382,7 @@ skc_device_shaper_paths_copy(size_t const work_size,
|
||||
work_local [0] = SKC_PATHS_COPY_SUBGROUP_SIZE;
|
||||
|
||||
return work_local;
|
||||
#else
|
||||
#else
|
||||
return NULL; // let runtime figure out local work size
|
||||
#endif
|
||||
}
|
||||
@ -659,7 +659,7 @@ struct skc_device
|
||||
{
|
||||
//
|
||||
// FIXME -- an OpenCL 2.1+ device would clone these kernels in a
|
||||
// multithreaded system.
|
||||
// multithreaded system.
|
||||
//
|
||||
// Not having the ability to clone kernels (yet set their sticky
|
||||
// args) was an oversight in previous versions of OpenCL.
|
||||
|
@ -256,7 +256,7 @@ struct skc_path_builder_impl
|
||||
|
||||
static
|
||||
union skc_ringdex_expand
|
||||
skc_ringdex_expand(struct skc_path_builder_impl * const impl,
|
||||
skc_ringdex_expand(struct skc_path_builder_impl * const impl,
|
||||
skc_ringdex_t const ringdex)
|
||||
{
|
||||
return (union skc_ringdex_expand){
|
||||
@ -322,7 +322,7 @@ skc_ringdex_prev_is_equal(struct skc_path_builder_impl * const impl)
|
||||
|
||||
static
|
||||
skc_uint
|
||||
skc_ringdex_dont_map_last(struct skc_path_builder_impl * const impl,
|
||||
skc_ringdex_dont_map_last(struct skc_path_builder_impl * const impl,
|
||||
skc_uint const to_block)
|
||||
{
|
||||
// no blocks acquired OR this is last block in subbuf
|
||||
@ -509,7 +509,7 @@ skc_path_builder_impl_unmap(struct skc_path_builder_impl * const impl,
|
||||
#if 0
|
||||
fprintf(stderr,"unmap: [%2u,%2u)\n",from,to);
|
||||
#endif
|
||||
|
||||
|
||||
while (from != to) // 'to' might be out of range
|
||||
{
|
||||
// bring 'from' back in range
|
||||
@ -647,9 +647,9 @@ void
|
||||
skc_path_builder_paths_copy_cb(cl_event event, cl_int status, skc_grid_t grid)
|
||||
{
|
||||
SKC_CL_CB(status);
|
||||
|
||||
|
||||
struct skc_release_record * const release = skc_grid_get_data(grid);
|
||||
|
||||
|
||||
SKC_SCHEDULER_SCHEDULE(release->impl->runtime->scheduler,skc_path_builder_complete,grid);
|
||||
}
|
||||
|
||||
@ -802,7 +802,7 @@ skc_path_builder_grid_pfn_waiting(skc_grid_t const grid)
|
||||
// if there was no wip then round up to the next subbuf
|
||||
//
|
||||
skc_ringdex_wip_to_subbuf_inc(impl);
|
||||
|
||||
|
||||
//
|
||||
// update prev/curr with with incremented wip
|
||||
//
|
||||
|
@ -329,7 +329,7 @@ skc_raster_builder_pfn_release(struct skc_raster_builder_impl * const impl)
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
skc_raster_builder_rasters_release(struct skc_runtime * const runtime,
|
||||
skc_raster_t const * const rasters,
|
||||
@ -344,12 +344,12 @@ skc_raster_builder_rasters_release(struct skc_runtime * const runtime,
|
||||
|
||||
skc_grid_deps_unmap(runtime->deps,rasters_from,count_from);
|
||||
skc_runtime_raster_device_release(runtime,rasters_from,count_from);
|
||||
}
|
||||
}
|
||||
else // from > to implies wrap
|
||||
{
|
||||
skc_raster_t const * rasters_lo = rasters + from;
|
||||
skc_uint count_lo = size - from;
|
||||
|
||||
|
||||
skc_grid_deps_unmap(runtime->deps,rasters_lo,count_lo);
|
||||
skc_runtime_raster_device_release(runtime,rasters_lo,count_lo);
|
||||
|
||||
@ -358,7 +358,7 @@ skc_raster_builder_rasters_release(struct skc_runtime * const runtime,
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
skc_raster_builder_paths_release(struct skc_runtime * const runtime,
|
||||
struct skc_extent_phrwg_thr1s_snap * const snap)
|
||||
@ -401,7 +401,7 @@ skc_raster_builder_cohort_grid_pfn_dispose(skc_grid_t const grid)
|
||||
|
||||
// snap alloc the paths -- this host snap simply sets up pointers
|
||||
skc_extent_phrwg_thr1s_snap_alloc(runtime,&impl->path_ids,&cohort->path_ids);
|
||||
|
||||
|
||||
// unmap and release raster ids
|
||||
skc_raster_builder_paths_release(runtime,&cohort->path_ids);
|
||||
|
||||
@ -418,7 +418,7 @@ skc_raster_builder_cohort_grid_pfn_dispose(skc_grid_t const grid)
|
||||
// unmap and release raster ids
|
||||
skc_raster_builder_rasters_release(runtime,impl->raster_ids.hrw,size,from,to);
|
||||
|
||||
// release cohort's remaining allocated resources
|
||||
// release cohort's remaining allocated resources
|
||||
skc_extent_phrwg_tdrNs_snap_free(runtime,&cohort->raster_ids);
|
||||
skc_runtime_release_cq_in_order(runtime,cohort->cq);
|
||||
skc_extent_thr_tdrw_free(runtime,&cohort->atomics);
|
||||
@ -458,7 +458,7 @@ skc_raster_cohort_prefix_release(skc_grid_t const grid)
|
||||
// FIXME -- note that pfn_dispose can be accomplished here
|
||||
|
||||
// release the grid
|
||||
skc_grid_complete(grid);
|
||||
skc_grid_complete(grid);
|
||||
}
|
||||
|
||||
static
|
||||
@ -466,7 +466,7 @@ void
|
||||
skc_raster_cohort_prefix_cb(cl_event event, cl_int status, skc_grid_t const grid)
|
||||
{
|
||||
SKC_CL_CB(status);
|
||||
|
||||
|
||||
struct skc_raster_cohort * const cohort = skc_grid_get_data(grid);
|
||||
struct skc_scheduler * const scheduler = cohort->impl->runtime->scheduler;
|
||||
|
||||
@ -599,7 +599,7 @@ skc_raster_cohort_sort_prefix(skc_grid_t const grid)
|
||||
// DELETE ALL THIS WHEN READY
|
||||
//
|
||||
|
||||
#if 0
|
||||
#if 0
|
||||
//
|
||||
//
|
||||
//
|
||||
@ -625,7 +625,7 @@ skc_raster_cohort_sort_prefix(skc_grid_t const grid)
|
||||
//
|
||||
// some counters
|
||||
//
|
||||
union skc_raster_cohort_meta_in meta_in = {
|
||||
union skc_raster_cohort_meta_in meta_in = {
|
||||
.blocks = 0,
|
||||
.offset = 0,
|
||||
.pk = 0,
|
||||
@ -665,10 +665,10 @@ skc_raster_cohort_sort_prefix(skc_grid_t const grid)
|
||||
|
||||
// store back to buffer
|
||||
metas->inout[curr.cohort].in = meta_in;
|
||||
|
||||
|
||||
// update meta_in
|
||||
meta_in.blocks = 0;
|
||||
meta_in.offset = ii;
|
||||
meta_in.offset = ii;
|
||||
meta_in.pk = 0;
|
||||
meta_in.rk = 0;
|
||||
}
|
||||
@ -699,7 +699,7 @@ skc_raster_cohort_sort_prefix(skc_grid_t const grid)
|
||||
// store back to buffer
|
||||
metas->inout[curr.cohort].in = meta_in;
|
||||
|
||||
|
||||
|
||||
// unmap
|
||||
skc_extent_thrw_tdrw_unmap(&cohort->keys,
|
||||
keys,
|
||||
@ -795,7 +795,7 @@ void
|
||||
skc_raster_cohort_rasterize_cb(cl_event event, cl_int status, skc_grid_t const grid)
|
||||
{
|
||||
SKC_CL_CB(status);
|
||||
|
||||
|
||||
struct skc_raster_cohort * const cohort = skc_grid_get_data(grid);
|
||||
|
||||
// as quickly as possible, enqueue next stage in pipeline to context command scheduler
|
||||
@ -1079,7 +1079,7 @@ skc_raster_builder_cohort_grid_pfn_waiting(skc_grid_t const grid)
|
||||
// allocate the ephemeral/temp cohort
|
||||
skc_subbuf_id_t id;
|
||||
|
||||
struct skc_raster_cohort * const cohort =
|
||||
struct skc_raster_cohort * const cohort =
|
||||
skc_runtime_host_temp_alloc(runtime,
|
||||
SKC_MEM_FLAGS_READ_WRITE,
|
||||
sizeof(*cohort),
|
||||
@ -1145,7 +1145,7 @@ skc_raster_builder_cohort_create(struct skc_raster_builder_impl * const impl)
|
||||
|
||||
static
|
||||
skc_err
|
||||
skc_raster_builder_pfn_add(struct skc_raster_builder_impl * const impl,
|
||||
skc_raster_builder_pfn_add(struct skc_raster_builder_impl * const impl,
|
||||
skc_path_t const * paths,
|
||||
skc_uint count)
|
||||
{
|
||||
@ -1329,7 +1329,7 @@ skc_raster_builder_cl_12_create(struct skc_context * const context,
|
||||
// acquire kernels
|
||||
//
|
||||
impl->kernels.fills_expand = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_FILLS_EXPAND);
|
||||
impl->kernels.rasterize_all = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL);
|
||||
impl->kernels.rasterize_all = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_ALL);
|
||||
|
||||
#if 0
|
||||
impl->kernels.rasterize_lines = skc_device_acquire_kernel(runtime->device, SKC_DEVICE_KERNEL_ID_RASTERIZE_LINES);
|
||||
|
@ -31,7 +31,7 @@
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
skc_block_pool_create(struct skc_runtime * const runtime, cl_command_queue cq)
|
||||
{
|
||||
@ -41,7 +41,7 @@ skc_block_pool_create(struct skc_runtime * const runtime, cl_command_queue cq)
|
||||
// create block extent
|
||||
skc_extent_pdrw_alloc(runtime,
|
||||
&runtime->block_pool.blocks,
|
||||
runtime->block_pool.size->pool_size *
|
||||
runtime->block_pool.size->pool_size *
|
||||
runtime->config->block.bytes);
|
||||
|
||||
// allocate block pool ids
|
||||
@ -84,7 +84,7 @@ skc_block_pool_create(struct skc_runtime * const runtime, cl_command_queue cq)
|
||||
cl(ReleaseKernel(k1));
|
||||
}
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
skc_block_pool_dispose(struct skc_runtime * const runtime)
|
||||
{
|
||||
@ -105,7 +105,7 @@ skc_runtime_yield(struct skc_runtime * const runtime)
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
void
|
||||
skc_runtime_wait(struct skc_runtime * const runtime)
|
||||
{
|
||||
skc_scheduler_wait(runtime->scheduler);
|
||||
@ -122,7 +122,7 @@ skc_runtime_cl_12_create(struct skc_context * const context,
|
||||
{
|
||||
// allocate the runtime
|
||||
struct skc_runtime * const runtime = malloc(sizeof(*runtime));
|
||||
|
||||
|
||||
// save off CL objects
|
||||
runtime->cl.context = context_cl;
|
||||
runtime->cl.device_id = device_id_cl;
|
||||
@ -135,7 +135,7 @@ skc_runtime_cl_12_create(struct skc_context * const context,
|
||||
sizeof(align_bits),
|
||||
&align_bits,
|
||||
NULL));
|
||||
|
||||
|
||||
runtime->cl.align_bytes = align_bits / 8;
|
||||
|
||||
// create device
|
||||
@ -183,7 +183,7 @@ skc_runtime_cl_12_create(struct skc_context * const context,
|
||||
|
||||
context->yield = skc_runtime_yield;
|
||||
context->wait = skc_runtime_wait;
|
||||
|
||||
|
||||
context->path_builder = skc_path_builder_cl_12_create;
|
||||
context->path_retain = skc_runtime_path_host_retain;
|
||||
context->path_release = skc_runtime_path_host_release;
|
||||
@ -196,7 +196,7 @@ skc_runtime_cl_12_create(struct skc_context * const context,
|
||||
|
||||
context->composition = skc_composition_cl_12_create;
|
||||
context->styling = skc_styling_cl_12_create;
|
||||
|
||||
|
||||
context->surface = skc_surface_cl_12_create;
|
||||
|
||||
// block on pool creation
|
||||
@ -234,7 +234,7 @@ skc_runtime_cl_12_dispose(struct skc_context * const context)
|
||||
skc_block_pool_dispose(context->runtime);
|
||||
|
||||
// skc_handle_pool_dispose(context->runtime);
|
||||
|
||||
|
||||
return SKC_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
@ -246,7 +246,7 @@ void
|
||||
skc_runtime_cl_12_debug(struct skc_context * const context)
|
||||
{
|
||||
struct skc_runtime * const runtime = context->runtime;
|
||||
|
||||
|
||||
// acquire out-of-order cq
|
||||
cl_command_queue cq = skc_runtime_acquire_cq_in_order(runtime);
|
||||
|
||||
|
@ -32,7 +32,7 @@ void
|
||||
skc_styling_unmap_complete(skc_grid_t const grid)
|
||||
{
|
||||
struct skc_styling_impl * const impl = skc_grid_get_data(grid);
|
||||
|
||||
|
||||
impl->state = SKC_STYLING_STATE_SEALED;
|
||||
|
||||
skc_grid_complete(grid);
|
||||
@ -65,7 +65,7 @@ skc_styling_grid_pfn_execute(skc_grid_t const grid)
|
||||
|
||||
skc_extent_phwN_pdrN_unmap(&impl->layers,styling->layers.extent,impl->cq,NULL);
|
||||
skc_extent_phwN_pdrN_unmap(&impl->groups,styling->groups.extent,impl->cq,NULL);
|
||||
skc_extent_phwN_pdrN_unmap(&impl->extras,styling->extras.extent,impl->cq,&complete);
|
||||
skc_extent_phwN_pdrN_unmap(&impl->extras,styling->extras.extent,impl->cq,&complete);
|
||||
|
||||
// set the event
|
||||
cl(SetEventCallback(complete,CL_COMPLETE,skc_styling_unmap_cb,grid));
|
||||
@ -97,7 +97,7 @@ skc_styling_pfn_seal(struct skc_styling_impl * const impl)
|
||||
{
|
||||
SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_UNSEALED);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// we're unsealed so we need to seal and start the grid
|
||||
//
|
||||
@ -121,7 +121,7 @@ void
|
||||
skc_styling_unseal_complete(struct skc_styling_impl * const impl)
|
||||
{
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
|
||||
|
||||
// we're now unsealed
|
||||
impl->state = SKC_STYLING_STATE_UNSEALED;
|
||||
}
|
||||
@ -131,7 +131,7 @@ void
|
||||
skc_styling_unseal_cb(cl_event event, cl_int status, struct skc_styling_impl * const impl)
|
||||
{
|
||||
SKC_CL_CB(status);
|
||||
|
||||
|
||||
// as quickly as possible, enqueue next stage in pipeline to context command scheduler
|
||||
SKC_SCHEDULER_SCHEDULE(impl->runtime->scheduler,skc_styling_unseal_complete,impl);
|
||||
}
|
||||
@ -166,10 +166,10 @@ skc_styling_pfn_unseal(struct skc_styling_impl * const impl, skc_bool const bloc
|
||||
//
|
||||
if (impl->state == SKC_STYLING_STATE_SEALING)
|
||||
{
|
||||
// wait if sealing
|
||||
// wait if sealing
|
||||
SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->state != SKC_STYLING_STATE_SEALED);
|
||||
}
|
||||
|
||||
|
||||
// wait for rendering locks to be released
|
||||
SKC_SCHEDULER_WAIT_WHILE(scheduler,impl->lock_count > 0);
|
||||
|
||||
@ -183,7 +183,7 @@ skc_styling_pfn_unseal(struct skc_styling_impl * const impl, skc_bool const bloc
|
||||
cl_event complete;
|
||||
|
||||
struct skc_styling * const styling = impl->styling;
|
||||
|
||||
|
||||
styling->layers.extent = skc_extent_phwN_pdrN_map(&impl->layers,impl->cq,NULL);
|
||||
styling->groups.extent = skc_extent_phwN_pdrN_map(&impl->groups,impl->cq,NULL);
|
||||
styling->extras.extent = skc_extent_phwN_pdrN_map(&impl->extras,impl->cq,&complete);
|
||||
@ -239,7 +239,7 @@ skc_styling_pfn_release(struct skc_styling_impl * const impl)
|
||||
|
||||
// release the cq
|
||||
skc_runtime_release_cq_in_order(runtime,impl->cq);
|
||||
|
||||
|
||||
// free extents
|
||||
skc_extent_phwN_pdrN_free(runtime,&impl->layers);
|
||||
skc_extent_phwN_pdrN_free(runtime,&impl->groups);
|
||||
@ -301,7 +301,7 @@ skc_styling_cl_12_create(struct skc_context * const context,
|
||||
impl->lock_count = 0;
|
||||
|
||||
impl->cq = skc_runtime_acquire_cq_in_order(runtime);
|
||||
|
||||
|
||||
//
|
||||
// The styling object is unique in that the API lets the user
|
||||
// specify resource limits
|
||||
|
@ -40,7 +40,7 @@ struct skc_styling_impl
|
||||
{
|
||||
struct skc_styling * styling;
|
||||
struct skc_runtime * runtime;
|
||||
|
||||
|
||||
SKC_ASSERT_STATE_DECLARE(skc_styling_state_e);
|
||||
|
||||
skc_int lock_count; // # of wip renders
|
||||
|
@ -80,7 +80,7 @@ static
|
||||
void
|
||||
skc_surface_debug_clear(struct skc_surface_impl * const impl,
|
||||
skc_framebuffer_t fb,
|
||||
float const rgba[4],
|
||||
float const rgba[4],
|
||||
uint32_t const rect[4])
|
||||
{
|
||||
size_t const origin[3] = { rect[0], rect[1], 0 };
|
||||
@ -150,11 +150,11 @@ skc_surface_pfn_release(struct skc_surface_impl * const impl)
|
||||
//
|
||||
// otherwise, release all resources
|
||||
//
|
||||
|
||||
|
||||
// drain the command queue
|
||||
cl(Finish(impl->cq));
|
||||
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
|
||||
// release the kernel
|
||||
cl(ReleaseKernel(impl->kernels.render));
|
||||
@ -167,7 +167,7 @@ skc_surface_pfn_release(struct skc_surface_impl * const impl)
|
||||
|
||||
// release fb
|
||||
// skc_extent_phrN_pdwN_free(runtime,&impl->fb);
|
||||
|
||||
|
||||
// free surface impl
|
||||
skc_runtime_host_perm_free(runtime,impl);
|
||||
}
|
||||
@ -200,7 +200,7 @@ skc_surface_render_complete(struct skc_surface_render * const render)
|
||||
// grid is now complete
|
||||
skc_grid_complete(render->grid);
|
||||
|
||||
struct skc_surface_impl * const impl = render->impl;
|
||||
struct skc_surface_impl * const impl = render->impl;
|
||||
struct skc_runtime * const runtime = impl->runtime;
|
||||
|
||||
// release the surface
|
||||
@ -341,7 +341,7 @@ skc_surface_pfn_render(struct skc_surface_impl * const impl,
|
||||
// them here.
|
||||
//
|
||||
|
||||
// retain and lock the styling and composition
|
||||
// retain and lock the styling and composition
|
||||
skc_styling_retain_and_lock(styling);
|
||||
skc_composition_retain_and_lock(composition);
|
||||
|
||||
|
@ -155,7 +155,7 @@ skc_raster_builder_transforms_append(struct skc_raster_builder * const raster_bu
|
||||
static
|
||||
skc_bool
|
||||
skc_raster_builder_clips_append(struct skc_raster_builder * const raster_builder,
|
||||
union skc_cmd_fill * const cmd,
|
||||
union skc_cmd_fill * const cmd,
|
||||
skc_raster_clip_weakref_t * const raster_clip_weakref,
|
||||
skc_float const * const raster_clip)
|
||||
{
|
||||
@ -183,7 +183,7 @@ skc_raster_builder_cmds_append(struct skc_raster_builder * const raster_builder,
|
||||
cmd->cohort = skc_extent_ring_wip_count(&raster_builder->raster_ids.ring);
|
||||
|
||||
skc_uint const base = skc_extent_ring_wip_index_inc(&raster_builder->fill_cmds.ring);
|
||||
|
||||
|
||||
raster_builder->fill_cmds.extent[base] = *cmd;
|
||||
|
||||
#if 0
|
||||
@ -292,7 +292,7 @@ skc_raster_add_filled(skc_raster_builder_t raster_builder,
|
||||
// mask off the guard bits
|
||||
path = SKC_TYPED_HANDLE_TO_HANDLE(path);
|
||||
|
||||
//
|
||||
//
|
||||
// build the command...
|
||||
//
|
||||
union skc_cmd_fill cmd;
|
||||
|
@ -63,8 +63,8 @@ struct skc_scheduler_command
|
||||
void * data;
|
||||
skc_scheduler_command_pfn pfn;
|
||||
skc_scheduler_command_state state;
|
||||
char const * name;
|
||||
};
|
||||
char const * name;
|
||||
};
|
||||
|
||||
#if 0
|
||||
struct skc_scheduler_command
|
||||
|
@ -18,12 +18,12 @@
|
||||
#include "types.h"
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
#define SKC_SCHEDULER_SCHEDULE(s,c,d) skc_scheduler_schedule(s,c,d,#c)
|
||||
|
||||
#ifndef NDEBUG
|
||||
#ifndef NDEBUG
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@ -70,7 +70,7 @@ skc_scheduler_create(struct skc_runtime * const runtime, skc_uint const size);
|
||||
void
|
||||
skc_scheduler_dispose(struct skc_runtime * const runtime,
|
||||
struct skc_scheduler * const scheduler);
|
||||
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
|
@ -27,7 +27,7 @@ struct skc_styling
|
||||
void (* seal )(struct skc_styling_impl * const impl);
|
||||
void (* unseal )(struct skc_styling_impl * const impl, skc_bool const block);
|
||||
void (* release)(struct skc_styling_impl * const impl);
|
||||
|
||||
|
||||
skc_int ref_count;
|
||||
|
||||
struct {
|
||||
|
@ -127,7 +127,7 @@ SKC_STATIC_ASSERT(sizeof(struct skc_group_node) == sizeof(skc_uint2) * 3); // 6
|
||||
union skc_gradient_slope
|
||||
{
|
||||
skc_float slope;
|
||||
skc_half color_pair[2];
|
||||
skc_half color_pair[2];
|
||||
};
|
||||
|
||||
SKC_STATIC_ASSERT(sizeof(union skc_gradient_slope) == sizeof(skc_float));
|
||||
@ -174,7 +174,7 @@ SKC_STATIC_ASSERT(sizeof(union skc_gradient_vector) == sizeof(skc_float4));
|
||||
// +------------+---------------------------------+--------+-------------------------+
|
||||
//
|
||||
// COLOR LAYOUT:
|
||||
//
|
||||
//
|
||||
// R[0]R[1], R[1]R[2], ... R[N-1]R[N-1]
|
||||
// G[0]G[1], G[1]G[2], ... G[N-1]G[N-1]
|
||||
// B[0]B[1], B[1]B[2], ... B[N-1]B[N-1]
|
||||
@ -203,7 +203,7 @@ SKC_STATIC_ASSERT(sizeof(union skc_gradient_vector) == sizeof(skc_float4));
|
||||
// +------------+--------------------------------+--------+
|
||||
//
|
||||
// COLOR LAYOUT:
|
||||
//
|
||||
//
|
||||
// R[0]R[1], R[1]R[2], ... R[N-1]R[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
|
||||
// G[0]G[1], G[1]G[2], ... G[N-1]G[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
|
||||
// B[0]B[1], B[1]B[2], ... B[N-1]B[N-1] <-------------------------- FIXME -- USE HERB'S SINGLE FMA REPRESENTATION
|
||||
@ -222,7 +222,7 @@ SKC_STATIC_ASSERT(sizeof(union skc_gradient_vector) == sizeof(skc_float4));
|
||||
// This will require that the colors are laid out in sampler-friendly
|
||||
// order:
|
||||
//
|
||||
// RGBA[0]RGBA[1], RGBA[1]RGBA[2], ..., RGBA[N-1]RGBA[N-1]
|
||||
// RGBA[0]RGBA[1], RGBA[1]RGBA[2], ..., RGBA[N-1]RGBA[N-1]
|
||||
//
|
||||
//
|
||||
|
||||
@ -247,4 +247,4 @@ SKC_STATIC_ASSERT(sizeof(union skc_gradient_vector) == sizeof(skc_float4));
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
@ -178,7 +178,7 @@ skc_suballocator_subbuf_alloc(struct skc_suballocator * const suballocator,
|
||||
}
|
||||
|
||||
assert(suballocator->rem.avail > 0);
|
||||
|
||||
|
||||
// return origin
|
||||
return avail->origin;
|
||||
}
|
||||
@ -189,7 +189,7 @@ skc_suballocator_subbuf_alloc(struct skc_suballocator * const suballocator,
|
||||
skc_uint spare_idx = suballocator->count - spare_rem;
|
||||
skc_subbuf_id_t const spare_id = ids[spare_idx];
|
||||
struct skc_subbuf * const spare = suballocator->subbufs + spare_id;
|
||||
|
||||
|
||||
assert(spare->inuse == 0);
|
||||
|
||||
// simple -- we're popping the top-of-stack of spares
|
||||
@ -199,7 +199,7 @@ skc_suballocator_subbuf_alloc(struct skc_suballocator * const suballocator,
|
||||
*subbuf_id = spare_id;
|
||||
|
||||
SKC_SUBALLOCATOR_DEBUG_ALLOC(suballocator,spare_id,size_ru);
|
||||
|
||||
|
||||
// get prev
|
||||
struct skc_subbuf * const prev = avail->prev;
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
typedef skc_ushort skc_subbuf_id_t;
|
||||
typedef skc_uint skc_subbuf_size_t; // <4GB
|
||||
// typedef size_t skc_subbuf_size_t; // >4GB
|
||||
// typedef size_t skc_subbuf_size_t; // >4GB
|
||||
|
||||
//
|
||||
//
|
||||
@ -49,7 +49,7 @@ struct skc_subbuf
|
||||
{
|
||||
struct skc_subbuf * prev;
|
||||
struct skc_subbuf * next;
|
||||
|
||||
|
||||
skc_subbuf_size_t size;
|
||||
skc_subbuf_size_t origin;
|
||||
|
||||
|
@ -414,7 +414,7 @@
|
||||
#define SKC_TTCK_LO_BITS_PREFIX 1
|
||||
#define SKC_TTCK_LO_OFFSET_PREFIX SKC_TTCK_LO_BITS_ID
|
||||
#define SKC_TTCK_LO_MASK_PREFIX SKC_BITS_TO_MASK_AT(SKC_TTCK_LO_BITS_PREFIX,SKC_TTCK_LO_OFFSET_PREFIX)
|
||||
|
||||
|
||||
#define SKC_TTCK_LO_BITS_ID_PREFIX (SKC_TTCK_LO_BITS_ID + SKC_TTCK_LO_BITS_PREFIX)
|
||||
#define SKC_TTCK_LO_MASK_ID_PREFIX SKC_BITS_TO_MASK(SKC_TTCK_LO_BITS_ID_PREFIX)
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
//
|
||||
//
|
||||
|
||||
#include <intrin.h>
|
||||
#include <intrin.h>
|
||||
|
||||
//
|
||||
//
|
||||
|
@ -56,27 +56,27 @@ SKC_STATIC_ASSERT(sizeof(union skc_weakref) == sizeof(skc_ulong));
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_weakref_epoch_init(skc_epoch_t * const epoch)
|
||||
{
|
||||
*epoch = SKC_WEAKREF_EPOCH_INIT;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
skc_weakref_epoch_inc(skc_epoch_t * const epoch)
|
||||
{
|
||||
*epoch += SKC_WEAKREF_EPOCH_ONE;
|
||||
}
|
||||
|
||||
void
|
||||
skc_weakref_init(skc_weakref_t * const weakref,
|
||||
void
|
||||
skc_weakref_init(skc_weakref_t * const weakref,
|
||||
skc_epoch_t * const epoch,
|
||||
skc_uint const index)
|
||||
{
|
||||
*weakref = *epoch | (index & SKC_WEAKREF_INDEX_MASK);
|
||||
}
|
||||
|
||||
bool
|
||||
bool
|
||||
skc_weakref_is_invalid(skc_weakref_t const * const weakref,
|
||||
skc_epoch_t const * const epoch)
|
||||
{
|
||||
|
@ -25,20 +25,20 @@ typedef skc_ulong skc_epoch_t;
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_weakref_epoch_init(skc_epoch_t * const epoch);
|
||||
|
||||
void
|
||||
void
|
||||
skc_weakref_epoch_inc(skc_epoch_t * const epoch);
|
||||
|
||||
void
|
||||
skc_weakref_init(skc_weakref_t * const weakref,
|
||||
void
|
||||
skc_weakref_init(skc_weakref_t * const weakref,
|
||||
skc_epoch_t * const epoch,
|
||||
skc_uint const index);
|
||||
|
||||
bool
|
||||
bool
|
||||
skc_weakref_is_invalid(skc_weakref_t const * const weakref,
|
||||
skc_epoch_t const * const epoch);
|
||||
skc_epoch_t const * const epoch);
|
||||
|
||||
skc_uint
|
||||
skc_weakref_index(skc_weakref_t const * const weakref);
|
||||
|
@ -41,7 +41,7 @@
|
||||
union skc_transform_stack_3x3_u
|
||||
{
|
||||
skc_transform_float_t a9[9];
|
||||
|
||||
|
||||
struct {
|
||||
skc_transform_float_t sx;
|
||||
skc_transform_float_t shx;
|
||||
@ -62,7 +62,7 @@ struct skc_transform_stack
|
||||
{
|
||||
uint32_t size;
|
||||
uint32_t count;
|
||||
|
||||
|
||||
skc_transform_weakref_t * weakrefs;
|
||||
union skc_transform_stack_3x3_u * transforms;
|
||||
};
|
||||
@ -78,7 +78,7 @@ skc_transform_stack_3x3_u_copy(union skc_transform_stack_3x3_u * const __r
|
||||
{
|
||||
for (int32_t ii=0; ii<9; ii++)
|
||||
dst->a9[ii] = src->a9[ii];
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// C = A * B
|
||||
@ -89,7 +89,7 @@ void
|
||||
skc_transform_stack_3x3_u_multiply(union skc_transform_stack_3x3_u * const __restrict C,
|
||||
union skc_transform_stack_3x3_u const * const __restrict A,
|
||||
union skc_transform_stack_3x3_u const * const __restrict B)
|
||||
{
|
||||
{
|
||||
C->sx = A->sx * B->sx + A->shx * B->shy + A->tx * B->w0;
|
||||
C->shx = A->sx * B->shx + A->shx * B->sy + A->tx * B->w1;
|
||||
C->tx = A->sx * B->tx + A->shx * B->ty + A->tx * B->w2;
|
||||
@ -167,7 +167,7 @@ skc_transform_stack_save(struct skc_transform_stack * const ts)
|
||||
}
|
||||
|
||||
void
|
||||
skc_transform_stack_restore(struct skc_transform_stack * const ts,
|
||||
skc_transform_stack_restore(struct skc_transform_stack * const ts,
|
||||
uint32_t const restore)
|
||||
{
|
||||
ts->count = restore;
|
||||
@ -177,7 +177,7 @@ skc_transform_stack_restore(struct skc_transform_stack * const ts,
|
||||
//
|
||||
//
|
||||
|
||||
static
|
||||
static
|
||||
union skc_transform_stack_3x3_u *
|
||||
skc_transform_stack_tos(struct skc_transform_stack * const ts)
|
||||
{
|
||||
@ -241,7 +241,7 @@ skc_transform_stack_top_weakref(struct skc_transform_stack * const ts)
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_drop(struct skc_transform_stack * const ts)
|
||||
{
|
||||
assert(ts->count >= 1);
|
||||
@ -249,11 +249,11 @@ skc_transform_stack_drop(struct skc_transform_stack * const ts)
|
||||
ts->count -= 1;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_dup(struct skc_transform_stack * const ts)
|
||||
{
|
||||
skc_transform_stack_ensure(ts);
|
||||
|
||||
|
||||
union skc_transform_stack_3x3_u * const tos = skc_transform_stack_tos(ts);
|
||||
|
||||
skc_transform_stack_3x3_u_copy(tos+1,tos);
|
||||
@ -269,18 +269,18 @@ skc_transform_stack_dup(struct skc_transform_stack * const ts)
|
||||
|
||||
void
|
||||
skc_transform_stack_push_matrix(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const ty,
|
||||
skc_transform_float_t const w0,
|
||||
skc_transform_float_t const w1,
|
||||
skc_transform_float_t const w0,
|
||||
skc_transform_float_t const w1,
|
||||
skc_transform_float_t const w2)
|
||||
{
|
||||
skc_transform_stack_ensure(ts);
|
||||
|
||||
|
||||
union skc_transform_stack_3x3_u * t = ts->transforms + ts->count;
|
||||
|
||||
t->sx = sx;
|
||||
@ -310,10 +310,10 @@ skc_transform_stack_push_identity(struct skc_transform_stack * const ts)
|
||||
void
|
||||
skc_transform_stack_push_affine(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const ty)
|
||||
{
|
||||
skc_transform_stack_push_matrix(ts,
|
||||
@ -330,23 +330,23 @@ skc_transform_stack_push_translate(struct skc_transform_stack * const ts,
|
||||
skc_transform_stack_push_matrix(ts,
|
||||
1.0, 0.0, tx,
|
||||
0.0, 1.0, ty,
|
||||
0.0, 0.0, 1.0);
|
||||
0.0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
void
|
||||
skc_transform_stack_push_scale(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sy)
|
||||
{
|
||||
skc_transform_stack_push_matrix(ts,
|
||||
sx, 0.0, 0.0,
|
||||
0.0, sy, 0.0,
|
||||
0.0, 0.0, 1.0);
|
||||
0.0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
void
|
||||
skc_transform_stack_push_shear(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const shy)
|
||||
{
|
||||
skc_transform_stack_push_matrix(ts,
|
||||
@ -412,7 +412,7 @@ skc_transform_stack_push_rotate_xy2(struct skc_transform_stack * const ts,
|
||||
void
|
||||
skc_transform_stack_push_rotate_xy(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const theta,
|
||||
skc_transform_float_t const cx,
|
||||
skc_transform_float_t const cx,
|
||||
skc_transform_float_t const cy)
|
||||
{
|
||||
skc_transform_stack_push_rotate_xy2(ts,theta,cx,cy,cx,cy);
|
||||
@ -421,7 +421,7 @@ skc_transform_stack_push_rotate_xy(struct skc_transform_stack * const ts,
|
||||
void
|
||||
skc_transform_stack_push_rotate_scale_xy(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const theta,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const cx,
|
||||
skc_transform_float_t const cy)
|
||||
@ -465,7 +465,7 @@ skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
|
||||
//
|
||||
// dividing by the determinant (just w2?)
|
||||
//
|
||||
skc_transform_float_t const det =
|
||||
skc_transform_float_t const det =
|
||||
DIAG2(T,0,4) +
|
||||
DIAG3(T,3,7,2) +
|
||||
DIAG3(T,6,1,5) -
|
||||
@ -478,7 +478,7 @@ skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
|
||||
|
||||
skc_transform_float_t const rcp = 1.0 / det;
|
||||
|
||||
const union skc_transform_stack_3x3_u A =
|
||||
const union skc_transform_stack_3x3_u A =
|
||||
{
|
||||
+DET3(T,4,5,7) * rcp,
|
||||
-DET3(T,1,2,7) * rcp,
|
||||
@ -495,7 +495,7 @@ skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
|
||||
|
||||
#else // just the adjoint can result in large values
|
||||
|
||||
const union skc_transform_stack_3x3_u A =
|
||||
const union skc_transform_stack_3x3_u A =
|
||||
{
|
||||
+DET3(T,4,5,7),
|
||||
-DET3(T,1,2,7),
|
||||
@ -513,7 +513,7 @@ skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts,
|
||||
#endif
|
||||
|
||||
skc_transform_stack_3x3_u_copy(T,&A);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -536,7 +536,7 @@ skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts,
|
||||
|
||||
skc_transform_float_t const x3 = (skc_transform_float_t)X(quad_dst,3);
|
||||
skc_transform_float_t const y3 = (skc_transform_float_t)Y(quad_dst,3);
|
||||
|
||||
|
||||
skc_transform_float_t sx = x1 - x0;
|
||||
skc_transform_float_t shy = y1 - y0;
|
||||
|
||||
@ -547,7 +547,7 @@ skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const dy3 = -shy - dy2;
|
||||
|
||||
// if both zero then quad_dst is a parallelogram and affine
|
||||
if ((dx3 == 0.0) && (dy3 == 0.0))
|
||||
if ((dx3 == 0.0) && (dy3 == 0.0))
|
||||
{
|
||||
skc_transform_float_t const shx = x2 - x1;
|
||||
skc_transform_float_t const sy = y2 - y1;
|
||||
@ -556,7 +556,7 @@ skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts,
|
||||
sx, shx, x0,
|
||||
shy, sy, y0,
|
||||
0.0, 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
skc_transform_float_t const dx1 = x1 - x2;
|
||||
@ -600,7 +600,7 @@ skc_transform_stack_push_quad_to_quad(struct skc_transform_stack * const ts,
|
||||
if (skc_transform_stack_push_quad_to_unit(ts,quad_src) == false)
|
||||
return false;
|
||||
|
||||
if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)
|
||||
if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)
|
||||
return false;
|
||||
|
||||
union skc_transform_stack_3x3_u * const U2Q = skc_transform_stack_tos(ts);
|
||||
@ -631,21 +631,21 @@ skc_transform_stack_push_rect_to_quad(struct skc_transform_stack * const ts,
|
||||
const float y1,
|
||||
const float quad_dst[8])
|
||||
{
|
||||
if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)
|
||||
if (skc_transform_stack_push_unit_to_quad(ts,quad_dst) == false)
|
||||
return false;
|
||||
|
||||
const union skc_transform_stack_3x3_u R2U =
|
||||
const union skc_transform_stack_3x3_u R2U =
|
||||
{
|
||||
SKC_TRANSFORM_RCP((skc_transform_float_t)(x1-x0)),
|
||||
0.0f,
|
||||
SKC_TRANSFORM_RCP((skc_transform_float_t)(x1-x0)),
|
||||
0.0f,
|
||||
(skc_transform_float_t)-x0,
|
||||
|
||||
0.0f,
|
||||
0.0f,
|
||||
SKC_TRANSFORM_RCP((skc_transform_float_t)(y1-y0)),
|
||||
(skc_transform_float_t)-y0,
|
||||
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0,
|
||||
};
|
||||
|
||||
@ -682,7 +682,7 @@ skc_transform_stack_concat(struct skc_transform_stack * const ts)
|
||||
if (ts->count <= 1)
|
||||
return;
|
||||
|
||||
// get A and B
|
||||
// get A and B
|
||||
union skc_transform_stack_3x3_u * const B = skc_transform_stack_tos(ts);
|
||||
const union skc_transform_stack_3x3_u * const A = B - 1;
|
||||
|
||||
@ -702,7 +702,7 @@ skc_transform_stack_concat(struct skc_transform_stack * const ts)
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_transform_affine(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const x_pre,
|
||||
skc_transform_float_t const y_pre,
|
||||
|
@ -70,21 +70,21 @@ skc_transform_stack_top_weakref(struct skc_transform_stack * const ts);
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_drop(struct skc_transform_stack * const ts);
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_dup(struct skc_transform_stack * const ts);
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
void
|
||||
void
|
||||
skc_transform_stack_transform_affine(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const x_pre,
|
||||
skc_transform_float_t const x_pre,
|
||||
skc_transform_float_t const y_pre,
|
||||
skc_transform_float_t * const x_post,
|
||||
skc_transform_float_t * const x_post,
|
||||
skc_transform_float_t * const y_post);
|
||||
|
||||
//
|
||||
@ -93,14 +93,14 @@ skc_transform_stack_transform_affine(struct skc_transform_stack * const ts,
|
||||
|
||||
void
|
||||
skc_transform_stack_push_matrix(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const ty,
|
||||
skc_transform_float_t const w0,
|
||||
skc_transform_float_t const w1,
|
||||
skc_transform_float_t const w0,
|
||||
skc_transform_float_t const w1,
|
||||
skc_transform_float_t const w2);
|
||||
|
||||
void
|
||||
@ -108,26 +108,26 @@ skc_transform_stack_push_identity(struct skc_transform_stack * const ts);
|
||||
|
||||
void
|
||||
skc_transform_stack_push_affine(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const shy,
|
||||
skc_transform_float_t const sy,
|
||||
skc_transform_float_t const ty);
|
||||
|
||||
void
|
||||
skc_transform_stack_push_translate(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const ty);
|
||||
|
||||
void
|
||||
skc_transform_stack_push_scale(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sx,
|
||||
skc_transform_float_t const sy);
|
||||
|
||||
void
|
||||
skc_transform_stack_push_shear(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const shx,
|
||||
skc_transform_float_t const shy);
|
||||
|
||||
|
||||
@ -148,7 +148,7 @@ skc_transform_stack_push_rotate_xy2(struct skc_transform_stack * const ts,
|
||||
skc_transform_float_t const theta,
|
||||
skc_transform_float_t const cx,
|
||||
skc_transform_float_t const cy,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const tx,
|
||||
skc_transform_float_t const ty);
|
||||
|
||||
void
|
||||
|
4
third_party/vulkan/vulkan/vulkan.h
vendored
4
third_party/vulkan/vulkan/vulkan.h
vendored
@ -51,7 +51,7 @@ extern "C" {
|
||||
|
||||
|
||||
#define VK_NULL_HANDLE 0
|
||||
|
||||
|
||||
|
||||
|
||||
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
|
||||
@ -64,7 +64,7 @@ extern "C" {
|
||||
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
typedef uint32_t VkFlags;
|
||||
|
Loading…
Reference in New Issue
Block a user