GPUMonitor Sidebar Gadget

Discussion in 'MSI AfterBurner Application Development Forum' started by stangowner, Mar 21, 2010.

  1. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    Hi Alex,

    Thanks for the head up. I did not realize you were updating this.

    Love the GPU index and ID for the data sources.

    Also, the GPU entries is great idea! Would it be any trouble to also add these (examples off my GTX280):

    • Graphics Core - ex. G100/GT200 revision A2 (240sp)
    • Memory amount - ex. 1048576 KB
    • BIOS Title - ex. GT200 P651 SKU 0000 VGA BIOS
    • BIOS Version - ex. 62.00.0E.00.1A
     
  2. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    17,126
    Likes Received:
    6,689
    There is no SP count and BIOS title detection in AB, but the rest things (everything displayed in <i> window including core family, RAM amount and BIOS version) can be added to GPU descriptors array with no problem.

    Done. Format has been changed to:

    Code:
    /////////////////////////////////////////////////////////////////////////////
    //
    // This header file defines MSI Afterburner Hardware Monitoring shared memory format
    //
    /////////////////////////////////////////////////////////////////////////////
    #ifndef _MAHM_SHARED_MEMORY_INCLUDED_
    #define _MAHM_SHARED_MEMORY_INCLUDED_
    /////////////////////////////////////////////////////////////////////////////
    // v2.0 header
    typedef struct MAHM_SHARED_MEMORY_HEADER
    {
    	DWORD	dwSignature;
    		//signature allows applications to verify status of shared memory
    
    		//The signature can be set to:
    		//'MAHM'	- hardware monitoring memory is initialized and contains 
    		//			valid data 
    		//0xDEAD	- hardware monitoring memory is marked for deallocation and
    		//			no longer contain valid data
    		//otherwise the memory is not initialized
    	DWORD	dwVersion;
    		//header version ((major<<16) + minor)
    		//must be set to 0x00020000 for v2.0
    	DWORD	dwHeaderSize;
    		//size of header
    	DWORD	dwNumEntries;
    		//number of subsequent MAHM_SHARED_MEMORY_ENTRY entries
    	DWORD	dwEntrySize;
    		//size of entries in subsequent MAHM_SHARED_MEMORY_ENTRY entries array
    	time_t	time;
    		//last polling time
    
    	//WARNING! The following fields are valid for v2.0 and newer shared memory layouts only
    
    	DWORD	dwNumGpuEntries;
    		//number of subsequent MAHM_SHARED_MEMORY_GPU_ENTRY entries
    	DWORD	dwGpuEntrySize;
    		//size of entries in subsequent MAHM_SHARED_MEMORY_GPU_ENTRY entries array
    
    } MAHM_SHARED_MEMORY_HEADER, *LPMAHM_SHARED_MEMORY_HEADER;
    /////////////////////////////////////////////////////////////////////////////
    #define	MAHM_SHARED_MEMORY_ENTRY_FLAG_SHOW_IN_OSD				0x00000001
    	//this bitmask indicates that data source is configured to be displayed in On-Screen Display
    #define	MAHM_SHARED_MEMORY_ENTRY_FLAG_SHOW_IN_LCD				0x00000002
    	//this bitmask indicates that data source is configured to be displayed in Logitech keyboard LCD
    #define	MAHM_SHARED_MEMORY_ENTRY_FLAG_SHOW_IN_TRAY				0x00000004
    	//this bitmask indicates that data source is configured to be displayed in tray icon
    /////////////////////////////////////////////////////////////////////////////
    #define MONITORING_SOURCE_ID_UNKNOWN							0xFFFFFFFF
    #define MONITORING_SOURCE_ID_GPU_TEMPERATURE					0x00000000
    #define MONITORING_SOURCE_ID_PCB_TEMPERATURE					0x00000001
    #define MONITORING_SOURCE_ID_FAN_SPEED							0x00000010
    #define MONITORING_SOURCE_ID_FAN_TACHOMETER						0x00000011
    #define MONITORING_SOURCE_ID_CORE_CLOCK							0x00000020
    #define MONITORING_SOURCE_ID_SHADER_CLOCK						0x00000021
    #define MONITORING_SOURCE_ID_MEMORY_CLOCK						0x00000022
    #define MONITORING_SOURCE_ID_GPU_USAGE							0x00000030
    #define MONITORING_SOURCE_ID_MEMORY_USAGE						0x00000031
    #define MONITORING_SOURCE_ID_GPU_VOLTAGE						0x00000040
    #define MONITORING_SOURCE_ID_AUX_VOLTAGE						0x00000041
    #define MONITORING_SOURCE_ID_MEMORY_VOLTAGE						0x00000042
    #define MONITORING_SOURCE_ID_FRAMERATE							0x00000050
    /////////////////////////////////////////////////////////////////////////////
    // v2.0 entry (main array of entries follows immediately by the header)
    typedef struct MAHM_SHARED_MEMORY_ENTRY
    {
    	char	szSrcName[MAX_PATH];
    		//data source name (e.g. "Core clock")
    	char	szSrcUnits[MAX_PATH];
    		//data source units (e.g. "MHz")
    
    	char	szLocalizedSrcName[MAX_PATH];
    		//localized data source name (e.g. "×àñòîòà ÿäðà" for Russian GUI)
    	char	szLocalizedSrcUnits[MAX_PATH];
    		//localized data source units (e.g. "ÌÃö" for Russian GUI)
    
    	char	szRecommendedFormat[MAX_PATH];
    		//recommended output format (e.g. "%.3f" for "Core voltage" data source) 
    
    	float	data;
    		//last polled data (e.g. 500MHz)
    		//(this field can be set to FLT_MAX if data is not available at
    		//the moment)
    	float	minLimit; 
    		//minimum limit for graphs (e.g. 0MHz)
    	float	maxLimit;
    		//maximum limit for graphs (e.g. 2000MHz)
    
    	DWORD	dwFlags;
    		//bitmask containing combination of MAHM_SHARED_MEMORY_ENTRY_FLAG_...
    
    	//WARNING! The following fields are valid for v2.0 and newer shared memory layouts only
    
    	DWORD	dwGpu;
    		//data source GPU index (zero based) or 0xFFFFFFFF for global data sources (e.g. Framerate)
    	DWORD	dwSrcId;
    		//data source ID
    
    } MAHM_SHARED_MEMORY_ENTRY, *LPMAHM_SHARED_MEMORY_ENTRY;
    /////////////////////////////////////////////////////////////////////////////
    // v2.0 GPU entry (array of GPU entries follows immediately by the main array)
    typedef struct MAHM_SHARED_MEMORY_GPU_ENTRY
    {
    	char	szGpuId[MAX_PATH];
    		//GPU identifier represented in VEN_%04X&DEV_%04X&SUBSYS_%08X&REV_%02X&BUS_%d&DEV_%d&FN_%d format
    		//(e.g. VEN_10DE&DEV_0A20&SUBSYS_071510DE&BUS_1&DEV_0&FN_0)
    
    	//NOTE: the rest fields can be empty if data is not available
    
    	char	szFamily[MAX_PATH];
    		//GPU family (e.g. "GT216")
    	char	szDevice[MAX_PATH];
    		//display device description (e.g. "GeForce GT 220")
    	char	szDriver[MAX_PATH];
    		//display driver description (e.g. "6.14.11.9621, ForceWare 196.21")
    	char	szBIOS[MAX_PATH];
    		//BIOS version (e.g. 70.16.24.00.00)
    	DWORD	dwMemAmount;
    		//on-board memory amount in KB (e.g. 1048576)
    
    } MAHM_SHARED_MEMORY_GPU_ENTRY, *LPMAHM_SHARED_MEMORY_GPU_ENTRY;
    /////////////////////////////////////////////////////////////////////////////
    #endif //_MAHM_SHARED_MEMORY_INCLUDED_
    
     
    Last edited: Nov 24, 2010
  3. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    Wow, that is fast service! Looks great.

    I assume the MAHM_SHARED_MEMORY_ENTRY dwGpu will always match the MAHM_SHARED_MEMORY_GPU_ENTRY array index? Meaning any data sources reporting a GPU source of 0 will come from the card listed in the first element of GPU Entry Array?

    Are you still going to be using unique strings for backwards compatibility (szSrcName and szLocalizedSrcName)? So for instance, today we may have something like "GPU temperature" on single gpu systems, but dual card systems would have "GPU1 temperature" and "GPU2 temperature". Or will both of these say "GPU temperature" now and I'd now have to check dwGpu and dwSrcId to make them unique?

     
  4. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    17,126
    Likes Received:
    6,689


    Correct. The only exception is dwGpu = 0xFFFFFFFF, which means that data source is global one and doesn't apply to some specific GPU (e.g. Framerate graph).

    Yes.

    It will stay the same.
     

  5. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    Thanks for the response. I think it looks good to me! That will give me a little time to update the gadget and rainmeter plugin. It'll be great to include this additional info in there without any trouble. Good work!
     
  6. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    17,126
    Likes Received:
    6,689
    Glad to help you, Nick.
     
  7. rk0rn

    rk0rn Member

    Messages:
    17
    Likes Received:
    0
    GPU:
    ATI GIGABYTE 4550
    Good gadget. I have one question why is it displaying my default cor/mem instead of my overclocked ones ?
     
  8. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    Not sure what to tell you. I saw your video as well. I think your card has other issues, and this is in now way related to the gadget.
     
  9. Unwinder

    Unwinder Ancient Guru Staff Member

    Messages:
    17,126
    Likes Received:
    6,689
  10. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    The GPUMonitor.exe file linked in the first post has been updated to support the shared memory changes in MSI Afterburner 2.1. No changes to the gadget itself are needed.

    To update, simply close the gadget, download and replace the file per the instructions, and reopen the gadget.

    This is update is backwards compatible with 1.x and 2.0, so if you roll back Afterburner, you will not have to modify the gadget at all.
     

  11. Ricky78

    Ricky78 Active Member

    Messages:
    77
    Likes Received:
    2
    GPU:
    Gigabyte GV-N1060G1
    Thank you for the fast update!

    EDIT: Mmm... the exe is still the old one, it has the same CRC, and it doesn't work. :3eyes:
     
    Last edited: Dec 9, 2010
  12. Darren Hodgson

    Darren Hodgson Ancient Guru

    Messages:
    17,212
    Likes Received:
    1,536
    GPU:
    NVIDIA RTX 4080 FE
    I was a bit confused as to why the GPU Gadget had stopped working after updating to Afterburner v2.1.0 beta 5 but all is well now. The new GPUGadget.exe is working fine here and was slightly larger than the one I was previously using, which I obviously overwrote with the new file.

    stangowner is referring to the second link to the modified GPUGadget.exe file not the first, Ricky78.
     
  13. Ricky78

    Ricky78 Active Member

    Messages:
    77
    Likes Received:
    2
    GPU:
    Gigabyte GV-N1060G1
    I know, but at the time of my post it was still the old one. ;)
    Now it's the new version, with a different CRC, and it works.
    Old CRC: B8E32ACC
    New CRC: 592C8DD6

    THX Nick!
     
  14. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    I'm unsure as to why it would have not been updated. I ftp'd the file, downloaded it through the link in the first post, and verified the version number before even posting in this forum that it was updated. You did not even reply until 4 hours later. Maybe it was cached on a proxy server somewhere in between you and my web server?

    Regardless, glad you got it going again!
     
  15. Ricky78

    Ricky78 Active Member

    Messages:
    77
    Likes Received:
    2
    GPU:
    Gigabyte GV-N1060G1
    I don't know but who cares, problem solved. ;)
    Thanks again for your work! :)
     

  16. Darren Hodgson

    Darren Hodgson Ancient Guru

    Messages:
    17,212
    Likes Received:
    1,536
    GPU:
    NVIDIA RTX 4080 FE
    Yeah, thanks for the quick fix.
     
  17. NathanielB

    NathanielB Guest

    Messages:
    8
    Likes Received:
    0
    GPU:
    Nvidia GTX 550 ti 1GB
    Your the man, its great, rivatuner gadget now fully works with my GTX 550 ti so thank you so much for all your time and help dude :)
     
  18. stangowner

    stangowner Guest

    Messages:
    607
    Likes Received:
    11
    GPU:
    2xMSI N550GTX-Ti Cy II OC
    No problem, let me know if you have any more issues.
     
  19. 00pontiac

    00pontiac Member

    Messages:
    15
    Likes Received:
    0
    GPU:
    Radeon HD6950's (x2)
    never mind.... I think I've figured my error lol
     
    Last edited: Apr 16, 2011
  20. Vodkaholic

    Vodkaholic Guest

    Messages:
    7
    Likes Received:
    0
    GPU:
    ATI
    Hi stangowner

    Am having some trouble with this
    all I get is "ERROR rivaTuner hardware monitor data not found."
    Ive replaced the exe and am using afterburner 2.1
    any idea's whats up or what ive missed

    Cheers
     

Share This Page