问题标签 [direct3d12]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
141 浏览

direct3d12 - 如何将 D3D11On12 渲染目标映射到内存?

我正在尝试将屏幕外 D2D 渲染目标映射到内存。

  • 渲染目标被创建为ID3D12ResourcewithD3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET
  • 然后通过ID3D11On12Device::CreateWrappedResource()
  • 然后做成一个ID2D1Bitmap1withID2D1DeviceContext2::CreateBitmapFromDxgiSurface

该应用程序使用 D2D 对其进行绘制,然后将其用作 D3D12 着色器中的像素着色器资源,我可以通过这种方式验证纹理的内容是否正确。

但是,如果我通过 将它复制到D3D12_HEAP_TYPE_READBACK资源CopyTextureRegion,它会返回完全设置为 0。我使用的代码适用于其他纹理。我在D3D11DeviceContext刷新后尝试过,并且在完成屏幕呈现后也尝试过。

我也尝试在 D2D 领域中复制和映射它,但我得到了相同的结果。我觉得这个资源在某种程度上很特别,我错过了一些东西。

0 投票
1 回答
221 浏览

runtime-error - D3D12 错误:基于 GPU 的验证:绘制,访问了未初始化的根参数。着色器阶段:PIXEL,根参数索引:[1]

这花了我一段时间才成为 D3D12 新手,但我没有在网上找到任何东西。着色器编译得很好,获得了所有资源,但输出一直是黑色的。在将调试级别设置为最大值并启用 GPU 验证后,我收到了错误消息,然后是某种汇编程序跟踪和操作数转储。

0 投票
1 回答
146 浏览

directx - 支持 RTX 2060 和 D3D12 的 mGPU(多 GPU)AFR 可能吗?

是否可以使用两个 RTX 2060 显卡在 D3D12 中进行 AFR?

我有一个支持 AFR 和 D3D12 的自定义渲染框架,但刚刚阅读了 Nvidia 放弃了 SLI 支持,但是我很难找到一个明确的答案来说明这对于 D3D12 / Vulkan API 意味着什么。他们是否只放弃了 SLI 驱动程序支持,但 Linked-GPU 支持在 D3D12 中仍然正常工作?

如果我购买了两张 RTX 2060 显卡,我可以在 Windows 中将它们设置为“ GPU 0 (Link 0) & GPU 1 (Link 0) ”,然后在 D3D12 中将它们用作节点组吗?

我想将 RayTracing 添加到我的 API 中,但想用它测试 AFR / mGPU 支持,并且 Nvidia 已经不清楚这对 D3D12 / Vulkan 意味着什么。

0 投票
1 回答
76 浏览

raytracing - 内联光线追踪的绑定

我有一个小项目,我正在试验 D3D12 光线追踪(或者我想要)。我设置了一个带有 BLAS 和 TLAS 的场景。我想将此 TLAS 与内联光线跟踪一起使用。我的 TLAS 现在处于 UAV 状态(使用 D3D12_RESOURCE_BARRIER_TYPE_UAV)。在我的 HLSL 中,我声明我的根签名如下:

我现在的困境是,如何将我的 TLAS 绑定到rayTracingScene. 如果我尝试 SetGraphicsRootShaderResourceView,则会出现错误:

D3D12 错误:ID3D12CommandList::SetGraphicsRootShaderResourceView:资源(0x000001BDEB5FAA60:'TLAS')的资源状态(0x400000:D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE)(子资源:0)对于用作根着色器资源无效。Expected State Bits (all): 0xC0: D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE|D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, Actual State: 0x400000: D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE, Missing State: 0xC0: D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE|D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE. 此验证在命令列表记录期间在绑定时强制执行,因为根签名中此资源的描述符声明为 DATA_STATIC_WHILE_SET_AT_EXECUTE。[执行错误#538:INVALID_SUBRESOURCE_STATE]

我无法将 TLAS 资源的状态更改为,D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE|D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE所以我现在不走运。

我一直在寻找内联光线追踪教程,但它们都只涵盖着色器,而不是 C++ 和根签名的绑定。

如果你有一些提示甚至更好;代码,请帮助我继续前进。

0 投票
0 回答
276 浏览

c++ - Direct3D 12 你好,世界!样本问题。窗口启动但没有图形

我正在阅读以下初学者教程:https ://docs.microsoft.com/en-us/samples/microsoft/directx-graphics-samples/d3d12-hello-world-samples-win32

当我构建,然后运行项目时,我会得到一个带有正确项目标题的窗口,但它会启动,然后在一秒钟左右后消失。它显示一个空白的白色窗口,没有任何类型的图形或任何东西。

你认为可能是什么问题?它正在构建和运行,没有任何错误,所以我一无所知。屏幕截图通常比 1,000 个单词要好,所以我附上了我所构建和运行的每个项目的屏幕截图。有关如何使其正常工作的任何建议?

我正在运行:Window 10 OS Build:19042.685 版本:20H2

Direct3D 12 示例程序

0 投票
1 回答
717 浏览

c++ - 在 Direct3D 12 应用程序中,全屏真的比窗口模式更好吗?

我正在尝试学习 Direct3D 12 来做一些简单的 3D 图形来获得乐趣。

我听说纯全屏是获得最大 fps 的方法,但现在我正在测试它,全屏似乎比窗口模式差得多。

例如,WS_BORDER窗口上的静态颜色(全屏大小)并Windowed设置为TRUEDXGI_SWAP_CHAIN_FULLSCREEN_DESC可以在我的计算机上以大约 5000 fps 的速度渲染(使用三重缓冲)。

另一方面,WS_POPUP窗口上的静态颜色,Windowed设置为FALSE并且DXGI_SWAP_CHAIN_FULLSCREEN_DESCIDXGISwapChain3::SetFullscreenState(TRUE, nullptr)称为,仅以大约 3000 fps 的速度渲染(使用三重缓冲)。

应该是这种情况还是我错过了什么?

0 投票
1 回答
100 浏览

hlsl - Direct3D12 - 哪个 RootSignature 优先?

我是 MSFT 和 DirectX 的新手,所以请放轻松。

如果 hlsl 着色器使用该[RootSignature(SignatureName)]属性,它会被代码中定义的根签名覆盖ID3D12RootSignature吗?

例如,在示例代码中,我在一个着色器包含的 .hlsli 文件中有这个:

在着色器中:

是否会被使用以下内容创建的根签名覆盖或覆盖: ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), MY_IID_PPV_ARGS(&m_Signature)) );

0 投票
1 回答
45 浏览

game-engine - 我可以在执行时安全地更改着色器可见 DescriptorHeap 的内容吗

根据描述符堆概述 - 同步,更改执行中引用的描述符(通过 ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable)可能会调用竞争条件。
但是我可以安全地更改当前执行中未引用的描述符吗?引用描述符和非引用描述符都在同一个 DescriptorHeap 中,并且通过调用 ID3D12GraphicsCommandList::SetDescriptorHeaps 将堆设置为 CommandList。 在此处输入图像描述

0 投票
0 回答
79 浏览

directx - 使用 OBS 捕获窗口时 D3D12 对象访问错误消息

我正在研究一个简单的 Direct3D12 示例,它工作正常,但是当我尝试使用 OBS(开放广播软件)捕获我的应用程序窗口时,Visual Studio 输出报告以下错误消息:

[OBS] d3d12 共享贴图采集成功

D3D12 错误:ID3D12CommandQueue::ExecuteCommandLists: 非同时访问纹理资源 (0x000001B7CFCA9520:'未命名对象') 仍被另一个命令队列 (0x000001B7C912BD10:'未命名 ID3D12CommandQueue 对象') 上运行中的 write|transition_barrier GPU 操作引用。现在在此命令队列(0x000001B7D005FB90:'Unnamed ID3D12CommandQueue Object')上启动 transition_barrier GPU 操作是不安全的。这可能导致竞争条件和应用程序不稳定。[执行错误#1047:OBJECT_ACCESSED_WHILE_STILL_IN_USE]

[OBS] ----------------- d3d12 捕获释放 ----------------

这是我的示例代码的链接。

我的问题是 OBS 做了什么导致这个错误代码,我该如何适当地解决它?

0 投票
2 回答
216 浏览

directx-12 - 是否可以在 DirectX 12 桌面应用程序中将 HDR 与 MSAA 结合使用?

使用 DirectX 12 的 DirectX 工具包,我能够成功编译和运行各个 MSAA 和 HDR 教程示例。但是,当我将 MSAA 和 HDR 组件的相关代码组合到一个Game.cpp文件中时,编译失败并显示调试层消息:

D3D12 错误:ID3D12CommandList::ResolveSubresource:指定的格式与源资源不兼容。格式:R10G10B10A2_UNORM,源资源格式:R16G16B16A16_FLOAT [RESOURCE_MANIPULATION ERROR #878:RESOLVESUBRESOURCE_INVALID_FORMAT]

我正在为 SDR 显示监视器使用 HDR 示例代码,因此需要应用色调映射。关于调用的顺序,我在尝试解析 MSAA 渲染目标之前调用结束 HDR 场景:

然后在 MSAA 解析块之后,我将色调映射语句放置如下:

我发现在设置描述符堆以绘制 2D 精灵(在 3D 场景上)之前尝试色调映射会导致错误:

D3D12 错误:CGraphicsCommandList::SetGraphicsRootDescriptorTable:包含句柄 0x80000253a82ff205 的描述符堆 (0x0000025428203230:'DescriptorHeap') 与当前设置的描述符堆 0x0000025428203540:'EffectTextureFactory' 不同。[执行错误#708:SET_DESCRIPTOR_TABLE_INVALID] D3D12:为上一条消息启用了BREAK,即:[错误执行#708:SET_DESCRIPTOR_TABLE_INVALID]

我承认这是第一次尝试将 HDR 和 MSAA 结合起来相当天真,但我担心这些功能在 DirectX 12 中可能不兼容和/或相互排斥。我理解为什么在 MSAA 解决过程中会出现资源兼容性问题,因为我们需要为 HDR 使用浮点渲染目标。我应该注意,如果我通过将m_msaa boolean 设置为false来跳过 MSAA 代码块,我的程序将使用 HDR 正确运行和渲染。

期待任何人可能有的任何建议。如果需要足够的代码或有关程序的其他详细信息,我很乐意更新我的帖子。