Skip to content

Commit eadac56

Browse files
arturoctebjan
authored andcommitted
Fix DX11 shared textures
Right now creating a texture from a native texture with D3D11_RESOURCE_MISC_SHARED_NTHANDLE will fail unless it is also D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX. This combination is recomended but not mandatory acording to the specification: https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_resource_misc_flag
1 parent 9b07075 commit eadac56

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

sources/engine/Stride.Graphics/Direct3D/Texture.Direct3D.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -175,25 +175,26 @@ private void InitializeFromImpl(DataBox[] dataBoxes = null)
175175
NativeRenderTargetView = GetRenderTargetView(ViewType, ArraySlice, MipLevel);
176176
NativeDepthStencilView = GetDepthStencilView(out HasStencil);
177177

178-
switch (textureDescription.Options)
178+
if (textureDescription.Options == TextureOptions.None)
179179
{
180-
case TextureOptions.None:
181-
SharedHandle = IntPtr.Zero;
182-
break;
183-
case TextureOptions.Shared:
184-
var sharedResource = NativeDeviceChild.QueryInterface<SharpDX.DXGI.Resource>();
185-
SharedHandle = sharedResource.SharedHandle;
186-
break;
180+
SharedHandle = IntPtr.Zero;
181+
}
187182
#if STRIDE_GRAPHICS_API_DIRECT3D11
188-
case TextureOptions.SharedNthandle | TextureOptions.SharedKeyedmutex:
189-
var sharedResource1 = NativeDeviceChild.QueryInterface<SharpDX.DXGI.Resource1>();
190-
var uniqueName = "Stride:" + Guid.NewGuid().ToString();
191-
SharedHandle = sharedResource1.CreateSharedHandle(uniqueName, SharpDX.DXGI.SharedResourceFlags.Write);
192-
SharedNtHandleName = uniqueName;
193-
break;
183+
else if ((textureDescription.Options & TextureOptions.SharedNthandle) != 0)
184+
{
185+
var sharedResource1 = NativeDeviceChild.QueryInterface<SharpDX.DXGI.Resource1>();
186+
var uniqueName = "Stride:" + Guid.NewGuid().ToString();
187+
SharedHandle = sharedResource1.CreateSharedHandle(uniqueName, SharpDX.DXGI.SharedResourceFlags.Write);
188+
SharedNtHandleName = uniqueName;
189+
}
194190
#endif
195-
default:
196-
throw new ArgumentOutOfRangeException("textureDescription.Options");
191+
else if ((textureDescription.Options & TextureOptions.Shared) != 0) {
192+
var sharedResource = NativeDeviceChild.QueryInterface<SharpDX.DXGI.Resource>();
193+
SharedHandle = sharedResource.SharedHandle;
194+
}
195+
else
196+
{
197+
throw new ArgumentOutOfRangeException("textureDescription.Options");
197198
}
198199
}
199200

0 commit comments

Comments
 (0)