16 template<
typename From,
typename To, To (*ConversionF)(const From &)>
19 static const CPPType &from_type = CPPType::get<From>();
21 static const std::string conversion_name = from_type.
name() +
" to " +
to_type.name();
24 conversion_name.c_str(),
27 [](
const From &
a) {
return ConversionF(
a); },
29 static auto convert_single_to_initialized = [](
const void *
src,
void *dst) {
30 *(To *)dst = ConversionF(*(
const From *)
src);
32 static auto convert_single_to_uninitialized = [](
const void *
src,
void *dst) {
33 new (dst) To(ConversionF(*(
const From *)
src));
35 conversions.
add(fn::MFDataType::ForSingle<From>(),
36 fn::MFDataType::ForSingle<To>(),
38 convert_single_to_initialized,
39 convert_single_to_uninitialized);
78 return (
a.x +
a.y) / 2.0f;
111 return (
a.x +
a.y +
a.z) / 3.0f;
115 return (
int)((
a.x +
a.y +
a.z) / 3.0f);
166 return static_cast<int>(
a);
249 return a.r > 0 ||
a.g > 0 ||
a.b > 0;
280 add_implicit_conversion<float, float2, float_to_float2>(conversions);
281 add_implicit_conversion<float, float3, float_to_float3>(conversions);
282 add_implicit_conversion<float, int32_t, float_to_int>(conversions);
283 add_implicit_conversion<float, bool, float_to_bool>(conversions);
284 add_implicit_conversion<float, int8_t, float_to_int8>(conversions);
285 add_implicit_conversion<float, ColorGeometry4f, float_to_color>(conversions);
286 add_implicit_conversion<float, ColorGeometry4b, float_to_byte_color>(conversions);
288 add_implicit_conversion<float2, float3, float2_to_float3>(conversions);
289 add_implicit_conversion<float2, float, float2_to_float>(conversions);
290 add_implicit_conversion<float2, int32_t, float2_to_int>(conversions);
291 add_implicit_conversion<float2, bool, float2_to_bool>(conversions);
292 add_implicit_conversion<float2, int8_t, float2_to_int8>(conversions);
293 add_implicit_conversion<float2, ColorGeometry4f, float2_to_color>(conversions);
294 add_implicit_conversion<float2, ColorGeometry4b, float2_to_byte_color>(conversions);
296 add_implicit_conversion<float3, bool, float3_to_bool>(conversions);
297 add_implicit_conversion<float3, int8_t, float3_to_int8>(conversions);
298 add_implicit_conversion<float3, float, float3_to_float>(conversions);
299 add_implicit_conversion<float3, int32_t, float3_to_int>(conversions);
300 add_implicit_conversion<float3, float2, float3_to_float2>(conversions);
301 add_implicit_conversion<float3, ColorGeometry4f, float3_to_color>(conversions);
302 add_implicit_conversion<float3, ColorGeometry4b, float3_to_byte_color>(conversions);
304 add_implicit_conversion<int32_t, bool, int_to_bool>(conversions);
305 add_implicit_conversion<int32_t, int8_t, int_to_int8>(conversions);
306 add_implicit_conversion<int32_t, float, int_to_float>(conversions);
307 add_implicit_conversion<int32_t, float2, int_to_float2>(conversions);
308 add_implicit_conversion<int32_t, float3, int_to_float3>(conversions);
309 add_implicit_conversion<int32_t, ColorGeometry4f, int_to_color>(conversions);
310 add_implicit_conversion<int32_t, ColorGeometry4b, int_to_byte_color>(conversions);
312 add_implicit_conversion<int8_t, bool, int8_to_bool>(conversions);
313 add_implicit_conversion<int8_t, int32_t, int8_to_int>(conversions);
314 add_implicit_conversion<int8_t, float, int8_to_float>(conversions);
315 add_implicit_conversion<int8_t, float2, int8_to_float2>(conversions);
316 add_implicit_conversion<int8_t, float3, int8_to_float3>(conversions);
317 add_implicit_conversion<int8_t, ColorGeometry4f, int8_to_color>(conversions);
318 add_implicit_conversion<int8_t, ColorGeometry4b, int8_to_byte_color>(conversions);
320 add_implicit_conversion<bool, float, bool_to_float>(conversions);
321 add_implicit_conversion<bool, int8_t, bool_to_int8>(conversions);
322 add_implicit_conversion<bool, int32_t, bool_to_int>(conversions);
323 add_implicit_conversion<bool, float2, bool_to_float2>(conversions);
324 add_implicit_conversion<bool, float3, bool_to_float3>(conversions);
325 add_implicit_conversion<bool, ColorGeometry4f, bool_to_color>(conversions);
326 add_implicit_conversion<bool, ColorGeometry4b, bool_to_byte_color>(conversions);
328 add_implicit_conversion<ColorGeometry4f, bool, color_to_bool>(conversions);
329 add_implicit_conversion<ColorGeometry4f, int8_t, color_to_int8>(conversions);
330 add_implicit_conversion<ColorGeometry4f, float, color_to_float>(conversions);
331 add_implicit_conversion<ColorGeometry4f, int32_t, color_to_int>(conversions);
332 add_implicit_conversion<ColorGeometry4f, float2, color_to_float2>(conversions);
333 add_implicit_conversion<ColorGeometry4f, float3, color_to_float3>(conversions);
334 add_implicit_conversion<ColorGeometry4f, ColorGeometry4b, color_to_byte_color>(conversions);
336 add_implicit_conversion<ColorGeometry4b, bool, byte_color_to_bool>(conversions);
337 add_implicit_conversion<ColorGeometry4b, int8_t, byte_color_to_int8>(conversions);
338 add_implicit_conversion<ColorGeometry4b, float, byte_color_to_float>(conversions);
339 add_implicit_conversion<ColorGeometry4b, int32_t, byte_color_to_int>(conversions);
340 add_implicit_conversion<ColorGeometry4b, float2, byte_color_to_float2>(conversions);
341 add_implicit_conversion<ColorGeometry4b, float3, byte_color_to_float3>(conversions);
342 add_implicit_conversion<ColorGeometry4b, ColorGeometry4f, byte_color_to_color>(conversions);
355 const void *from_value,
356 void *to_value)
const
367 functions->convert_single_to_uninitialized(from_value, to_value);
379 params.add_readonly_single_input(from_span);
381 params.add_uninitialized_single_output(to_span);
402 void get(
const int64_t index,
void *r_value)
const override
410 void get_to_uninitialized(
const int64_t index,
void *r_value)
const override
431 varray_(
std::move(varray)),
432 from_type_(varray_.
type())
439 void get(
const int64_t index,
void *r_value)
const override
447 void get_to_uninitialized(
const int64_t index,
void *r_value)
const override
455 void set_by_move(
const int64_t index,
void *value)
override
472 return GVArray::For<GVArray_For_ConvertedGVArray>(std::move(varray),
to_type, *
this);
485 return GVMutableArray::For<GVMutableArray_For_ConvertedGVMutableArray>(
486 std::move(varray),
to_type, *
this);
501 return {std::make_shared<fn::FieldOperation>(fn,
Vector<fn::GField>{std::move(field)})};
#define BUFFER_FOR_CPP_TYPE_VALUE(type, variable_name)
MINLINE float rgb_to_grayscale(const float rgb[3])
StringRefNull name() const
void copy_construct(const void *src, void *dst) const
void destruct(void *ptr) const
ColorSceneLinearByteEncoded4b< Alpha > encode() const
const CPPType & type() const
const CPPType & type() const
const CPPType & type() const
void get(int64_t index, void *r_value) const
const CPPType & type() const
void set_by_relocate(int64_t index, void *value)
void convert_to_uninitialized(const CPPType &from_type, const CPPType &to_type, const void *from_value, void *to_value) const
const ConversionFunctions * get_conversion_functions(fn::MFDataType from, fn::MFDataType to) const
void convert_to_initialized_n(GSpan from_span, GMutableSpan to_span) const
void add(fn::MFDataType from_type, fn::MFDataType to_type, const fn::MultiFunction &fn, void(*convert_single_to_initialized)(const void *src, void *dst), void(*convert_single_to_uninitialized)(const void *src, void *dst))
bool is_convertible(const CPPType &from_type, const CPPType &to_type) const
const fn::MultiFunction * get_conversion_multi_function(fn::MFDataType from, fn::MFDataType to) const
GVArray try_convert(GVArray varray, const CPPType &to_type) const
GVArray_For_ConvertedGVArray(GVArray varray, const CPPType &to_type, const DataTypeConversions &conversions)
GVMutableArray_For_ConvertedGVMutableArray(GVMutableArray varray, const CPPType &to_type, const DataTypeConversions &conversions)
const CPPType & cpp_type() const
static MFDataType ForSingle()
void call_auto(IndexMask mask, MFParams params, MFContext context) const
SyclQueue void void * src
ccl_global float * buffer
static float3 color_to_float3(const ColorGeometry4f &a)
static float bool_to_float(const bool &a)
static ColorGeometry4b float_to_byte_color(const float &a)
static ColorGeometry4f float_to_color(const float &a)
static ColorGeometry4f byte_color_to_color(const ColorGeometry4b &a)
static int8_t float_to_int8(const float &a)
static float color_to_float(const ColorGeometry4f &a)
static float2 float_to_float2(const float &a)
static ColorGeometry4b int_to_byte_color(const int32_t &a)
static bool float_to_bool(const float &a)
static void add_implicit_conversion(DataTypeConversions &conversions)
static int8_t float2_to_int8(const float2 &a)
const DataTypeConversions & get_implicit_type_conversions()
static float float3_to_float(const float3 &a)
static float3 float2_to_float3(const float2 &a)
static float float2_to_float(const float2 &a)
static float2 bool_to_float2(const bool &a)
static int8_t bool_to_int8(const bool &a)
static ColorGeometry4b float3_to_byte_color(const float3 &a)
static float3 int8_to_float3(const int8_t &a)
static int32_t color_to_int(const ColorGeometry4f &a)
static float3 float_to_float3(const float &a)
static ColorGeometry4f float3_to_color(const float3 &a)
static int float2_to_int(const float2 &a)
static bool byte_color_to_bool(const ColorGeometry4b &a)
static bool float2_to_bool(const float2 &a)
static bool color_to_bool(const ColorGeometry4f &a)
static ColorGeometry4f float2_to_color(const float2 &a)
static float2 int_to_float2(const int32_t &a)
static float int8_to_float(const int8_t &a)
static DataTypeConversions create_implicit_conversions()
static bool float3_to_bool(const float3 &a)
static float2 int8_to_float2(const int8_t &a)
static bool int8_to_bool(const int8_t &a)
static float3 int_to_float3(const int32_t &a)
static float byte_color_to_float(const ColorGeometry4b &a)
static ColorGeometry4b float2_to_byte_color(const float2 &a)
static int32_t byte_color_to_int(const ColorGeometry4b &a)
static int32_t bool_to_int(const bool &a)
static int float3_to_int(const float3 &a)
static float int_to_float(const int32_t &a)
static ColorGeometry4f int_to_color(const int32_t &a)
static ColorGeometry4b bool_to_byte_color(const bool &a)
static int32_t float_to_int(const float &a)
static bool int_to_bool(const int32_t &a)
static ColorGeometry4f int8_to_color(const int8_t &a)
static int8_t byte_color_to_int8(const ColorGeometry4b &a)
static float2 float3_to_float2(const float3 &a)
static int8_t int_to_int8(const int32_t &a)
static float2 byte_color_to_float2(const ColorGeometry4b &a)
static int8_t float3_to_int8(const float3 &a)
static ColorGeometry4b int8_to_byte_color(const int8_t &a)
static ColorGeometry4b color_to_byte_color(const ColorGeometry4f &a)
static float2 color_to_float2(const ColorGeometry4f &a)
static int int8_to_int(const int8_t &a)
static int8_t color_to_int8(const ColorGeometry4f &a)
static ColorGeometry4f bool_to_color(const bool &a)
static float3 byte_color_to_float3(const ColorGeometry4b &a)
static float3 bool_to_float3(const bool &a)
static Type to_type(const eGPUType type)
T clamp(const T &a, const T &min, const T &max)
vec_base< float, 3 > float3
vec_base< float, 2 > float2
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
void(* convert_single_to_uninitialized)(const void *src, void *dst)
void(* convert_single_to_initialized)(const void *src, void *dst)