Page 3 of 4

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

Posted: Wed Jul 15, 2009 7:05 pm
by bw
У Mesa, вроде, "железный" код только для DRI, ты его будешь использовать или возьмешь дрова из другого источника?
Надеюсь RV280 будет поддерживаться, а то я не горю желанием менять железо, в копеечку это влетит.

..bw

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

Posted: Wed Jul 15, 2009 9:10 pm
by Serge
Думаю что будет DRI2/Gallium. Но всё это будет очень не скоро. Сначала mesa должна перейти на dri2

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

Posted: Wed Jul 15, 2009 9:21 pm
by Asper
Mesa мощная библиотека OpenGL. :)
Здесь: http://koti.mbnet.fi/hinkka/q3a_v101_src.7z (исходники порта Quake 3 Arena для Смартфонов) есть ещё пример реализации библиотеки OpenGL поменьше.

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

Posted: Wed Jul 15, 2009 11:53 pm
by andrew_programmer
Serge

Как раз в том и проблема, что ни одна из трёх демок не работает.

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

Posted: Thu Jul 16, 2009 8:01 am
by Serge
andrew_programmer

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

Демки должны работать и без 2D акселерации ( т.е. без драйвера ati2d.drv)

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

Posted: Thu Jul 16, 2009 10:44 pm
by andrew_programmer
Теперь работает. Дело было в 32-х битности. Я всегда пользуюсь 24-х битным режимом из-за этого демки не работали.

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

Posted: Tue Oct 13, 2009 9:28 am
by Gluk
Библиотека pixlib реентерабельна (см. мой вопрос тут)?

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

Posted: Tue Oct 13, 2009 11:39 am
by Serge
Нет. Функции вида CreateXXX и DestroyXXX не реентрантны. Я делаю новую версию pixlib, так что старую уже лучше не использовать.

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

Posted: Tue Oct 13, 2009 4:01 pm
by Gluk
А новая версия будет реентерабельной?

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

Posted: Tue Oct 13, 2009 10:33 pm
by Serge
Да.

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

Posted: Tue Oct 13, 2009 11:32 pm
by Gluk
спасибо)

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

Posted: Wed Feb 17, 2010 4:05 pm
by Serge
Запустил командный процессор на всех 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.

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

Posted: Wed Feb 17, 2010 9:40 pm
by andrew_programmer
В дополнение к этим функциям будет возможность запускать на исполнение командные пакеты. Так что владеющие Тайным Знанием любопытные Буратины смогут программировать чип напрямую (со всеми вытекающими), в том числе вести модные расчёты на GPU.
Pixels Shaders - это круто. asm x86 + asm GPU - это мощь!

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

Posted: Wed Feb 17, 2010 9:46 pm
by Serge
В принципе уже можно и Mesa портировать. Организовать вычисления на гпу даже проще. Главная сложность - совершенно марсианский ассемблер и отсутствие трансляторов в бинарный код. Надо всё писать в машинном коде. Когда ОpenCL появится неизвестно.

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

Posted: Wed Feb 17, 2010 10:08 pm
by andrew_programmer
Насколько я понял у них уже сейчас OpenCL есть, только для single-precision floating point. Но разработчики написали на форуме,что где-то в первой половине этого года они реализуют double-precision(для меня это важно), потому что для них это важно. AMD хочет конкурировать с NVIDIA в области научных вычислений на GPU, а там double-precision нужно. Раз от Brook+ отказались, значит будут оттачивать OpenCL.
А ассемблер действительно марсианский. :) Я так и не нашёл там операции деления. Видимо она эмулируется через другие команды.