diff --git a/glm/simd/common.h b/glm/simd/common.h index d6c78f18..c11338a6 100644 --- a/glm/simd/common.h +++ b/glm/simd/common.h @@ -215,7 +215,7 @@ GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, { glm_vec4 const sub0 = glm_vec4_sub(x, edge0); glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); - glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); + glm_vec4 const div0 = glm_vec4_div(sub0, sub1); glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); diff --git a/readme.md b/readme.md index 3680e1d3..665a0651 100644 --- a/readme.md +++ b/readme.md @@ -105,7 +105,7 @@ target_link_libraries(main PRIVATE glm::glm) ## Release notes -### [GLM 1.0.1](https://github.com/g-truc/glm) - 2024-XX-XX +### [GLM 1.0.1](https://github.com/g-truc/glm) - 2024-02-XX #### Improvements: - Enables only warnings as errors while building unit tests @@ -115,6 +115,7 @@ target_link_libraries(main PRIVATE glm::glm) - Fixed C++ language auto detection build, disable C++98 warnings with Clang #1235, #1231 - Fixed `GTX_color_space` missing include #1233 #1238 - Fixed `EXT_matrix_transform` `shear` implementation #1140 #1182 +- Fixed `smoothstep` SIMD implementation #1222 ### [GLM 1.0.0](https://github.com/g-truc/glm/releases/tag/1.0.0) - 2024-01-24 #### Features: diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 6a58e1f3..99eaa879 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -657,6 +657,42 @@ namespace step_ } }//namespace step_ +namespace smoothstep_ +{ + static int test() + { + int Error = 0; + + float const Edge = 2.0f; + + // scalar + { + float const A = glm::smoothstep(0.0f, Edge, 1.0f); + Error += glm::equal(A, 0.5f, glm::epsilon()) ? 0 : 1; + + float const B = glm::smoothstep(0.0f, Edge, 1.0f); + Error += glm::equal(B, 0.5f, glm::epsilon()) ? 0 : 1; + + float const C = glm::smoothstep(0.0f, Edge, 1.0f); + Error += glm::equal(C, 0.5f, glm::epsilon()) ? 0 : 1; + } + + // vec4 and float + { + glm::vec4 Result = glm::smoothstep(0.0f, Edge, glm::vec4(1.0f)); + Error += glm::all(glm::equal(Result, glm::vec4(0.5f), glm::epsilon())) ? 0 : 1; + } + + // vec4 and vec4 + { + glm::vec4 Result = glm::smoothstep(glm::vec4(0.0f), glm::vec4(Edge), glm::vec4(1.0f)); + Error += glm::all(glm::equal(Result, glm::vec4(0.5f), glm::epsilon())) ? 0 : 1; + } + + return Error; + } +}//namespace smoothstep_ + namespace round_ { static int test() @@ -1367,6 +1403,7 @@ int main() Error += floatBitsToUint::test(); Error += mix_::test(); Error += step_::test(); + Error += smoothstep_::test(); Error += max_::test(); Error += min_::test(); Error += clamp_::test();