问题标签 [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.

0 投票
2 回答
373 浏览

c++ - 使用哪个 int 实现?

我正在使用 DirectX 12 API 用 C++ 编写视频游戏引擎。通过这样做,我发现了数据类型__int64,它显然是 Microsoft 特定大小的类型。于是我想到了两个问题:

假设选择了正确的大小,大小的 int (如“ int[size]_t ”)通常比标准int更有效吗?

考虑到不同计算机系统之间的效率和兼容性,我应该使用“ int[size]_t ”、“ __int[size] ”和“ int[size] ”中的哪种数据类型?

0 投票
1 回答
1306 浏览

c++ - 如何在 DirectX 中的背景颜色之间切换


我想要的是?
为了尽可能快地在 2 种背景颜色(比如说白色和红色)之间切换,更具体地说,我希望屏幕始终为白色,并且1 帧(这很短)每帧为红色,让我们说 500 毫秒
我知道什么?
好吧,我整天都在看这么简单的例子,但与我想要的相比,我能找到的都是如此复杂,所以任何简单的教程都笑着接受:)
为什么我使用 DirectX?
我试图在 OpenGL 上做但没有成功,这里有人告诉我应该使用这个,但我不知道如何也找不到在哪里学习...... DX 的版本对我来说并不重要,我只需要它尽可能快..
所以,我希望你能帮助我,无论如何谢谢:)

更新:仍然没有答案

0 投票
1 回答
833 浏览

c++ - 计算从多个线程组随机写入 RWStructuredBuffer 的 Shader

我正在尝试从多个线程组实现对 RWStructuredBuffer 的随机访问读取和写入。当有两个线程(在不同的线程组上)同时运行(在不同的多处理器上)并且它们都试图读/写 RWStructuredBuffer 中的相同元素时,可能会发生争用情况。

当所有线程都在同一个线程组中时,我可以使用原子进行并发写入/读取,所以我的解决方案是一次只使用一个线程组多次分派我的 CS,如下所示:

这样,如果来自不同线程组的两个线程想要访问内存的同一部分,它们必须按顺序进行。

我的问题是,这是否是解决我的问题的好方法,因为多次调用图形 API 可能会产生一些驱动程序开销。

API 是 Directx12,HLSL 是使用着色器模型 5.1 编译的。

谢谢您的帮助。干杯,博扬!

0 投票
1 回答
1533 浏览

directx - DXGI Waitable SwapChain 不等待

我设置了一个 DX12 应用程序,它只清除每帧的后备缓冲区。

它真的是准系统:没有 PSO,没有根......唯一的特殊性是它在开始新帧( msdn 可等待交换链)之前等待 swapChain 与 Present() 完成(我将帧延迟设置为 1 为好吧,只有 2 个缓冲区)。

第一帧运行良好,但它立即开始绘制第二帧,当然,命令分配器抱怨它正在被重置,而命令仍在 GPU 上执行。

我当然可以设置一个栅栏来等待 gpu 在移动到新帧之前完成,但我认为这是等待交换链对象的工作。

这是渲染例程:

我使用从交换链获得的可等待对象循环此例程:

我用等待标志初始化了交换链:

我在创建 swapChain 后立即调用 SetFrameLatency :

以及随之而来的 swapChain 调整大小:

我的问题是:我是否设置错误?还是这是可等待交换链的工作方式(即,在等待交换链可用之前,您还需要使用栅栏与 gpu 同步)?

编辑:添加 SetFrameLatency 调用 + C++ 着色

0 投票
1 回答
170 浏览

directx - 图像法线贴图到 DirectX 9-12

我有一个问题要问你,因为我真的需要这个,但我不知道该如何解决。是否有可能将法线贴图图像转换为 NormalBuffer?或者换句话说...我想在 DirectX 9-12 中制作一个 3D 应用程序,它将用于模型的纹理(模型的材料)一些将从 Substance Painter 导出的图像。有没有可能这样做?

0 投票
1 回答
282 浏览

directx-12 - 英特尔图形硬盘上的 Direct x 12 图像闪烁

我有一个奇怪的问题只发生在我的 Intel HD Graphics 530 上

渲染图像时,某些像素的颜色会随机变化。见下图: 错误

对于有问题的像素,图形调试器显示图形管道输出的颜色是正确的。但是像素显示的颜色是错误的。请参阅:调试器

根据我的调查,我发现这些像素似乎使用了其他像素的信息。我的材料信息由描述符堆处理。所以在我的渲染循环中图形根描述符表之间的切换似乎是我的问题(当我只绘制一个对象时一切都很好)

这是我使用的代码片段:

}

怎么了 ?

0 投票
0 回答
473 浏览

directx-12 - DX12 - 描述符堆优化方法

我一直致力于构建 DX12 渲染器。目前,在查看了许多示例(Mini Engine、BGFX、...)之后,我想我终于找到了描述符绑定的最佳解决方案。这是过程:

  • 当调用 addTexture 或任何添加资源时 - 从静态着色器可见堆(CPU 和 GPU 句柄)分配描述符句柄
  • 当用户想要绑定一个描述符集时,遍历集合中的所有描述符并使用创建描述符时分配的 GPU 句柄调用 SetRootDescriptorTable。

这是最优化的方法吗?它只涉及在帧开始时绑定 2 个堆(采样器和 cbv_srv_uav)并调用 SetRootDescriptorTable。(我们并没有真正使用 RootDescriptors,因为我们的目标平台是控制台(AMD gpu),它的根签名限制为 13 DWORDS)

0 投票
1 回答
561 浏览

c# - 尝试“最小可行”的 SharpDX 12 设置;错误 0x887A0005 “设备已移除”

目标:编写“最小可行”,没有多余的代码来设置 SharpDX 12(DirectX 12 的 C# 包装器),创建一个窗口,并执行一个将屏幕清除为 RGBA(0、0、1、 1)。

期望:尽我所能遵循 DirectX 12 设置教程,然后我会得到一个蓝色背景的窗口。

结果:在循环的第二次运行中,在“swapChain.Present(1, SharpDX.DXGI.PresentFlags.None);”这一行上 错误消息“SharpDX.SharpDXException:HRESULT:[0x887A0005],模块:[SharpDX.DXGI],ApiCode:[DXGI_ERROR_DEVICE_REMOVED/DeviceRemoved],消息:GPU 设备实例已暂停。使用 GetDeviceRemovedReason 确定适当的操作。

在 SharpDX.Result.CheckError() 在 SharpDX.DXGI.SwapChain.Present(Int32 syncInterval, PresentFlags flags) 在 DirectX12BlueScreen.Program.Main(String[] args) 在 *\DirectX12BlueScreen\DirectX12BlueScreen\Program.cs:line 114" 打印到控制台窗口(我用于调试输出)

我在找什么:为什么会发生错误(设备肯定没有被移除);我的代码的哪一部分导致了错误;如果前两条信息不提供该信息,则该问题的解决方案。

由于完整的代码是 165 行,我在此处发布了循环,并将完整的代码放在 pastebin 中:https ://pastebin.com/vctaYkNC

编辑:使用 PhillipH 提供的信息,我现在有了更准确的错误读数:“System.Runtime.InteropServices.SEHException (0x80004005): External component has throw an exception. at SharpDX.Direct3D12.GraphicsCommandList.ClearRenderTargetView(CpuDescriptorHandle renderTargetView, RawColor4 colorRGBA , Int32 numRects, RawRectangle[] rectsRef) 在 SharpDX.Direct3D12.GraphicsCommandList.ClearRenderTargetView(CpuDescriptorHandle renderTargetView, RawColor4 colorRGBA) 在 DirectX12BlueScreen.Program.Main(String[] args) 在 *\DirectX12BlueScreen\DirectX12BlueScreen\Program.cs:line 138"

0 投票
2 回答
1478 浏览

hlsl - D3D12 不同格式纹理的动态索引

在着色器模型 5.1 中,我们可以对纹理使用动态索引,如下所示:

这里假设所有纹理都有 4 个通道 (rgba)。但是,当我的纹理数组混合了 BC3(rgba)、BC4(单通道 R)、BC5(双通道 RG)等不同格式时,我不知道如何采样。例如,在 BC4 的情况下,我可以尝试

但这不会跳过三个纹素吗?

0 投票
2 回答
1927 浏览

directx-12 - 为什么要转换为 XMFLOAT 而不是直接使用 XMVECTOR?

在学习 DirectX 12 时,它说我应该对类数据成员使用 XMFLOAT 而不是 XMVECTOR。我不懂为什么。

在我的类中定义 XMVECTOR 变量是错误的吗?还是直接在我的课堂上使用 XMVECTOR?