Anonymous
Silk.net dx11 createxture2d сбое с флага Sharedkeyedmutex
Сообщение
Anonymous » 29 июн 2025, 17:05
Я пытаюсь сделать общую текстуру в DX11, но
dx11 createxture2d не удастся с ошибкой "значение не попадает в ожидаемый диапазон".
при добавлении < /p>
Код: Выделить всё
ResourceMiscFlag.SharedKeyedmutex
< /code>
как флаги Misc.
Удаление флага заставляет метод работает, но < /p>
_backBuffer.QueryInterface()
< /code>
Не удастся с «указанным листом недопустимы». < /p>
var tDesc = new Texture2DDesc
{
Format = Format.FormatR8G8B8A8Unorm,
Height = (uint)Size.Height,
Width = (uint)Size.Width,
MipLevels = 1,
ArraySize = 1,
SampleDesc = new SampleDesc(1, 0),
CPUAccessFlags = 0,
Usage = Usage.Default,
MiscFlags = (uint)(ResourceMiscFlag.SharedKeyedmutex),
BindFlags = (uint)(BindFlag.RenderTarget | BindFlag.ShaderResource),
};
ID3D11Texture2D* texture = null;
device.CreateTexture2D(tDesc, &texture);
_backBuffer = texture;
_mutex = _backBuffer.QueryInterface();
// device.CreateTexture2D
public unsafe void CreateTexture2D(
Texture2DDesc desc,
SubresourceData* pData,
ID3D11Texture2D** pTextureBuffer
)
{
//ID3D11Device5
//pData is null here
SilkMarshal.ThrowHResult(_device.CreateTexture2D(desc, pData, pTextureBuffer));
}
//Createingg the D3D11Device
private unsafe void CreateD3D11Device()
{
// Set the creation flags
var flags = CreateDeviceFlag.BgraSupport;
#if DEBUG
flags |= CreateDeviceFlag.Debug;
#endif
ComPtr adapter1 = default;
var driverType = D3DDriverType.Hardware;
if (_gpuPreference != GpuPreference.Unspecified)
{
GetHardwareAdapter(adapter1.GetAddressOf());
driverType = D3DDriverType.Unknown;
}
// Create the D3D11 device
D3DFeatureLevel pFl = default;
fixed (D3DFeatureLevel* pFeatureLevels = FeatureLevels)
{
SilkMarshal.ThrowHResult(
_d3d11.CreateDevice(
adapter1,
driverType,
default,
(uint)flags,
pFeatureLevels,
(uint)FeatureLevels.Length,
D3D11.SdkVersion,
ref _device,//ID3D11Device5
&pFl,
ref _deviceContext //ID3D11DeviceContext4
)
);
}
Debug.WriteLine($"{pFl.ToString()}");
_threadShield = _deviceContext.QueryInterface();
_threadShield.SetMultithreadProtected(true);
adapter1.Dispose();
adapter1 = null;
}
< /code>
ПРИМЕЧАНИЕ: Я могу сделать эту работу с Sharpdx, как это < /p>
_texture = new Texture2D(device,
new Texture2DDescription
{
Format = Format.R8G8B8A8_UNorm,
Width = size.Width,
Height = size.Height,
ArraySize = 1,
MipLevels = 1,
SampleDescription = new SampleDescription { Count = 1, Quality = 0 },
CpuAccessFlags = default,
OptionFlags = ResourceOptionFlags.SharedKeyedmutex,
BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource
});
_mutex = _texture.QueryInterface();
Есть идеи, в чем может быть проблема?
Подробнее здесь:
https://stackoverflow.com/questions/796 ... mutex-flag
1751205912
Anonymous
Я пытаюсь сделать общую текстуру в DX11, но dx11 createxture2d не удастся с ошибкой "значение не попадает в ожидаемый диапазон". при добавлении < /p> [code]ResourceMiscFlag.SharedKeyedmutex < /code> как флаги Misc. Удаление флага заставляет метод работает, но < /p> _backBuffer.QueryInterface() < /code> Не удастся с «указанным листом недопустимы». < /p> var tDesc = new Texture2DDesc { Format = Format.FormatR8G8B8A8Unorm, Height = (uint)Size.Height, Width = (uint)Size.Width, MipLevels = 1, ArraySize = 1, SampleDesc = new SampleDesc(1, 0), CPUAccessFlags = 0, Usage = Usage.Default, MiscFlags = (uint)(ResourceMiscFlag.SharedKeyedmutex), BindFlags = (uint)(BindFlag.RenderTarget | BindFlag.ShaderResource), }; ID3D11Texture2D* texture = null; device.CreateTexture2D(tDesc, &texture); _backBuffer = texture; _mutex = _backBuffer.QueryInterface(); // device.CreateTexture2D public unsafe void CreateTexture2D( Texture2DDesc desc, SubresourceData* pData, ID3D11Texture2D** pTextureBuffer ) { //ID3D11Device5 //pData is null here SilkMarshal.ThrowHResult(_device.CreateTexture2D(desc, pData, pTextureBuffer)); } //Createingg the D3D11Device private unsafe void CreateD3D11Device() { // Set the creation flags var flags = CreateDeviceFlag.BgraSupport; #if DEBUG flags |= CreateDeviceFlag.Debug; #endif ComPtr adapter1 = default; var driverType = D3DDriverType.Hardware; if (_gpuPreference != GpuPreference.Unspecified) { GetHardwareAdapter(adapter1.GetAddressOf()); driverType = D3DDriverType.Unknown; } // Create the D3D11 device D3DFeatureLevel pFl = default; fixed (D3DFeatureLevel* pFeatureLevels = FeatureLevels) { SilkMarshal.ThrowHResult( _d3d11.CreateDevice( adapter1, driverType, default, (uint)flags, pFeatureLevels, (uint)FeatureLevels.Length, D3D11.SdkVersion, ref _device,//ID3D11Device5 &pFl, ref _deviceContext //ID3D11DeviceContext4 ) ); } Debug.WriteLine($"{pFl.ToString()}"); _threadShield = _deviceContext.QueryInterface(); _threadShield.SetMultithreadProtected(true); adapter1.Dispose(); adapter1 = null; } < /code> ПРИМЕЧАНИЕ: Я могу сделать эту работу с Sharpdx, как это < /p> _texture = new Texture2D(device, new Texture2DDescription { Format = Format.R8G8B8A8_UNorm, Width = size.Width, Height = size.Height, ArraySize = 1, MipLevels = 1, SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, CpuAccessFlags = default, OptionFlags = ResourceOptionFlags.SharedKeyedmutex, BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource }); _mutex = _texture.QueryInterface(); [/code] Есть идеи, в чем может быть проблема? Подробнее здесь: [url]https://stackoverflow.com/questions/79683612/silk-net-dx11-createtexture2d-fails-with-sharedkeyedmutex-flag[/url]