UPSAMPLE(3clc)

πŸ“¦
version 1.0~svn33624 Β· 3 versions
, in ubuntu jammy, ubuntu noble

✨ UPSAMPLE β€” upsample(3clc) ✨

πŸ’– NAME

okay bestie, so upsample is that girl. she takes a high half and a low half and fuses them into one glow-up value:

result[i] = ((gentype)hi[i] << 8|16|32) | lo[i]

and here's the whole friend group of prototypes, no cap:

short upsample(char hi, uchar lo);

ushort upsample(uchar hi, uchar lo);

shortn upsample(charn hi, ucharn lo);

ushortn upsample(ucharn hi, ucharn lo);

int upsample(short hi, ushort lo);

uint upsample(ushort hi, ushort lo);

intn upsample(shortn hi, ushortn lo);

uintn upsample(ushortn hi, ushortn lo);

long upsample(int hi, uint lo);

ulong upsample(uint hi, uint lo);

longn upsample(intn hi, uintn lo);

ulongn upsample(uintn hi, uintn lo);

🌸 DESCRIPTION

so literally, per component, this is the math she's serving:

result[i] = ((short)hi[i] << 8) | lo[i]
result[i] = ((ushort)hi[i] << 8) | lo[i]

result[i] = ((int)hi[i] << 16) | lo[i]
result[i] = ((uint)hi[i] << 16) | lo[i]

result[i] = ((long)hi[i] << 32) | lo[i]
result[i] = ((ulong)hi[i] << 32) | lo[i]

shift the hi side up, OR in the lo side, boom, you've got a bigger type. iconic behavior fr fr πŸ’…


πŸ¦‹ NOTES

built-in integer functions take scalar or vector arguments, periodt. the vector versions of the integer functions operate component-wise, and the description is per component. okay so one component at a time, she's not doing anything wild, she's just doing it everywhere at once.

we use the generic type name gentype to indicate that the function can take char, char{2|3|4|8|16}, uchar, uchar{2|3|4|8|16}, short, short{2|3|4|8|16}, ushort, ushort{2|3|4|8|16}, int, int{2|3|4|8|16}, uint, uint{2|3|4|8|16}, long, long{2|3|4|8|16}, ulong, or ulong{2|3|4|8|16} as the type for the arguments. we use the generic type name ugentype to refer to unsigned versions of gentype. for example, if gentype is char4, ugentype is uchar4. πŸ’œ

we also use the generic type name sgentype to indicate that the function can take a scalar data type i.e. char, uchar, short, ushort, int, uint, long, or ulong as the type for the arguments. for built-in integer functions that take gentype and sgentype arguments, the gentype argument must be a vector or scalar version of the sgentype argument. for example, if sgentype is uchar, gentype must be uchar or uchar{2|3|4|8|16}. for vector versions, sgentype is implicitly widened to gentype as described in section 6.3.a of the OpenCL specification.

🫢 lowkey important: for any specific use of a function, the actual type has to be the same for all arguments and the return type unless otherwise specified. no mixing, no matching, she's not chaotic like that.

🌈 SPECIFICATION

OpenCL Specification[1]


πŸŽ€ SEE ALSO

integerFunctions(3clc)


πŸ‘‘ AUTHORS

The Khronos Group


Copyright Β© 2007-2011 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Materials.

⭐ NOTES

  1. OpenCL Specification β€” page 256, section 6.12.3 - Integer Functions

and that's the whole page, bestie πŸ’– this was the UPSAMPLE(3clc) entry, straight from The Khronos Group, dated 01/14/2021 β€” slay, stay shifting bits, mwah πŸ§šβ€β™€οΈβœ¨

πŸ“¦ where this page comes from