提问人:svenno 提问时间:11/15/2023 更新时间:11/15/2023 访问量:16
使用专用 GPU 时,无法从 D3D11 在 D3D9 中创建共享纹理
Cannot create shared texture in D3D9 from D3D11 when using dedicated GPU
问:
我正在处理 DirectX 11 和 DirectX 9 之间的互操作,首先创建 D3D11 纹理,获取共享的 DXGI 句柄,然后使用句柄创建 D3D9 纹理。对于设备创建,我使用 DX11 和 DX9 的默认适配器。
只要我在NVIDIA控制面板中将“自动选择”或“集成显卡”设置为首选图形处理器,它就可以正常工作,但是当我选择高性能选项时,它就会失败。在这种情况下,设备创建也正常工作,并且按预期选择了我的专用 GPU。
在我的 IDirect3DDevice9Ex 上调用 CreateTexture 时,我得到的错误是“值不在预期范围内”。像这样的纹理共享是否适用于 GPU,或者我在资源配置中是否遗漏了某些内容?
我正在使用 DirectX 的 Silk.NET 包装器。以下是我用于创建纹理的片段
首先是 D3D11 纹理:
var texture2DDesc = new Texture2DDesc()
{
BindFlags = (uint)(BindFlag.RenderTarget),
Format = Silk.NET.DXGI.Format.FormatB8G8R8A8Unorm,
Width = width,
Height = height,
MipLevels = 1,
SampleDesc = new SampleDesc(1, 0),
Usage = Usage.Default,
MiscFlags = (uint)ResourceMiscFlag.None,
CPUAccessFlags = 0,
ArraySize = 1
};
然后通过 GetSharedHandle 从 IDXGIResource 接口获取共享句柄,并使用它来创建 D3D9 纹理:
d3D9ExDevice.CreateTexture(
Width: width,
Height: height,
Levels: 1,
Usage: D3D9.UsageRendertarget,
Format: Silk.NET.Direct3D9.Format.A8R8G8B8,
Pool: Pool.Default,
ppTexture: ref d3D9Texture,
pSharedHandle: &sharedHandle
);
此函数失败。
答:
0赞
svenno
11/15/2023
#1
发现问题:
Texture2DDesc 中缺少一个标志,如果您设置以下内容,它就会起作用。
BindFlags = (uint)(BindFlag.RenderTarget | BindFlag.ShaderResource)
评论