freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] gsoc-anurag-2022 e876d01ea 1/3: Start fixed point migration


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2022 e876d01ea 1/3: Start fixed point migration
Date: Mon, 3 Oct 2022 17:45:43 -0400 (EDT)

branch: gsoc-anurag-2022
commit e876d01eae9fb848e0a77d2651946aea4bd8a68e
Author: Anurag Thakur <anurag105csec21@bpitindia.edu.in>
Commit: Anurag Thakur <anurag105csec21@bpitindia.edu.in>

    Start fixed point migration
---
 src/dense/ftdense.c | 70 ++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 53 insertions(+), 17 deletions(-)

diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index 4b0a20b28..e6492f633 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -374,27 +374,63 @@ dense_render_glyph( dense_worker* worker, const 
FT_Bitmap* target )
   unsigned char* dest     = target->buffer;
   unsigned char* dest_end = target->buffer + worker->m_w * worker->m_h;
 
-  __m128 offset = _mm_setzero_ps();
-  __m128i mask = _mm_set1_epi32(0x0c080400);
-  __m128 sign_mask = _mm_set1_ps(-0.f);
-  for (int i = 0; i < worker->m_h*worker->m_w; i += 4) {
-    __m128 x = _mm_load_ps(&source[i]);
-    x = _mm_add_ps(x, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(x), 
4)));
-    x = _mm_add_ps(x, _mm_shuffle_ps(_mm_setzero_ps(), x, 0x40));
-    x = _mm_add_ps(x, offset);
-    __m128 y = _mm_andnot_ps(sign_mask, x);  // fabs(x)
-    y = _mm_min_ps(y, _mm_set1_ps(1.0f));
-    y = _mm_mul_ps(y, _mm_set1_ps(255.0f));
-    __m128i z = _mm_cvtps_epi32(y);
-    z = _mm_shuffle_epi8(z, mask);
-    _mm_store_ss((float *)&dest[i], (__m128)z);
-    offset = _mm_shuffle_ps(x, x, _MM_SHUFFLE(3, 3, 3, 3));
+  // __m128 offset = _mm_setzero_ps();
+  // __m128i mask = _mm_set1_epi32(0x0c080400);
+  // __m128 sign_mask = _mm_set1_ps(-0.f);
+  // for (int i = 0; i < worker->m_h*worker->m_w; i += 4) {
+  //   __m128 x = _mm_load_ps(&source[i]);
+  //   x = _mm_add_ps(x, _mm_castsi128_ps(_mm_slli_si128(_mm_castps_si128(x), 
4)));
+  //   x = _mm_add_ps(x, _mm_shuffle_ps(_mm_setzero_ps(), x, 0x40));
+  //   x = _mm_add_ps(x, offset);
+  //   __m128 y = _mm_andnot_ps(sign_mask, x);  // fabs(x)
+  //   y = _mm_min_ps(y, _mm_set1_ps(1.0f));
+  //   y = _mm_mul_ps(y, _mm_set1_ps(255.0f));
+  //   __m128i z = _mm_cvtps_epi32(y);
+  //   z = _mm_shuffle_epi8(z, mask);
+  //   _mm_store_ss((float *)&dest[i], (__m128)z);
+  //   offset = _mm_shuffle_ps(x, x, _MM_SHUFFLE(3, 3, 3, 3));
+  // }
+
+  int valnew = 0;
+  float          value    = 0.0f;
+  while ( dest < dest_end )
+  {
+    valnew += (int)(*source++ * 1048576.0f);
+
+
+    if(valnew > 10){
+      int nnew = valnew * 255;
+      nnew >>= 20;
+
+      if(nnew>255)nnew=255;
+      *dest = (unsigned char)nnew;
+    }else{
+      *dest = 0;
+    }
+
+    // value += *source++;
+    // if ( value > 0.0f )
+    // {
+    //   int n = (int)( fabs( value ) * 255.0f + 0.5f );
+    //   if ( n > 255 )
+    //     n = 255;
+    //   *dest = (unsigned char)n;
+    // }
+    // else
+    //   *dest = 0;
+    dest++;
   }
 
-  // float          value    = 0.0f;
+  // 12_20 integer
+  // int          value    = 0;
   // while ( dest < dest_end )
   // {
-  //   value += *source++;
+  //   if(*source != 0.0f){
+  //     printf("%f\n", *source);
+  //   }
+  //   value += (int) (*source++ * 1048576.0f);
+
+
   //   if ( value > 0.0f )
   //   {
   //     int n = (int)( fabs( value ) * 255.0f + 0.5f );



reply via email to

[Prev in Thread] Current Thread [Next in Thread]