CapFrameX OSD with RTSS

Discussion in 'Rivatuner Statistics Server (RTSS) Forum' started by ZeroStrat, Nov 4, 2019.

  1. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
  2. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    You’re using reserved ASCII codes. Cannot explain it further due to more priority tasks,sorry, you’ve to figure it out yourself.
     
  3. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    We figured it out. It was a culture thing.

    Another question. How can I set graph names? RTSS_EMBEDDED_OBJECT_GRAPH does not have a field for a name.
     
  4. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    Graph itself is just a collection of line primitives, it doesn't have a name. Simply display the text next to the object you're embedding, so hypertext contain something like "My graph name\n<OBJ=….>"
     

  5. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    Thx, gonna try this.
     
  6. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    BetA, RodroG and Unwinder like this.
  7. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    Sensor data logging and graphs on Analysis page.
    [​IMG]
     
    BetA, PhazDelta, RodroG and 1 other person like this.
  8. PhazDelta

    PhazDelta Active Member

    Messages:
    78
    Likes Received:
    53
    GPU:
    GTX 1080 8GB
    hello ZeroStrat ,

    you have done great job amazing tool thank you for you hard work

    [​IMG]
     
    ZeroStrat likes this.
  9. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    Thanks! If you want to use sensor logging, you must activate it on the Capture page. You can also set the refresh rate independently from the overlay refresh rate.
     
    Last edited: Apr 1, 2020
  10. PhazDelta

    PhazDelta Active Member

    Messages:
    78
    Likes Received:
    53
    GPU:
    GTX 1080 8GB
    i will do next time , can you add program start with windows minimz to try . :)
     

  11. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    Yes, we're going to do this in the next version.
     
    PhazDelta likes this.
  12. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    @Unwinder Is it possible to get the 3D API info of the processes which are hooked by RTSS?

    Something like
    string apiString = GetApiInfo("processName");

    Greets, ZeroStrat
     
  13. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    I’m far from PC so I cannot say exact field name, but there should be 3D API usage type/bitfield flag for each hooked process directly in shared memory. Search for something like D3D9 in the header. Also you can use <APP> hypertext tag so RTSS automatically replace it with 3D API abbreviation in OSD.
     
  14. Taxxor

    Taxxor New Member

    Messages:
    9
    Likes Received:
    1
    GPU:
    RX5700XT Nitro+
    That we know^^
    We want to save the API name to our capture files to show inside the tool. PresentMon can't read it, but since the <APP> tag makes RTSS show the API we just needed to know where the <APP> tag gets its information from.

    Greets, Taxxor(Co-Developer^^)
     
  15. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    @Unwinder I've opend the shared memory example from the SDK folder. What I found are flags (APPFLAG_D3D12 or APPFLAG_VULKAN e.g.) in the RTSSSharedMemory header.

    But RTSS_SHARED_MEMORY::LPRTSS_SHARED_MEMORY_OSD_ENTRY has no API flags. I don't know how to get the flag, sorry.

    Edit: I found some flags in structure.
    Code:
    //application identification related fields
    
    DWORD    dwProcessID;
    //process ID
    char    szName[MAX_PATH];
    //process executable name
    DWORD    dwFlags;
    //application specific flags
    
    //instantaneous framerate related fields
    
    DWORD    dwTime0;
    //start time of framerate measurement period (in milliseconds)
    
    //Take a note that this field must contain non-zero value to calculate
    //framerate properly!
    DWORD    dwTime1;
    //end time of framerate measurement period (in milliseconds)
    DWORD    dwFrames;
    //amount of frames rendered during (dwTime1 - dwTime0) period
    DWORD    dwFrameTime;
    //frame time (in microseconds)
    
    
    //to calculate framerate use the following formulas:
    
    //1000.0f * dwFrames / (dwTime1 - dwTime0) for framerate calculated once per second
    //or
    //1000000.0f / dwFrameTime for framerate calculated once per frame
    
    //framerate statistics related fields
    
    DWORD    dwStatFlags;
    //bitmask containing combination of STATFLAG_... flags
    I'm going to check "dwFlags" and "dwStatFlags".
     
    Last edited: May 3, 2020

  16. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    You’re looking in wrong place. Flags are not supposed to be inside OSD entry (which is containing info specific to your own OSD client application). There is one more array inside shared memory with hooked application specific entries. Your target flags are there because they are different for each running 3D application and there can be multiple 3D apps running and using different 3D APIs simultaneously.
     
  17. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    The only array in RTSS_SHARED_MEMORY is
    Code:
    DWORD dwDesktopVideoCaptureStat[5];
    This array includes the API info? So I'm gonna check this instead. ^^
     
  18. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    Nope, it is arrApp. Array of RTSS_SHARED_MEMORY_APP_ENTRY.
     
    ZeroStrat likes this.
  19. ZeroStrat

    ZeroStrat Member

    Messages:
    37
    Likes Received:
    16
    GPU:
    RTX 2080 Ti
    @Unwinder Step by step I'm going forward. ^^ I've wrote a function and debugged into it. For example I've got the shared memory app entry infos of Wolfenstein Youngblood which uses the Vulkan API.

    Shared memory flag is APPFLAG_VULKAN 0x0000000A (decimal 10). Here's a screenshot of all property values (watch window VS). Where to find Vulkan flag here?
    upload_2020-5-6_10-15-6.png

    Edit: I launched a DX12 game. Now dwFlags is 65544 -> DX12 = Vulkan - 2. That matches the flag list.
    Code:
    #define APPFLAG_OGL                                             0x00000001
    #define APPFLAG_DD                                                0x00000002
    #define APPFLAG_D3D8                                            0x00000003
    #define APPFLAG_D3D9                                            0x00000004
    #define APPFLAG_D3D9EX                                       0x00000005
    #define APPFLAG_D3D10                                          0x00000006
    #define APPFLAG_D3D11                                          0x00000007
    #define APPFLAG_D3D12                                          0x00000008
    #define APPFLAG_D3D12AFR                                   0x00000009
    #define APPFLAG_VULKAN                                       0x0000000A
    
    So DX11 must be 65543... But how can I transform this?

    Edit2: Yes, DX11 is 65543. So dwFlags is a bit mask.

    Edit3: APPFLAG_API_USAGE_MASK 0x0000FFFF = 65535, but still a difference of 1 when checking dwFflags - 65535 != 10 (Vulkan). One bit is missing.
     
    Last edited: May 6, 2020
  20. Unwinder

    Unwinder Moderator Staff Member

    Messages:
    14,859
    Likes Received:
    2,011
    It's a bit mask containing additional application architecture related flags like APPFLAG_ARCHITECTURE_X64 and APPFLAG_ARCHITECTURE_UWP. So mask it with APPFLAG_API_USAGE_MASK and you'll get API usage field.
     

Share This Page