Missing DirectX Calls for Tearing and Depth Bound Test in D3DMetal and GPTK 3

I want to address the missing or incomplete DirectX calls from D3DMetal and Game Porting Toolkit 3. These missing calls have in part caused issue with our porting process and we are reconsidering.

Missing or Incomplete Calls

  • DXGI_FEATURE_PRESENT_ALLOW_TEARING — IDXGIFactory5::CheckFeatureSupport — this calls has to do with how VSync is handled and some modern games require it to initialize. Currently D3DMetal return 0 maybe by design but most likely because it’s not integrated. Adding a stub that returns 1 can fix this. I’m my use case I simply Noped the check and forced it to continue.

  • D3D12_FEATURE_D3D12_OPTIONS2.DepthBoundsTestSupported — this call is also not present. Which causes games to not initialize rendering. Thankfully this was fixed by once again skipping the check. But this is essential for water rendering. This could be one reason currently water is not rendering in our game.

  • IDXGIOutput6::GetDesc1().ColorSpace — returns DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 (SDR) on external HDR compatible displays. We were able to fix this by forcing HDR to be enabled. It should return HDR support.

These calls may exist but they need to be updated to return the correct values. Specifically for depth bound test you can reference MoltenVK which sets it up on top of Metal since it’s not a native feature. The water issue could be also an issue with how the shaders are compiled. But I’m unable to check because of the closed source nature of GPTK and its debuggers.

What is a better way we can debug our game to see why the water isn’t rendering. Does D3DMetal have some debug options or something similar?

Feedback Number

FB22330617 - Missing DirectX Calls for Tearing and Depth Bound Test in D3DMetal and GPTK 3

We hope these issues are resolved quickly because we were thinking of a simultaneous release with our Windows version, but we can't ship with such large bugs.

I think you are misunderstanding the goal of GPTK. The D3DMetal library is not meant to be shipped with your game, it's just an environment to do a preliminary test.

Or am I misunderstanding your question?

Yeah but we want to test it and we've simply got a singular person working on it right now. And we don't know if its worth if we can't even get it to play correctly.

Also it seems like the water is being placed in the extreme y axis. How can we look at the exact shader compilation debug. Does D3DMetal have this?

I don't know, but an actual port will require a manual conversion to Metal, and automated shader conversion maybe, and manual ones for some shaders, so something not working in D3Metal will make little difference.

Well anyway just wanted to address the missing calls port will still require a lot more than what the D3DMetal layer can offer. Hopefully it's patched.

Missing DirectX Calls for Tearing and Depth Bound Test in D3DMetal and GPTK 3
 
 
Q