-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpatch.S
More file actions
357 lines (353 loc) · 10.7 KB
/
patch.S
File metadata and controls
357 lines (353 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
.intel_syntax noprefix
# Unity symbols
.global aArrayIndexOutOfRange
.global aRuntimeUtilitiesFixedArray
.global __clang_call_terminate
.global _ZN6vulkan3ext21vkAcquireNextImageKHRE
.global _ZN6vulkan4fptr15vkWaitForFencesE
.global _ZN6vulkan4fptr16vkDeviceWaitIdleE
.global _Unwind_Resume
.global _Z12profiler_endPN9profiling6MarkerE
.global _Z14profiler_beginPN9profiling6MarkerE
.global _Z18GetVKGfxDeviceCorev
.global _Z20AssertImplementationiPKciiS0_
.global _ZN11GfxDeviceVK27SubmitCurrentCommandBuffersEP13VkSemaphore_Tb
.global _ZN15GfxDeviceVKBase26EnsureCurrentCommandBufferEN2vk13CommandBuffer4TypeEb
.global _ZN18FrameTimingManager29OnRenderThreadOverheadEndImplEv
.global _ZN18FrameTimingManager31OnRenderThreadOverheadBeginImplEv
.global _ZN18VKImmediateContext17BackbufferChangedERN2vk12RenderPassesEt
.global _ZN2vk12TaskExecutor22AddSubmitWaitSemaphoreEP13VkSemaphore_Tj
.global _ZN2vk12TaskExecutor4SyncEv
.global _ZN2vk13FrameTracking11ReturnFenceEP9VkFence_T
.global _ZN2vk13FrameTracking12GetSemaphoreEv
.global _ZN2vk13FrameTracking15ReturnSemaphoreEP13VkSemaphore_Tm
.global _ZN2vk13FrameTracking15UpdateSafeFrameEv
.global _ZN2vk13FrameTracking21ReturnSemaphoreUnusedEP13VkSemaphore_T
.global _ZN2vkL17gAcquireNextFrameE
# Redirects GfxDeviceVK::AdvanceImage(vk::SwapChain*) to custom version
.section .text.patch1,"ax"
.global thunk
.type thunk, @function
thunk:
jmp _ZN11GfxDeviceVK12AdvanceImageEPN2vk9SwapChainE
.align 16, 0xCC
# Custom version of GfxDeviceVK::AdvanceImage(vk::SwapChain*)
.section .text.patch2,"ax"
.global _ZN11GfxDeviceVK12AdvanceImageEPN2vk9SwapChainE
.type _ZN11GfxDeviceVK12AdvanceImageEPN2vk9SwapChainE, @function
_ZN11GfxDeviceVK12AdvanceImageEPN2vk9SwapChainE:
push rbp
push r15
push r14
push rbx
sub rsp,0x28
mov r14,rsi
mov rbx,rdi
mov DWORD PTR [rsp+0xc],0xffffffff
mov BYTE PTR [rsp+0xb],0x0
xorps xmm0,xmm0
movaps XMMWORD PTR [rsp+0x10],xmm0
mov rdi,QWORD PTR [rdi+0x1e88]
cmp BYTE PTR [rdi+0x8],0x0
je lbl0
call _ZN18FrameTimingManager31OnRenderThreadOverheadBeginImplEv
lbl0:
lea r15,[rbx+0xf680]
mov rdx,QWORD PTR [rbx+0xf470]
mov DWORD PTR [rsp],0x1
lea rcx,[rsp+0xc]
lea r8,[rsp+0xb]
lea r9,[rsp+0x10]
mov rdi,r14
mov rsi,r15
call _ZN2vk9SwapChain16AcquireNextImageERNS_13FrameTrackingEmPjPbP11fixed_arrayIP13VkSemaphore_TLm2EEb
mov ebp,eax
mov rdi,QWORD PTR [rbx+0x1e88]
cmp BYTE PTR [rdi+0x8],0x0
je lbl1
call _ZN18FrameTimingManager29OnRenderThreadOverheadEndImplEv
lbl1:
cmp ebp,0x4
jne lbl3
mov rdi,rbx
xor esi,esi
xor edx,edx
call _ZN11GfxDeviceVK27SubmitCurrentCommandBuffersEP13VkSemaphore_Tb
mov rdi,QWORD PTR [rbx+0xf9a8]
call _ZN2vk12TaskExecutor4SyncEv
mov rdi,r15
call _ZN2vk13FrameTracking15UpdateSafeFrameEv
mov rdi,rbx
mov esi,0x2
mov edx,0x1
call _ZN15GfxDeviceVKBase26EnsureCurrentCommandBufferEN2vk13CommandBuffer4TypeEb
mov rdi,QWORD PTR [rbx+0x1e88]
cmp BYTE PTR [rdi+0x8],0x0
je lbl2
call _ZN18FrameTimingManager31OnRenderThreadOverheadBeginImplEv
lbl2:
mov rdx,QWORD PTR [rbx+0xf470]
mov DWORD PTR [rsp],0x0
lea rcx,[rsp+0xc]
lea r8,[rsp+0xb]
lea r9,[rsp+0x10]
mov rdi,r14
mov rsi,r15
call _ZN2vk9SwapChain16AcquireNextImageERNS_13FrameTrackingEmPjPbP11fixed_arrayIP13VkSemaphore_TLm2EEb
mov rdi,QWORD PTR [rbx+0x1e88]
cmp BYTE PTR [rdi+0x8],0x0
je lbl3
call _ZN18FrameTimingManager29OnRenderThreadOverheadEndImplEv
lbl3:
mov rsi,QWORD PTR [rsp+0x10]
test rsi,rsi
je lbl4
mov rdi,QWORD PTR [rbx+0xf9a8]
mov edx,0x400
call _ZN2vk12TaskExecutor22AddSubmitWaitSemaphoreEP13VkSemaphore_Tj
lbl4:
mov rsi,QWORD PTR [rsp+0x18]
test rsi,rsi
je lbl5
mov rdi,QWORD PTR [rbx+0xf9a8]
mov edx,0x400
call _ZN2vk12TaskExecutor22AddSubmitWaitSemaphoreEP13VkSemaphore_Tj
lbl5:
cmp BYTE PTR [rsp+0xb],0x0
je lbl6
movzx edx,WORD PTR [rbx+0x1e08]
mov rsi,QWORD PTR [rbx+0xf460]
add rbx,0x2620
mov rdi,rbx
call _ZN18VKImmediateContext17BackbufferChangedERN2vk12RenderPassesEt
lbl6:
mov eax,DWORD PTR [rsp+0xc]
mov DWORD PTR [r14+0x134],eax
add rsp,0x28
pop rbx
pop r14
pop r15
pop rbp
ret
.align 16, 0xCC
# Custom version of vk::SwapChain::AcquireNextImage(vk::FrameTracking&, unsigned long, unsigned int*, bool*, fixed_array<VkSemaphore_T*, 2ul>*, bool)
# Now with a extra bool parameter at the end
.section .text.patch3,"ax"
.global _ZN2vk9SwapChain16AcquireNextImageERNS_13FrameTrackingEmPjPbP11fixed_arrayIP13VkSemaphore_TLm2EEb
.type _ZN2vk9SwapChain16AcquireNextImageERNS_13FrameTrackingEmPjPbP11fixed_arrayIP13VkSemaphore_TLm2EEb, @function
_ZN2vk9SwapChain16AcquireNextImageERNS_13FrameTrackingEmPjPbP11fixed_arrayIP13VkSemaphore_TLm2EEb:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp,0x28
mov r15,r9
mov r12,r8
mov r14,rcx
mov rbx,rdx
mov rbp,rsi
mov r13,rdi
lea rdi,[rip+_ZN2vkL17gAcquireNextFrameE]
call _Z14profiler_beginPN9profiling6MarkerE
xorps xmm0,xmm0
movups XMMWORD PTR [r15],xmm0
cmp BYTE PTR [r13+0x14c],0x0
je lbl8
mov al,BYTE PTR [r13+0x14d]
mov BYTE PTR [r12],al
mov BYTE PTR [r13+0x14d],0x0
mov eax,DWORD PTR [r13+0x148]
mov DWORD PTR [r14],eax
mov eax,DWORD PTR [r13+0x148]
add eax,0x1
xor ecx,ecx
cmp QWORD PTR [r13+0x90],rax
cmova ecx,eax
mov DWORD PTR [r13+0x148],ecx
mov rax,QWORD PTR [r13+0x150]
mov rdx,QWORD PTR [rax+rcx*8]
mov QWORD PTR [rsp+0x8],rdx
mov QWORD PTR [rax+rcx*8],0x0
cmp QWORD PTR [rsp+0x8],0x0
je lbl7
mov rdi,QWORD PTR [r13+0xb8]
lea rdx,[rsp+0x8]
mov esi,0x1
mov ecx,0x1
mov r8,0xffffffffffffffff
call QWORD PTR [rip+_ZN6vulkan4fptr15vkWaitForFencesE]
call _Z18GetVKGfxDeviceCorev
add rax,0xf680
mov rsi,QWORD PTR [rsp+0x8]
mov rdi,rax
call _ZN2vk13FrameTracking11ReturnFenceEP9VkFence_T
lbl7:
add DWORD PTR [r13+0x13c],0x1
mov ebp,0x1
jmp lbl19
lbl8:
mov QWORD PTR [rsp+0x20],rbx
mov BYTE PTR [r12],0x0
cmp QWORD PTR [r13+0x68],0x0
mov QWORD PTR [rsp+0x10],rbp
je lbl10
mov rdi,rbp
call _ZN2vk13FrameTracking12GetSemaphoreEv
mov rbp,rax
mov rsi,QWORD PTR [r13+0x68]
mov rdi,QWORD PTR [r13+0xb8]
mov rdx,0xffffffffffffffff
mov rcx,rax
xor r8d,r8d
mov r9,r14
call QWORD PTR [rip+_ZN6vulkan3ext21vkAcquireNextImageKHRE]
mov ebx,eax
test eax,eax
js lbl14
mov rdi,QWORD PTR [rsp+0x10]
mov rsi,rbp
mov rdx,QWORD PTR [rsp+0x20]
call _ZN2vk13FrameTracking15ReturnSemaphoreEP13VkSemaphore_Tm
mov QWORD PTR [r15],rbp
mov eax,0x1
cmp ebx,0xc4653214
je lbl11
lbl9:
cmp ebx,0x3b9acdeb
je lbl11
cmp ebx,0xc4653600
je lbl11
jmp lbl13
lbl10:
mov ebx,0xc4653214
xor eax,eax
lbl11:
mov QWORD PTR [rsp+0x18],rax
mov ebp,0x4
cmp BYTE PTR [rsp+0x60],0x0
jne lbl19
mov rdi,QWORD PTR [r13+0xb8]
call QWORD PTR [rip+_ZN6vulkan4fptr16vkDeviceWaitIdleE]
lea rsi,[r13+0xf8]
mov rax,QWORD PTR [r13+0x0]
mov rdi,r13
xor edx,edx
xor ecx,ecx
call QWORD PTR [rax+0x18]
mov BYTE PTR [r12],0x1
cmp BYTE PTR [r13+0x14c],0x0
je lbl15
mov eax,DWORD PTR [r13+0x148]
mov DWORD PTR [r14],eax
mov eax,DWORD PTR [r13+0x148]
add eax,0x1
xor ecx,ecx
cmp QWORD PTR [r13+0x90],rax
cmova ecx,eax
mov DWORD PTR [r13+0x148],ecx
mov rax,QWORD PTR [r13+0x150]
mov rdx,QWORD PTR [rax+rcx*8]
mov QWORD PTR [rsp+0x8],rdx
mov QWORD PTR [rax+rcx*8],0x0
cmp QWORD PTR [rsp+0x8],0x0
je lbl12
mov rdi,QWORD PTR [r13+0xb8]
lea rdx,[rsp+0x8]
mov esi,0x1
mov ecx,0x1
mov r8,0xffffffffffffffff
call QWORD PTR [rip+_ZN6vulkan4fptr15vkWaitForFencesE]
call _Z18GetVKGfxDeviceCorev
add rax,0xf680
mov rsi,QWORD PTR [rsp+0x8]
mov rdi,rax
call _ZN2vk13FrameTracking11ReturnFenceEP9VkFence_T
lbl12:
add DWORD PTR [r13+0x13c],0x1
lbl13:
test ebx,ebx
jns lbl17
jmp lbl18
lbl14:
mov rdi,QWORD PTR [rsp+0x10]
mov rsi,rbp
call _ZN2vk13FrameTracking21ReturnSemaphoreUnusedEP13VkSemaphore_T
xor eax,eax
cmp ebx,0xc4653214
jne lbl9
jmp lbl11
lbl15:
mov rdi,QWORD PTR [rsp+0x10]
call _ZN2vk13FrameTracking12GetSemaphoreEv
mov r12,rax
mov rsi,QWORD PTR [r13+0x68]
mov rdi,QWORD PTR [r13+0xb8]
mov rdx,0xffffffffffffffff
mov rcx,rax
xor r8d,r8d
mov r9,r14
call QWORD PTR [rip+_ZN6vulkan3ext21vkAcquireNextImageKHRE]
mov ebx,eax
test eax,eax
js lbl20
mov rdi,QWORD PTR [rsp+0x10]
mov rsi,r12
mov rdx,QWORD PTR [rsp+0x20]
call _ZN2vk13FrameTracking15ReturnSemaphoreEP13VkSemaphore_Tm
cmp QWORD PTR [rsp+0x18],0x2
jb lbl16
lea rsi,[rip+aRuntimeUtilitiesFixedArray]
lea r8,[rip+aArrayIndexOutOfRange]
xor edi,edi
mov edx,0x9d
mov ecx,0xffffffff
call _Z20AssertImplementationiPKciiS0_
lbl16:
mov rax,QWORD PTR [rsp+0x18]
mov QWORD PTR [r15+rax*8],r12
lbl17:
add DWORD PTR [r13+0x13c],0x1
lbl18:
not ebx
shr ebx,0x1f
mov ebp,ebx
lbl19:
lea rdi,[rip+_ZN2vkL17gAcquireNextFrameE]
call _Z12profiler_endPN9profiling6MarkerE
mov eax,ebp
add rsp,0x28
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
lbl20:
mov rdi,QWORD PTR [rsp+0x10]
mov rsi,r12
call _ZN2vk13FrameTracking21ReturnSemaphoreUnusedEP13VkSemaphore_T
jmp lbl18
jmp lbl21
jmp lbl21
jmp lbl21
mov rdi,rax
call __clang_call_terminate
mov rbx,rax
lea rdi,[rip+_ZN2vkL17gAcquireNextFrameE]
call _Z12profiler_endPN9profiling6MarkerE
jmp lbl22
mov rdi,rax
call __clang_call_terminate
lbl21:
mov rbx,rax
lea rdi,[rip+_ZN2vkL17gAcquireNextFrameE]
call _Z12profiler_endPN9profiling6MarkerE
lbl22:
mov rdi,rbx
call _Unwind_Resume
mov rdi,rax
call __clang_call_terminate
.align 16, 0xCC