问题标签 [directx-12]
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.
gpgpu - HLSL(计算着色器,着色器模型 5_1)难题
所以我有这个 HLSL 结构,使用时在 VS2015 中编译成功:
它是这样使用的:
但后来我切换到 VS2017,我必须进行这个更改才能编译它,因为出现错误: 内部错误:预期 l-value
...并改变:
不知道这里发生了什么,我觉得有点愚蠢。希望有人能帮我解决这个问题,拜托:)
最好的问候,博扬
vulkan - Vulkan:有没有办法像在 DirectX12 中那样在不同位置绘制多个对象?
在 DirectX12 中,您可以使用相当于世界变换的单个统一缓冲区来渲染不同位置的多个对象,例如:
但是,在 Vulkan 中,如果您对单个统一缓冲区执行类似操作,则所有对象都将呈现在最后一个世界矩阵的位置:
有没有办法在 Vulkan 中使用单个统一缓冲区绘制多个对象,就像在 DirectX12 中一样?
我知道 Sascha Willem 的动态统一缓冲区示例 ( https://github.com/SaschaWillems/Vulkan/tree/master/dynamicuniformbuffer ),他在一个大的统一缓冲区中打包了许多矩阵,虽然有用,但并不完全是我的我正在寻找。
提前感谢您的帮助。
c++ - 如何在 Direct x12 上使用多重采样
我有一个关于如何在 Direct x 12 上使用多重采样抗锯齿 (MSAA) 的问题。我无法在网上找到示例。
我所看到的是不可能直接在交换链上启用 MSAA。需要使用单独的多采样纹理进行渲染,并在交换链上进行解析。
但是如何正确创建多采样渲染目标纹理呢?
如何将 MSAA 纹理解析为屏幕?
c++ - API 抽象层 - 避免 API 接口的混合
我一直在计划为我的渲染引擎编写一个 API 抽象层。我想要包含的两个 API 是 D3D11 和 D3D12。因此,我首先为每个 API 编写了一些接口及其各自的实现。
以下代码片段对此进行了举例说明:
到目前为止,一切都很好。现在到实际问题:如果我有另一个接口,其中的方法需要一个IDevice*
as 参数,我如何确保传递“正确”的设备?
我知道我可以每次都调用指针并进行检查,dynamic_cast
但这在性能方面既乏味又昂贵。IDevice*
nullptr
这个问题有一些优雅的解决方案吗?你们中有人知道专业/商业游戏引擎是如何应对的吗?
textures - DX12,如何实现标准纹理类?
我正在研究引擎的纹理类,但遇到了一个问题。
我们的 API 支持不同的操作,例如更新纹理的一些纹素和从纹理中读取数据。
此纹理可以作为 UAV 或 SRV 绑定到管道。它也可以创建为 RTV 或 DSV。
我应该如何处理纹理的创建和更新?我应该将所有纹理创建为UPLOAD堆吗?这将是最标准的解决方案,因为我可以轻松地读写数据,但这也意味着更少的 GPU 带宽。
我还可以检测我是从文件创建纹理还是程序纹理,在第一种情况下,我会将纹理上传到默认堆。
你怎么看?
谢谢!
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?
directx - DirectX 11 混合
我如何在像素着色器中访问目标像素的像素颜色,以便使用我的特定混合方程,当控制进入像素着色器时,我只有源像素位置和颜色,我想知道目标像素的颜色是什么那时..?
我听说过的一种方法是使用纹理,但我无法通过纹理找到方法。
在 directX 11 中不允许可编程混合,但通过一些 hack 是可能的。
c++ - Direct3D12 调用 ClearRenderTargetView 失败
源代码:https ://github.com/AinoMegumi/Direct3D12
我正在尝试初始化 Direct3D12 窗口。
在函数 Direct3D12::OnFrameRender 中(观看上面的源代码,Direct3D12.cpp 第 251 行),
现在,我尝试调用 ClearRenderTargetView。但是,从 KernelBase.dll 引发了未处理的异常。
我调查 KernelBase.dll 并检测谁抛出异常。
观看此 asm 转储 https://pastebin.com/YBJLMBxE
场景是
- 在地址 00007FF8E6380977 上调用
- 在地址 00007FF8E6368AF2 系统调用上
- 跳转到地址 00007FF8E6380977!!!!
- 跳转到地址 00007FF8E6368AE0
- 在地址 00007FF8E6368AF2 系统调用上,
错误信息是
ハンドルされない例外が 0x00007FF8E27F3C58 (KernelBase.dll) で発生しました(Direct3D.exe 内): 0x0000087D (パラメーター: 0x0000000000000000, 0x00000028379BCE20, 0x0000021B7FD80FB0)。</p>
使用 ClearRenderTargetView 和初始化窗口的正确方法是什么?
c++ - DirectX 12 中哪个头文件包含 ThrowIfFailed()
代码图像的一部分,代码图像的 另一部分,我是DirectX 12(或游戏编程)的初学者并从 Microsoft 文档中学习。在使用函数时,我从vs2015ThrowIfFailed()
的智能感知中得到一个错误编辑器
此声明没有存储类或类型说明符。
任何人都可以帮忙。
python - 以一种低延迟、高吞吐量的方式使用 Tensorflow
处理后的数据是实时视频(一堆连续的帧),它们都需要在 DX12 缓冲区中结束。
我不太关心数据是否在训练期间被复制到系统内存,但在评估期间,它必须保留在 GPU 上。
我会在 python 中单独训练网络,允许高延迟,但是在训练之后,我会完全在 GPU 上使用它(因为我的帧已经在那里)。从我的角度来看(有 GPGPU 编程经验,但对 Tensorflow 了解不多),有两种方法可以做到这一点:
从 Python 中训练好的模型中提取参数(权重和偏差),并将它们上传到 GPU 上具有相同网络拓扑的 c++ 程序并在那里运行。它的行为应该像训练它的 Tensorflow 网络。
在 c++ 程序中也使用 Tensorlow,只传递输入和输出的缓冲区句柄(就像使用 GPGPU 所做的那样),然后与 DX12 互操作(因为我需要在此处结束评估)。
想知道这些选项是否可行,如果可行,哪个更好,为什么?
如果我留下任何不清楚的地方,请在评论中告诉我。