1
0

applesimd.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (c), Recep Aslantas.
  3. *
  4. * MIT License (MIT), http://opensource.org/licenses/MIT
  5. * Full license can be found in the LICENSE file
  6. */
  7. #ifndef cglm_applesimd_h
  8. #define cglm_applesimd_h
  9. #if defined(__APPLE__) \
  10. && defined(SIMD_COMPILER_HAS_REQUIRED_FEATURES) \
  11. && defined(SIMD_BASE) \
  12. && defined(SIMD_TYPES) \
  13. && defined(SIMD_VECTOR_TYPES)
  14. #include "common.h"
  15. /*!
  16. * @brief converts mat4 to Apple's simd type simd_float4x4
  17. * @return simd_float4x4
  18. */
  19. CGLM_INLINE
  20. simd_float4x4
  21. glm_mat4_applesimd(mat4 m) {
  22. simd_float4x4 t;
  23. t.columns[0][0] = m[0][0];
  24. t.columns[0][1] = m[0][1];
  25. t.columns[0][2] = m[0][2];
  26. t.columns[0][3] = m[0][3];
  27. t.columns[1][0] = m[1][0];
  28. t.columns[1][1] = m[1][1];
  29. t.columns[1][2] = m[1][2];
  30. t.columns[1][3] = m[1][3];
  31. t.columns[2][0] = m[2][0];
  32. t.columns[2][1] = m[2][1];
  33. t.columns[2][2] = m[2][2];
  34. t.columns[2][3] = m[2][3];
  35. t.columns[3][0] = m[3][0];
  36. t.columns[3][1] = m[3][1];
  37. t.columns[3][2] = m[3][2];
  38. t.columns[3][3] = m[3][3];
  39. return t;
  40. }
  41. /*!
  42. * @brief converts mat3 to Apple's simd type simd_float3x3
  43. * @return simd_float3x3
  44. */
  45. CGLM_INLINE
  46. simd_float3x3
  47. glm_mat3_applesimd(mat3 m) {
  48. simd_float3x3 t;
  49. t.columns[0][0] = m[0][0];
  50. t.columns[0][1] = m[0][1];
  51. t.columns[0][2] = m[0][2];
  52. t.columns[1][0] = m[1][0];
  53. t.columns[1][1] = m[1][1];
  54. t.columns[1][2] = m[1][2];
  55. t.columns[2][0] = m[2][0];
  56. t.columns[2][1] = m[2][1];
  57. t.columns[2][2] = m[2][2];
  58. return t;
  59. }
  60. /*!
  61. * @brief converts vec4 to Apple's simd type simd_float4
  62. * @return simd_float4
  63. */
  64. CGLM_INLINE
  65. simd_float4
  66. glm_vec4_applesimd(vec4 v) {
  67. return (simd_float4){v[0], v[1], v[2], v[3]};
  68. }
  69. /*!
  70. * @brief converts vec3 to Apple's simd type simd_float3
  71. * @return v
  72. */
  73. CGLM_INLINE
  74. simd_float3
  75. glm_vec3_applesimd(vec3 v) {
  76. return (simd_float3){v[0], v[1], v[2]};
  77. }
  78. #endif
  79. #endif /* cglm_applesimd_h */