diff options
Diffstat (limited to '')
| -rw-r--r-- | results/scraper/fex/351 | 2 | ||||
| -rw-r--r-- | results/scraper/fex/3516 | 31 | ||||
| -rw-r--r-- | results/scraper/fex/3519 | 33 |
3 files changed, 66 insertions, 0 deletions
diff --git a/results/scraper/fex/351 b/results/scraper/fex/351 new file mode 100644 index 000000000..225b5d375 --- /dev/null +++ b/results/scraper/fex/351 @@ -0,0 +1,2 @@ +Zext semantics are broken +Eliminating supposedly harmless full-extract BFEs breaks CS:GO's shader translation logic \ No newline at end of file diff --git a/results/scraper/fex/3516 b/results/scraper/fex/3516 new file mode 100644 index 000000000..53a305d85 --- /dev/null +++ b/results/scraper/fex/3516 @@ -0,0 +1,31 @@ +Deal with branchy instructions +We'd like to move towards an IR with purely local liveness. This requires reworking the dispatcher for any opcode that translates to multiple blocks. This ticket tracks the audit of all such opcodes. + +These opcodes need logic changes: + +- [x] daa (#3514 ) +- [x] das (#3514 ) +- [x] aaa (#3514 ) +- [x] aad (#3514 ) +- [x] rep cmps (#3542) +- [x] rep lods (#3542) +- [x] rep scas (#3542) +- [x] cmpxchg pair (#3522 ) +- [x] shift left (#3548) +- [x] shift right (#3548) +- [x] signed shift left (#3548) +- [x] rotate right (#3539) +- [x] rotate left (#3539 ) +- [x] rcr (#3536) +- [x] rcr smaller (#3536) +- [x] rcl (#3536) +- [x] rcl smaller (#3536) +- [x] XSave (#3528 ) +- [x] XRstor (#3528 ) +- [x] self modifying code (#3550) + +These I've audited to be ok + +* int +* jumps +* undefined \ No newline at end of file diff --git a/results/scraper/fex/3519 b/results/scraper/fex/3519 new file mode 100644 index 000000000..7e44f0fa0 --- /dev/null +++ b/results/scraper/fex/3519 @@ -0,0 +1,33 @@ +Sekiro under Proton crashes with thunks +Sekiro when running under Proton crashes if thunks are enabled. For some reason it gets a nullptr dereference in vkCreateInstance because the pointer is null. + +With a hack I can get it to work: +```diff +diff --git a/ThunkLibs/libvulkan/Host.cpp b/ThunkLibs/libvulkan/Host.cpp +index 1cfaa4227..de5cf2ec9 100644 +--- a/ThunkLibs/libvulkan/Host.cpp ++++ b/ThunkLibs/libvulkan/Host.cpp +@@ -77,6 +77,10 @@ static VkResult FEXFN_IMPL(vkCreateInstance)(const VkInstanceCreateInfo* a_0, co + } + } + ++ if (LDR_PTR(vkCreateInstance) == nullptr) [[unlikely]] { ++ (void*&)LDR_PTR(vkCreateInstance) = (void*)dlsym_default(fexldr_ptr_libvulkan_so, "vkCreateInstance"); ++ } ++ + VkInstance out; + auto ret = LDR_PTR(vkCreateInstance)(vk_struct_base, nullptr, &out); + if (ret == VK_SUCCESS) { + ``` + +Weirdly, the other symbols loaded with `DoSetupWithInstance` are populated +``` +(gdb) p/x fexldr_ptr_libvulkan_vkCreateInstance +$1 = 0x0 +(gdb) p/x fexldr_ptr_libvulkan_vkCreateDevice +$2 = 0x7fffc6f9f990 +(gdb) p/x fexldr_ptr_libvulkan_vkGetDeviceProcAddr +$3 = 0x7fffc6f9e1a0 +``` + +This should be investigated, I'm not sure how many games are hitting this issue. \ No newline at end of file |