Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

代码示例:使用 Direct3D* 12 进行并行处理

$
0
0

文件:

下载
许可:英特尔示例源代码许可协议
优化了…… 
操作系统:Microsoft* Windows® 10(64 位)
硬件:需要 GPU
软件:
(编程语言、工具、IDE、框架)
Microsoft Visual Studio* 2017、Direct3D* 12、C++
前提条件:熟悉 Visual Studio、Direct3D API、3D 图形、并行处理。
教程:使用 DirectX 3D* 12 进行并行处理

简介

本项目的理念是展示如何使用 Direct3D 12 在游戏中进行并行处理。本项目扩展了《使用 OpenGL* 和 Oculus* VR 中的可视化对比英特尔® 酷睿™ i5 处理器和英特尔® 酷睿™ i7 处理器》文章(参见参考部分)的结果和代码,以添加 Direct3D 12 渲染器。它还将之前的粒子系统重新实施为 Direct3D 12 计算着色器。

  1. 修改代码,以添加 CPU Direct3D 12 渲染器
  2. 迁移至 GPU
  3. 深入了解 CPU 和 GPU 的区别

入门指南

修改代码,以添加 CPU Direct3D* 12 渲染器

首先需要将 Direct 3D 12 “渲染器”添加至英特尔酷睿 i5 对比英特尔酷睿 i7 文章中使用的粒子系统。由于软件设计包含了渲染概念,因此可以轻松完成这项操作。第一步是定义连接渲染器的接口,然后编写一个事件循环。为了提升性能,我编写了一个自定义上传堆。接下来,查看计算着色器和实际的 Direct3D 12 渲染代码,然后讨论关于顶点缓冲区视图的问题。

迁移至 GPU

我们可以通过将渲染器从 CPU 迁移至 GPU 来提升性能。相比在各个线程之间分解处理,最好是在多个处理器:CPU 和 GPU 之间分解。

我努力确保 CPU 部分每个结构的每个字段的正确性与一致性,然后首先考虑到 GPU 计算问题可能使任务量增加两到三倍。我当即决定查找某种“助手”框架才是正确的选择,因此,我选择了 MiniEngine:DirectX 12 引擎入门套件。我将介绍我如何在本项目中安装与自定义 MiniEngine。借助 MiniEngine,之前需要使用 CPU 渲染的 500 多行代码减少为面向 GPU 的约 38 行设置代码和 31 行渲染代码(总共 69 行),我的努力终于有了回报。

GPU 渲染器包含设置和渲染代码。设置包含配置根签名、顶点输入和获取用于颜色和深度的格式。最后,我配置了图形 PSO 和视图与生产矩阵。渲染代码分为获取环境、描述过渡、使用新值更新矩阵之前清除颜色和深度以及绘制帧。

深入了解 CPU 和 GPU 的区别

为了实现最佳性能,我使用了两个粒子数据缓冲区,对其中一个进行了渲染,另一个则使用 GPU 计算更新为下一帧。我简要介绍了这一点,然后深入研究了在 GPU 上实施粒子渲染系统所需的变动,尤其是算法的区别。

参考资料

John Stone,Integrated Computing Solutions 公司,《使用 OpenGL* 和 Oculus* VR 中的可视化对比英特尔® 酷睿™ i5 处理器和英特尔® 酷睿™ i7 处理器》https://software.intel.com/zh-cn/articles/compare-intel-core-i5-and-i7-processors-using-custom-visualization-and-vr-benchmark,2017 年。

John Stone,Integrated Computing Solutions 公司,《使用 Direct3D 12 进行并行处理》, https://software.intel.com/zh-cn/articles/parallel-processing-with-directx-3d-12,2017 年

更新日志

创建于 2018 年 3 月 20 日


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>