Skip to content

Commit

Permalink
vkd3d: add support of multi version vkd3d, add vkd3d-2.13
Browse files Browse the repository at this point in the history
  • Loading branch information
longjunyu2 committed Aug 4, 2024
1 parent a68797b commit 7cb079e
Show file tree
Hide file tree
Showing 9 changed files with 163 additions and 16 deletions.
Binary file added app/src/main/assets/dxwrapper/vkd3d-2.13.tzst
Binary file not shown.
6 changes: 5 additions & 1 deletion app/src/main/java/com/winlator/ContainerDetailFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.winlator.container.ContainerManager;
import com.winlator.contentdialog.AddEnvVarDialog;
import com.winlator.contentdialog.DXVKConfigDialog;
import com.winlator.contentdialog.VKD3DConfigDialog;
import com.winlator.core.AppUtils;
import com.winlator.core.Callback;
import com.winlator.core.EnvVars;
Expand Down Expand Up @@ -457,7 +458,10 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
vDXWrapperConfig.setOnClickListener((v) -> (new DXVKConfigDialog(vDXWrapperConfig)).show());
vDXWrapperConfig.setVisibility(View.VISIBLE);
}
else vDXWrapperConfig.setVisibility(View.GONE);
else if (dxwrapper.equals("vkd3d")) {
vDXWrapperConfig.setOnClickListener((v) -> (new VKD3DConfigDialog(vDXWrapperConfig)).show());
vDXWrapperConfig.setVisibility(View.VISIBLE);
} else vDXWrapperConfig.setVisibility(View.GONE);
}

@Override
Expand Down
31 changes: 19 additions & 12 deletions app/src/main/java/com/winlator/XServerDisplayActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.winlator.contentdialog.ContentDialog;
import com.winlator.contentdialog.DXVKConfigDialog;
import com.winlator.contentdialog.DebugDialog;
import com.winlator.contentdialog.VKD3DConfigDialog;
import com.winlator.core.AppUtils;
import com.winlator.core.DefaultVersion;
import com.winlator.core.EnvVars;
Expand Down Expand Up @@ -188,7 +189,7 @@ public void onCreate(Bundle savedInstanceState) {
if (!dinputMapperType.isEmpty()) winHandler.setDInputMapperType(Byte.parseByte(dinputMapperType));
}

if (dxwrapper.equals("dxvk")) this.dxwrapperConfig = DXVKConfigDialog.parseConfig(dxwrapperConfig);
if (dxwrapper.equals("dxvk") || dxwrapper.equals("vkd3d")) this.dxwrapperConfig = DXVKConfigDialog.parseConfig(dxwrapperConfig);

if (!wineInfo.isWin64()) {
onExtractFileListener = (file, size) -> {
Expand Down Expand Up @@ -361,7 +362,10 @@ private void setupWineSystemFiles() {
}

String dxwrapper = this.dxwrapper;
if (dxwrapper.equals("dxvk")) dxwrapper = "dxvk-"+dxwrapperConfig.get("version");
if (dxwrapper.equals("dxvk"))
dxwrapper = "dxvk-"+dxwrapperConfig.get("version");
else if (dxwrapper.equals("vkd3d"))
dxwrapper = "vkd3d-"+dxwrapperConfig.get("vkd3dVersion");

if (!dxwrapper.equals(container.getExtra("dxwrapper"))) {
extractDXWrapperFiles(dxwrapper);
Expand Down Expand Up @@ -608,10 +612,10 @@ else if (graphicsDriver.equals("virgl")) {
}

if (graphicsDriver.equals("turnip")) {
if (dxwrapper.equals("dxvk")) {
if (dxwrapper.equals("dxvk"))
DXVKConfigDialog.setEnvVars(this, dxwrapperConfig, envVars);
}
else if (dxwrapper.equals("vkd3d")) envVars.put("VKD3D_FEATURE_LEVEL", "12_1");
else if (dxwrapper.equals("vkd3d"))
VKD3DConfigDialog.setEnvVars(this, dxwrapperConfig, envVars);

envVars.put("GALLIUM_DRIVER", "zink");
envVars.put("TU_OVERRIDE_HEAP_SIZE", "4096");
Expand Down Expand Up @@ -751,16 +755,19 @@ private void extractDXWrapperFiles(String dxwrapper) {
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, assetDir+"/ddraw.tzst", windowsDir, onExtractFileListener);
break;
case "vkd3d":
String[] dxvkVersions = getResources().getStringArray(R.array.dxvk_version_entries);
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/dxvk-"+(dxvkVersions[dxvkVersions.length-1])+".tzst", windowsDir, onExtractFileListener);
// FIXME: maybe we need first boot config here
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/dxvk-"+DefaultVersion.DXVK+".tzst", windowsDir, onExtractFileListener);
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/vkd3d-"+DefaultVersion.VKD3D+".tzst", windowsDir, onExtractFileListener);
break;
default:
restoreOriginalDllFiles("d3d12.dll", "d3d12core.dll", "ddraw.dll");
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/"+dxwrapper+".tzst", windowsDir, onExtractFileListener);
// d8vk merged into dxvk since dxvk-2.4, so we don't need to extract d8vk after that
if (compareVersion(StringUtils.parseNumber(dxwrapper), "2.4") < 0)
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/d8vk-"+DefaultVersion.D8VK+".tzst", windowsDir, onExtractFileListener);
if (dxwrapper.startsWith("dxvk")) {
restoreOriginalDllFiles("d3d12.dll", "d3d12core.dll", "ddraw.dll");
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/" + dxwrapper + ".tzst", windowsDir, onExtractFileListener);
// d8vk merged into dxvk since dxvk-2.4, so we don't need to extract d8vk after that
if (compareVersion(StringUtils.parseNumber(dxwrapper), "2.4") < 0)
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/d8vk-" + DefaultVersion.D8VK + ".tzst", windowsDir, onExtractFileListener);
} else if (dxwrapper.startsWith("vkd3d"))
TarCompressorUtils.extract(TarCompressorUtils.Type.ZSTD, this, "dxwrapper/" + dxwrapper + ".tzst", windowsDir, onExtractFileListener);
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.io.File;

public class DXVKConfigDialog extends ContentDialog {
public static final String DEFAULT_CONFIG = "version="+DefaultVersion.DXVK+",framerate=0,maxDeviceMemory=0";
public static final String DEFAULT_CONFIG = "version="+DefaultVersion.DXVK+",framerate=0,maxDeviceMemory=0,async=0,asyncCache=0";
public static final int DXVK_TYPE_NONE = 0;
public static final int DXVK_TYPE_ASYNC = 1;
public static final int DXVK_TYPE_GPLASYNC = 2;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.winlator.contentdialog;

import android.content.Context;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.winlator.R;
import com.winlator.core.AppUtils;
import com.winlator.core.DefaultVersion;
import com.winlator.core.EnvVars;
import com.winlator.core.KeyValueSet;
import com.winlator.core.StringUtils;
public class VKD3DConfigDialog extends ContentDialog {
public static final String DEFAULT_CONFIG = DXVKConfigDialog.DEFAULT_CONFIG +
",vkd3dVersion=" + DefaultVersion.VKD3D + ",vkd3dLevel=12_1";
public static final String[] VKD3D_FEATURE_LEVEL = {"12_0", "12_1", "12_2"};

public VKD3DConfigDialog(View anchor) {
super(anchor.getContext(), R.layout.vkd3d_config_dialog);
setIcon(R.drawable.icon_settings);
setTitle("VKD3D "+anchor.getContext().getString(R.string.configuration));

final Spinner sVersion = findViewById(R.id.SVersion);
final Spinner sFeatureLevel = findViewById(R.id.SFeatureLevel);

ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, VKD3D_FEATURE_LEVEL);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sFeatureLevel.setAdapter(adapter);

KeyValueSet config = parseConfig(anchor.getTag());
AppUtils.setSpinnerSelectionFromIdentifier(sVersion, config.get("vkd3dVersion"));
AppUtils.setSpinnerSelectionFromIdentifier(sFeatureLevel, config.get("vkd3dLevel"));

setOnConfirmCallback(() -> {
config.put("vkd3dVersion", StringUtils.parseNumber(sVersion.getSelectedItem()));
config.put("vkd3dLevel", sFeatureLevel.getSelectedItem().toString());
anchor.setTag(config.toString());
});
}

public static KeyValueSet parseConfig(Object config) {
String data = config != null && !config.toString().isEmpty() ? config.toString() : DEFAULT_CONFIG;
return new KeyValueSet(data);
}

public static void setEnvVars(Context context, KeyValueSet config, EnvVars envVars) {
envVars.put("VKD3D_FEATURE_LEVEL", config.get("vkd3dLevel"));
}
}
44 changes: 44 additions & 0 deletions app/src/main/res/layout/dxvk_config_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,49 @@
android:layout_width="match_parent"
android:id="@+id/SMaxDeviceMemory"
android:entries="@array/dxvk_max_device_memory_entries" />

<LinearLayout
android:id="@+id/LLAsync"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="2dp"
android:orientation="horizontal">

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/enabled_async" />

<androidx.appcompat.widget.SwitchCompat
android:id="@+id/SWAsync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />

</LinearLayout>

<LinearLayout
android:id="@+id/LLAsyncCache"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="2dp"
android:orientation="horizontal">

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/enabled_async_cache" />

<androidx.appcompat.widget.SwitchCompat
android:id="@+id/SWAsyncCache"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />

</LinearLayout>
</LinearLayout>
</ScrollView>
33 changes: 33 additions & 0 deletions app/src/main/res/layout/vkd3d_config_dialog.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="200dp">

<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/version" />

<Spinner
style="@style/ComboBox"
android:layout_width="match_parent"
android:id="@+id/SVersion"
android:entries="@array/vkd3d_version_entries" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/vkd3d_feature_level" />

<Spinner
style="@style/ComboBox"
android:layout_width="match_parent"
android:id="@+id/SFeatureLevel" />

</LinearLayout>
</ScrollView>
10 changes: 8 additions & 2 deletions app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
</string-array>
<string-array name="dxvk_version_entries">
<item>0.96</item>
<item>1.10.3 (Default)</item>
<item>2.3.1</item>
<item>1.10.3</item>
<item>2.3.1 (Default)</item>
<item>2.4</item>
<item>gplasync-2.4</item>
</string-array>
<string-array name="dxvk_max_device_memory_entries">
<item>0 (Default)</item>
Expand Down Expand Up @@ -91,4 +93,8 @@
<item>Essential (Load only essential services)</item>
<item>Aggressive (Stop services on startup)</item>
</string-array>
<string-array name="vkd3d_version_entries">
<item>2.12 (Default)</item>
<item>2.13</item>>
</string-array>
</resources>
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -240,4 +240,7 @@
<string name="use_glibc">Use Glibc instead of Proot</string>
<string name="experimental">Experimental</string>
<string name="glibc_exp_edition">Glibc Experimental Edition</string>
<string name="enabled_async">Enable Async</string>
<string name="enabled_async_cache">Enable Async Cache</string>
<string name="vkd3d_feature_level">VKD3D Feature Level</string>
</resources>

0 comments on commit 7cb079e

Please sign in to comment.