Skip to content

Commit 20eced5

Browse files
authored
Merge pull request #231 from RadWolfie/d3d-oovpa-updates
Update D3D OOVPAs
2 parents 974fa9b + e003472 commit 20eced5

14 files changed

Lines changed: 284 additions & 183 deletions

File tree

include/xref/d3d8.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ XREF_SYMBOL(D3DDevice_SetTextureStageStateNotInline)
257257
XREF_SYMBOL(D3DDevice_SetTextureState_BorderColor)
258258
XREF_SYMBOL(D3DDevice_SetTextureState_BumpEnv)
259259
XREF_SYMBOL(D3DDevice_SetTextureState_ColorKeyColor)
260+
XREF_SYMBOL(D3DDevice_SetTextureState_Deferred)
260261
XREF_SYMBOL(D3DDevice_SetTextureState_TexCoordIndex)
261262
XREF_SYMBOL(D3DDevice_SetTile)
262263
XREF_SYMBOL(D3DDevice_SetTransform)

src/OOVPADatabase/D3D8/3911.inl

Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4239,15 +4239,23 @@ OOVPA_SIG_MATCH(
42394239
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
42404240
3911)
42414241
OOVPA_SIG_MATCH(
4242+
// push esi
4243+
OV_MATCH(0x00, 0x56),
42424244

4243-
{ 0x00, 0x56 },
4244-
{ 0x07, 0x56 },
4245-
{ 0x0D, 0x8B },
4246-
{ 0x13, 0x8D },
4247-
{ 0x1A, 0x8B },
4248-
{ 0x21, 0x83 },
4249-
{ 0x28, 0x07 },
4250-
{ 0x2F, 0x5E },
4245+
// mov e??, [esp + param_1]
4246+
OV_MATCH(0x0D, 0x8B),
4247+
OV_MATCH(0x0F, 0x24, 0x08),
4248+
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
4249+
OV_MATCH(0x11, 0x8D),
4250+
OV_MATCH(0x14, 0xE0, 0x0A, 0x04, 0x00),
4251+
4252+
// mov e??, [esp + param_2]
4253+
OV_MATCH(0x1A, 0x8B),
4254+
OV_MATCH(0x1C, 0x24, 0x0C),
4255+
4256+
// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
4257+
// retn 0x08
4258+
OV_MATCH(0x30, 0xC2, 0x08),
42514259
//
42524260
);
42534261

@@ -5174,17 +5182,16 @@ OOVPA_SIG_MATCH(
51745182
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource,
51755183
3911)
51765184
OOVPA_SIG_MATCH(
5185+
// mov eax, [D3D_g_pDevice]
5186+
OV_MATCH(0x00, 0xA1),
51775187

5178-
{ 0x00, 0xA1 },
5179-
{ 0x34, 0x8B }, // mov edx, [ecx+0x1C]
5180-
{ 0x35, 0x51 },
5181-
{ 0x36, 0x1C },
5182-
{ 0x41, 0xC2 }, // retn 4
5183-
{ 0x42, 0x04 },
5184-
{ 0x43, 0x00 },
5185-
{ 0x7E, 0xC2 }, // retn 4
5186-
{ 0x7F, 0x04 },
5187-
{ 0x80, 0x00 },
5188+
// mov esi, [esp + param_1]
5189+
OV_MATCH(0x0A, 0x8B, 0x74, 0x24, 0x08),
5190+
5191+
// and eax, 0x70000
5192+
OV_MATCH(0x10, 0x25, 0x00, 0x00, 0x07, 0x00),
5193+
// cmp eax, 0x50000
5194+
OV_MATCH(0x15, 0x3D, 0x00, 0x00, 0x05, 0x00),
51885195
//
51895196
);
51905197

@@ -6028,3 +6035,29 @@ OOVPA_SIG_MATCH(
60286035
OV_MATCH(0x2C, 0x24),
60296036
//
60306037
);
6038+
6039+
// ******************************************************************
6040+
// * D3DDevice_SetTextureState_Deferred
6041+
// ******************************************************************
6042+
// Generic OOVPA as of 3911 and newer.
6043+
OOVPA_SIG_HEADER_XREF(D3DDevice_SetTextureState_Deferred,
6044+
3911,
6045+
XRefOne)
6046+
OOVPA_SIG_MATCH(
6047+
// mov [ecx * 0x04 + D3D_g_DeferredTextureState],edx
6048+
XREF_ENTRY(0x22, XREF_D3D_g_DeferredTextureState),
6049+
6050+
// mov eax, [edx * 0x04 + ????]
6051+
OV_MATCH(0x00, 0x8B, 0x04, 0x95),
6052+
6053+
// shl param_1, 0x05
6054+
OV_MATCH(0x0E, 0xC1, 0xE1, 0x05),
6055+
6056+
// add param_1, param_2
6057+
// mov edx, [esp + param_3]
6058+
OV_MATCH(0x13, 0x03, 0xCA, 0x8B, 0x54, 0x24, 0x08),
6059+
6060+
// mov [ecx * 0x04 + D3D_g_DeferredTextureState], edx
6061+
OV_MATCH(0x1F, 0x89, 0x14, 0x8D),
6062+
//
6063+
);

src/OOVPADatabase/D3D8/4034.inl

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -369,18 +369,27 @@ OOVPA_SIG_MATCH(
369369
// ******************************************************************
370370
// * D3DDevice_SetTextureState_ColorKeyColor
371371
// ******************************************************************
372+
// Generic OOVPA as of 4034 and newer.
372373
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
373374
4034)
374375
OOVPA_SIG_MATCH(
376+
// push esi
377+
OV_MATCH(0x00, 0x56),
375378

376-
{ 0x00, 0x56 },
377-
{ 0x07, 0x8B },
378-
{ 0x0E, 0xE8 },
379-
{ 0x16, 0x08 },
380-
{ 0x1E, 0x89 },
381-
{ 0x26, 0x04 },
382-
{ 0x2E, 0x07 },
383-
{ 0x36, 0xC2 },
379+
// mov e??, [esp + param_1]
380+
OV_MATCH(0x13, 0x8B),
381+
OV_MATCH(0x15, 0x24, 0x08),
382+
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
383+
OV_MATCH(0x17, 0x8D),
384+
OV_MATCH(0x1A, 0xE0, 0x0A, 0x04, 0x00),
385+
386+
// mov e??, [esp + param_2]
387+
OV_MATCH(0x20, 0x8B),
388+
OV_MATCH(0x22, 0x24, 0x0C),
389+
390+
// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
391+
// retn 0x08
392+
OV_MATCH(0x36, 0xC2, 0x08),
384393
//
385394
);
386395

@@ -1288,22 +1297,20 @@ OOVPA_END;
12881297
// ******************************************************************
12891298
// * D3D::BlockOnResource
12901299
// ******************************************************************
1300+
// Generic OOVPA as of 4034 and newer
12911301
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource,
12921302
4034)
12931303
OOVPA_SIG_MATCH(
1304+
// mov eax, [D3D_g_pDevice]
1305+
OV_MATCH(0x00, 0xA1),
12941306

1295-
{ 0x00, 0xA1 },
1296-
{ 0x05, 0x85 },
1297-
{ 0x18, 0x00 },
1298-
{ 0x19, 0x05 },
1299-
{ 0x1A, 0x00 },
1300-
{ 0x1B, 0x56 },
1301-
{ 0x1C, 0x75 },
1302-
{ 0x1D, 0x28 },
1303-
{ 0x1E, 0x8B },
1304-
{ 0x1F, 0x70 },
1305-
{ 0x40, 0x5E },
1306-
{ 0x4A, 0xE8 },
1307+
// mov eax, [esp + param_1]
1308+
OV_MATCH(0x09, 0x8B, 0x44, 0x24, 0x04),
1309+
1310+
// and ecx, 0x70000
1311+
OV_MATCH(0x0F, 0x81, 0xE1, 0x00, 0x00, 0x07, 0x00),
1312+
// cmp ecx, 0x50000
1313+
OV_MATCH(0x15, 0x81, 0xF9, 0x00, 0x00, 0x05, 0x00),
13071314
//
13081315
);
13091316

src/OOVPADatabase/D3D8LTCG/3911.inl

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -193,22 +193,27 @@ OOVPA_SIG_MATCH(
193193
// ******************************************************************
194194
// * D3DDevice_SetTextureState_ColorKeyColor
195195
// ******************************************************************
196-
//83C008C1E707890689 ...C3
197-
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_0__LTCG_esi1_ebx2,
198-
2024)
196+
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_0__LTCG_eax1_ebx2,
197+
3911)
199198
OOVPA_SIG_MATCH(
200199

201-
{ 0x01, 0x8B },
200+
// push esi
201+
OV_MATCH(0x00, 0x56),
202+
203+
// mov edi, param_1
204+
// mov eax, [e??]
205+
OV_MATCH(0x0B, 0x8B, 0xF8, 0x8B),
206+
// cmp eax, ecx
207+
// jne +0x07
208+
OV_MATCH(0x0F, 0x3B, 0xC1, 0x72, 0x07),
209+
210+
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
211+
OV_MATCH(0x1A, 0x8D),
212+
OV_MATCH(0x1D, 0xE0, 0x0A, 0x04, 0x00),
202213

203-
{ 0x26, 0x83 },
204-
{ 0x27, 0xC0 },
205-
{ 0x28, 0x08 },
206-
{ 0x29, 0xC1 },
207-
{ 0x2A, 0xE7 },
208-
{ 0x2B, 0x07 },
209-
{ 0x2C, 0x89 },
210-
{ 0x2D, 0x06 },
211-
{ 0x2E, 0x89 },
214+
// This is required OV pair to tell the difference from the (symbol)_4__LTCG_eax1 signature.
215+
// ret
216+
OV_MATCH(0x36, 0xC3),
212217
//
213218
);
214219

@@ -1139,23 +1144,20 @@ OOVPA_SIG_MATCH(
11391144
// ******************************************************************
11401145
// * D3D_BlockOnResource
11411146
// ******************************************************************
1142-
//00007800750C85 ...C3
11431147
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_eax1,
1144-
2024)
1148+
3911)
11451149
OOVPA_SIG_MATCH(
1150+
// mov edx, [D3D_g_pDevice]
1151+
OV_MATCH(0x00, 0x8B, 0x15),
11461152

1147-
{ 0x00, 0x8B },
1148-
{ 0x01, 0x15 },
1149-
1150-
{ 0x28, 0xF7 },
1151-
{ 0x29, 0xC1 },
1152-
{ 0x2A, 0x00 },
1153-
{ 0x2B, 0x00 },
1154-
{ 0x2C, 0x78 },
1155-
{ 0x2D, 0x00 },
1156-
{ 0x2E, 0x75 },
1157-
{ 0x2F, 0x0C },
1158-
{ 0x30, 0x85 },
1153+
// mov esi, param_1
1154+
OV_MATCH(0x09, 0x8B, 0xF0),
1155+
1156+
// test ecx, 0x780000
1157+
OV_MATCH(0x28, 0xF7, 0xC1, 0x00, 0x00, 0x78, 0x00),
1158+
// jnz +0x0C
1159+
// test e??, e??
1160+
OV_MATCH(0x2E, 0x75, 0x0C, 0x085),
11591161
//
11601162
);
11611163

src/OOVPADatabase/D3D8LTCG/4039.inl

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -399,19 +399,26 @@ OOVPA_SIG_MATCH(
399399
// ******************************************************************
400400
// * D3DDevice_SetTextureState_ColorKeyColor
401401
// ******************************************************************
402-
//E00A040089 ...C20400
403402
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_4__LTCG_eax1,
404-
2048)
403+
4039)
405404
OOVPA_SIG_MATCH(
405+
// push ebx
406+
OV_MATCH(0x00, 0x53),
406407

407-
{ 0x00, 0x53 },
408-
{ 0x01, 0x8B },
408+
// mov esi, param_1
409+
// mov eax, [e??]
410+
OV_MATCH(0x10, 0x8B, 0xF0, 0x8B),
411+
// cmp eax, ecx
412+
// jne +0x0B
413+
OV_MATCH(0x14, 0x3B, 0xC1, 0x72, 0x0B),
414+
415+
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
416+
OV_MATCH(0x23, 0x8D),
417+
OV_MATCH(0x26, 0xE0, 0x0A, 0x04, 0x00),
409418

410-
{ 0x26, 0xE0 },
411-
{ 0x27, 0x0A },
412-
{ 0x28, 0x04 },
413-
{ 0x29, 0x00 },
414-
{ 0x2A, 0x89 },
419+
// This is required OV pair to tell the difference from the (symbol)_4__LTCG_eax1_ebx2 signature.
420+
// retn 0x04
421+
OV_MATCH(0x40, 0xC2, 0x04),
415422
//
416423
);
417424

@@ -824,21 +831,42 @@ OOVPA_SIG_MATCH(
824831
// ******************************************************************
825832
// * D3D_BlockOnResource
826833
// ******************************************************************
827-
//F7C20000780075 ...C3
834+
// Generic OOVPA as of 4039 and newer
835+
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_ecx1,
836+
4039)
837+
OOVPA_SIG_MATCH(
838+
// mov esi, [D3D_g_pDevice]
839+
OV_MATCH(0x01, 0x8B, 0x35),
840+
841+
// mov edx, param_1
842+
OV_MATCH(0x0B, 0x8B, 0x11),
843+
844+
// test edx, 0x780000
845+
OV_MATCH(0x22, 0xF7, 0xC2, 0x00, 0x00, 0x78, 0x00),
846+
// jnz +0x??
847+
OV_MATCH(0x28, 0x75),
848+
//
849+
);
850+
851+
// ******************************************************************
852+
// * D3D_BlockOnResource
853+
// ******************************************************************
854+
// TODO: Lowest build detected is 4627, find if any other titles are
855+
// detected by this signature or missing detection.
856+
// Generic OOVPA as of 4039 and newer
828857
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_eax1,
829-
2036)
858+
4039)
830859
OOVPA_SIG_MATCH(
860+
// mov esi, [D3D_g_pDevice]
861+
OV_MATCH(0x01, 0x8B, 0x35),
831862

832-
{ 0x01, 0x8B },
833-
{ 0x02, 0x35 },
834-
835-
{ 0x22, 0xF7 },
836-
{ 0x23, 0xC2 },
837-
{ 0x24, 0x00 },
838-
{ 0x25, 0x00 },
839-
{ 0x26, 0x78 },
840-
{ 0x27, 0x00 },
841-
{ 0x28, 0x75 },
863+
// mov edx, param_1
864+
OV_MATCH(0x0B, 0x8B, 0x10),
865+
866+
// test edx, 0x780000
867+
OV_MATCH(0x24, 0xF7, 0xC2, 0x00, 0x00, 0x78, 0x00),
868+
// jnz +0x??
869+
OV_MATCH(0x2A, 0x75),
842870
//
843871
);
844872

src/OOVPADatabase/D3D8LTCG/4432.inl

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -287,19 +287,32 @@ OOVPA_SIG_MATCH(
287287
// ******************************************************************
288288
// * D3DDevice_SetTextureState_ColorKeyColor
289289
// ******************************************************************
290-
//E00A040089
291290
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
292-
1036)
291+
4432)
293292
OOVPA_SIG_MATCH(
293+
// push esi
294+
OV_MATCH(0x00, 0x56),
294295

295-
{ 0x01, 0x8B },
296-
{ 0x1D, 0x4C },
296+
// mov eax, [e??]
297+
OV_MATCH(0x07, 0x8B),
298+
// cmp eax, [esi + 0x04]
299+
// jne +0x0E
300+
OV_MATCH(0x09, 0x3B, 0x46, 0x04, 0x72, 0x0E),
301+
302+
// mov e??, [esp + param_1]
303+
OV_MATCH(0x1C, 0x8B),
304+
OV_MATCH(0x1E, 0x24, 0x08),
305+
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
306+
OV_MATCH(0x20, 0x8D),
307+
OV_MATCH(0x23, 0xE0, 0x0A, 0x04, 0x00),
308+
309+
// mov e??, [esp + param_2]
310+
OV_MATCH(0x29, 0x8B),
311+
OV_MATCH(0x2B, 0x24, 0x0C),
297312

298-
{ 0x23, 0xE0 },
299-
{ 0x24, 0x0A },
300-
{ 0x25, 0x04 },
301-
{ 0x26, 0x00 },
302-
{ 0x27, 0x89 },
313+
// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
314+
// retn 0x08
315+
OV_MATCH(0x3F, 0xC2, 0x08),
303316
//
304317
);
305318

0 commit comments

Comments
 (0)