[d3d9] Check for null image in D3D9DeviceEx::FlushImage() #3662
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes a crash in Tales from the Borderlands (330830) during E1 Chapter4 which is an old regression (worked in Proton 5.13-6).
Reproduction:
save.zip
The game is crashing in D3D9DeviceEx::FlushImage trying to access null image from pResource->GetImage(). D3D9CommonTexture::D3D9CommonTexture doesn't create image for all types of textures. However, the same D3D9CommonTexture::D3D9CommonTexture marks the image for upload with SetAllNeedUpload(), that's how it gets to FlushImage through UploadManagedTextures. There are other places when the image can be marked for upload without checking if it has an image but the game hits this one. Of course there are different ways to fix it, e. g., do a more thorough check in UploadManagedTexture[s], but it seems to me it is easier and more robust to check the pointer in FlushImages rather than hunt all its possible usages.