问题标签 [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.
hlsl - D3D12 不同格式纹理的动态索引
在着色器模型 5.1 中,我们可以对纹理使用动态索引,如下所示:
这里假设所有纹理都有 4 个通道 (rgba)。但是,当我的纹理数组混合了 BC3(rgba)、BC4(单通道 R)、BC5(双通道 RG)等不同格式时,我不知道如何采样。例如,在 BC4 的情况下,我可以尝试
但这不会跳过三个纹素吗?
directx - 将 DXBC 转换为 DXIL(将 DirectX 字节码转换为 DirectX 中间语言)
Microsoft 的开源DirectX Shader Compiler描述了一种新的用于 HLSL 着色器的中间语言 (IL) 的格式,称为 DXIL。
该文档引用了从以前的 HLSL IL(称为 DXBC)到新 DXIL 的转换器:https ://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/DXIL.rst 。
但是,我找不到引用的 dxbc2dxil 工具,或任何其他将 DXBC 转换为 DXIL 的方法。我尝试将 DXBC 文件传递给 DirectX Shader Compiler 项目中的各种工具,但没有人接受普通的 DXBC 作为输入。
目前有没有办法从旧的 DXBC 获得 DXIL?
c++ - D3D12 不可避免的泄漏报告
这个程序:
在调试输出中给出:
调试设备报告我创建的 D3D12 设备即使在我发布后仍然存在。我知道这确实是真的,因为调试设备本身实际上是保持 D3D12 设备存活的唯一剩余引用者,但从我的角度来看,这不是泄漏,因为我已经正确地发布了我的 D3D12 设备。这只是对我的程序输出的污染,错误地表明我的代码中有错误。
我的问题是:我真的在这里做错了吗?还是报告在 D3D12 调试设备中的工作方式是一种不良行为?关于如何解决它的任何想法?
谢谢!
visual-studio-code - 我无法在 VSCode 中为 D3D12 配置包含路径
[编辑] 这是关于 vsCode 项目而不是 Visual Studio 项目(此处澄清,因为它不明显)
是否有人设法构建了一个包含 d3d12.h 并成功链接到 D3D 库的应用程序。我知道它位于 C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um 但是当我将它添加到 c_cpp_properties.json 的包含路径中时,我收到此错误:
无法打开源文件“kernelspecs.h”(“d3d12.h”的依赖项)
这是有道理的。
此页面提到了 DXSDK_DIR 环境变量,但它没有在我的计算机上定义,尽管我安装了“Windows 10 SDK 软件”和“VS community 2017”。 https://docs.microsoft.com/en-us/windows/desktop/direct3d12/directx-12-programming-environment-set-up
我的印象是现在用 VSCode 构建一个 D3D12 应用程序是不可能的。我错了吗 ?
[编辑]好的,所以我以这种方式添加了所有四个包含路径(我使用的是 g++):
但我收到以下错误:
执行任务:C:\cygwin64\bin/g++.exe -g -o MassiveSteering *.cpp -D_DEBUG '-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared' '-IC :/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um''-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/winrt''-IC:/程序文件 (x86)/Windows Kits/10/Include/10.0.17134.0/cppwinrt' <
在 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared/minwindef.h:182:0 包含的文件中,
来自 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared/windef.h:24,
来自 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um/windows.h:171,
来自 main.cpp:7: C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um/winnt.h:154:2: error: #error "No Target Architecture"
我唯一的 cpp 中唯一的东西是:
visual-studio-code - GNU G++ 在包含 D3D12 包含路径后停止编译(使用 VSCode)
我正在尝试让 VSCode 编译 DS3 代码,我听说我需要这四个包含路径来编译 D3D 文件(包括 d3d12.h):
来源:我无法在 VSCode 中为 D3D12 配置包含路径
所以我确实包含了它们,但现在一个包含 windows.h 的简单文件不再编译。
我唯一的 cpp 中唯一的东西是:
这是我的 vs 代码任务和 g++ 命令行:
我在控制台中得到了这个:
执行任务:C:\cygwin64\bin/g++.exe -g -o MassiveSteering *.cpp -D_DEBUG '-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared' '-IC :/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um''-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/winrt''-IC:/程序文件 (x86)/Windows Kits/10/Include/10.0.17134.0/cppwinrt' <
在 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared/minwindef.h:182:0 包含的文件中,
来自 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/shared/windef.h:24,
来自 C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um/windows.h:171,
来自 main.cpp:7:
C:/Program Files (x86)/Windows Kits/10/Include/10.0.17134.0/um/winnt.h:154:2: error: #error "No Target Architecture"
错误“无目标架构”
如果我删除四个包含路径,我不会收到任何错误。有些东西告诉我,这不是我需要添加以包含 d3d12.h
vulkan - 在 Vulkan 中加载图像时如何通过 CPU 直接写入图像?
在 Direct3D12 中,您可以使用“ID3D12Resource::WriteToSubresource”为 UMA 适配器启用零拷贝优化。
Vulkan 中“ID3D12Resource::WriteToSubresource”的等价物是什么?
graphics - 如何检查 ID3D12GraphicsCommandList 是否已关闭?
我正在学习 DirectX12 并编写一些实用程序类来封装功能。现在我正在研究用于汇集 CommandLists 的机制。
池假定所有命令列表都已关闭。我想在插入池期间验证这一点,但我无法检查它。来自MSDN:
成功则返回 S_OK;否则,返回以下值之一:
- E_FAIL 如果命令列表已经关闭,或者在命令列表记录期间调用了无效的 API。
这正是我正在寻找的,但是当我调用 ID3D12GraphicsCommandList::Close() 进行验证时,它会在KernelBase.dll
. 这对我来说真的很奇怪。此规范是否不合规?
//编辑:我无法捕获异常,即使使用catch(...)
. 它告诉我,我的设置可能有问题,但其他一切都对我有用。
c++ - “D3D12 损坏:ID3D12CommandList::CopyResource:pDstResource 已损坏。” 我是如何损坏着色器资源视图的缓冲区的?
标题中错误对应的调用代码为:
srvBuffer 是一个指向 ID3D12Resource 的智能指针。我与它的第一次真正互动是在这里:
之后我对 srvBuffer 什么都不做,直到尝试复制到它为止。这表明我必须在我的 CreateShaderResourceView 函数中至少犯了一个错误,我将其包括在此处:
我还检查了最终的 pDevice->CreateShaderResourceView 是否通过在此处放置断点来命中,并且确实如此。我希望有一个简单的答案。
编辑:我发现的一个问题是,在我尝试复制到 srvBuffer 之前,我的资源转换屏障出现另一个错误:“D3D12 错误:ID3D12CommandList::ResourceBarrier:指定了 NULL 指针。” 事实证明,this->srvBuffer.Get() 返回一个空指针,这表明我在 CreateCommittedResource 中失败了,我正在努力解决这个问题。不过,这个问题可能会解释最初的错误。
directx-12 - 有没有办法以字符串形式接收来自 DX12 的错误?
示例:这是 CreateGraphicsPipelineState 的调试日志,它告诉我出了什么问题:
但是,对 windows FormatMessage(MESSAGE_FROM_SYSTEM...) 的调用将返回完全相同的错误:
第一个显然更有用......我们曾经有 dxerr.lib,我们在 DXUT 中有 dxerr.cpp 的源代码。但这不包括 DX12。我看不到任何着色器工具可以检索错误并将其从 API 呈现给用户。