about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-03-12 11:39:11 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-03-12 11:39:11 +0100
commitdf928fd2d0186550686bba1dd1f9468a0239853f (patch)
tree3d46027c9e66d945bb97adcc22450260dddc7fff /src
parent52c50a2fd4ad15a858540bee8d93ba129ac1d431 (diff)
downloadbox64-df928fd2d0186550686bba1dd1f9468a0239853f.tar.gz
box64-df928fd2d0186550686bba1dd1f9468a0239853f.zip
[RCFILE] Added 2 new rcfile only option, and try to apply wine program parameter earlier, before wien load to be able to change command line and maxcpu
Diffstat (limited to 'src')
-rw-r--r--src/include/debug.h3
-rw-r--r--src/main.c52
-rw-r--r--src/tools/rcfile.c43
3 files changed, 62 insertions, 36 deletions
diff --git a/src/include/debug.h b/src/include/debug.h
index 2c5746a0..a6660d7d 100644
--- a/src/include/debug.h
+++ b/src/include/debug.h
@@ -80,6 +80,9 @@ extern uint64_t start_cnt;
 #endif
 extern int box64_nosandbox;
 extern int box64_inprocessgpu;
+extern int box64_cefdisablegpu;
+extern int box64_cefdisablegpucompositor;
+extern int box64_maxcpu_immutable;
 extern int box64_malloc_hack;
 extern int box64_dummy_crashhandler;
 extern int box64_sse_flushto0;
diff --git a/src/main.c b/src/main.c
index ccc46799..166ec94e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -50,9 +50,12 @@ uintptr_t box64_pagesize;
 uintptr_t box64_load_addr = 0;
 int box64_nosandbox = 0;
 int box64_inprocessgpu = 0;
+int box64_cefdisablegpu = 0;
+int box64_cefdisablegpucompositor = 0;
 int box64_malloc_hack = 0;
 int box64_dynarec_test = 0;
 int box64_maxcpu = 0;
+int box64_maxcpu_immutable = 0;
 #if defined(SD845) || defined(SD888) || defined(SD8G2) || defined(TEGRAX1)
 int box64_mmap32 = 1;
 #else
@@ -1657,7 +1660,7 @@ int main(int argc, const char **argv, char **env) {
     #endif
     int ld_libs_args = -1;
     int is_custom_gstreamer = 0;
-    int wine_steam = 0;
+    const char* wine_prog = NULL;
     // check if this is wine
     if(!strcmp(prog, "wine64")
      || !strcmp(prog, "wine64-development")
@@ -1695,23 +1698,20 @@ int main(int argc, const char **argv, char **env) {
                 box64_custom_gstreamer = box_strdup(tmp);
             }
         }
-        // if program being called is wine_steam (rudimentary check...) and if no other argument are there
-        if(argv[nextarg+1] && argv[nextarg+1][0]!='-' /*&& argc==(nextarg+2)*/) {
-            if(!strcasecmp(argv[nextarg+1], "steam.exe"))
-                wine_steam = 1;
-            else if(!strcasecmp(argv[nextarg+1], "steam"))
-                wine_steam = 1;
-            if(!wine_steam) {
-                const char* pp = strrchr(argv[nextarg+1], '/');
-                if(pp && !strcasecmp(pp+1, "steam.exe"))
-                    wine_steam = 1;
-                else {
-                    pp = strrchr(argv[nextarg+1], '\\');
-                    if(pp && !strcasecmp(pp+1, "steam.exe"))
-                        wine_steam = 1;
-                }
+        // Try to get the name of the exe being run, to ApplyParams laters
+        if(argv[nextarg+1] && argv[nextarg+1][0]!='-' && strlen(argv[nextarg+1])>4 && !strcasecmp(argv[nextarg+1]+strlen(argv[nextarg+1]-4), ".exe")) {
+            const char* pp = strrchr(argv[nextarg+1], '/');
+            if(pp)
+                wine_prog = pp+1;
+            else {
+                pp = strrchr(argv[nextarg+1], '\\');
+                if(pp)
+                    wine_prog = pp+1;
+                else
+                    wine_prog = argv[nextarg+1];
             }
         }
+
     } else if(strstr(prog, "ld-musl-x86_64.so.1")) {
     // check if ld-musl-x86_64.so.1 is used
         printf_log(LOG_INFO, "BOX64: ld-musl detected. Trying to workaround and use system ld-linux\n");
@@ -1846,6 +1846,12 @@ int main(int argc, const char **argv, char **env) {
     }*/
     ApplyParams("*");   // [*] is a special setting for all process
     ApplyParams(prgname);
+    if(box64_wine && wine_prog) {
+        ApplyParams(wine_prog);
+        wine_prog = NULL;
+    }
+    if(box64_wine)
+        box64_maxcpu_immutable = 1; // cannot change once wine is loaded
 
     for(int i=1; i<my_context->argc; ++i) {
         my_context->argv[i] = box_strdup(argv[i+nextarg]);
@@ -1859,13 +1865,13 @@ int main(int argc, const char **argv, char **env) {
     {
         add_argv("--in-process-gpu");
     }
-    if(wine_steam) {
-        printf_log(LOG_INFO, "Steam.exe detected, adding -cef-single-process -cef-in-process-gpu -cef-disable-sandbox -no-cef-sandbox -cef-disable-breakpad to parameters");
-        add_argv("-cef-single-process");
-        add_argv("-cef-in-process-gpu");
-        add_argv("-cef-disable-sandbox");
-        add_argv("-no-cef-sandbox");
-        add_argv("-cef-disable-breakpad");
+    if(box64_cefdisablegpu)
+    {
+        add_argv("-cef-disable-gpu");
+    }
+    if(box64_cefdisablegpucompositor)
+    {
+        add_argv("-cef-disable-gpu-compositor");
     }
 
     // check if file exist
diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c
index 9980e07b..87cc3dd9 100644
--- a/src/tools/rcfile.c
+++ b/src/tools/rcfile.c
@@ -41,7 +41,6 @@ static const char default_rcfile[] =
 "\n"
 "[heroic]\n"
 "BOX64_NOSANDBOX=1\n"
-"BOX64_INPROCESSGPU=1\n"
 "BOX64_MALLOC_HACK=2\n"
 "\n"
 "[LotCG.x86_64]\n"
@@ -59,13 +58,6 @@ static const char default_rcfile[] =
 "[streaming_client]\n"
 "BOX64_EMULATED_LIBS=libSDL2-2.0.so.0:libSDL2_ttf-2.0.so.0\n"
 "\n"
-"[steamwebhelper]\n"
-"BOX64_NOSANDBOX=1\n"
-"BOX64_INPROCESSGPU=1\n"
-"BOX64_MALLOC_HACK=2\n"
-"BOX64_LOG=0\n"
-"BOX64_DYNAREC_BIGBLOCK=0\n"
-"\n"
 "[steam-runtime-check-requirements]\n"
 "BOX64_EXIT=1\n"
 "\n"
@@ -109,6 +101,8 @@ ENTRYSTRING_(BOX64_BASH, bash)                          \
 ENTRYINT(BOX64_JITGDB, jit_gdb, 0, 3, 2)                \
 ENTRYBOOL(BOX64_NOSANDBOX, box64_nosandbox)             \
 ENTRYBOOL(BOX64_INPROCESSGPU, box64_inprocessgpu)       \
+ENTRYBOOL(BOX64_CEFDISABLEGPU, box64_cefdisablegpu)     \
+ENTRYBOOL(BOX64_CEFDISABLEGPUCOMPOSITOR, box64_cefdisablegpucompositor)\
 ENTRYBOOL(BOX64_EXIT, want_exit)                        \
 ENTRYBOOL(BOX64_LIBCEF, box64_libcef)                   \
 ENTRYBOOL(BOX64_SDL2_JGUID, box64_sdl2_jguid)           \
@@ -231,10 +225,30 @@ SUPER()
 #undef ENTRYDSTRING
 #undef ENTRYADDR
 #undef ENTRYULONG
-// the actual fields
+// the actual fields, in two steps to regroup bit fields together
 #define ENTRYBOOL(NAME, name) uint8_t name:1;
 #define CENTRYBOOL(NAME, name) uint8_t name:1;
 #define ENTRYINT(NAME, name, minval, maxval, bits) uint8_t name:bits;
+#define ENTRYINTPOS(NAME, name)
+#define ENTRYSTRING(NAME, name)
+#define ENTRYSTRING_(NAME, name)
+#define ENTRYDSTRING(NAME, name)
+#define ENTRYADDR(NAME, name)
+#define ENTRYULONG(NAME, name)
+SUPER()
+// done
+#undef ENTRYBOOL
+#undef CENTRYBOOL
+#undef ENTRYINT
+#undef ENTRYINTPOS
+#undef ENTRYSTRING
+#undef ENTRYSTRING_
+#undef ENTRYDSTRING
+#undef ENTRYADDR
+#undef ENTRYULONG
+#define ENTRYBOOL(NAME, name)
+#define CENTRYBOOL(NAME, name)
+#define ENTRYINT(NAME, name, minval, maxval, bits)
 #define ENTRYINTPOS(NAME, name) uint32_t name;
 #define ENTRYSTRING(NAME, name) char* name;
 #define ENTRYSTRING_(NAME, name) char* name;
@@ -532,10 +546,13 @@ void ApplyParams(const char* name)
         cycle_log = new_cycle_log;
         initCycleLog(my_context);
     }
-    if(new_maxcpu!=box64_maxcpu && box64_maxcpu && box64_maxcpu<new_maxcpu) {
-      printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because a lesser value is already active: %d\n", new_maxcpu, box64_maxcpu);
-    } else
-        box64_maxcpu = new_maxcpu;
+    if(!box64_maxcpu_immutable) {
+        if(new_maxcpu!=box64_maxcpu && box64_maxcpu && box64_maxcpu<new_maxcpu) {
+        printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because a lesser value is already active: %d\n", new_maxcpu, box64_maxcpu);
+        } else
+            box64_maxcpu = new_maxcpu;
+    } else if(new_maxcpu!=box64_maxcpu)
+        printf_log(LOG_INFO, "Not applying BOX64_MAXCPU=%d because it's too late\n", new_maxcpu);
     if(param->is_ld_library_path_present) AppendList(&my_context->box64_ld_lib, param->ld_library_path, 1);
     if(param->is_box64_path_present) AppendList(&my_context->box64_path, param->box64_path, 1);
     if(param->is_trace_file_present) {