Page Attribute Table (PAT) расшироение таблиц страниц для постраничного управления кешированием. Появилось начиная с РIII. Три бита pcd, pwt и pat из тaблицы страниц используются как индекс в таблице аттрибутов. Таблица программируется через IA32_CR_PAT MSR.
Подробнее всё расписано в Intel SDM Vol.3 10.12.
Новые драйвера для ATI Radeon.
У меня вопрос.
Это получается, что даже если драйвер не загрузиться, то результат инициализации всё равно положительный. Библиотека pixlib работает и без загруженного драйвера.Значит что-то эмулирует работу сервиса драйвера на уровне ядра. Я правильно понял или нет ?
Code: Select all
srv_hw2d = get_service("HDRAW");
if(srv_hw2d == 0)
srv_hw2d = load_service("/rd/1/drivers/ati2d.drv");
return TRUE;
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
andrew_programmer
Не совсем. Если нет акселерации pixlib рисует всё на экране сама в user-mode. В следующей версии аппаратным будет только блиттер. Всё остальное будет рисоваться в память и потом сбрасываться блиттером на экран.
Не совсем. Если нет акселерации 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;
};
Serge
Меня удивил тот факт, что среди оберток системных вызовов в pixlib нет обёрток для функций копирования содержимомго экрана в память и функций для вывода содержимого памяти на экран. И я не понял, как осуществляется доступ к экрану. А сейчас, после утверждения, что библиотека всё-таки сама осуществляет доступ к экрану, более дотошно покопался в коде.
Это получается, что из user-mode можно получить доступ к экрану и система не будет возражать? Я такого не ожидал...
Меня удивил тот факт, что среди оберток системных вызовов в 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; <----------------------------------------
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Это получается, что для нормального использования библиотеки придётся переделать оконный менеджер. Для каждого окна должен создаваться буфер размером с рабочую область окна. И после рисования в этом буфере он должен выводиться с учётом пересечения с другими окнами. И восстановление фона под окнами тоже он должен производить с учётом этих буферов. Иначе рисование напрямую на экране приведёт к коллизиям выводимых буферов.В следующей версии аппаратным будет только блиттер. Всё остальное будет рисоваться в память и потом сбрасываться блиттером на экран.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
andrew_programmer
Если я не ошибаюсь, то рисование на экран напрямую рекомендовано исключительно для самого верхнего приложения в оконном стеке.
В случае полноэкранного приложения, например игры или видеоплеера разверного на весь экран, такое вполне нормально.
Если я не ошибаюсь, то рисование на экран напрямую рекомендовано исключительно для самого верхнего приложения в оконном стеке.
В случае полноэкранного приложения, например игры или видеоплеера разверного на весь экран, такое вполне нормально.
В полно экранном случае вопросов нет. Но я не думаю, что у библиотеки будет столь узкая специализация для аппаратного ускорения. А для нормального применения придётся переделать оконный менеджер и возможно приложения.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Это давно можно было сделать через селектор gs. А для упрощения я сделал доступными 8 Мб видеопамяти в user mode. Разумеется прямой доступ к видеопамяти некошерно для современных ОС поэтому "it should not be used by anyone". С другой стороны в Win программа может получить контекст для всего экрана и тоже рисовать в любом месте.
Полный док по некоторым неслабым и нестарым чипсетам AMD (включая регистровую модель Radeon HD3200 и руководство разработчика BIOS)!
<https://wwwd.amd.com/amd/devsite.nsf/so ... _rs780.htm>
(регистрация через <http://wwwd.amd.com/amd/devsite.nsf/hom ... ment&login>)
<https://wwwd.amd.com/amd/devsite.nsf/so ... _rs780.htm>
(регистрация через <http://wwwd.amd.com/amd/devsite.nsf/hom ... ment&login>)
Евангелие от Иоанна: стих 1[/size]
Code: Select all
; В начале было Слово:
B32: mov ax, os_stack ; Selector for os
andrew_programmer
Для начала через аппаратный блиттер будет рисовать только верхнее окно. Остальные через вызов ядра. Если получится написать пиксельные шейдеры можно будет выводить все окна с отсечением по карте окон. Фактически это 8-ми битный трафарет/стенсил.
Для начала через аппаратный блиттер будет рисовать только верхнее окно. Остальные через вызов ядра. Если получится написать пиксельные шейдеры можно будет выводить все окна с отсечением по карте окон. Фактически это 8-ми битный трафарет/стенсил.
Жаль только, что моя видеокарта не поддерживает пиксельных и вершинных шейдеров. А видеокарту в ноутбуке не смениш.Если получится написать пиксельные шейдеры можно будет выводить все окна с отсечением по карте окон. Фактически это 8-ми битный трафарет/стенсил.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Всего полтора года и вот новый драйвер для всех видеокарт от Radeon 256 до Radeon HD 4xxx а также многочисленных IGP. В комплект входит адаптированное ядро.
Serge
Поздравляюсь с отлично проделанной работой. Искренне рад тому, что разработка не стояла на месте. Восхищаюсь твоим упорством.
Одна лишь горькая пилюля немного оттеняет радость победы - Nvidia, по крайней мере для меня.
Но, все равно я рад. Большое тебе спасибо за труд!
Поздравляюсь с отлично проделанной работой. Искренне рад тому, что разработка не стояла на месте. Восхищаюсь твоим упорством.
Одна лишь горькая пилюля немного оттеняет радость победы - Nvidia, по крайней мере для меня.
Но, все равно я рад. Большое тебе спасибо за труд!
Здорово, правда жалко, что у меня не завелось.
Последняя ночная сборка, поудалял демки и игрушки, заменил ядро, закинул atikms и atikms.dll в папку drivers, при загрузке выбрал режим 1024х1067х32, потом в проге run набрал: /sys/drivers/atikms -m 1280x1024 -l. Экран моргнул 1 раз но режим не поменялся. В vmode.kex - пусто, никаких режимов нет. Видео - встроенное HD 3200. Лог прилагаю.
Последняя ночная сборка, поудалял демки и игрушки, заменил ядро, закинул atikms и atikms.dll в папку drivers, при загрузке выбрал режим 1024х1067х32, потом в проге run набрал: /sys/drivers/atikms -m 1280x1024 -l. Экран моргнул 1 раз но режим не поменялся. В vmode.kex - пусто, никаких режимов нет. Видео - встроенное HD 3200. Лог прилагаю.
- Attachments
-
-
ATIKMS.LOG (4.11 KiB)Downloaded 201 times
-
Serge
Спасибо за проделанную работу! У меня на ноуте IBM R51 видео ATI 7500 32 MB, не завелось. Прописывал как в автозагруку так и запускал через RUN. В обоих случаях, ноут подвисает, помогает только reset or shutdown. Лог не могу привести, т.к. нет раздела fat32. Пробовал под эмулятором, в обохи случаях система работала нормально, лог создавался c сообщением (device not found).
Спасибо за проделанную работу! У меня на ноуте IBM R51 видео ATI 7500 32 MB, не завелось. Прописывал как в автозагруку так и запускал через RUN. В обоих случаях, ноут подвисает, помогает только reset or shutdown. Лог не могу привести, т.к. нет раздела fat32. Пробовал под эмулятором, в обохи случаях система работала нормально, лог создавался c сообщением (device not found).
Who is online
Users browsing this forum: No registered users and 1 guest