Доброго дня, уважаемые и достопочтенные писатели всяких низкоуровневых штук. Чтобы описать свой вопрос мне необходимо начать с предыстории. Однажды мой приятель купил видеокарту на бу рынке и, вопреки моим предупреждениям, не проверил её должным образом (то есть вообще никак). Через определённое время получил проблему с вылетами. Без ошибок, без предупреждений - игра просто крашилась. Я быстро понял, что к чему и попоросил его пройти тесть VRAM через MemTestCL. Как и ожидалось - ошибки чтения памяти. И теперь уже мы подходим к сути вопроса. Первым, что приходит в голову, является предположение о возможности подмены видеобуффера на участок виртуальной памяти, что указывает только на блоки видеопамяти, что не являются битыми. А для этого нужно понять следующую вещь - и она же суть вопроса - как именно происходит обращение к видеопамяти в драйвере?
Это же ринг 0, уровень драйвера, а так в "диспетчер устройств" можно посмотреть диапазон памяти. Хотя я только в VGA и немного SVGA в досе понимаю. ------------------------- Код (ASM): ;считывает область буфера кадров во внеэкраную область glReadPixels(x:dword, y:dword, width1:dword, height:dword, format:dword, type1:dword, pixels:ptr ) ;копирует область буфера кадров в другую область буфера кадров glCopyPixels(x:dword, y:dword, width1:dword, height:dword, type1:dword) ;рисует заданную пиксельную карту в буфер кадров glDrawPixels(width1:dword, height:dword, format:dword, type1:dword, pixels:ptr ) У меня в Win7 не работает glDrawPixels! А в WinXP работает. Порты демок с VGA MS-DOS делал.
В порядке оффтопа - тут один деятель 5 лет доказывает всем, что в видеокартах АМД есть какой-то специально встроенный баг, который проявляется только на семерке (якобы это заговор и ничего сделать нельзя). вроде в книги Фень Юаня "программирование графики виндовс" было что-то на эту тему.