Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Apr 19, 2019 9:52 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 3 posts ] 
Author Message
PostPosted: Thu May 07, 2015 7:17 pm 
Offline
User avatar

Joined: Fri Apr 17, 2015 9:44 am
Posts: 28
Всем привет, ломаю голову над одной задачей, нужен совет гуру 8)
Дан массив данных canvas.data (RGBA) размера canvas.size выровненный по 16 байтам и таблица LUT из 256 байт-элементов
Необходимо максимально быстро заменить значения RGB (A не имеет значения) данными из таблицы по принципу
Code:
NewR := Table[R];
NewG := Table[G];
NewB := Table[B];

Пока в голову пришла только связка xlatb и ror
Code:
Canvas.ApplyLUT:
   mov   ebx, LUT
   mov   edx, [canvas.data]
   mov   ecx, [canvas.size]
   shr   ecx, 2  ; ecx = size / 4
@@:   
   mov   eax, [edx]
   xlatb
   ror   eax, 8
   xlatb
   ror   eax, 8
   xlatb
   ror   eax, 16
   mov   [edx], eax
   add   edx, 4
   dec   ecx
   jnz   @b

   ret

Может кто сталкивался? Интересны любые идеи, была мысль как-то задействовать A-компоненту, но не придумал как :)


Top
   
PostPosted: Thu May 07, 2015 8:40 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1619
xlat тормозной. Я бы делала банально:
Code:
Canvas.ApplyLUT:
   mov   esi, [canvas.data]
   mov   ecx, [canvas.size]
@@:   
   movzx eax, byte [esi]
   movzx ebx, byte [esi+1]
   movzx edx, byte [esi+2]
   mov   al, [LUT+eax]
   mov   bl, [LUT+ebx]
   mov   dl, [LUT+edx]
   mov   [esi], al
   mov   [esi+1], bl
   mov   [esi+2], dl
   add   esi, 4
   sub   ecx, 4
   jnz   @b

   ret

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri May 08, 2015 6:07 am 
Offline
User avatar

Joined: Fri Apr 17, 2015 9:44 am
Posts: 28
CleverMouse,
Действительно, +20%! Благодарю.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 3 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited