Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];

Вниз

Получить кол-во видеопамяти.   Найти похожие ветки 

 
Б   (2009-11-20 10:16) [0]

Здрасти!

Мне надо получить кол-во видеопамяти.
Определять имя видеокарточки - умею.

P.S. Желательно без WMI, а Windows.pas и иже.


 
Игорь Шевченко ©   (2009-11-20 10:29) [1]

Без WMI врет. С WMI правда тоже врет. Лучший вариант - посмотреть глазами.


 
Б   (2009-11-20 10:32) [2]


> Без WMI врет.


Нужен пример, а там сами поглядим. ;)


 
TDelphi ©   (2009-11-20 10:39) [3]

Получить количество микросхем памяти?

А это часом не Вы ?

http://delphimaster.net/view/2-1257351706/


 
@!!ex ©   (2009-11-20 10:44) [4]

А нафиг это нужно?


 
Anatoly Podgoretsky ©   (2009-11-20 10:58) [5]

Вывести в About, чтобы гордость вздрогнуда.


 
Б   (2009-11-20 10:59) [6]


> А нафиг это нужно?


Для логгирования, чтобы в можно узнать имя видеокарты и её размер.
Удобно.


 
Б   (2009-11-20 11:00) [7]

Узнать у пользователя.


 
Игорь Шевченко ©   (2009-11-20 11:51) [8]


> Нужен пример, а там сами поглядим. ;)


Не веришь ? А зря.
Вот пример - на компьютере, с которого я сейчас пишу установлена видеокарта ATI Radeon XT 2600 с 512-ю мегабайтами. Все определялки, включая родной Catalyst Control Center пишут, что памяти 1024 мегабайта.
Недавно покупалась карточка NVidia, с ней аналогичная фигня - памяти 512, все пишут, что 1024.


 
Anatoly Podgoretsky ©   (2009-11-20 12:29) [9]

> Б  (20.11.2009 10:59:06)  [6]

Размер 180 на 100 миллиметров.


 
Anatoly Podgoretsky ©   (2009-11-20 12:30) [10]

> Игорь Шевченко  (20.11.2009 11:51:08)  [8]

А что пишет при запуске в БИОСе, или не успеть прочитать?


 
Б   (2009-11-20 12:50) [11]


> Не веришь ? А зря.


Какой процедуркой узнаёте?


> Размер 180 на 100 миллиметров.


Как мерили?


 
Игорь Шевченко ©   (2009-11-20 12:51) [12]

Anatoly Podgoretsky ©   (20.11.09 12:30) [10]


> А что пишет при запуске в БИОСе, или не успеть прочитать?


Ничего не пишет. На экран выводятся данные только БИОСа материнской платы.
На самой карточке наклейка, что 512 мегабайт :)


 
Игорь Шевченко ©   (2009-11-20 12:52) [13]

Б   (20.11.09 12:50) [11]


> Какой процедуркой узнаёте?


1. Стандартными средствами Windows
2. Everest
3. ATI Catalyst control center


 
Anatoly Podgoretsky ©   (2009-11-20 13:01) [14]

> Б  (20.11.2009 12:50:11)  [11]

С помощью WMI


 
Anatoly Podgoretsky ©   (2009-11-20 13:02) [15]

> Игорь Шевченко  (20.11.2009 12:51:12)  [12]

Может тебе по ошибке 1 гб продали


 
sniknik ©   (2009-11-20 13:14) [16]

> Может тебе по ошибке 1 гб продали
обманули! сволочи!!! :)


 
Б   (2009-11-20 13:15) [17]


> 1. Стандартными средствами Windows
> 2. Everest
> 3. ATI Catalyst control center
> <Цитата>


Это понятно.
А в Дельфяк как?
Имя видеокарты узнаю через EnumDisplayDevices.


 
Игорь Шевченко ©   (2009-11-20 13:22) [18]

Anatoly Podgoretsky ©   (20.11.09 13:02) [15]


> Может тебе по ошибке 1 гб продали


Причем, два раза (см [8])


 
Sapersky   (2009-11-20 13:52) [19]

Вот пример - на компьютере, с которого я сейчас пишу установлена видеокарта ATI Radeon XT 2600 с 512-ю мегабайтами. Все определялки, включая родной Catalyst Control Center пишут, что памяти 1024 мегабайта.
Недавно покупалась карточка NVidia, с ней аналогичная фигня - памяти 512, все пишут, что 1024.


Вероятно, считают т.н. нелокальную видеопамять, т.е. системную, зарезервированную под нужны видео. Ну или макс. размер нелокальной, вряд ли эти 512 мб жёстко забиты за видеокартой.
Через DX такие тонкости различимы. Можно попробовать dxdiag, хотя это всё-таки пользовательская утилита, может тоже соврать. DXCapsViewer из DX SDK должен правильно показать, он отдельно пишет локальную и нелокальную (DirectDraw devices/первичный видеодрайвер/Memory).
http://www.unistellar.com/downloads/DXCapsViewer.zip (или качаем SDK :))


 
Sapersky   (2009-11-20 13:56) [20]

Вероятно, считают т.н. нелокальную видеопамять, т.е. системную, зарезервированную под нужны видео.

В смысле - локальную и нелокальную в сумме.


 
Игорь Шевченко ©   (2009-11-20 14:16) [21]

Sapersky   (20.11.09 13:52) [19]


> Вероятно, считают т.н. нелокальную видеопамять, т.е. системную,
>  зарезервированную под нужны видео


чё ?


 
Игорь Шевченко ©   (2009-11-20 14:18) [22]

кстати, по сабжу:
http://forum.oszone.net/printthread-124061.html


 
Sapersky   (2009-11-20 14:28) [23]

Неясно выразился? Ну повторяю: из системной памяти выделяется некая часть, которая считается "тожевидео", и добавляется к настоящей видео.
По вашей ссылке примерно о том же пишут - HyperMemory/TurboCache, хотя на самом деле нелокалка есть у всех карт, но не в таком кол-ве - у меня 24 мб, например, при локальной 128.


 
Игорь Шевченко ©   (2009-11-20 15:02) [24]

Sapersky   (20.11.09 13:52) [19]


> http://www.unistellar.com/downloads/DXCapsViewer.zip


Этот показывает 512 мегабайт локальной памяти и 512 мегабайт нелокальной.
Только оно у меня (полгига) нифига не зарезервировано, мои 2 гига занимаются приложениями и файловым кэшем.


 
Sapersky   (2009-11-20 15:20) [25]

Ну я писал уже:
или макс. размер нелокальной, вряд ли эти 512 мб жёстко забиты за видеокартой.
Понятно, что сразу отхватывать у системы 512 мб нерационально, видимо, драйвер динамически определяет потребность в доп. видеопамяти.
Вот мои 24 (из 512) скорее всего жёстко забиты, хотя тоже не факт.


 
Б   (2009-11-20 16:09) [26]

Разве в Windows.pas не обитает функция, котора возвращает не только имя видеокарты, но размер её видеопамяти?
Я уж самотался искать.


 
Sapersky   (2009-11-20 17:11) [27]

По поводу того, зачем нужна дезинформация с размерами.
Изначально технологии HyperMemory/TurboCache были предназначены для серии сверхбюджетных карт. Cвоей памяти у них очень мало, 32 или 64 мб, бОльшая часть добирается за счёт нелокалки. Ну и, видимо, чтобы не пугать пользователя реальными размерами видеопамяти - решили выдавать суммарный. А вот зачем эту фишку оставили включённой для карт middle/high-end серий, у которых памяти достаточно - не вполне понятно.

Разве в Windows.pas не обитает функция, котора возвращает не только имя видеокарты, но размер её видеопамяти?

Не знаю.
ИМХО лучше использовать DX, хотя бы потому, что есть возможность обойти всю эту маркетинговую фигню вроде HyperMemory. Правда, как конкретно - точно не скажу, не интересовался ранее, но вот сейчас нарыл:

IDirectDraw7::GetAvailableVidMem
The IDirectDraw7::GetAvailableVidMem method retrieves the total amount of display memory available and the amount of display memory currently free for a given type of surface.

HRESULT GetAvailableVidMem(
 LPDDSCAPS2 lpDDSCaps2,  
 LPDWORD    lpdwTotal,  
 LPDWORD    lpdwFree    
);

Parameters
lpDDSCaps2
Address of a DDSCAPS2 structure that indicates the hardware capabilities of the proposed surface.
lpdwTotal
Address of a variable to be filled with the total amount of display memory available, in bytes. The value retrieved reflects the total video memory, minus the video memory required for the primary surface and any private caches that the display driver reserves.
lpdwFree
Address of a variable to be filled with the amount of display memory currently free that can be allocated for a surface that matches the capabilities specified by the structure at lpDDSCaps2.

Return Values
If the method succeeds, the return value is DD_OK.

If it fails, the method can return one of the following error values:

DDERR_INVALIDCAPS  
DDERR_INVALIDOBJECT  
DDERR_INVALIDPARAMS  
DDERR_NODIRECTDRAWHW  

If NULL is passed to either lpdwTotal or lpdwFree, the value for that parameter is not returned.

Remarks
The following C++ example demonstrates how to use IDirectDraw7::GetAvailableVidMem to determine both the total and free display memory available for texture-map surfaces:

// For this example, the lpDD variable is a valid
// pointer to an IDirectDraw interface.
LPDIRECTDRAW7 lpDD;
DDSCAPS2      ddsCaps2;
DWORD         dwTotal;
DWORD         dwFree;
HRESULT       hr;

hr = lpDD->QueryInterface(IID_IDirectDraw7, &lpDD);
if (FAILED(hr))
   return hr;
// чтобы создать  IDIRECTDRAW7 "с нуля" - использовать
// DirectDrawCreateEx(nil, lpDD, IID_IDirectDraw7, nil)

// Initialize the structure.
ZeroMemory(&ddsCaps2, sizeof(ddsCaps2));

ddsCaps2.dwCaps = DDSCAPS_TEXTURE;
hr = lpDD->GetAvailableVidMem(&ddsCaps2, &dwTotal, &dwFree);
if (FAILED(hr))
   return hr;

If the surface has the DDSCAPS_VIDEOMEMORY flag set, this method will return different amounts of video memory depending on whether or not the surface can be used as a 3-D texture. If the surface can be used for 3-D textures, the GetAvailableVidMem method will return the sum of the local video memory and the non-local video memory on AGP systems.


 
Б   (2009-11-20 17:49) [28]


> Sapersky   (20.11.09 17:11) [27]


Очень жаль, что придёться тащить DirectDraw.
Я изучаю OpenGL и хотел считывать у пользователя инфу с видюхи.
Чтобы понимать тянет ли дема или нет.


 
Sapersky   (2009-11-20 18:28) [29]

Ну так и определяй через GL, наверняка там есть для этого средства. Как получить название карты, например, я с ходу нашёл в хелпе по WinAPI, который идёт в комплекте с Delphi: glGetString(GL_RENDERER). Хотя не проверял :)
Да и кол-во видеопамяти обычно не самый критический параметр. DX, например, умеет автоматически переключаться на нелокальную/системную память при исчерпании видео + есть такая штука как менеджмент текстур, когда нужные в данный момент автоматом подгружаются из системной в видео, а ненужные выкидываются. У GL наверняка что-то подобное есть.
Обычно в первую очередь версию шейдеров проверяют, их ничем не заменишь. Пиксельные не эмулируются вообще никак, а вертексные - только через DX (AFAIK).


 
Anatoly Podgoretsky ©   (2009-11-20 18:53) [30]

> Sapersky  (20.11.2009 17:11:27)  [27]

Да по той же причине, "В попугаях я длинней"


 
Б   (2009-11-20 19:05) [31]


> glGetString(GL_RENDERER). Хотя не проверял :)


Не. Это команда возвращает способ воспроизведения, для наглядности:


 GL_RENDERER - "GeForce 7600 GT/PCI/SSE2/3DNOW!"


 
Б   (2009-11-20 19:08) [32]


> Обычно в первую очередь версию шейдеров проверяют, их ничем
> не заменишь.


Эт да.
Но не менее важно знать, что у пользователя стоит: ДжеФорс или Радик?
Сколько занимает видеопамяти? Операционка (Версия Windows), а то на всяких там Вистах, усё по-другому работает. И проч. В плоть до процессора.
Шейдеров и установленных драйверов.


 
Sapersky   (2009-11-20 19:37) [33]

GL_RENDERER - "GeForce 7600 GT/PCI/SSE2/3DNOW!"

Ну и чем эта строка не нравится? Можно вытащить и карту, и о процессоре кое-что. Если нужно более надёжно определить "ДжеФорс или Радик" - можно проверить специфичное для ATI/NV расширение (или может быть glGetString(GL_VENDOR)?). Для процессора есть CPUID - см. FastLIB или FastCode-овские библиотеки.

З.Ы. Ты правда дошёл уже до такой степени продвинутости, чтобы писать заточенный под конкретную карту/процессор/драйвер код? :)


 
Б   (2009-11-20 20:23) [34]


> З.Ы. Ты правда дошёл уже до такой степени продвинутости,
>  чтобы писать заточенный под конкретную карту/процессор/драйвер
> код? :)


Нет. Но у меня большие планы. ;D
Ща только спрайтик выведу, а там... эх... ;)


> или может быть glGetString(GL_VENDOR)?).


Точно!

> Операционка

Примеров уйма.

> процессор
> FastLIB или FastCode-овские библиотеки.

Вскроим и посмотрим.

> драйвер

DGLE-2 Вскроим.

З.ы. Видеопамять всё таки надо узнать. :)


 
antonn ©   (2009-11-20 21:59) [35]


> Только оно у меня (полгига) нифига не зарезервировано, мои
> 2 гига занимаются приложениями и файловым кэшем.

а то что почти каждое приложение располагает 2Гб памяти и тоже ничего не резервирует - это нормально? :)


 
Игорь Шевченко ©   (2009-11-20 22:06) [36]

antonn ©   (20.11.09 21:59) [35]

Ты свою шерсть с государственной не путай. У приложения пишут не теоретическую память, а реальную, а тут фигню всякую - сколько бы видеокарта могла взять.


 
antonn ©   (2009-11-20 22:11) [37]

Ну вообще то обычной программе пишут 2Гб, а юзеру показывают реальную "заполненность". Вот и тебе показывают доступную память, а не пишут заполненную.

если бы мне написали что памяти максимум 512, я бы на большее и не расчитывал, а так скажут 1024 - ну я и буду на них расчитывать (путь и получая тормоза) :)


 
Игорь Шевченко ©   (2009-11-21 19:05) [38]

antonn ©   (20.11.09 22:11) [37]


> Ну вообще то обычной программе пишут 2Гб


Где пишут ?


> Вот и тебе показывают доступную память, а не пишут заполненную


Мне показывают "объем видеопамяти". Заметь, не "объем потенциально доступной с взятием в долг у оперативной".



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
15-1258482713
POOP
2009-11-17 21:31
2010.01.17
Клавиатура для программера...


10-1162481216
Note
2006-11-02 18:26
2010.01.17
COM взаимодействие службы Win32 и пользовательского приложения


4-1226584066
CodeMaster
2008-11-13 16:47
2010.01.17
API функция для изменения шрифта TextOut


15-1258178142
Германн
2009-11-14 08:55
2010.01.17
Американцы нашли на Луне воду


2-1259046700
zorik
2009-11-24 10:11
2010.01.17
Уничтожение последней MDIChild-формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский