Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт апр 27, 2017 10:16 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 3 сообщения ] 
Автор Сообщение
 Заголовок сообщения: Быстрая выборка из LUT
СообщениеДобавлено: Чт май 07, 2015 7:17 pm 
Не в сети
Аватара пользователя

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

Пока в голову пришла только связка xlatb и ror
Код:
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-компоненту, но не придумал как :)


Вернуться к началу
 Заголовок сообщения: Re: Быстрая выборка из LUT
СообщениеДобавлено: Чт май 07, 2015 8:40 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
xlat тормозной. Я бы делала банально:
Код:
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

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


Вернуться к началу
 Заголовок сообщения: Re: Быстрая выборка из LUT
СообщениеДобавлено: Пт май 08, 2015 6:07 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт апр 17, 2015 9:44 am
Сообщения: 29
CleverMouse,
Действительно, +20%! Благодарю.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 3 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB