Page 17 of 17

Re: Оптимизация ядерной графики

Posted: Wed Nov 05, 2014 4:34 pm
by pascualle
CleverMouse, Mario_r4
ну у меня то более шкурные интересы, я сишник с позицией "пользователь api", заинтересован в быстром 5551 цвете из-за tengine
да и вообще, понятие "никому не нужно" -- это философия, деструктивные мысли разрушает веру, CORE TEAM ДЕЛАЕТ ВЕЛИКОЕ ДЕЛО и это не обсуждается!

Mario_r4, твоя вежливость делает тебе честь и вызывает уважение, правду говорю.

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 2:01 pm
by Mario_r4
CleverMouse wrote:Функция 65 написана неправильно, её можно существенно ускорить, чтобы она не отличалась от 73, но, видимо, никому не нужно.
Посмотрел тут в код и увидел, что процитированный Serge кусок кода относится исключительно к 24bpp режиму. Для режимов 16bpp и 32bpp сделана запись словом и двойным словом одной командой:

Code: Select all

        mov     [LFB_BASE+edx], ax

Code: Select all

        mov     [LFB_BASE+edx], eax

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 2:42 pm
by Serge
К сожалению, это не единственная проблема. Вызывать функцию на каждый пиксель накладно для CPU. Здесь проблема не столько потеря скорости, упор всё равно будет в запись, сколько лишние такты и лишние ватты.

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 2:46 pm
by Mario_r4
Serge wrote:Вызывать функцию на каждый пиксель накладно для CPU. Здесь проблема не столько потеря скорости, упор всё равно будет в запись, сколько лишние такты и лишние ватты.
Я как то не понимаю логики в словах "Вызывать функцию на каждый пиксель", ведь весь кусок изображения обрабатывается в пределах одной подпрограммы.
Spoiler:

Code: Select all

align 4
put_image_end_32:

        mov     edi, [putimg.real_sy]

; check for hardware cursor
        mov     ecx, [_display.select_cursor]
        cmp     ecx, select_cursor
        je      put_image_end_32_new
        cmp     ecx, 0
        je      put_image_end_32_old

  .new_line:
        mov     ecx, [putimg.real_sx]

  .new_x:
        push    [putimg.edi]
        mov     eax, [putimg.ebp+4]
        call    eax
        cmp     [ebp], bl
        jne     .skip

; store to LFB
        mov     [LFB_BASE+edx], eax

  .skip:
        add     edx, 4
        inc     ebp
        dec     ecx
        jnz     .new_x

        add     esi, [putimg.line_increment]
        add     edx, [putimg.screen_newline]
        add     ebp, [putimg.winmap_newline]

        cmp     [putimg.ebp], putimage_get1bpp
        jz      .correct
        cmp     [putimg.ebp], putimage_get2bpp
        jz      .correct
        cmp     [putimg.ebp], putimage_get4bpp
        jnz     @f

  .correct:
        mov     eax, [putimg.edi]
        mov     byte [eax], 80h

  @@:
        dec     edi
        jnz     .new_line

  .finish:
        add     esp, putimg.stack_data
        popad
        cmp     [SCR_MODE], 0x12
        jne     @f
        call    VGA__putimage
  @@:
        mov     [EGA_counter], 1
        ret
Или имеется ввиду проверка курсора? Но та тема на которую ссылалась CleverMouse поднималась еще до моих изменений с курсором - 2008 год же!

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 3:02 pm
by Serge

Code: Select all

  .new_x:
        push    [putimg.edi]
        mov     eax, [putimg.ebp+4]

!!!!!!!!!!!!!!! Surprise
        call    eax 
!!!!!!!!!!!!!!!!
        cmp     [ebp], bl
        jne     .skip

; store to LFB
        mov     [LFB_BASE+edx], eax

  .skip:
        add     edx, 4
        inc     ebp
        dec     ecx
        jnz     .new_x
Тут для оптимизаторов не паханное поле. Сделать проверку отсечения до выборки пикселя,
заменить
push [putimg.edi]
mov eax, [putimg.ebp+4]
call eax

на
mov eax, [putimg.edi]
call [putimg.ebp+4]
а ещё лучше для каждого случая свой кернел написать.

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 3:13 pm
by Mario_r4
Еще раз - претензии по реализации звучали до моих изменений по проверке позиции курсора на ходу. Как раз эту проверку ты и выделил. Мне хочется понять те старые претензии, а то что есть сейчас я и сам в курсе - мы это обсуждали и результаты с ShadowBuffer был намного более проигрышными, чем текущая реализация проверки курсора. Речь же изначально шла по претензиям именно к ф.65. Никаких моих изменений с курсором тогда еще не было.

З.Ы. Или я под конец дня окончательно затупил...

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 3:20 pm
by Serge
Да причём здесь твои курсоры ? Этот кусок с call eax в ревизии 283 появился. Логи посмотри. И раньше была сначала проверка, потом выборка. А теперь наоборот.

Re: Оптимизация ядерной графики

Posted: Thu Nov 13, 2014 3:21 pm
by Mario_r4
Serge wrote:Да причём здесь твои курсоры ? Этот кусок с call eax в ревизии 283 появился. Логи посмотри.
Сожалею, под конец дня туплю уже.

Re: Оптимизация ядерной графики

Posted: Sun Jul 19, 2015 7:03 pm
by Leency
И полезет ЯВУшник в ядро,
и станет верх низом,
а низ верхом...


rev. #5580 (залил фикс сделанный полгода назад)
Оптимизация рисования кнопки - устранены перекрытия в рисовании.

Суть бага и как рисовалась кнопка раньше: вначале рисуется фон кнопки, потом поверх него накладывается прямоугольник из линий имитирующих выпуклость.
Как было исправлено: фон кнопки рисуется меньших размеров таким образом что линии имитирующие выпуклость его не перекрывают.