1/*========================== begin_copyright_notice ============================ 2 3Copyright (C) 2017-2021 Intel Corporation 4 5SPDX-License-Identifier: MIT 6 7============================= end_copyright_notice ===========================*/ 8 9#include "../include/BiF_Definitions.cl" 10#include "../../Headers/spirv.h" 11 12INLINE float SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _f32, )(float p ){ 13 return SPIRV_OCL_BUILTIN(normalize, _f32, )(p); 14} 15 16INLINE float2 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v2f32, )(float2 p ){ 17 float l2 = SPIRV_BUILTIN(Dot, _v2f32_v2f32, )( p, p ); 18 float2 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );; 19 return l2 == 0.0f ? p : n; 20} 21 22INLINE float3 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v3f32, )(float3 p ){ 23 float l2 = SPIRV_BUILTIN(Dot, _v3f32_v3f32, )( p, p ); 24 float3 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );; 25 return l2 == 0.0f ? p : n; 26} 27 28INLINE float4 SPIRV_OVERLOADABLE SPIRV_OCL_BUILTIN(fast_normalize, _v4f32, )(float4 p ){ 29 float l2 = SPIRV_BUILTIN(Dot, _v4f32_v4f32, )( p, p ); 30 float4 n = p * SPIRV_OCL_BUILTIN(native_rsqrt, _f32, )( l2 );; 31 return l2 == 0.0f ? p : n; 32} 33