Войти
Вело-изобретателиФорумSR2D - софтовый 2D движок

2D движок SR2D. Софтверный движок для работы с 2D графикой на VB6, vb.net, C#. (5 стр)

Страницы: 14 5 6 745 Следующая »
#60
12:45, 15 окт. 2010

igo
> тама герцев навалом чтоль?
Не, это вряд-ли. Ноут прошлого года, из средних.
Впрочем, частоту его точно не знаю.

#61
18:02, 15 окт. 2010

мне иногда кажется шо сами производители потеряли нить повествования в области того - чего и как надо оптимизировать под их процессоры)))... типа - процесс вышел из под контроля...

#62
(Правка: 22:34) 22:31, 15 окт. 2010

igo
Ну да, как-то тут нечётко всё.
Помню, тестировал компиляторы разные, по вопросу быстродействия генерируемого ими кода. Беру какой-нибудь простой алгоритм, тестирую на одном процессоре - всё вроде ясно, какой компилятор быстрее. Тестирую на втором - уже не так ясно. Тестирую ещё на трёх - непонятно совсем выходит и неизвестно, какой выбрать.
Это один алгоритм. А потом начинаю тестировать разные алгоритмы с разными компиляторами на разных процессорах - и тут уже чистый рандом, хоть казино открывай. =)

А по движкам нашим вот у меня мысль какая.
Возьмётся кто-нибудь, кто читает эту тему прогнать наши тесты на старых процессорах?

На современных cpu в обычной игре и так будет скорости хватать, быстродействие движка важнее на чём-то маломощном и древнем.
Для этих добрых людей копирую сюда ссылки:
Тест на движке Майкла: http://tuapse-mikle.narod.ru/SR2D/SpeedTest.zip
Тест на моём: http://sb-games.com/wp-content/uploads/SPEEDT.ZIP
Тест igo: http://www.nemehanika.ru/cg/download/test.zip

#63
9:16, 16 окт. 2010

тока надо иметь в виду, шо  мой работает под sse2... т.е. минимум на пне4 и его обрезках и алтлоне64 и его обрезках... в принципе если возникнет необходимость я его могу и до просто sse - подвинуть... это всего в нескольких функциях одну команду sse2 заменить сочетанием команд sse...

вот че мне интересно, так это как они на нетбуках работают... там же вроде совместимость полная - но далеко не такой быстрый "проц" как взрослые лошадки...

#64
(Правка: 20:33) 15:35, 22 окт. 2010

нету никаких недружилок с интелем, в + к тому, тест: http//www.nemehanika.ru/show/test-as-ap.zip
хде адитивно-субтрактивные спрайты бегают на скромном ноутном Core 2 Duo 1.2Ггц очень шустро...

300 с хвостом, 60 с хвостиком, 7...

а значит где-то я намудрил в коде с альфой... Mikle - не мог бы ты мне на пальцах рассказать как твой код работает? что б я mmx - не читал (я его ваще никады ниучил), а сразу на sse - переложил...

типа, вот как у меня работает:

поскольку тама отрицательные цифры появляются, пришлось перепаковывать данные из 8 в 16 бит... т.е. на пример для Red:
Rresult = R1 + (R2 - R1) * Alpha
и вот это R2-R1 - портит прекрасную картину 8-ми - до 16 бит...

а значит - куча операций перепаковки данных...

а  у  тебя как?

#65
(Правка: 23:04) 22:58, 22 окт. 2010
    mov edi, dest ; указатель на приёмник 
    mov esi, src ; указатель на источник
    sub esi, edi

    shl w, 2
    mov ebx, w
    shl wd, 2
    sub wd, ebx
    shl ws, 2
    sub ws, ebx
    mov eax, wd
    sub ws, eax

    mov edx, h
    ; обнуляем регистр mm2
    pxor mm2, mm2

    ; Загружаем в mm3 0x80808080
    mov eax, 0x80808080
    movd mm3, eax
    ; Распаковка в четыре 16-битный слова
    punpcklbw mm3, mm2
    ; суммируем mm3 с самим собой
    paddusw mm3, mm3
    ; теперь в mm3 четыре 16-битный слова "256"

lab0:
    mov ecx, ebx
    add ecx, edi

lab1:
    ; загружаем в mm0 значение источника
    movd mm0, [edi+esi]
    ; распаковка
    punpcklbw mm0, mm2
    ; загружаем во все слова регистра mm4 значение четвёртого слова mm0
    pshufw mm4, mm0, 0xFF

    ; загружаем в mm1 значение приёмника
    movd mm1, [edi]
    ; распаковка
    punpcklbw mm1, mm2

    ; копируем регистр mm3 в регистр mm5
    movq mm5, mm3
    ; вычитаем из mm5 mm4
    psubusw mm5, mm4

    ; умножаем значение mm0 (источник) на mm4
    pmullw mm0, mm4
    ; умножаем значение mm1 (приёмник) на mm5
    pmullw mm1, mm5

    ; суммируем mm0 и mm1
    paddusw mm0, mm1

    ; сдвигаем полученное значение вправо на 8 бит (делим на 256)
    psrlw mm0, 8
    ; упаковка слов в байты
    packuswb mm0, mm0
    ; записываем результат в приёмник
    movd [edi], mm0

    add edi, 4
    cmp edi, ecx
    jne lab1

    add esi, ws
    add edi, wd
    dec edx
    jne lab0
    ; восстанавливаем работоспособность сопроцессора
    emms
Всё, что касается MMX, прокоментировал. Если ещё что-то неясно - спрашивай.
У меня тоже есть распаковка-запаковка, но никаких отрицательных величин, не пойму, что у тебя за формула. Для того же красного:
RDest=(RDest*(256-ASrc)+RSrc*ASrc)/256
#66
(Правка: 2:35) 2:23, 23 окт. 2010

не... ну она нормальная формула... типа прямая... гольная математика... тока тама у меня Alpha интерпретирована - так как это позволяет сделать sse...
а у тебя формул - супер, но для mmx - странный... операций же вроде больше - на одну(если моей -  /256 - прикрутить)... а зачем? если все равно - переполнение 8-ми бит... и опять надо 16-ть...

однако!!!... твой формул нагло намекает на возможность обойтись 8-мью битами...
там же, в sse - есть типа относительное умножение... т.е. когда 0-255 трактуется как 0 - 100% - возможность чего, ваще то - очень логична для мультимедиа операций)))... т.е. это такое a*b, шо оно сразу a*b/256

и тогда... RDest=RDest*(256-ASrc)+RSrc*ASrc

пасиба огромное!!!, интуиций меня не обманул...
прям чувствовал, шо ты мне формулу подсыпишь нужную...ту, до которой я - не догадался))...

а вот на mmx... -  наверно всеж RDest = (RDest + (RSrc - RDest) * ASrc) / 256 - будет на отсутствие одной лишней операции - быстрее...

#67
(Правка: 4:04) 3:55, 23 окт. 2010

упс... возможно - заглючил... чет не нахожу в sse - такого умножения... размечтался... но, что-то там такого сорта есть - вспомнить бы что...

#68
(Правка: 9:17) 9:13, 23 окт. 2010

igo
> RDest = (RDest + (RSrc - RDest) * ASrc) / 256
Не правильно, правильно так:

RDest = (RDest * 256 + (RSrc - RDest) * ASrc) / 256
Но уже операций столько же.
igo
> 0-255 трактуется как 0 - 100%
Это в шейдерах так.
#69
(Правка: 9:44) 9:38, 23 окт. 2010

не дураки... эти шейдеры)))...

да не... я там скобки нафига то... так оно всегда было:

RDest = RDest + (RSrc - RDest) * ASrc / 256 - 4 операции

а теперь твою(она мне надежды на 8 бит почему то подаёт пока) формул - чуть правильней запишем))):

RDest = (RDest * (255 - ASrc) + RSrc * ASrc) / 255 - ведь ASrc никады = 256 - не бывает...

т.е. я понимаю почему /256 - потому шо это >> 8, но как ни крути - ошибка рассчетов, мелкая конечно:

при ASrc = 0 - ее нету, при ASrc = 255 - она максимальна... шо удобно... RDest - не портится, если ASrc = 0 - это очень разумно...

#70
10:33, 23 окт. 2010

igo
> там скобки нафига то...
Это другое дело.
igo
> при ASrc = 0 - ее нету, при ASrc = 255 - она максимальна... шо удобно... RDest
> - не портится, если ASrc = 0 - это очень разумно...
Я тоже из этого соображения исходил. Если бы было не 16 бит, а хотя бы 24, можно было бы умножить на 257 и сдвинуть на 16. Как с битами в SSE?

#71
(Правка: 11:06) 10:43, 23 окт. 2010

последний вопрос задай понятней... а то у меня сейчас крыша подъезжает... читаю собст. код не могу понять почему в промежутке (dest - source) * alpha - переполнения не получается, все работает - однако например: -255 * 255 - это сразу переполнямссс... как sse - с этим справляется?... я даже не обратил внимания на такую хрень - когда делал...
то, шо работает все правильно - хорошо, но мне то хочется - понимать)))... что б этим осознанно воспользоваться...

и кстати вся арифметика фактически - mmx - просто его широкая sse версия - с xmm регистрами, то бишь разницы - никакой...

#72
17:33, 23 окт. 2010

igo
> последний вопрос задай понятней... а то у меня сейчас крыша подъезжает
Я хотел спросить в какую разрядность распаковывает SSE, исходя из этого:
> -255 * 255 - это сразу переполнямссс
понял, что тоже 16 бит.
Но не понятно, если числа со знаком, всё равно должно переполняться например это:
> RSrc * ASrc
если > 32767...

#73
10:47, 24 окт. 2010

должно, но работает все корректно... - бред какой-то)))...
конечно 16... 24 - не могет быть в принципе - не соответсвует периоду целого регистра...
32 - вместо них за все ответят - как раз 4-ре в 128 помещается...

#74
17:27, 21 фев. 2011

Mikle, а почему вы решили сделать именно softwar'ный движёк?

Страницы: 14 5 6 745 Следующая »
Вело-изобретателиФорумSR2D - софтовый 2D движок