Здравствуйте, PavZ, Вы писали:
H_D>>Интереса для попробуй свой подход сравнить с подходом OFFSCREEN_SURFACE + BltFaast на видеокарточке типа GeForce... H_D>>если пробовать писать руками в видеопамять на GeForce — гарантированы тормоза... а если создать OFFSCREEN_SURFACE + SYSTEM_MEMORY... то тормоза пропадают... H_D>>так что твой солюшн — не лучший...
PZ>Вот попробовал на Geforce4 c PIV-2Ггц. PZ>================================================================================== PZ>1000 Копирований из области системной памяти в primary размер обоих 640х480х16 бит PZ>---------------------------------------------------------------------------------- PZ>BltFast 2,7 cек
PZ>копирование руками (ASM) 1,1 сек. PZ>===================================================================================
забавно... у меня что на GeForce2, что на GeForce4 тормозит не по детски.... а на S3 — нормально...
... << RSDN@Home 1.1 alpha 1 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
PZ>>копирование руками (ASM) 1,1 сек. PZ>>=================================================================================== H_D>забавно... у меня что на GeForce2, что на GeForce4 тормозит не по детски.... а на S3 — нормально...
Ну да S3 в этом плане быстрее, хотя достаточно глючная карта.
Если хочешь могу прогу тест прислать. (оставь мыло ). Попробуешь какие у тебя результаты получатся,чтобы можно было сравнивать, алгоритмы все-таки тоже влияют..
PZ>>>копирование руками (ASM) 1,1 сек. PZ>>>=================================================================================== H_D>>забавно... у меня что на GeForce2, что на GeForce4 тормозит не по детски.... а на S3 — нормально...
PZ>Ну да S3 в этом плане быстрее, хотя достаточно глючная карта. PZ>Если хочешь могу прогу тест прислать. (оставь мыло ). Попробуешь какие у тебя результаты получатся,чтобы можно было сравнивать, алгоритмы все-таки тоже влияют..
да не было там алгоритма...
surface->Lock();
_asm {
push eax
push ecx
push edi
pushf
mov edi, addr
mov ecx, cnt
mov eax, 0xffffffff
cli
rep stosd
popf
pop edi
pop ecx
pop eax
};
surace->UnLock();
... << RSDN@Home 1.1 alpha 1 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, PavZ, Вы писали:
PZ>Особено учитывая что это интерфейс первой версии. Попробуй для DirectDrawSurface7 сделать, PZ>может там прокатит.
Как оказалось, прокатил DirectDraw4. Теперь осталось убедиться, что это действительно пашет на всех старых виндах... Всем большое спасибо!
P.S. Я попытался найти какие-нибудь источники, которые подтверждают, что все это хозяйство работает как минимум в 98, однако наткнулся на любопытное обсуждение: http://www.subduck.com/history/topic/832.html
Суть в том, что чуваку доказывают, что не надо юзать старые версии директ иксов, потому что это не будет работать на новых (Thats why you use DX7 SDK, which is compatible back to 98. DX3 is not compatible with newer versions of DX. So if you use DX3, it will work on 95/98 but not 2000/Me/XP. If you use DX7 your fine with 98SE/2000/Me/XP). Это так? Хотя с другой стороны, на моей XP все замечательно работает.
PZ>>Ну да S3 в этом плане быстрее, хотя достаточно глючная карта. PZ>>Если хочешь могу прогу тест прислать. (оставь мыло ). Попробуешь какие у тебя результаты получатся,чтобы можно было сравнивать, алгоритмы все-таки тоже влияют.. H_D>да не было там алгоритма... H_D>
H_D>surface->Lock();
H_D>_asm {
H_D> push eax
H_D> push ecx
H_D> push edi
H_D> pushf
H_D> mov edi, addr
H_D> mov ecx, cnt
H_D> mov eax, 0xffffffff
H_D> cli
H_D> rep stosd
H_D> popf
H_D> pop edi
H_D> pop ecx
H_D> pop eax
H_D>};
H_D>surace->UnLock();
H_D>
Я твой вариант тоже потестил ( назвал ASM Fill) ... он выполняется быстрее чем копирование.
Вот резултаты теста на 3-х компах
(1000 копирований из SYS в VID ...640x480 16 bit
===========================================================
Комп | BltFast | ASM Copy | Asm Fill
===========================================================
Piii-550
Riva TNT2 30cек. 5сек. 3сек.
Есть предположение, почему у тебя тормозит, возможно из-за того что
при заполнении некоторые точки вылезают за экран ( когда Addr>ScreenWidth но <Pitch )
т.к. на GF2 и GF4 заметил что Pitch > 1280 (640*2). И экран при помощи Asm Fill закрашивался не весь. У меня были подобные проблемы ( тормоза ) когда я вылазил за экран ( карта TNT2) , которые наблюдались не на всех компах с этой картой. Возможно зависит от версии детонатора.
Здравствуйте, PavZ, Вы писали:
PZ>Есть предположение, почему у тебя тормозит, возможно из-за того что PZ>при заполнении некоторые точки вылезают за экран ( когда Addr>ScreenWidth но <Pitch ) PZ>т.к. на GF2 и GF4 заметил что Pitch > 1280 (640*2). И экран при помощи Asm Fill закрашивался не весь. У меня были подобные проблемы ( тормоза ) когда я вылазил за экран ( карта TNT2) , которые наблюдались не на всех компах с этой картой. Возможно зависит от версии детонатора.
На самом деле, если бы ты почитал форум "Исходники" — ты бы нашел мою функцию Alpha Blend... там еще и чтения из видеопамяти есть...
так что ключ — наверное в этом...
кстати, у меня DirectDraw вполне сносно работает... а самому писать графику — я это еще под досом прошел надоело
... << RSDN@Home 1.1 alpha 1 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, PavZ, Вы писали:
PZ>>Есть предположение, почему у тебя тормозит, возможно из-за того что PZ>>при заполнении некоторые точки вылезают за экран ( когда Addr>ScreenWidth но <Pitch ) PZ>>т.к. на GF2 и GF4 заметил что Pitch > 1280 (640*2). И экран при помощи Asm Fill закрашивался не весь. У меня были подобные проблемы ( тормоза ) когда я вылазил за экран ( карта TNT2) , которые наблюдались не на всех компах с этой картой. Возможно зависит от версии детонатора.
H_D>На самом деле, если бы ты почитал форум "Исходники" — ты бы нашел мою функцию Alpha Blend... там еще и чтения из видеопамяти есть...
Ну про это речи не шло, я так понял что у тебя stosd заполняет медленнее чем BltFast.
H_D>так что ключ — наверное в этом...
Если из видяхи читать , то конечно
H_D>кстати, у меня DirectDraw вполне сносно работает... а самому писать графику — я это еще под досом прошел надоело
А чего ее писать . BltFast это разве графика ...она даже alpha blend делать не умеет. Копирование прямоугольника.
Вот так вот, вредно мощные компы делать, так все на GDI перейдут .
Я не против простоты написания, но к сожалению КПД компьютеров от этого падает. Грубо говоря то что должно работать
на P100 еле тащиться на P-IV . Получается что быстрые процы делают не для того чтобы мы больше могли сделать за то же время, а для того чтобы вместо movsd писать for x:=0 to Width do for y:=0 to Height do Mem1^:=Mem2^;