DirectX12 - Swap Chain(交换链)

news2025/8/8 6:51:57

这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的心得体会,有任何GPU相关的问题都可以在评论区互动,知无不言:

DirectX12 Spec 总目录

目录

  • 1. Swap Chain
    • 1.1 什么是Swap Chain?
    • 1.2 为什么叫Swap Chain?

1. Swap Chain

1.1 什么是Swap Chain?

  • 我们都知道,DirectX12驱动的功能,仅仅是读取图形Resource数据,提交到Pipeline中各个Shader中,然后渲染出一帧帧的图像数据。最终的显示过程,还是要把帧数据给到Windows系统,交给DirectX10驱动来显示。
  • 那么DirectX12把数据提交到什么地方呢?
    这就是本文的主题:Swap Chain。在DX12 APP初始化的时候,必须要从DXGI库(一套统一的图形交互接口,由DirectX Runtime提供)调用CreateSwapChain()接口,创建一个或者多个Resource资源,并把这个资源通过RTV(Render Target View)的方式告诉DirectX12驱动:你渲染好的图像数据,全部按照一定的Format填充到我给你的Swap Chain Resource中,剩下的交给我显示。
  • 从以上还能了解到一点,就是DirectX12驱动开发这边,必须要等DirectX10驱动Ready之后,才能实际开发。因为DirectX10驱动起来之后,Windows系统才能正常启动,DirectX12数据才能正常显示,所以也比较尴尬。

1.2 为什么叫Swap Chain?

  • 我们知道GPU的渲染效率是很高的,相比之下,可能系统显示的速度跟不上GPU渲染的速度,为了把GPU的效率发挥到极致,我们可以这样做:
  • DX12 APP初始化的时候,调用CreateSwapChain()创建2个RTV资源,2个RTV Resource大小格式全部一样,称之为Resource A&B。
  • 在任意一个显示的时刻,GPU渲染好了Resource A,APP通过CPU&GPU之间的Fence机制(参考另一篇文章)得知Resouce A就绪,就把Resource A提交给系统显示,同时把Resource B提交给GPU渲染。这里Resource A称之为Front Buffer,Resource B称之为Back Buffer
  • 在渲染下一帧时,APP将Resource A&B交换角色,等GPU将Resource B渲染结束后,APP把Resource B提交给系统显示,同时把Resource A交给GPU渲染。
    SwapChain
  • 这里提交给系统显示时,给的都是指针而没有Resource Copy之类的动作,所以效率很高。
    当然,如果GPU速度更快的话,我们也可以设置Triple Buffer,原理也是类似的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宠物经济:千亿级的孤独生意,如何用智能化玩出新花样?

今年双十一,由铲屎官们主导的宠物经济成功实现逆增长,在众多行业中脱颖而出,成为消费疲软环境下的一匹强势黑马。 天猫、京东数据显示:双十一期间,天猫平台宠物烘焙粮销量同比增长超 700%,京东平台宠物高端…

js逆向tips-某思录登录

0. 写在最前 现在很多时候我们再网页上进行操作时都是用http协议进行一个交流,前端后也是如此,现在的开发模式大部分都是前后端分离的一个交互模式,那就意味着前端发送请求时也是和我们点击按钮一样去向后端发送一个请求,那这种请…

Pr 时间重映射卡点

哈喽,各位小伙伴!今天我们来学习一下如何通过用Pr时间重映射做出卡点的效果~ 卡点音乐 一首适合卡点(群青为例)的音乐可以帮助我们更好的掌握视频的节奏,卡点可以采用手动卡点,方法可以通过在峰值最高处标…

3.66 OrCAD中不同的工程文件,怎么输出所需要工程文件的网表?OrCAD中怎么给元器件自定义属性?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

vue如何通过VNode渲染节点

vue如何通过VNode渲染节点vue的源码包含三大核心实现一个Mini-Vue渲染系统的实现vue2和vue3写法上的区别vue的源码包含三大核心 Compiler模块:编译模板系统 Runtime模块:也可以称之为Renderer模块,真正的渲染的模块 Reactivity模块&#x…

合成孔径雷达地面运动目标检测技术研究——基于概率图(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

SpringCloud学习笔记(四)

文章目录SpringCloud学习笔记(四)1.说在前面2.OpenFeign 简介3.OpenFeign 快速入门3.1 本次调用的设计图3.2 启动一个 eureka-server 服务,这里不重复演示,参考 eureka3.3 先创建 01-order-service,选择依赖3.4 创建 02-user-consumer&#x…

Uni-app常用知识点总结

一、一句话总的形容一下uniapp与vue和微信小程序的异同点 简单来讲Uni-app就是用着vue的指令和小程序的组件和API 二、Uniapp中配置tabbar的方式 见之前的单独文章—— (3条消息) Uni-app中的tabBar的配置_终将抵达丶的博客-CSDN博客_uniapp设置tabbar图片大小https://blog.…

利用霍尔效应传感器和Arduino研究了一个简单的钟摆

A simple pendulum studied using Hall effect sensor and Arduino 利用霍尔效应传感器和Arduino研究了一个简单的钟摆:原文(Hall effect sensor (scitation.org)) ARTICLES YOU MAY BE INTERESTED IN Measurement of gravitational accele…

One UI 5 升级来了

从11月23日开始,三星多款手机海内外开始推送安卓13/One UI 5.0正式版,大家心心念念的One UI 5终于来了,接下来我们看下有关新版One UI 5相关的更新内容,具体如下: One UI 5 升级 (Android 13) One UI 5 为您带来更加强…

Eureka服务注册与发现

✨ Eureka服务注册与发现微服务的注册中心注册中心的基本介绍注册中心的主要作用注册中心基本原理常见的注册中心Eureka基本介绍服务治理服务注册Eureka 两大组件搭建EurekaEureka端服务注册中心创建新模块 cloud-eureka-server7001添加pom依赖yml配置启动类服务中心管理后台服…

Connection(数据库连接对象)

Connection(数据库连接对象) 简介:通过代码来讲解Connection的含义。 推荐学习路线:JDBC数据库的连接->Connection(数据库连接对象)->Statement->ResultSet->通过PreparedStatement预防SQL注入…

【云原生 | Kubernetes 系列】--Gitops持续交付 Argo Rollouts Analysis

1. Argo Rollouts 由一个控制器和一组CRD组成,可为K8s提供高级部署功能 - blue-green - canary - canary analysis 结合外部指标系统金丝雀 - experimentation 实验性的结果 - progressive delivery 渐进式交付,精准管控外部流量策略,不用关心后端部署机制支持Ingress Contro…

第六章《类的高级特性》第1节:static关键字的使用

static意为“静态”,在Java语言中,使用static关键字可以定义静态属性、静态方法和静态块。 6.1.1 静态属性 在第5章中,我们定义了一个Person类的子类Student,用它来表示学生。假如每一个在读学生每年都能得到1000元的助学津贴,并且程序员希望在Student类中以属性的形式把…

骨传导有没有副作用?骨传导耳机有什么优点吗?

骨传导有没有副作用? 先说结论:是没有的。 骨传导耳机虽然是近两年在走向我们大众视野,但是骨传导技术早就已经在医疗、军事领域广泛应用,骨传导也不是什么高端的技术,像我们平常嗑瓜子,吃薯片&#xff0…

javaee实验,SSM整合开发综合实例

由于不能使用maven管理,只能导入jar包做实验,最下面有截图展示所用到的jar包,可以自己搜索文档maven导入依赖; SSM整合开发综合实例 实验目的: (1)掌握SSM项目整合的原则; &#x…

Microsoft Visual Studio C++开发环境的配置及使用

Microsoft Visual Studio C开发环境的配置及使用 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔 叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及…

大数据面试题(四):Yarn核心高频面试题

文章目录 Yarn核心高频面试题 一、简述Hadoop1与Hadoop2的架构异同 二、为什么会产生yarn,它解决了什么问题,有什么优势? 三、HDFS的数据压缩算法?及每种算法的应用场景? 1、gzip压缩 2、Bzip2压缩 3、Lzo压缩 …

SpringBoot框架接收参数的六种常用方式(全面详细)

文章目录[toc]一、基于PathVariable注解二、基于RequestParam注解三、基于PathVariableRequestParam混合四、基于RequestBody注解五、基于HttpServletRequest请求六、不基于任何注解进行表单传参一、基于PathVariable注解 RestControllerpublic class UserController {GetMapp…

C#11新特性之原始字符串

随着.NET 7与C#11的发布,微软发布了C# 11 中的原始字符串这个新特性。 这个新特性解决了祖传字符串中引号的问题。 微软官方的表述是:" Raw string literals",圈里都叫他”原始字符串”。从字面不难看出,它是适用于字符串的新特性…