2D с аппаратной акселерацией

Discussing libraries simplifying applications development
  • Думаю что будет DRI2/Gallium. Но всё это будет очень не скоро. Сначала mesa должна перейти на dri2
  • Mesa мощная библиотека OpenGL. :)
    Здесь: http://koti.mbnet.fi/hinkka/q3a_v101_src.7z (исходники порта Quake 3 Arena для Смартфонов) есть ещё пример реализации библиотеки OpenGL поменьше.
  • Serge

    Как раз в том и проблема, что ни одна из трёх демок не работает.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • andrew_programmer

    Pixlib работает только в 32-bpp.
    Попробуй ядро #1097 и pixlib_02 В папке /rd/1/drivers должен быть ati2d.log.

    Демки должны работать и без 2D акселерации ( т.е. без драйвера ati2d.drv)
  • Теперь работает. Дело было в 32-х битности. Я всегда пользуюсь 24-х битным режимом из-за этого демки не работали.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Библиотека pixlib реентерабельна (см. мой вопрос тут)?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Нет. Функции вида CreateXXX и DestroyXXX не реентрантны. Я делаю новую версию pixlib, так что старую уже лучше не использовать.
  • А новая версия будет реентерабельной?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Да.
  • спасибо)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Запустил командный процессор на всех gpu, так что можно заняться акселерацией.
    Вот примерный API для следующей версии pixlib

    Все функции возвращают код ошибки как знаковое целое.

    typedef struct
    {
    uint32_t width;
    uint32_t height;
    uint32_t format;
    uint32_t pitch; //ширина строки в байтах
    color_t *pixels;
    //что-то ещё
    ...
    }; pixmap_t;

    pixmap_t ScreenPixmap; Первичная поверхность. Создаётся библиотекой.

    int CreatePixmap(pixmap_t *pixmap);
    Создаёт текстуру в локальной видеопамяти.
    Перед вызовом надо заполнить поля width, height и format структуры.

    int ResizePixmap(pixmap_t *pixmap, uint32_t new_width, uint32_t new_height);
    Устанавливает новый размер текстуры не меняя формат. Старое содержимое теряется.

    int BindPixmap(pixmap_t *pixmap, uint32_t flags);
    Связывает текстуру с копией в системной памяти.

    int UnbindPixmap(pixmap_t *pixmap);
    Освобождает системную память.

    int UpdatePixmap(pixmap_t *pixmap, uint32_t xorg, uint32_t yorg,
    uint32_t width, uint32_t height, uint32_t location);
    Обновляет текстуру. location определяет положение - в системной или видеопамяти. Координаты задают обновляемую область.

    Функции блиттера
    int Blit(pixmap_t *dst, pixmap_t *src, int xdst, int ydst, int xsrc, int ysrc, uin32_t width, uint32_t height);
    int BlitTransparent(pixmap_t *dst, pixmap_t *src, int xdst, int ydst, int xsrc, int ysrc, uin32_t width, uint32_t height, color_t key);
    int Blend(pixmap_t *dst, pixmap_t *src, int xdst, int ydst, int xsrc, int ysrc, uin32_t width, uint32_t height);
    BlitTransparent использует key как прозрачный цвет источника.

    Прмер использования.

    Code: Select all

    pixmap_t  win_pixmap;
    //Пиксмап для отрисовки всего окна
    
    On_Create:
    int error;
    //Получили размер окна
    
    win_pixmap.width = window_width;
    win_pixmap.height = window_height;
    win_pixmap.format = ARGB32;
    
    error = CreatePixmap(&pixmap);
    if( error )
    {
         epic_fail();
    };
    
    error = BindPixmap(&pixmap);
    if( error )
    {
         epic_fail();
    };
    
    /****************/
    
    On_Paint()
    
    //рисуем в текстуру успользуя win_pixmap.pixels и не забывая про win_pixmap.pitch 
    
    error = UpdatePixmap(&win_pixmap, координаты перерисованной области, PX_MEM_LOCAL);
    if( error )
    {
         epic_fail();
    };
    
    error = Blit(&ScreenPixmap, &win_pixmap, window_x, window_y, координаты перерисованной области);
    if( error )
    {
         epic_fail();
    };
    
    /****************/
    On_Size:
    
    //Получили размер окна
    
    error = ResizePixmap(&win_pixmap, window_width, window_height);
    if( error )
    {
         epic_fail();
    };
    

    Code: Select all

    //Просто текстура в видеопамяти
    
    pixmap_t my_pixmap;
    //Задаём размер текстуры;
    ...
    //Создаём текстуру
    error = CreatePixmap(&my_pixmap);
    
    //Загружаем текстуру в видеопамять
    error = BindPixmap(&my_pixmap);
    load_bitmap(my_pixmap.pixels, my_pixmap.pitch, источник, что-то ещё);
    error = UpdatePixmap(&my_pixmap,  0, 0, my_pixmap.width, my_pixmap.height, PX_MEM_LOCAL);
    error = UnbindPixmap(&my_pixmap);
    
    /*******************/
    
    PROFIT
    В дополнение к этим функциям будет возможность запускать на исполнение командные пакеты. Так что владеющие Тайным Знанием любопытные Буратины смогут программировать чип напрямую (со всеми вытекающими), в том числе вести модные расчёты на GPU.
  • В дополнение к этим функциям будет возможность запускать на исполнение командные пакеты. Так что владеющие Тайным Знанием любопытные Буратины смогут программировать чип напрямую (со всеми вытекающими), в том числе вести модные расчёты на GPU.
    Pixels Shaders - это круто. asm x86 + asm GPU - это мощь!
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • В принципе уже можно и Mesa портировать. Организовать вычисления на гпу даже проще. Главная сложность - совершенно марсианский ассемблер и отсутствие трансляторов в бинарный код. Надо всё писать в машинном коде. Когда ОpenCL появится неизвестно.
  • Насколько я понял у них уже сейчас OpenCL есть, только для single-precision floating point. Но разработчики написали на форуме,что где-то в первой половине этого года они реализуют double-precision(для меня это важно), потому что для них это важно. AMD хочет конкурировать с NVIDIA в области научных вычислений на GPU, а там double-precision нужно. Раз от Brook+ отказались, значит будут оттачивать OpenCL.
    А ассемблер действительно марсианский. :) Я так и не нашёл там операции деления. Видимо она эмулируется через другие команды.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Who is online

    Users browsing this forum: No registered users and 6 guests