Page 13 of 41
Re: Новые драйвера для ATI Radeon.
Posted: Mon Aug 31, 2009 10:37 am
by Serge
Page Attribute Table (PAT) расшироение таблиц страниц для постраничного управления кешированием. Появилось начиная с РIII. Три бита pcd, pwt и pat из тaблицы страниц используются как индекс в таблице аттрибутов. Таблица программируется через IA32_CR_PAT MSR.
Подробнее всё расписано в Intel SDM Vol.3 10.12.
Re: Новые драйвера для ATI Radeon.
Posted: Fri Sep 18, 2009 4:39 pm
by andrew_programmer
У меня вопрос.
Code: Select all
srv_hw2d = get_service("HDRAW");
if(srv_hw2d == 0)
srv_hw2d = load_service("/rd/1/drivers/ati2d.drv");
return TRUE;
Это получается, что даже если драйвер не загрузиться, то результат инициализации всё равно положительный. Библиотека pixlib работает и без загруженного драйвера.Значит что-то эмулирует работу сервиса драйвера на уровне ядра. Я правильно понял или нет ?
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 10:53 am
by Serge
andrew_programmer
Не совсем. Если нет акселерации pixlib рисует всё на экране сама в user-mode.
Code: Select all
int Blit(pixmap_t *dst_pixmap, int dst_x, int dst_y,
pixmap_t *src_pixmap, int src_x, int src_y,
int width, int height)
{
clip_t src_clip, dst_clip;
if( ( width <= 0 ) || ( height<=0 ) )
return ERR_PARAM;
/* if "hardware acceleration present" and
"destinastion is primary screen or local videomemory"
*/
if( (srv_hw2d != 0) &&
( (dst_pixmap == (void*)-1) ||
( (dst_pixmap->flags & PX_MEM_MASK)==PX_MEM_LOCAL) ) /* &&
( (src_pixmap == (void*)-1) ||
( (src_pixmap->flags & PX_MEM_MASK)==PX_MEM_LOCAL) ) */ )
{
ioctl_t io;
pxblit_t *blit = (pxblit_t*)&dst_pixmap;
if((int)dst_pixmap != -1)
blit->dst_pixmap = (pixmap_t*)dst_pixmap->handle;
if( (int)src_pixmap != -1 &&
(src_pixmap->flags & PX_MEM_MASK) != PX_MEM_SYSTEM)
blit->src_pixmap = (pixmap_t*)src_pixmap->handle;
io.handle = srv_hw2d;
io.io_code = PX_BLIT;
io.input = blit;
io.inp_size = 8;
io.output = NULL;
io.out_size = 0;
return call_service(&io);
}
dst_pixmap = (dst_pixmap == (void*)-1) ? &scrn_pixmap : dst_pixmap ;
src_pixmap = (src_pixmap == (void*)-1) ? &scrn_pixmap : src_pixmap ;
src_clip.xmin = 0;
src_clip.ymin = 0;
src_clip.xmax = src_pixmap->width-1;
src_clip.ymax = src_pixmap->height-1;
dst_clip.xmin = 0;
dst_clip.ymin = 0;
dst_clip.xmax = dst_pixmap->width-1;
dst_clip.ymax = dst_pixmap->height-1;
if( !blit_clip(&dst_clip, &dst_x, &dst_y,
&src_clip, &src_x, &src_y,
&width, &height) )
{
color_t *src_addr = &((color_t*)(src_pixmap->mapped))[src_pixmap->pitch*src_y/4+src_x];
color_t *dst_addr = &((color_t*)(dst_pixmap->mapped))[dst_pixmap->pitch*dst_y/4+dst_x];
while( height-- )
{
int w = width;
color_t *tmp_src = src_addr;
color_t *tmp_dst = dst_addr;
src_addr += src_pixmap->pitch/4;
dst_addr += dst_pixmap->pitch/4;
while( w >= 8)
{
__asm__ __volatile__ (
"movq (%0), %%mm0\n"
"movq 8(%0), %%mm1\n"
"movq 16(%0), %%mm2\n"
"movq 24(%0), %%mm3\n"
"movq %%mm0, (%1)\n"
"movq %%mm1, 8(%1)\n"
"movq %%mm2, 16(%1)\n"
"movq %%mm3, 24(%1)\n"
:: "r" (tmp_src), "r" (tmp_dst)
: "memory", "%mm0", "%mm1", "%mm2", "%mm3");
w -= 8;
tmp_src += 8;
tmp_dst += 8;
};
if( w >= 4 )
{
__asm__ __volatile__ (
"movq (%0), %%mm0\n"
"movq 8(%0), %%mm1\n"
"movq %%mm0, (%1)\n"
"movq %%mm1, 8(%1)\n"
:: "r" (tmp_src), "r" (tmp_dst)
: "memory", "%mm0", "%mm1");
w -= 4;
tmp_src += 4;
tmp_dst += 4;
};
if( w >= 2 )
{
__asm__ __volatile__ (
"movq (%0), %%mm0\n"
"movq %%mm0, (%1)\n"
:: "r" (tmp_src), "r" (tmp_dst)
: "memory", "%mm0");
w -= 2;
tmp_src += 2;
tmp_dst += 2;
};
if( w )
*tmp_dst = *tmp_src;
};
};
return ERR_OK;
};
В следующей версии аппаратным будет только блиттер. Всё остальное будет рисоваться в память и потом сбрасываться блиттером на экран.
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 12:55 pm
by andrew_programmer
Serge
Меня удивил тот факт, что среди оберток системных вызовов в pixlib нет обёрток для функций копирования содержимомго экрана в память и функций для вывода содержимого памяти на экран. И я не понял, как осуществляется доступ к экрану. А сейчас, после утверждения, что библиотека всё-таки сама осуществляет доступ к экрану, более дотошно покопался в коде.
Code: Select all
.................
#define LFB_BASE 0xFE000000
.....................
scrn_pixmap.width = scrnsize >> 16;
scrn_pixmap.height = scrnsize & 0xFFFF;
scrn_pixmap.format = PICT_a8r8g8b8;
scrn_pixmap.flags = PX_MEM_LOCAL;
scrn_pixmap.pitch = scrnpitch;
scrn_pixmap.mapped = (void*)LFB_BASE; <----------------------------------------
Это получается, что из user-mode можно получить доступ к экрану и система не будет возражать?

Я такого не ожидал...
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 1:23 pm
by andrew_programmer
В следующей версии аппаратным будет только блиттер. Всё остальное будет рисоваться в память и потом сбрасываться блиттером на экран.
Это получается, что для нормального использования библиотеки придётся переделать оконный менеджер. Для каждого окна должен создаваться буфер размером с рабочую область окна. И после рисования в этом буфере он должен выводиться с учётом пересечения с другими окнами. И восстановление фона под окнами тоже он должен производить с учётом этих буферов. Иначе рисование напрямую на экране приведёт к коллизиям выводимых буферов.
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 1:25 pm
by Mario
andrew_programmer
Если я не ошибаюсь, то рисование на экран напрямую рекомендовано исключительно для самого верхнего приложения в оконном стеке.
В случае полноэкранного приложения, например игры или видеоплеера разверного на весь экран, такое вполне нормально.
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 1:33 pm
by andrew_programmer
В полно экранном случае вопросов нет. Но я не думаю, что у библиотеки будет столь узкая специализация для аппаратного ускорения. А для нормального применения придётся переделать оконный менеджер и возможно приложения.
Re: Новые драйвера для ATI Radeon.
Posted: Sat Sep 19, 2009 1:37 pm
by Serge
Это давно можно было сделать через селектор gs. А для упрощения я сделал доступными 8 Мб видеопамяти в user mode. Разумеется прямой доступ к видеопамяти некошерно для современных ОС поэтому "it should not be used by anyone". С другой стороны в Win программа может получить контекст для всего экрана и тоже рисовать в любом месте.
Re: Новые драйвера для ATI Radeon.
Posted: Wed Sep 23, 2009 12:09 am
by art_zh
Полный док по некоторым неслабым и нестарым чипсетам AMD (включая регистровую модель Radeon HD3200 и руководство разработчика BIOS)!
<
https://wwwd.amd.com/amd/devsite.nsf/so ... _rs780.htm>
(регистрация через <
http://wwwd.amd.com/amd/devsite.nsf/hom ... ment&login>)
Re: Новые драйвера для ATI Radeon.
Posted: Wed Sep 23, 2009 3:25 pm
by Serge
andrew_programmer
Для начала через аппаратный блиттер будет рисовать только верхнее окно. Остальные через вызов ядра. Если получится написать пиксельные шейдеры можно будет выводить все окна с отсечением по карте окон. Фактически это 8-ми битный трафарет/стенсил.
Re: Новые драйвера для ATI Radeon.
Posted: Wed Sep 23, 2009 8:04 pm
by andrew_programmer
Если получится написать пиксельные шейдеры можно будет выводить все окна с отсечением по карте окон. Фактически это 8-ми битный трафарет/стенсил.
Жаль только, что моя видеокарта не поддерживает пиксельных и вершинных шейдеров. А видеокарту в ноутбуке не смениш.

Re: Новые драйвера для ATI Radeon.
Posted: Tue Oct 27, 2009 1:27 am
by Serge
Всего полтора года и вот
новый драйвер для
всех

видеокарт от Radeon 256 до Radeon HD 4xxx а также многочисленных IGP. В комплект входит адаптированное ядро.
Re: Новые драйвера для ATI Radeon.
Posted: Tue Oct 27, 2009 1:55 am
by Mario
Serge
Поздравляюсь с отлично проделанной работой. Искренне рад тому, что разработка не стояла на месте. Восхищаюсь твоим упорством.
Одна лишь горькая пилюля немного оттеняет радость победы - Nvidia, по крайней мере для меня.
Но, все равно я рад. Большое тебе спасибо за труд!
Re: Новые драйвера для ATI Radeon.
Posted: Tue Oct 27, 2009 5:48 am
by Heavyiron
Здорово, правда жалко, что у меня не завелось.
Последняя ночная сборка, поудалял демки и игрушки, заменил ядро, закинул atikms и atikms.dll в папку drivers, при загрузке выбрал режим 1024х1067х32, потом в проге run набрал: /sys/drivers/atikms -m 1280x1024 -l. Экран моргнул 1 раз но режим не поменялся. В vmode.kex - пусто, никаких режимов нет. Видео - встроенное HD 3200. Лог прилагаю.
Re: Новые драйвера для ATI Radeon.
Posted: Tue Oct 27, 2009 7:44 am
by <Lrz>
Serge
Спасибо за проделанную работу! У меня на ноуте IBM R51 видео ATI 7500 32 MB, не завелось. Прописывал как в автозагруку так и запускал через RUN. В обоих случаях, ноут подвисает, помогает только reset or shutdown. Лог не могу привести, т.к. нет раздела fat32. Пробовал под эмулятором, в обохи случаях система работала нормально, лог создавался c сообщением (device not found).