Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/src/main/assets/wincomponents/wincomponents.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
"direct3d" : ["d3dcompiler_33", "d3dcompiler_34", "d3dcompiler_35", "d3dcompiler_36", "d3dcompiler_37", "d3dcompiler_38", "d3dcompiler_39", "d3dcompiler_40", "d3dcompiler_41", "d3dcompiler_42", "d3dcompiler_43", "d3dcompiler_46", "d3dcompiler_47", "d3dcsx_42", "d3dcsx_43", "d3dx10", "d3dx10_33", "d3dx10_34", "d3dx10_35", "d3dx10_36", "d3dx10_37", "d3dx10_38", "d3dx10_39", "d3dx10_40", "d3dx10_41", "d3dx10_42", "d3dx10_43", "d3dx11_42", "d3dx11_43", "d3dx9_24", "d3dx9_25", "d3dx9_26", "d3dx9_27", "d3dx9_28", "d3dx9_29", "d3dx9_30", "d3dx9_31", "d3dx9_32", "d3dx9_33", "d3dx9_34", "d3dx9_35", "d3dx9_36", "d3dx9_37", "d3dx9_38", "d3dx9_39", "d3dx9_40", "d3dx9_41", "d3dx9_42", "d3dx9_43"],
"directsound" : ["dsound"],
"directinput8" : ["dinput8"],
"directinput" : ["dinput"],
"directmusic" : ["dmband", "dmcompos", "dmime", "dmloader", "dmscript", "dmstyle", "dmsynth", "dmusic", "dmusic32", "dswave"],
"directshow" : ["amstream", "qasf", "qcap", "qdvd", "qedit", "quartz"],
"directplay" : ["dplaysvr.exe", "dplayx", "dpmodemx", "dpnet", "dpnhpast", "dpnhupnp", "dpnsvr.exe", "dpwsockx"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ internal fun winComponentsItemTitleRes(string: String): Int {
return when (string) {
"direct3d" -> R.string.direct3d
"directsound" -> R.string.directsound
"directinput8" -> R.string.directinput8
"directinput" -> R.string.directinput
"directmusic" -> R.string.directmusic
"directplay" -> R.string.directplay
"directshow" -> R.string.directshow
Expand Down Expand Up @@ -1210,7 +1212,7 @@ private fun Preview_ContainerConfigDialog() {
dxwrapper = "dxvk",
dxwrapperConfig = "",
audioDriver = "alsa",
wincomponents = "direct3d=1,directsound=1,directmusic=0,directshow=0,directplay=0,vcrun2010=1,wmdecoder=1,opengl=0",
wincomponents = "direct3d=1,directsound=1,directinput8=0,directinput=0,directmusic=0,directshow=0,directplay=0,vcrun2010=1,wmdecoder=1,opengl=0",
drives = "",
execArgs = "",
executablePath = "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4671,14 +4671,15 @@ private fun extractWinComponentFiles(
dlls.clear()
}

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there is old gamenative installed and after update new keyvalue pair in the cfg appears, then old config would get corrupter if accessing with positional itterator. With the fix old configs are compatible with adding new keyvalue pairs without breaking 👌

val oldWinComponentsIter = KeyValueSet(container.getExtra("wincomponents", Container.FALLBACK_WINCOMPONENTS)).iterator()
val oldWinComponentsMap = KeyValueSet(container.getExtra("wincomponents", Container.FALLBACK_WINCOMPONENTS)).associate { it[0] to it[1] }

for (wincomponent in KeyValueSet(wincomponents)) {
try {
if (wincomponent[1].equals(oldWinComponentsIter.next()[1]) && !firstTimeBoot) continue
} catch (e: StringIndexOutOfBoundsException) {
val oldValue = oldWinComponentsMap[wincomponent[0]]
if (oldValue == null){

Timber.d("Wincomponent ${wincomponent[0]} does not exist in oldwincomponents, skipping")
}
if (oldValue == wincomponent[1] && !firstTimeBoot) continue
val identifier = wincomponent[0]
val useNative = wincomponent[1].equals("1")

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/winlator/container/Container.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public enum XrControllerMapping {
public static final String DEFAULT_DDRAWRAPPER = "none";
public static final String DEFAULT_DXWRAPPERCONFIG = "version=" + DefaultVersion.DXVK + ",framerate=0,maxDeviceMemory=0,async=" + DefaultVersion.ASYNC + ",asyncCache=" + DefaultVersion.ASYNC_CACHE + ",vkd3dVersion=" + DefaultVersion.VKD3D + ",vkd3dLevel=12_1" + ",ddrawrapper=" + Container.DEFAULT_DDRAWRAPPER + ",csmt=3" + ",gpuName=NVIDIA GeForce GTX 480" + ",videoMemorySize=2048" + ",strict_shader_math=1" + ",OffscreenRenderingMode=fbo" + ",renderer=gl";;
public static final String DEFAULT_GRAPHICSDRIVERCONFIG = "vulkanVersion=1.3" + ",version=" + DefaultVersion.WRAPPER + ",blacklistedExtensions=" + ",maxDeviceMemory=0" + ",presentMode=mailbox" + ",syncFrame=0" + ",disablePresentWait=0" + ",resourceType=auto" + ",bcnEmulation=auto" + ",bcnEmulationType=compute" + ",bcnEmulationCache=0" + ",gpuName=Device";
public static final String DEFAULT_WINCOMPONENTS = "direct3d=1,directsound=1,directmusic=0,directshow=0,directplay=0,vcrun2010=1,wmdecoder=1,opengl=0";
public static final String FALLBACK_WINCOMPONENTS = "direct3d=1,directsound=1,directmusic=1,directshow=1,directplay=1,vcrun2010=1,wmdecoder=1,opengl=0";
public static final String DEFAULT_WINCOMPONENTS = "direct3d=1,directsound=1,directinput8=0,directinput=0,directmusic=0,directshow=0,directplay=0,vcrun2010=1,wmdecoder=1,opengl=0";
public static final String FALLBACK_WINCOMPONENTS = "direct3d=1,directsound=1,directinput8=0,directinput=0,directmusic=1,directshow=1,directplay=1,vcrun2010=1,wmdecoder=1,opengl=0";
public static final String[] MEDIACONV_ENV_VARS = {
"MEDIACONV_AUDIO_DUMP_FILE=/data/data/app.gamenative/files/imagefs/home/xuser/audio.dmp",
"MEDIACONV_VIDEO_DUMP_FILE=/data/data/app.gamenative/files/imagefs/home/xuser/video.dmp",
Expand Down
39 changes: 21 additions & 18 deletions app/src/main/java/com/winlator/core/WineUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -208,25 +208,16 @@ public static void applySystemTweaks(Context context, WineInfo wineInfo) {
}

public static void overrideWinComponentDlls(Context context, Container container, String identifier, boolean useNative) {
final String dllOverridesKey = "Software\\Wine\\DllOverrides";
File userRegFile = new File(container.getRootDir(), ".wine/user.reg");

try (WineRegistryEditor registryEditor = new WineRegistryEditor(userRegFile)) {
JSONObject wincomponentsJSONObject = new JSONObject(FileUtils.readString(context, "wincomponents/wincomponents.json"));
JSONArray dlnames = wincomponentsJSONObject.getJSONArray(identifier);
for (int i = 0; i < dlnames.length(); i++) {
String dlname = dlnames.getString(i);
if (useNative) {
registryEditor.setStringValue(dllOverridesKey, dlname, "native,builtin");
}
else registryEditor.removeValue(dllOverridesKey, dlname);
}
applyDllOverrides(registryEditor, wincomponentsJSONObject, identifier, useNative);
}
catch (JSONException e) {}
}

public static void overrideWinComponentDlls(Context context, Container container, String wincomponents) {
final String dllOverridesKey = "Software\\Wine\\DllOverrides";
File userRegFile = new File(container.getRootDir(), ".wine/user.reg");
Iterator<String[]> oldWinComponentsIter = new KeyValueSet(container.getExtra("wincomponents", Container.FALLBACK_WINCOMPONENTS)).iterator();

Expand All @@ -242,21 +233,33 @@ public static void overrideWinComponentDlls(Context context, Container container
String identifier = wincomponent[0];
boolean useNative = wincomponent[1].equals("1");

JSONArray dlnames = wincomponentsJSONObject.getJSONArray(identifier);
for (int i = 0; i < dlnames.length(); i++) {
String dlname = dlnames.getString(i);
if (useNative) {
registryEditor.setStringValue(dllOverridesKey, dlname, "native,builtin");
}
else registryEditor.removeValue(dllOverridesKey, dlname);
}
applyDllOverrides(registryEditor, wincomponentsJSONObject, identifier, useNative);
}
}
catch (JSONException e) {
Log.e("WineUtils", "Failed to override win component dlls: " + e);
}
}

private static void applyDllOverrides(WineRegistryEditor registryEditor, JSONObject wincomponentsJSONObject, String identifier, boolean useNative) {

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both functions above would need to be edited so moved logic for both wrappers to have same logic path, just in case both of the wrapper funcitons are used, so the logic would be in same place, just in case someone needs to edit this later then logic is in one place so safe to edit for both logic paths.

final String dllOverridesKey = "Software\\Wine\\DllOverrides";
try {
JSONArray dlnames = wincomponentsJSONObject.getJSONArray(identifier);
for (int i = 0; i < dlnames.length(); i++) {
String dlname = dlnames.getString(i);
if (useNative) {
registryEditor.setStringValue(dllOverridesKey, dlname, "native,builtin");
}
else if ( dlname.equals("dinput") || dlname.equals("dinput8")) {
registryEditor.setStringValue(dllOverridesKey, dlname, "builtin,native");
}
else registryEditor.removeValue(dllOverridesKey, dlname);
}
} catch (JSONException e) {
Log.e("WineUtils", "Failed to apply DLL overrides for identifier: " + identifier, e);
}
}

public static void setWinComponentRegistryKeys(File systemRegFile, String identifier, boolean useNative) {
if (identifier.equals("directsound")) {
try (WineRegistryEditor registryEditor = new WineRegistryEditor(systemRegFile)) {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-da/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ko/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,8 @@
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directx">DirectX</string>
<string name="disable_mouse_input">Отключить ввод мыши</string>
<string name="disable_present_wait">Отключить KHR_present_wait</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@
<!-- Winlator: Win 组件 -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@
<!-- Winlator: Win Components -->
<string name="direct3d">Direct3D</string>
<string name="directsound">DirectSound</string>
<string name="directinput8">DirectInput 8</string>
<string name="directinput">DirectInput</string>
<string name="directmusic">DirectMusic</string>
<string name="directplay">DirectPlay</string>
<string name="directshow">DirectShow</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ private fun buildWinComponents(): String {
return listOf(
"direct3d" to 0,
"directsound" to 0,
"directinput" to 0,
"directinput8" to 0,
"directmusic" to 1,
"directshow" to 1,
"directplay" to 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class ContainerConfigDialogContainerUpdateTest {
.put("vkd3dFeatureLevel", "12_0")
.toString()

val winComponents = "direct3d=0,directsound=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"
val winComponents = "direct3d=0,directsound=0,directinput8=0,directinput=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"

val mutated = ContainerData(
name = "Test Bionic Container",
Expand Down Expand Up @@ -272,7 +272,7 @@ class ContainerConfigDialogContainerUpdateTest {
.put("vkd3dFeatureLevel", "12_1")
.toString()

val winComponents = "direct3d=0,directsound=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"
val winComponents = "direct3d=0,directsound=0,directinput8=0,directinput=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"

val mutated = ContainerData(
name = "Test Glibc Container",
Expand Down Expand Up @@ -575,7 +575,7 @@ class ContainerConfigDialogContainerUpdateTest {

@Test
fun winComponents_areAppliedCorrectly() {
val winComponents = "direct3d=0,directsound=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"
val winComponents = "direct3d=0,directsound=0,directinput8=0,directinput=0,directmusic=1,directshow=1,directplay=1,vcrun2010=0,wmdecoder=0,opengl=1"

val containerData = ContainerData(
wincomponents = winComponents
Expand Down
Loading