Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // write access to const memory has been detected, the output may be wrong!
- BOOL __fastcall CreateShader(__int64 a1, const char *szShaderName, __int64 *a3, BOOL bMakeVertex, BOOL bMakePixel)
- {
- __int64 v5; // rbx
- DATHeader **v6; // r14
- const char *__szShaderName; // r12
- __int64 *v8; // rax
- __int64 v9; // rax
- __int64 v10; // rdi
- DATHeader *v11; // rax
- __int64 v12; // rcx
- DWORD v13; // eax
- __int64 v14; // rdx
- DATHeader *v15; // r8
- __int64 v16; // rdx
- __int64 v17; // rax
- DWORD v18; // eax
- DATHeader *v19; // r8
- __int64 v20; // rax
- __int64 v21; // rdx
- __int64 v22; // rdx
- __int64 v23; // rcx
- __int64 v24; // rdx
- __int64 v25; // rcx
- PVOID v26; // rsi
- DATHeader *v27; // rdi
- char v28; // al
- DWORD v29; // eax
- __int64 v30; // rdx
- DATHeader *v31; // r8
- __int64 v32; // rdx
- __int64 v33; // r9
- DWORD v35; // eax
- DATHeader *v36; // rdx
- __int64 szName; // rax
- __int64 v38; // r8
- __int64 v39; // rdx
- __int64 v40; // rcx
- __int64 v41; // [rsp+30h] [rbp-51h]
- signed int v42; // [rsp+40h] [rbp-41h]
- signed int v43; // [rsp+44h] [rbp-3Dh]
- int v44; // [rsp+48h] [rbp-39h]
- DATHeader *v45; // [rsp+50h] [rbp-31h]
- __int64 v46; // [rsp+58h] [rbp-29h]
- _QWORD *v47; // [rsp+60h] [rbp-21h]
- char szShaderNamea[48]; // [rsp+70h] [rbp-11h]
- v5 = 0i64;
- v6 = (DATHeader **)a3;
- __szShaderName = szShaderName;
- if ( bMakeVertex )
- {
- sub_14091D670(szShaderNamea, "%s.vso", szShaderName);
- v43 = -1;
- v8 = (__int64 *)*(&g_pShaderFileHeap + 5);
- v42 = 0;
- if ( v8 )
- {
- v9 = *v8;
- v42 = 1;
- v41 = v9;
- }
- HeapInstance::ReserveMemory((CHeapInstance *)g_pShaderFileHeap, (HeapAlloc_t *)&v47, 72i64, *(_QWORD *)(g_pShaderFileHeap + 120), 0, (HeapReserve *)&v41);
- v10 = (__int64)v47;
- if ( v47 )
- {
- *v47 = &cShaderMemorizeVS::`vftable';
- *(_QWORD *)(v10 + 56) = 0i64;
- *(_BYTE *)(v10 + 64) = 0;
- v11 = *v6;
- if ( !*v6 )
- goto LABEL_85;
- v12 = (unsigned __int8)szShaderNamea[0];
- if ( szShaderNamea[0] )
- {
- v13 = DataFile::QueryFileIndex(v6, szShaderNamea);
- if ( v13 == -1 )
- {
- v11 = 0i64;
- }
- else
- {
- v14 = v13 & 0xFFFFFFF;
- v15 = v6[(unsigned __int64)v13 >> 28];
- v11 = 0i64;
- if ( (unsigned int)v14 < v15->FileCount )
- {
- v16 = *(uint32_t *)((char *)&v15->Magic + 4 * v14 + v15->FileTableOffset);
- if ( (_DWORD)v16 )
- v11 = (DATHeader *)((char *)v15 + v16);
- }
- }
- v12 = (unsigned __int8)szShaderNamea[0];
- }
- if ( v11 )
- {
- v44 = 0;
- v46 = 0i64;
- v45 = v11;
- if ( *v6 )
- {
- if ( (_BYTE)v12 )
- {
- v18 = DataFile::QueryFileIndex(v6, szShaderNamea);
- if ( v18 == -1 )
- {
- v17 = 0i64;
- }
- else
- {
- v12 = v18 & 0xFFFFFFF;
- v19 = v6[(unsigned __int64)v18 >> 28];
- if ( (unsigned int)v12 < v19->FileCount )
- {
- v20 = v19->SizeTableOffset;
- if ( (_DWORD)v20 )
- {
- v21 = (unsigned int)v12;
- v12 = (__int64)v19 + v20;
- v17 = *(uint32_t *)((char *)&v19->Magic + 4 * v21 + v20);
- }
- else
- {
- v17 = 0i64;
- }
- }
- else
- {
- v17 = 0i64;
- }
- }
- }
- else
- {
- v17 = 0i64;
- }
- }
- else
- {
- v17 = 0i64;
- }
- v46 = v17;
- if ( (unsigned int)sub_140935B70(v12, v10 + 56, (__int64)&v44) )
- {
- strcpy_s_0((char *)(v10 + 8), 48i64, __szShaderName);
- if ( g_qword_141990E50 != g_qword_141990E30 )
- {
- v22 = *(_QWORD *)(g_qword_141990E50 + 8);
- v23 = *(_QWORD *)(g_qword_141990E50 + 16);
- if ( v22 )
- *(_QWORD *)(v22 + 16) = v23;
- if ( v23 )
- *(_QWORD *)(v23 + 8) = v22;
- qword_141990E48 = 2i64;
- g_qword_141990E50 = v23;
- if ( g_qword_141990E50 != g_qword_141990E30 )
- {
- *(_QWORD *)g_qword_141990E50 = v10;
- if ( g_qword_141990E60 )
- v24 = *(_QWORD *)(g_qword_141990E60 + 8);
- else
- v24 = 0i64;
- *(_QWORD *)(g_qword_141990E50 + 8) = v24;
- *(_QWORD *)(g_qword_141990E50 + 16) = g_qword_141990E60;
- if ( v24 )
- *(_QWORD *)(v24 + 16) = g_qword_141990E50;
- if ( g_qword_141990E60 )
- *(_QWORD *)(g_qword_141990E60 + 8) = g_qword_141990E50;
- if ( g_qword_141990E58 == g_qword_141990E60 )
- g_qword_141990E58 = g_qword_141990E50;
- }
- }
- goto LABEL_41;
- }
- }
- else
- {
- LABEL_85:
- sub_1409204B0(g_szShaderNotInDAT, szShaderNamea);
- (**(void (__fastcall ***)(__int64, signed __int64))v10)(v10, 1i64);
- }
- }
- return 0;
- }
- LABEL_41:
- if ( !bMakePixel )
- return 1;
- sub_14091D670(szShaderNamea, "%s.pso", __szShaderName);
- v26 = AllocHeapMem(72i64, (HeapInfo *)&g_pShaderFileHeap);
- if ( v26 )
- {
- *(_QWORD *)v26 = &cShaderMemorizePS::`vftable';
- *((_QWORD *)v26 + 7) = 0i64;
- *((_BYTE *)v26 + 64) = 0;
- v27 = *v6;
- if ( !*v6 )
- goto LABEL_86;
- v28 = szShaderNamea[0];
- if ( szShaderNamea[0] )
- {
- v29 = DataFile::QueryFileIndex(v6, szShaderNamea);
- v27 = 0i64;
- if ( v29 != -1 )
- {
- v30 = v29 & 0xFFFFFFF;
- v31 = v6[(unsigned __int64)v29 >> 28];
- if ( (unsigned int)v30 < v31->FileCount )
- {
- v25 = (__int64)v31 + v31->FileTableOffset;
- v32 = *(unsigned int *)(v25 + 4 * v30);
- if ( (_DWORD)v32 )
- v27 = (DATHeader *)((char *)v31 + v32);
- }
- }
- v28 = szShaderNamea[0];
- }
- if ( v27 )
- {
- if ( *v6 )
- {
- if ( v28 )
- {
- v35 = DataFile::QueryFileIndex(v6, szShaderNamea);
- if ( v35 == -1 )
- {
- v33 = 0i64;
- }
- else
- {
- v25 = v35 & 0xFFFFFFF;
- v36 = v6[(unsigned __int64)v35 >> 28];
- if ( (unsigned int)v25 < v36->FileCount )
- {
- szName = v36->SizeTableOffset;
- if ( (_DWORD)szName )
- {
- v38 = (unsigned int)v25;
- v25 = (__int64)v36 + szName;
- v33 = *(uint32_t *)((char *)&v36->Magic + 4 * v38 + szName);
- }
- else
- {
- v33 = 0i64;
- }
- }
- else
- {
- v33 = 0i64;
- }
- }
- }
- else
- {
- v33 = 0i64;
- }
- }
- else
- {
- v33 = 0i64;
- }
- if ( (unsigned int)sub_140935C50(v25, (__int64)v26 + 56, (__int64)v27, v33) )
- {
- strcpy_s_0((char *)v26 + 8, 48i64, __szShaderName);
- if ( g_qword_141990E88 != g_qword_141990E68 )
- {
- v39 = *(_QWORD *)(g_qword_141990E88 + 8);
- v40 = *(_QWORD *)(g_qword_141990E88 + 16);
- if ( v39 )
- *(_QWORD *)(v39 + 16) = v40;
- if ( v40 )
- *(_QWORD *)(v40 + 8) = v39;
- qword_141990E80 = 1i64;
- g_qword_141990E88 = v40;
- if ( g_qword_141990E88 != g_qword_141990E68 )
- {
- *(_QWORD *)g_qword_141990E88 = v26;
- if ( g_qword_141990E98 )
- v5 = *(_QWORD *)(g_qword_141990E98 + 8);
- *(_QWORD *)(g_qword_141990E88 + 8) = v5;
- *(_QWORD *)(g_qword_141990E88 + 16) = g_qword_141990E98;
- if ( v5 )
- *(_QWORD *)(v5 + 16) = g_qword_141990E88;
- if ( g_qword_141990E98 )
- *(_QWORD *)(g_qword_141990E98 + 8) = g_qword_141990E88;
- if ( g_qword_141990E90 == g_qword_141990E98 )
- g_qword_141990E90 = g_qword_141990E88;
- }
- }
- return 1;
- }
- }
- else
- {
- LABEL_86:
- sub_1409204B0(g_szShaderNotInDAT, szShaderNamea);
- (**(void (__fastcall ***)(PVOID, signed __int64))v26)(v26, 1i64);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement