У Mesa, вроде, "железный" код только для DRI, ты его будешь использовать или возьмешь дрова из другого источника?
Надеюсь RV280 будет поддерживаться, а то я не горю желанием менять железо, в копеечку это влетит.
..bw
2D с аппаратной акселерацией
Думаю что будет DRI2/Gallium. Но всё это будет очень не скоро. Сначала mesa должна перейти на dri2
Mesa мощная библиотека OpenGL.
Здесь: http://koti.mbnet.fi/hinkka/q3a_v101_src.7z (исходники порта Quake 3 Arena для Смартфонов) есть ещё пример реализации библиотеки OpenGL поменьше.
Здесь: http://koti.mbnet.fi/hinkka/q3a_v101_src.7z (исходники порта Quake 3 Arena для Смартфонов) есть ещё пример реализации библиотеки OpenGL поменьше.
Serge
Как раз в том и проблема, что ни одна из трёх демок не работает.
Как раз в том и проблема, что ни одна из трёх демок не работает.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
andrew_programmer
Pixlib работает только в 32-bpp.
Попробуй ядро #1097 и pixlib_02 В папке /rd/1/drivers должен быть ati2d.log.
Демки должны работать и без 2D акселерации ( т.е. без драйвера ati2d.drv)
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!
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 как прозрачный цвет источника.
Прмер использования.
В дополнение к этим функциям будет возможность запускать на исполнение командные пакеты. Так что владеющие Тайным Знанием любопытные Буратины смогут программировать чип напрямую (со всеми вытекающими), в том числе вести модные расчёты на 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
Pixels Shaders - это круто. asm x86 + asm GPU - это мощь!В дополнение к этим функциям будет возможность запускать на исполнение командные пакеты. Так что владеющие Тайным Знанием любопытные Буратины смогут программировать чип напрямую (со всеми вытекающими), в том числе вести модные расчёты на GPU.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
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!
Kolibri is best operation system in the world!
Who is online
Users browsing this forum: Google [Bot] and 2 guests