Page 2 of 2

Re: GPU Name

Posted: Wed Jul 27, 2011 1:03 am
by citystate
IdeasVacuum wrote:citystate 100% correct, definitely not talking out of his hat :mrgreen:
oh, I WAS... it's just this time I happened to be right :P

Re: GPU Name

Posted: Wed Jul 27, 2011 1:17 am
by netmaestro
Yes I have Intel onboard chip, I don't use a video card. Also, to minimize your desktop footprint, the window you create for your windowedscreen can be invisible. Then nothing shows at all.

Re: GPU Name

Posted: Wed Jul 27, 2011 1:18 am
by IdeasVacuum
OK, a really quick way to get basic info about the Graphics card is to use the OpenGL command glGetString:

Code: Select all

      #GL_VENDOR     = $1F00
      #GL_RENDERER   = $1F01
      #GL_VERSION    = $1F02
      #GL_EXTENSIONS = $1F03

      InitSprite()

      WinId = OpenWindow(0, 0, 0, 100, 100, "OpenGL")
      OpenWindowedScreen(WinId,0,0,100,100,0,0,0)

       sGlVendor.s = PeekS(glGetString_(#GL_VENDOR))
       sGlRender.s = PeekS(glGetString_(#GL_RENDERER))

       Debug sGlVendor
       Debug sGlRender

      CloseScreen()

Re: GPU Name

Posted: Wed Jul 27, 2011 1:24 am
by IdeasVacuum
#PB_Window_Invisible - great tip netmaestro, thank you!

Re: GPU Name

Posted: Mon Aug 15, 2011 5:03 pm
by Hi-Toro
Windows only:

Code: Select all

; Stuff required by GetSystemFolder ()...

#CSIDL_SYSTEM = $25

; Returns System folder...

Procedure.s GetSystemFolder ()
    location$ = Space (#MAX_PATH)
    GetSystemDirectory_ (@location$, #MAX_PATH)
    ProcedureReturn location$
EndProcedure

; Windows 9x or NT? Returns #VER_PLATFORM_WIN32_NT (NT, 2000, XP, etc) or #VER_PLATFORM_WIN32_WINDOWS (95, 98)...

Procedure GetWindowsFamily ()
    os.OSVERSIONINFO
    os\dwOSVersionInfoSize = SizeOf (OSVERSIONINFO)
    GetVersionEx_ (@os)
    ProcedureReturn os\dwPlatformId
EndProcedure

; Name of primary video driver...

Procedure.s VideoDriver ()

    Select GetWindowsFamily ()
    
        Case #VER_PLATFORM_WIN32_NT
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    firstvid$ = Space (size)

                    If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS

                        If LCase (Left (firstvid$, 18)) = "\registry\machine\"
                            firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
                        EndIf

                        If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS

                            If  RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
                                device$ = Space (size)
                                RegQueryValueEx_ (devkey, "Device Description", #Null, #Null, @device$, @size)
                                ; Name is now in device$, or ""...
                            EndIf

                            RegCloseKey_ (devkey)

                        EndIf

                    EndIf
                
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

        Case #VER_PLATFORM_WIN32_WINDOWS
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    device$ = Space (size)

                    RegQueryValueEx_ (vidkey, "DriverDesc", #Null, #Null, @device$, @size)

                    ; device$ now contains driver name or ""...
                    
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

    EndSelect
    
    ProcedureReturn device$
    
EndProcedure

; Returns primary video memory in bytes (use 'result / 1024 / 1024' for MB)...

Procedure VideoMemory ()

    Select GetWindowsFamily ()
    
        Case #VER_PLATFORM_WIN32_NT
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    firstvid$ = Space (size)

                    If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS

                        If LCase (Left (firstvid$, 18)) = "\registry\machine\"
                            firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
                        EndIf

                        If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS

                            RegQueryValueEx_ (devkey, "HardwareInformation.MemorySize", #Null, #Null, @totalmem, @size)
                            
                            ; totalmem contains memory size or 0...
                            
                            RegCloseKey_ (devkey)

                        EndIf

                    EndIf
                
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

        Case #VER_PLATFORM_WIN32_WINDOWS
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\INFO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    firstvid$ = Space (size)

                    RegQueryValueEx_ (vidkey, "VideoMemory", #Null, #Null, @totalmem, @size)
                    
                    ; totalmem contains memory size or 0...
                
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

    EndSelect
    
    ProcedureReturn totalmem
    
EndProcedure

; Returns the actual video driver file name...

Procedure.s VideoDriverDLL ()

    Select GetWindowsFamily ()
    
        Case #VER_PLATFORM_WIN32_NT
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\VIDEO", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    firstvid$ = Space (size)

                    If RegQueryValueEx_ (vidkey, "\Device\Video0", #Null, #Null, @firstvid$, @size) = #ERROR_SUCCESS

                        If LCase (Left (firstvid$, 18)) = "\registry\machine\"
                            firstdev$ = Right (firstvid$, Len (firstvid$) - 18)
                        EndIf

                        If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, firstdev$, 0, #KEY_READ, @devkey) = #ERROR_SUCCESS

                            If  RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, #Null, @size) = #ERROR_SUCCESS
                                device$ = Space (size)
                                If RegQueryValueEx_ (devkey, "InstalledDisplayDrivers", #Null, #Null, @device$, @size) = #ERROR_SUCCESS
                                    device$ = GetSystemFolder () + "\" + device$ + ".dll"
                                EndIf
                            EndIf

                            RegCloseKey_ (devkey)

                        EndIf

                    EndIf
                
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

        Case #VER_PLATFORM_WIN32_WINDOWS
        
            If RegOpenKeyEx_ (#HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\Display\0000\DEFAULT", 0, #KEY_READ, @vidkey) = #ERROR_SUCCESS

                If  RegQueryValueEx_ (vidkey, "drv", #Null, #Null, #Null, @size) = #ERROR_SUCCESS

                    device$ = Space (size)

                    RegQueryValueEx_ (vidkey, "drv", #Null, #Null, @device$, @size)

                    device$ = GetSystemFolder () + "\" + device$
                    
                    ; device$ now contains driver name or ""...
                    
                EndIf
                
                RegCloseKey_ (vidkey)

            EndIf

    EndSelect
    
    ProcedureReturn device$
    
EndProcedure

; Gets file version info. I've forgotten whose code this is -- it's not mine! Please let me know...

Procedure.s GetVersionInfo (file$, getinfo$)

    ;     getinfo$ = "FileDescription"
    ;     getinfo$ = "ProductVersion"
    ;     getinfo$ = "ProductName"
    ;     getinfo$ = "CompanyName"
    ;     getinfo$ = "LegalCopyright"
    ;     getinfo$ = "Comments"
    ;     getinfo$ = "FileVersion"
    ;     getinfo$ = "InternalName"
    ;     getinfo$ = "LegalTrademarks"
    ;     getinfo$ = "PrivateBuild"
    ;     getinfo$ = "SpecialBuild"
    ;     getinfo$ = "Language"

    info$=""

    If FileSize (file$) > 0

        zero = 10

        If OpenLibrary (1, "version.dll")

            length = CallFunction (1, "GetFileVersionInfoSizeA", @file$, @zero) 

            If length

                mem1 = AllocateMemory (length)

                If mem1

                    result = CallFunction (1, "GetFileVersionInfoA", @file$, 0, length, mem1) 

                    If result

                        infobuffer = 0
                        infolen = 0

                        getinfo$ = "\\StringFileInfo\\040904B0\\" + getinfo$
                        result = CallFunction (1, "VerQueryValueA", mem1, @getinfo$, @infobuffer, @infolen)

                        If result
                            info$ = PeekS (infobuffer)
                        EndIf

                    EndIf

                    FreeMemory (mem1)

                EndIf

            EndIf

            CloseLibrary (1)

        EndIf

    EndIf  

ProcedureReturn info$

EndProcedure

; -----------------------------------------------------------------------------
; D E M O . . .
; -----------------------------------------------------------------------------

; Get manufacturer name from video driver DLL...

manufacturer$ = GetVersionInfo (VideoDriverDLL (), "CompanyName")
If manufacturer$ = ""
    manufacturer$ = "[Not found]"
EndIf

info$ = "Manufacturer: " + manufacturer$ + Chr (10) + Chr (10)

; Get video driver name (generally graphics card name)...

video$ = VideoDriver ()
If video$ = ""
    video$ = "[Not found]"
EndIf

info$ = info$ + "Name: " + video$ + Chr (10)

; Get graphics memory...

memory = VideoMemory () / 1024 / 1024
If memory
    mem$ = Str (memory) + " MB"
Else
    mem$ = "[Not found]"
EndIf

info$ = info$ + "Video memory: " + mem$ + Chr (10) + Chr (10)

; Get name of video driver file...

videodll$ = VideoDriverDLL ()
If videodll$ = ""
    videodll$ = "[Not found]"
EndIf

info$ = info$ + "Driver DLL: " + videodll$ + Chr (10)

; Get version number of video driver...

videoversion$ = GetVersionInfo (VideoDriverDLL (), "FileVersion")
If videoversion$ = ""
    videoversion$ = "[Not found]"
EndIf

info$ = info$ + "Driver version: " + videoversion$

; Boing!

MessageRequester ("Main video driver information", info$, #MB_ICONINFORMATION)


Re: GPU Name

Posted: Wed Aug 17, 2011 1:29 am
by IdeasVacuum
That is nice code Hi-Toro, a good example of how to dig info out of the Windows registry. I have found though that the registry info can sometimes be misleading, so now I try to look for other verification methods and only query the registry if I can't find another way.