UPSAMPLE(3clc)
β¨ 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
π AUTHORS
The Khronos Group
π COPYRIGHT
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
- 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
- ubuntu jammy: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- ubuntu noble: opencl-1.2-man-doc 1.0~svn33624-5 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms