dxvk icon indicating copy to clipboard operation
dxvk copied to clipboard

Battle for Middle Earth 1 - Glitch Glowing Textures

Open arntmk opened this issue 7 months ago • 9 comments

Battle for Middle Earth Patch 2.22

Image Image Image Image

arntmk avatar Jun 05 '25 14:06 arntmk

Hi there and thank you for the report. Please fill out the rest of the bug report template. GPU, driver, OS and a dxvk log. If you are on Windows it should appear next to the games exe. Also if you are able then try to make a apitrace of the game

Blisto91 avatar Jun 05 '25 14:06 Blisto91

Hi there and thank you for the report. Please fill out the rest of the bug report template. GPU, driver, OS and a dxvk log. If you are on Windows it should appear next to the games exe. Also if you are able then try to make a apitrace of the game

GPU: RX580 2048sp Driver: AMD Adrenalin 25.3.1 OS: Windows 10 Pro x64 version 22H2 (OS Build 19045.5854) DXVK Log DUMP

arntmk avatar Jun 05 '25 18:06 arntmk

Please make an apitrace.

K0bin avatar Jun 05 '25 19:06 K0bin

Please make an apitrace.

// DebugView

00000038	6.19376230	[11740] FTH: (11740): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***	
00000039	10.93323421	[11740] [OBS] Failed to open pipe	
00000040	10.94102287	[11740] [OBS] 	
00000041	10.94112206	[11740] graphics-hook.dll loaded against process: lotrbfme.exe	
00000042	10.94123554	[11740] 	
00000043	10.94137383	[11740] [OBS] 	
00000044	10.94147396	[11740] (half life scientist) everything..  seems to be in order	
00000045	10.94158554	[11740] 	
00000046	12.20250130	[11740] D3DX: (WARN) Overloaded ::new and ::delete operators do not conform to C++ standards: 	
00000047	12.20259953	[11740] D3DX: (WARN) An allocation of zero bytes should return a unique non-null pointer to at 	
00000048	12.20270061	[11740] D3DX: (WARN) least zero bytes. Deletion of a null pointer should quietly do nothing. 	
00000049	12.20279980	[11740] D3DX: (WARN) D3DX relies upon this behavior. 	
00000050	12.48694229	[11740] Could not find file 	
00000051	107.53993225	[11740] Could not find file 	
00000052	154.50201416	[11740] Could not find file

arntmk avatar Jun 05 '25 19:06 arntmk

That is not an apitrace.

That just shows that OBS causes problems. Kill OBS and try it again without it.

K0bin avatar Jun 05 '25 20:06 K0bin

That is not an apitrace.

That just shows that OBS causes problems. Kill OBS and try it again without it.

After following the instructions to configure apitrace-12.0-win32, the game crashes

  • Download prebuilt apitrace files:
  • If the game is 32-bit
  • Now you have to copy the appropriate d3d9.dll, d3d11.dll, dxgi.dll and dxgitrace.dll files.
  • Now copy those DLL files into the same folder as the game's .EXE.
  • Launch the game and try to reproduce your issue as fast as possible, then exit the game after that (using ALT+F4 is fine).

- the game crashes

Image

arntmk avatar Jun 06 '25 06:06 arntmk

The issue is also present if you don't apply any of the configs in your dxvk.conf right?

Blisto91 avatar Jun 06 '25 06:06 Blisto91

The issue is also present if you don't apply any of the configs in your dxvk.conf right?

That's right

arntmk avatar Jun 06 '25 06:06 arntmk

https://drive.proton.me/urls/YAMK1CQAR8#KSLY6Ncpeo8J apitrace for reproduction. @WinterSnowfall gave it a look but is not sure what is up yet and probably need a second opinion. At least it doesn't seem to be a format issue

Blisto91 avatar Jun 14 '25 16:06 Blisto91

@K0bin Fixing this is beyond me, but at least I've narrowed down the cause: specular material values.

Archer.txt

In the apitrace excerpt above, everything up to the first DrawIndexedPrimitive call is a unit that is rendered correctly. Down from that to the final DrawIndexedPrimitive is an archer that is being oversaturated with light in dxvk.

We can notice that on archer in question the SetMaterial call has: Specular = {r = 1, g = 1, b = 0.9529412, a = 0} , whereas on the correctly rendered unit it's all 0. The lights used seem to be rather identical (except the coordinates ofc).

I've hacked that to 0 it all out and things start looking correctly (or at least more sane):

Image

Versus:

Image

~~P.S.: https://learn.microsoft.com/en-us/windows/win32/direct3d9/material-alpha The game appears to want us to use the alpha included in the material, since it's indeed setting D3DRS_SPECULARMATERIALSOURCE to D3DMCS_MATERIAL earlier in the trace, and on the "misbehaving" material alpha is 0.~~ False lead, see PR for details.

WinterSnowfall avatar Sep 18 '25 20:09 WinterSnowfall