Move DirectX Texture2D initialization to after OpenVR Init

This allows us to create the texture on the correct GPU.
This commit is contained in:
BenjaminZehowlt
2023-11-12 20:52:04 -05:00
committed by Natsumi
parent e436492c99
commit 928422e5b9
4 changed files with 26 additions and 37 deletions
+4
View File
@@ -62,6 +62,10 @@ namespace VRCX
public void RenderToTexture(Texture2D texture) public void RenderToTexture(Texture2D texture)
{ {
// Safeguard against uninitialized texture
if (texture == null)
return;
_paintBufferLock.EnterReadLock(); _paintBufferLock.EnterReadLock();
try try
{ {
+22 -23
View File
@@ -12,7 +12,6 @@ using System.Text;
using System.Threading; using System.Threading;
using CefSharp; using CefSharp;
using SharpDX; using SharpDX;
using SharpDX.Direct3D;
using SharpDX.Direct3D11; using SharpDX.Direct3D11;
using SharpDX.DXGI; using SharpDX.DXGI;
using Valve.VR; using Valve.VR;
@@ -82,30 +81,13 @@ namespace VRCX
MainForm.Instance.Browser.ExecuteScriptAsync("console.log('VRCXVR Restarted');"); MainForm.Instance.Browser.ExecuteScriptAsync("console.log('VRCXVR Restarted');");
} }
private void ThreadLoop() private void SetupTextures()
{ {
var active = false;
var e = new VREvent_t();
var nextInit = DateTime.MinValue;
var nextDeviceUpdate = DateTime.MinValue;
var nextOverlay = DateTime.MinValue;
var overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid;
var overlayVisible1 = false;
var overlayVisible2 = false;
var dashboardHandle = 0UL;
var overlayHandle1 = 0UL;
var overlayHandle2 = 0UL;
// REMOVE THIS
// nextOverlay = DateTime.MaxValue;
// https://stackoverflow.com/questions/38312597/how-to-choose-a-specific-graphics-device-in-sharpdx-directx-11/38596725#38596725
Factory f = new Factory1(); Factory f = new Factory1();
var a = f.GetAdapter(1); _device = new Device(f.GetAdapter(OpenVR.System.GetD3D9AdapterIndex()),
DeviceCreationFlags.SingleThreaded | DeviceCreationFlags.BgraSupport);
var flags = DeviceCreationFlags.BgraSupport;
_device = Program.GPUFix ? new Device(a, flags) : new Device(DriverType.Hardware, DeviceCreationFlags.SingleThreaded | DeviceCreationFlags.BgraSupport);
_texture1?.Dispose();
_texture1 = new Texture2D( _texture1 = new Texture2D(
_device, _device,
new Texture2DDescription new Texture2DDescription
@@ -121,7 +103,8 @@ namespace VRCX
CpuAccessFlags = CpuAccessFlags.Write CpuAccessFlags = CpuAccessFlags.Write
} }
); );
_texture2?.Dispose();
_texture2 = new Texture2D( _texture2 = new Texture2D(
_device, _device,
new Texture2DDescription new Texture2DDescription
@@ -137,7 +120,22 @@ namespace VRCX
CpuAccessFlags = CpuAccessFlags.Write CpuAccessFlags = CpuAccessFlags.Write
} }
); );
}
private void ThreadLoop()
{
var active = false;
var e = new VREvent_t();
var nextInit = DateTime.MinValue;
var nextDeviceUpdate = DateTime.MinValue;
var nextOverlay = DateTime.MinValue;
var overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid;
var overlayVisible1 = false;
var overlayVisible2 = false;
var dashboardHandle = 0UL;
var overlayHandle1 = 0UL;
var overlayHandle2 = 0UL;
_browser1 = new OffScreenBrowser( _browser1 = new OffScreenBrowser(
"file://vrcx/vr.html?1", "file://vrcx/vr.html?1",
512, 512,
@@ -183,6 +181,7 @@ namespace VRCX
} }
active = true; active = true;
SetupTextures();
} }
while (system.PollNextEvent(ref e, (uint)Marshal.SizeOf(e))) while (system.PollNextEvent(ref e, (uint)Marshal.SizeOf(e)))
-11
View File
@@ -20,7 +20,6 @@ namespace VRCX
public static string ConfigLocation; public static string ConfigLocation;
public static string Version { get; private set; } public static string Version { get; private set; }
public static bool LaunchDebug; public static bool LaunchDebug;
public static bool GPUFix;
private static readonly NLog.Logger logger = NLog.LogManager.GetLogger("VRCX"); private static readonly NLog.Logger logger = NLog.LogManager.GetLogger("VRCX");
static Program() static Program()
{ {
@@ -143,7 +142,6 @@ namespace VRCX
ProcessMonitor.Instance.Init(); ProcessMonitor.Instance.Init();
SQLiteLegacy.Instance.Init(); SQLiteLegacy.Instance.Init();
VRCXStorage.Load(); VRCXStorage.Load();
LoadFromConfig();
CpuMonitor.Instance.Init(); CpuMonitor.Instance.Init();
Discord.Instance.Init(); Discord.Instance.Init();
WebApi.Instance.Init(); WebApi.Instance.Init();
@@ -170,14 +168,5 @@ namespace VRCX
SQLiteLegacy.Instance.Exit(); SQLiteLegacy.Instance.Exit();
ProcessMonitor.Instance.Exit(); ProcessMonitor.Instance.Exit();
} }
/// <summary>
/// Sets GPUFix to true if it is not already set and the VRCX_GPUFix key in the database is true.
/// </summary>
private static void LoadFromConfig()
{
if (!GPUFix)
GPUFix = VRCXStorage.Instance.Get("VRCX_GPUFix") == "true";
}
} }
} }
-3
View File
@@ -27,9 +27,6 @@ namespace VRCX
foreach (var arg in args) foreach (var arg in args)
{ {
if (arg.Contains("--gpufix"))
Program.GPUFix = true;
if (arg.Length > 12 && arg.Substring(0, 12) == "/uri=vrcx://") if (arg.Length > 12 && arg.Substring(0, 12) == "/uri=vrcx://")
LaunchCommand = arg.Substring(12); LaunchCommand = arg.Substring(12);