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

Kernel-side graphics support

POLL Ваше мнение об оптимизации GUI ядра

Total votes: 68
Оставить как было
24%
16
Убрать только CGA и VGA, оставить VESA1.2
7%
5
Оставить только VESA2-режимы (без изменения)
10%
7
Разделить 24 и 32bpp графику в условно-компилируемые блоки
26%
18
Оставить в ядре единственный 32bpp-режим
32%
22

  • CleverMouse wrote:Функция 65 написана неправильно, её можно существенно ускорить, чтобы она не отличалась от 73, но, видимо, никому не нужно.
    Посмотрел тут в код и увидел, что процитированный Serge кусок кода относится исключительно к 24bpp режиму. Для режимов 16bpp и 32bpp сделана запись словом и двойным словом одной командой:

    Code: Select all

            mov     [LFB_BASE+edx], ax

    Code: Select all

            mov     [LFB_BASE+edx], eax
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • К сожалению, это не единственная проблема. Вызывать функцию на каждый пиксель накладно для CPU. Здесь проблема не столько потеря скорости, упор всё равно будет в запись, сколько лишние такты и лишние ватты.
  • 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 год же!
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 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]
    а ещё лучше для каждого случая свой кернел написать.
  • Еще раз - претензии по реализации звучали до моих изменений по проверке позиции курсора на ходу. Как раз эту проверку ты и выделил. Мне хочется понять те старые претензии, а то что есть сейчас я и сам в курсе - мы это обсуждали и результаты с ShadowBuffer был намного более проигрышными, чем текущая реализация проверки курсора. Речь же изначально шла по претензиям именно к ф.65. Никаких моих изменений с курсором тогда еще не было.

    З.Ы. Или я под конец дня окончательно затупил...
    Last edited by Mario_r4 on Thu Nov 13, 2014 3:21 pm, edited 1 time in total.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Да причём здесь твои курсоры ? Этот кусок с call eax в ревизии 283 появился. Логи посмотри. И раньше была сначала проверка, потом выборка. А теперь наоборот.
    Last edited by Serge on Thu Nov 13, 2014 3:24 pm, edited 1 time in total.
  • Serge wrote:Да причём здесь твои курсоры ? Этот кусок с call eax в ревизии 283 появился. Логи посмотри.
    Сожалею, под конец дня туплю уже.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • И полезет ЯВУшник в ядро,
    и станет верх низом,
    а низ верхом...


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

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

    Users browsing this forum: No registered users and 1 guest