mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-21 11:05:46 +00:00
Move dead submodules in-tree
Signed-off-by: swurl <swurl@swurl.xyz>
This commit is contained in:
parent
c0cceff365
commit
6c655321e6
4081 changed files with 1185566 additions and 45 deletions
108
externals/libadrenotools/tools/acc-shim/vk_acc_shim.cpp
vendored
Normal file
108
externals/libadrenotools/tools/acc-shim/vk_acc_shim.cpp
vendored
Normal file
|
@ -0,0 +1,108 @@
|
|||
#include <stdint.h>
|
||||
#include <dlfcn.h>
|
||||
#include <string.h>
|
||||
#include <android/log.h>
|
||||
|
||||
thread_local int satisfy_driver_emutls;
|
||||
|
||||
// Check libllvm-glnext.so in older drivers for a full list of these, newer ones are slightly more awkward due to the split
|
||||
enum class OptionType : uint32_t {
|
||||
ArgsStringList = 1,
|
||||
QcArgsString = 4,
|
||||
OptLevelInt = 0x101,
|
||||
NoOptsInt = 0x10D,
|
||||
};
|
||||
|
||||
struct StringListVal {
|
||||
uint32_t len;
|
||||
const char **entry;
|
||||
};
|
||||
|
||||
struct Option
|
||||
{
|
||||
OptionType type;
|
||||
// PAD
|
||||
union {
|
||||
bool boolVal;
|
||||
int intVal;
|
||||
float floatVal;
|
||||
StringListVal *strVals;
|
||||
const char *strVal;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
struct OptionsSet
|
||||
{
|
||||
Option *options;
|
||||
uint32_t num;
|
||||
};
|
||||
|
||||
|
||||
int CompileHook(void *state, OptionsSet *opts);
|
||||
|
||||
decltype(CompileHook) *OrigCompile{};
|
||||
|
||||
int CompileHook(void *state, OptionsSet *opts) {
|
||||
constexpr size_t ReplacementOptsNum = 201;
|
||||
|
||||
Option replacementOpts[ReplacementOptsNum];
|
||||
uint32_t patchedOptNum{};
|
||||
|
||||
// Insert your desired args here - results will be written to stderr
|
||||
const char *argv[] = {"-help", "-help-hidden", "", NULL };
|
||||
StringListVal listVal{
|
||||
.len = 3,
|
||||
.entry = argv,
|
||||
};
|
||||
|
||||
replacementOpts[patchedOptNum++] = {
|
||||
.type = OptionType::ArgsStringList,
|
||||
.strVals = &listVal
|
||||
};
|
||||
|
||||
const char *opt ="Verbose=true Quiet=false";
|
||||
replacementOpts[patchedOptNum++] = {
|
||||
.type = OptionType::QcArgsString,
|
||||
.strVal = opt
|
||||
};
|
||||
|
||||
if (opts->num + patchedOptNum > ReplacementOptsNum)
|
||||
__builtin_trap();
|
||||
|
||||
memcpy(&replacementOpts[patchedOptNum], opts->options, sizeof(Option) * opts->num);
|
||||
|
||||
OptionsSet optList{
|
||||
.options = replacementOpts,
|
||||
.num = opts->num + patchedOptNum
|
||||
};
|
||||
|
||||
return OrigCompile(state, &optList);
|
||||
}
|
||||
|
||||
|
||||
struct LlvmInterface {
|
||||
uint32_t unk0[3];
|
||||
// PAD
|
||||
void *makeContext;
|
||||
void *delContext;
|
||||
decltype(CompileHook) *compile;
|
||||
void *unk;
|
||||
};
|
||||
|
||||
extern "C" int LoadACC(LlvmInterface *impl);
|
||||
|
||||
extern "C" __attribute__((visibility("default"))) int LoadACC(LlvmInterface *impl) {
|
||||
void *hnd = dlopen("notreal-glnext.so", RTLD_NOW);
|
||||
|
||||
auto origLoadACC = reinterpret_cast<decltype(LoadACC) *>(dlsym(hnd, "LoadACC"));
|
||||
if (!origLoadACC)
|
||||
__builtin_trap();
|
||||
|
||||
int ret = origLoadACC(impl);
|
||||
|
||||
OrigCompile = impl->compile;
|
||||
impl->compile = &CompileHook;
|
||||
|
||||
return ret;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue