protonscr

Battle for Middle Earth 1 - Glitch Glowing Textures

dxvkclosed bugd3d9
doitsujin/dxvk#4976 · opened 2025-06-05 by arntmk · updated 2025-09-24 · 10 comments · github
1 matching comments, n / p to jump
BBlisto91 2025-06-05 github

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

Aarntmk 2025-06-05 github

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

KK0bin maintainer 2025-06-05 github

Please make an apitrace.

Aarntmk 2025-06-05 github

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
KK0bin maintainer 2025-06-05 github

That is not an apitrace.

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

Aarntmk 2025-06-06 github

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

BBlisto91 2025-06-06 github

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

Aarntmk 2025-06-06 github

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

That's right

BBlisto91 2025-06-14 github

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

WWinterSnowfall 2025-09-18 github

@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.

DLLs