Skip to content

Implement Direct3D9 Frontend - #1275

Merged
doitsujin merged 1297 commits into
doitsujin:masterfrom
misyltoad:d9vk
Dec 16, 2019
Merged

Implement Direct3D9 Frontend#1275
doitsujin merged 1297 commits into
doitsujin:masterfrom
misyltoad:d9vk

Conversation

@misyltoad

@misyltoad misyltoad commented Dec 16, 2019

Copy link
Copy Markdown
Collaborator

It's finally here!~

This PR merges D9VK into DXVK, which is a Direct3D9 implementation using the DXVK backend.

The reason being is D9VK is usable and mostly feature complete now, even having some additional features not exposed by other implementations, and it would be nice to have all our D3D implementations in one place/project! 😄

It's finally time to merge!

What's next?

Once this gets merged, the d3d9 frontend will then be developed inside this repository.
What's to-do feature wise to be properly complete as of this PR:

  • Fixed function bumpmapping
  • Fixed function premodulation
  • Software cursor (hardware cursor is currently implemented)
  • ComposeRects (from D3D9Ex, however I have no test case for this)
  • Custom Border Color (needs ext)
  • Depth Bias Fixes (needs ext)

and of course...

Lots of bug fixing!

Have fun!

Love from Josh ðŸļâĪ~

misyltoad and others added 30 commits December 16, 2019 02:03
However, SetGammaRamp does persist between device reset and will be automatically applied if we do go into fullscreen based on testing.
Fixes Haswell not working as it doesn't support vertexPipelineStoresAndAtomics.
Required for fixed function -- might change this solution later on however
Fixes a soft-ctd in A Hat in Time
This fixes a rendering issue in fr-030 candytron.
Fixes the minimap border aliasing in GTA IV.
Matches OpenGL/Gallium behaviour when not using vertices in window space.

Found by @K0bin (Robin Kertels <robin.kertels@gmail.com>)
Fixes The Witcher 2, which calls CreatePixelShader and then CreateVertexShader with the same result ptr and uses the result of whatever call succeeds

Supersedes doitsujin#361
The new method returns a value instead of a pointer.
This allows us to do two things:
- Easily implement range checks for relative indexing
- Return defs directly rather than through a variable
Instead, use the constant IDs directly. Simplifies some code.
Fixes decompilation/recompilation in RenderDoc
Fixes recompilation/decompilation in RenderDoc
Avoids passing a bunch of refs manually
Counts the number of sampler pairs (color + depth) we create.
Enable this option to disable exclusive fullscreen by default.

Closes doitsujin#475
Cleans up some messy lambda stuff we were doing.
Adds a fast path for when we aren't doing SWVP.

Eliminate std::array from the constant set structures.
Pretty silly oversight on my behalf.
Matches documentation and test behaviour
â€Ķeblocks

Fixes and matches ref-counting for device child resources to native d3d9.
Fixes memory and resource leaks in stateblocks, deletion and device resetting.

@Margen67 Margen67 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ðŸļ

@doitsujin

Copy link
Copy Markdown
Owner

ðŸļ

@Valmar33

Copy link
Copy Markdown

My prayers have been answered! Praise the frog! ðŸļ

@doitsujin
doitsujin merged commit 54ed8f0 into doitsujin:master Dec 16, 2019
Fincer added a commit to Fincer/dxvk-wine-autobuilder that referenced this pull request Dec 16, 2019
@rado84-github

Copy link
Copy Markdown

Do you know what would be even nicer? To have a D12VK, so that we can play DX12 game in Linux.

@ZachBacon

Copy link
Copy Markdown

@IvoAndonov well... Technically there's vkd3d for that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.