Menu

Nvidia emulation?

Lukasz
2021-05-26
2021-05-27
  • Lukasz

    Lukasz - 2021-05-26

    Hi!
    I've got a program (CAD, very small company) that works on all Nvidia Cards and works prefectly on Intel HD but doesn't work well on Intel Iris Plus.
    It loads but when I'm trying to select any curve or plane it quits (no message, nothing).
    When I delete the driver and there is a generic windows driver the program works (however pretty slowly).
    Any hints that you could give me? there are sooo many options and I've been playing with it for a while now but it's a hit and miss and would rather have an input from someone who actually knows what he/she is doing.

    Please help! My new laptop is now useless (and I really wasn't expecting that!).

    Thanks in advance!
    L

     
    • gho

      gho - 2021-05-26

      Well, it seems likely that there is some bad capability that deceives the software. Turning the capability off, that is making the program to believe that the video card is dumber than it is, could fix. Deleting the card's custom driver is rude way to tell the program that the card is not cleverer than a standard VGA, no extra features available, no HW acceleration, so no wonder that the program becomes slower.
      Now comes the problem: there are hundreds of different capabilities and many ways to access to them, depending on the program technology (is it using DirectDraw, Direct3D, OpenGL, SDL, GDI, what else?) so it is very hard to tell where to put your hands.
      Is is possible to have a copy of the program? (in case, I can swear you I'll throw it away after use, and if necessary I will test it disconnected from the network)
      If not, could have the program executable? Even without running it it would be possible to guess the technology by browsing its internal structure.
      Finally, maybe you could run the game under DxWnd control and send me some logs. This would be a slow process because depending on the output of a test I could have to tell you to change something in the logs settings and repeat the test again and again ...
      Well, let me know ...

       
  • dippy dipper

    dippy dipper - 2021-05-26

    As blind test you could also try the Directx(2) tabs "Capabilities" options. Particularly the "Set minimal caps" option might help. There is also the more generic "Compat." tab option "Limit available resources". You need to have enabled the "Expert mode" to see these settings and additionally you may need to configure an early hook like "Inject suspended process" for these options to take effect.

    Edit:
    If it uses OpenGL then the "OpenGL" tab "Hook OpenGL" together with "OpenGL extensions lie" and/or "OpenGL extensions tim" might help.

     

    Last edit: dippy dipper 2021-05-26
    • gho

      gho - 2021-05-26

      Wise suggestions, but in both cases remember to set "Hook / Inject suspended process" because the capabilities query may easily be done before the late hook otherwise.

       
  • Lukasz

    Lukasz - 2021-05-26

    Guys, thank you very much for the suggestions.
    The program is HASP key protected so you won't be able to use it anyway.
    I could send you the executable I guess - don't know if it will help - can you give me an @ address?
    I have tried to apply all of fixes suggested above. some of them seemed to help a bit (it took the program longer to crash than usual) but none of it solved the problem :/
    I can't set up the "Inject suspended process" - Injection: "Virtual ProtectEx error = 487"

    Maybe an AnyDesk? then you can actually start the program (since I've got the HASP key plugged in). If it's not too much to ask!

    Edit:
    some time ago I was trying to get it to work on parallels on my imac and there was an issue that the actions that now crash the computer were causing the edit window (just the window where the CAD model is not the menus) go black.
    The support of Parallels told me to use a special parameter of "video.gl3=2".
    It made the program work but the video was very blurry so i decided to work on windows.
    Maybe it makes sense to you guys?

    Edit2:
    The program is written in Qt - C++ toolkit for cross-platform app dev and was developed around '13-14

     

    Last edit: Lukasz 2021-05-26
  • gho

    gho - 2021-05-26

    The executable could help to tell the technology, but I would bet that it's based on OpenGL, so it's not necessary.
    Error 487 is "Attempt to access invalid address. ", quite weird, but be sure you have admin rights (or check the "Main / Acquire admin caps" flag). Also be sure that you're hooking the main CAD program and not only some small frontend. Being an OpenGL program you surely will have to set also the "OpenGL / Hook OpenGL" flag.
    Finally, since I don't think you're interested to run the program in a window, uncheck the "Main / Run in window" flag.

     
    • dippy dipper

      dippy dipper - 2021-05-26

      The executable could help to tell the technology, but I would bet that it's based on OpenGL, so it's not necessary.

      I'm not 100% sure about that.

      Lukasz said:

      The support of Parallels told me to use a special parameter of "video.gl3=2".

      Which just tells us that Parallels (which is a Windows on MAC emulator if I understood correcly) needed that setting to render the CAD app properly. That could mean that the CAD app also uses OpenGL or just that Parallers was having issues with the host GPU.

      As for the failure to initiate an early hook I suspect that the HASP key could be preventing it. We are talking about business software needing a hardware dongle attachment to operate after all.

       
  • Lukasz

    Lukasz - 2021-05-26

    I have to say it most probably is OpenGL as in the /bin/ folder are files:
    Name_Of_The_SoftwareOpenGL.dll and Qt5OpenGL.dll
    I can see that in the graphics card i use on my older computer the top version supported is OpenGL4.0 - is it possible to force the app to use OpenGL 4.0 istead of 4.6?
    I can see that the OpenGL.dll of the QT is from 2014

     
  • dippy dipper

    dippy dipper - 2021-05-26
    • is it possible to force the app to use OpenGL 4.0 istead of 4.6?

    Not exactly. But you could force a limit on the number of OpenGL extensions the app sees. You could try QeffectsGL:
    https://github.com/crystice-softworks/QeffectsGL

    And cofigure the .ini file with the line:
    ExtensionLimit=4000
    Play around with different numbers to find a possible sweet spot. Assuming of course QeffectsGL even works with the app.

    There is also GLIntercept:
    https://github.com/dtrebilco/glintercept
    Which might help in debugging and extension limiting although it is also geared towards older OpenGL implementations.

     
  • gho

    gho - 2021-05-26

    About desperate measures, you could also try this opengl wrapper (surely unnoticed by HASP) that is art of the DxWnd toolset. The wrapper is named opengl32liar.dll to avoid troubles, but it should be copied to the program folder and renamed as opengl32.dll. Be sure, in this operation to NEVER override or delete a real opengl32.dll file. The wrapper redirects all opengl calls to the real system library except for the call that returns the opengl capabilities, returning a fake void capability list.
    If it doesn't work, move it to the waste bin.

     
    • dippy dipper

      dippy dipper - 2021-05-26

      It might not be as simple as lying that no extensions are supported as we are dealing with a relatively modern (2014) OpenGL software. In between OpenGL 4.0 and 4.6 there are quite a number of core extensions that have become available. However the program might still need some of the earlier extensions to function properly.

      See:
      https://www.khronos.org/opengl/wiki/History_of_OpenGL

      It might also be that we are on a wild goose chase. It seems odd that a 2014 OpenGL application would suffer from newer OpenGL extension being available. Also one would imagine that for example a buffer overflow reading the extension list would happen right at the beginning and not just when the user started to draw 3D shapes.

      P.S.
      There is also a wrapper that translates OpenGL into Direct3D here:
      https://github.com/crystice-softworks/QindieGL
      But since it is again geared towards older OpenGL games it might be useless in this case.

      Finally if all else fails one could still try grabbing a dxwnd.log and posting it here. Details on how to take logs with Dxwnd are explained in the tutorial section of the Help.

       

      Last edit: dippy dipper 2021-05-26
      • dippy dipper

        dippy dipper - 2021-05-26

        Just came to my mind that a CAD program dating from 2014 might very well be 64-bit. If that's the case then Dxwnd and all the mentioned OpenGL wrappers are useless since they work only with 32-bit apps.

         
  • Lukasz

    Lukasz - 2021-05-27

    Oh noes! so sorry to have taken up so much of your time.
    Of course the software is 64bit..

    Does it mean that there's nothing we can do? I thought the changes in settings of DXWND did make some differences.

    Thanks!

     
    • gho

      gho - 2021-05-27

      DxWnd can hook 32 bit programs only. There is a DxWnd warning message about that when you try to hook anything that doesn't have a PE32 Windows format, so I suspect that you hooked some Win32 frontend program, useless for the purpose (or you used a very old DxWnd release, or you didn't read the message ... ;).
      Probably you could try some opengl wrapper like my opengl32liar, but built for 64bit architecture, but I can't be of much help, sorry.

       
    • White

      White - 2021-05-27

      Do you something like that (screenshot) when adding the .exe to DxWnd? Or running it? If not then maybe all is not lost, it would mean the .exe is 32bit, wouldn't it?

       

Log in to post a comment.