
D3D11
文章平均质量分 66
萧戈
从事视频方向的开发
展开
-
浅谈N卡设置、游戏延迟
浅谈N卡设置、游戏延迟原创 2023-11-06 11:03:14 · 205 阅读 · 0 评论 -
GPUView的使用
在hw queue下面的绿色长方形是系统的每个进程。0x000000001e80d这个线程一开始是占用的白色的core0,然后是红色的core2,后来又是白色的core0,所以,core0对应的idle线程里面在这两段时间里面是没有显示的,即被其他线程占用,不是idle}从上面展现的时间段来看,wow的主线程一直不停的向wow的cpu queue上提交work,然后操作系统将cpu的queue中的task提交到GPU的queue中,为了更好的看一下这些queue的行为,让我们看下面3个VSync段。转载 2023-09-14 15:03:45 · 1776 阅读 · 0 评论 -
计算着色器中线程的编号
【代码】计算着色器中线程的编号。原创 2023-08-24 14:43:30 · 617 阅读 · 0 评论 -
HLSL优化需要注意的地方
这意味着无论条件是否满足,所有的线程都会执行所有的分支,但是只会“保留”那些对应其自己的条件为真的结果。提示的语句时,它实际上会为满足条件的线程执行一次,然后为不满足条件的线程再执行一次。这意味着不会有多余的操作在任何线程上执行,但可能会导致线程的串行化(一个接一个地执行),从而可能降低性能。需要注意的是,这些属性仅仅是向编译器提供的建议或提示,编译器可能会基于其内部逻辑和优化策略来决定如何处理循环。提示时,它告诉编译器这个条件语句可能有大的分支差异,也即在不同的线程或像素之间,有些可能走。原创 2023-08-21 14:53:32 · 856 阅读 · 0 评论 -
使用NVIDIA FX Composer验证多纹理合成效果
最近项目上有一个需求,需要将4张带透明通道纹理合成为一张,并且每张纹理指定一个全局透明度。由于纹理过多,合成效果无法保证,为了减少项目的风险,领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我花了几天时间研究了一下NVIDIA FX Composer工具的使用,并且通过此工具简单验证了一下4张纹理的合成效果。点击“OK”按钮以后,工程就新建好了,会弹出工具的主界面。此时你可以通过修改属性窗口中输入参数查看右下角渲染窗口的实时效果。此时可以清楚的看到平面显示的内容。点击一下工具栏的图标“原创 2023-07-18 17:21:23 · 1310 阅读 · 0 评论 -
DirectX11--HLSL中矩阵的内存布局和mul函数探讨
g_World[0]表示矩阵的第1行,读取到的数据为cb[0],cb[1],cb[2],cb[3]这4个寄存器中的第1个值.g_World[1]表示矩阵的第2行,读取到的数据为cb[0],cb[1],cb[2],cb[3]这4个寄存器中的第2个值。g_World[2]表示矩阵的第3行,读取到的数据为cb[0],cb[1],cb[2],cb[3]这4个寄存器中的第3个值。g_World[3]表示矩阵的第4行,读取到的数据为cb[0],cb[1],cb[2],cb[3]这4个寄存器中的第4个值。原创 2023-07-11 19:34:08 · 1062 阅读 · 0 评论 -
D3D11绘制NV12格式内存数据图像到窗口
最近我们播放器(Kommander)有需要绘制NV12格式的内存数据图像到窗口上,为了搞清楚NV12的内存数据如何送入纹理对象,我专门写了个demo来实现这一块的功能,一是为了彻底搞清楚这一块原理,二也是为了方便其他人的学习。上面demo中,我自己创建了一块NV12内存数据,为了简单起见,我把NV12内存数据图像设置成一个灰色了(你们也可以根据自己需要改为其他颜色),所以你们执行程序最终会在窗口上看到一个灰色图像。原创 2023-07-10 10:38:20 · 1877 阅读 · 0 评论 -
关于D3D11渲染的一些总结
但是DXGI_FORMAT_B8G8R8A8_UNORM和DXGI_FORMAT_R8G8B8A8_UNORM是属于不同组里面的格式,因为他们颜色排列的顺序不同,所以这两个格式的纹理之间。例如:DXGI_FORMAT_R8G8B8A8_UNORM和DXGI_FORMAT_R8G8B8A8_UINT属于同一组格式,因为他们的颜色排列顺序相同,所以这两个格式的纹理之间。原创 2023-07-08 15:04:07 · 1067 阅读 · 0 评论 -
D3D11的初始化
尤其是在把后台缓冲区绑定到管线的输出合并器阶段时(使Direct3D可以在后台缓冲区上执行渲染工作),我们必须为后台缓冲区创建一个渲染目标视图(render target view)。:因为大多数显示器不支持超过24位以上的颜色,再多的颜色也是浪费,所以我们将后台缓冲区的像素格式设置为DXGI_FORMAT_R8G8B8A8_UNORM(红、绿、蓝、alpha各8位)。第三个参数是将要绑定到管线的深度/模板视图。另外,在使用深度/模板缓冲区之前,我们必须为它创建一个绑定到管线上的深度/模板视图。转载 2022-11-17 15:06:05 · 1639 阅读 · 0 评论 -
Windows 10 下的高效抓屏方法
https://www.it610.com/article/1306074010093654016.htm转载 2021-05-24 13:49:52 · 446 阅读 · 0 评论 -
DXGI中的flip显示模型
从win8开始,就增加了flip显示模型,通过该显示模型,程序可以减少系统开销,同时增加性能。基于intel mediasdk解码,d3d11渲染,在我自己的电脑上通过对比,该模型确实可以明显降低CPU负载,渲染时间几乎忽略不计。不过坑爹的是,在部分独显不同电脑上,该模型并没有发挥出来该有的作用,反而增加GPU很大的负载,得不偿失。在d3d12中只支持flip model渲染,我想这些坑爹的电脑也就不支持d3d12渲染显示了,没想到这个flip model跟显卡类型,驱动等关系很大。下面简单说下flip转载 2021-05-12 15:36:09 · 1685 阅读 · 0 评论 -
Recommended 8-Bit YUV Formats for Video Rendering
This topic describes the 8-bit YUV color formats that are recommended for video rendering in the Windows operating system. This article presents techniques for converting between YUV and RGB formats, and also provides techniques for upsampling YUV formats.转载 2021-04-16 16:28:06 · 216 阅读 · 0 评论 -
D3d/opengl texture yuv yuv420p nv12 yv12 等等 显示 以及传入shaderresource
为何要用nv12 或nv21?官方解释是方便渲染使用。个人理解 :方便将nv12(DXGI_FORMAT_NV12)或nv21(DXGI_FORMAT_NV21)数据放到一个texture中,然后通过shader进行渲染。nv12与nv21区别是u与v的存放空间的位置问题,一个在前一个在后。下面是msdn中对nv12 aligned 格式的图例描述(y:width,height;uv:width,height/2)memory(width*height*3/2)类似的还有DXGI_FORMAT..转载 2021-04-16 16:06:43 · 494 阅读 · 0 评论 -
D3DX 库的替代方案
有空再翻译,暂时链接英文地址:https://walbourn.github.io/living-without-d3dx/原创 2021-03-26 19:38:37 · 254 阅读 · 0 评论 -
如何使用VS2015编译运行DX11版本龙书配套源码
这篇文章是翻译http://www.d3dcoder.net/网站上Frank Luna(龙书作者本人)的解决方案。近来,我收到求助emails,emalis询问如何解决本书附带的代码使用Visula Studio 2015编译失败的问题。这篇文章将讲解使用VS2015编译所必须的步骤,但在此之前,让我们先来看看为什么同样的代码在VS2015编译失败吧.从Windows 8开始 DirectX不再作为独立的一部本而被集成在操作系统中,并且在之后的版本中DirectX随着系统的更新而更新。而且D转载 2021-03-26 17:35:25 · 639 阅读 · 0 评论 -
【D3D11游戏编程】学习笔记九:编译Effect的方法
(注:【D3D11游戏编程】学习笔记系列由优快云作者BonChoix所写,转载请注明出处:http://blog.youkuaiyun.com/BonChoix,谢谢~)在D3D11应用程序中,对于写好的Effect程序进行编译有如下几种常见方法:1. 在运行期编译用这种方法,我们只管写好Effect代码即可,不用关心其编译问题,而是在C++程序中,通过调用相应的API先对Effect进行编译,得到编译后的内容,再用之来创建Effect接口。在上个例子绘制立方体时我们用的即这个方法,其相关代码再看一.转载 2021-03-15 20:04:32 · 476 阅读 · 0 评论 -
使用D3D11将NV12转成RGB
我显示使用硬解解码出视频,但是解码器只支持NV12的格式,需要转成RGB格式显示,并且这部分在GPU里面做,速度也会比较快,但是,碰到问题:D3D11 CORRUPTION:ID3D11DeviceContext::VideoProcessorBlt: Second parameter does not match device;D3D11_TEXTURE2D_DESC dstDesc;Z...转载 2019-05-17 14:55:24 · 4941 阅读 · 0 评论 -
初始化纹理
你能在创建纹理的时候初始化,或者创建后填充数据。这篇文章将展示怎么初始化不同类型的纹理。Default类型纹理:Default为最常用的纹理类型,这个纹理用D3D11_USAGE_DEFAULT类型创建。你能用下面两种方法之一初始化纹理:调用ID3D11Device::CreateTexture2D方法并且给pInitialData变量指定数据。 调用ID3D11Device::Cr...原创 2019-05-14 20:14:11 · 421 阅读 · 0 评论 -
创建纹理
最简单创建纹理的方式是调用创建纹理API并且指定纹理描述信息。创建一个纹理的过程:1.填充D3D11_TEXTURE2D_DESC结构体。2.调用ID3D11Device::CreateTexture2D方法并指定步骤1 中的结构体。下面例子指定纹理大小为256x256, dynamic usage,shader resource,cpu write access.D3D11...原创 2019-05-13 19:36:07 · 420 阅读 · 0 评论 -
介绍Direct3D11中的纹理(十九)
纹理资源是存储纹素的集合。一个纹素代表最小的纹理单元,可以被管道读或者写。与缓冲区不同,纹理可以通过纹理采样器过滤,因为它们是由着色器单元读取的。纹理的类型影响如何过滤纹理。每个纹素包含1到4个组件,以DXGI_FORMAT枚举定义的DXGI格式之一排列。纹理是作为一个已知大小的结构化资源创建的。但是,在创建资源时,就可以对每个纹理进行类型化或无类型化,只要在纹理绑定到管道时使用视图完全指定了...原创 2019-05-13 19:26:48 · 437 阅读 · 0 评论 -
如何:创建一个常量缓冲区(十八)
常量缓冲区包含着色器常量数据.本节描述如何在准备渲染时初始化常量缓冲区。初始化常量缓冲区定义描述常量数据的结构。 通过填充D3D11_BUFFER_DESC结构创建缓冲区描述,将D3D11_BIND_CONSTANT_BUFFER标志传递给BindFlags成员,并将常量缓冲区描述结构的大小(以字节为单位)传递给ByteWidth成员。注意,D3D11_BIND_CONSTANT_BUF...原创 2019-04-28 14:52:54 · 624 阅读 · 0 评论 -
如何:创建顶点缓冲区(十七)
顶点缓冲区包含每个顶点数据,本节描述如何初始化静态顶点缓冲区,也就是说,顶点缓冲区不会改变。有关初始化非静态缓冲区的帮助,请参阅备注部分。初始化静态顶点缓冲区定义描述顶点的结构。例如,如果顶点数据包含位置数据和颜色数据,那么结构中就会有一个描述位置的向量和另一个描述颜色的向量。 为第一步中定义的结构分配内存(使用malloc或new),用描述几何图形的实际顶点数据填充这个缓冲区。 通过...原创 2019-04-28 14:44:23 · 558 阅读 · 0 评论 -
介绍Direct3D 11中的缓冲区(十六)
缓冲区资源是一组按元素分组的全类型数据的集合。你可以使用缓冲区来存储各种各样的数据,包括位置信息,法向量,纹理坐标、索引信息、设备状态。一个元素由1到4个组件组成。缓冲区元素包含打包数据值(R8G8B8A8),单个8位整数,或4个32位浮点值。缓冲区作为非结构化资源创建,缓冲区不能包含任何mipmap级别,它在读取时不能被过滤,也不能被多采样。缓冲区类型下面是D3D11缓冲区资源类型,...原创 2019-04-28 14:15:31 · 750 阅读 · 0 评论 -
子资源(十五)
Direct3D可以引用整个资源,也可以引用资源的子集。术语子资源指的是资源的子集。缓冲区定义为单个子资源。纹理有点复杂,因为有几种不同的纹理类型(1D、2D等),其中一些支持mipmap级别和/或纹理数组。从最简单的情况开始,一维纹理被定义为单个子资源,如下图所示。这意味着组成一维纹理的纹素数组包含在单个子资源中。如果您使用三个mipmap级别展开一维纹理,可以将其可视化,如下图...原创 2019-04-26 13:57:36 · 416 阅读 · 0 评论 -
资源类型(十四)
资源是可以通过Direct3D管道访问的内存区域。他们是场景的组成块。资源保护几种数据类型:几何体、纹理、和着色器数据。D3D11和D3D10资源的不同:下面是D3D11支持的新数据类型:读写缓冲区和纹理 结构体缓冲区 字节地址缓冲区 追加和消费缓冲区 无序访问缓冲区和纹理...原创 2019-04-26 11:03:05 · 469 阅读 · 0 评论 -
介绍Direct3D 11中的资源(十三)
资源是场景的组成块。它们包含了Direct3D用来解释和渲染场景的大部分数据。资源是可以通过Direct3D管道访问的内存区域(这里指显存)。资源包含以下类型的数据:几何、纹理、着色器数据。你能创建强类型或者弱类型的资源;你能控制资源是否能同时读和写。你能控制资源是否访问CPU、GPU、或者两个同时访问。每个管道最多能激活128个资源。Direct3D资源的生命周期为:使用ID3D...原创 2019-04-26 10:34:10 · 475 阅读 · 0 评论 -
如何:获得设备功能级别(十二)
Direct3D 11设备支持D3D_FEATURE_LEVEL枚举中定义的一组固定的功能级别。一旦知道设备支持的最高特性级别,就可以运行适合该设备的代码路径。获取设备功能级别在创建设备之前,能通过调用D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain函数并制定ppDevice为NULL获取设备支持的功能集。或者调用 ID3D11Devic...原创 2019-04-25 19:07:07 · 1881 阅读 · 0 评论 -
介绍如何在11、10或9个硬件上运行Direct3D 11应用程序(十一)
征层为了处理新机器和现有机器中视频卡的多样性,Direct3D 11引入了特征级别的概念。每个显卡根据所安装的gpu实现一定级别的Direct3D功能。在以前的Direct3D版本中,您可以找到所实现的视频卡的Direct3D版本,然后相应地编写应用程序。使用Direct3D 11,引入了一个新的范例,称为特征层。一个特征层是一组定义好功能集。例如,9_1功能级别实现了在Direct3D ve...原创 2019-04-25 18:02:49 · 921 阅读 · 0 评论 -
Direct3D 11 的底层硬件(十)
Direct3D 11既支持新硬件也支持旧硬件,从DirectX 9到DirectX 11,如下图所示:使用Direct3D 11,引入了一个新的范例,称为特征层。一个特征层定义了GPU的功能集。使用特性级别,您可以将Direct3D应用程序作为目标,使其运行在Direct3D硬件的低层版本上。...原创 2019-04-24 18:07:46 · 311 阅读 · 0 评论 -
如何:创建设备和实时上下文(九)
初始化设备是应用程序在渲染场景之前必须完成的首要任务之一。创建设备和实时上下文填充DXGI_SWAP_CHAIN_DESC结构体的缓冲区数据格式和大小信息。想要知道更多的信息,参考如何:创建交换链。下面的代码演示怎么去填充DXGI_SWAP_CHAIN_DESC结构体。 DXGI_SWAP_CHAIN_DESC sd;ZeroMemory( &sd, sizeof( sd ...原创 2019-04-24 17:55:44 · 247 阅读 · 0 评论 -
如何:获得适配器显示模式(八)
DirectX 10和11使用DirectX图形基础设施(DXGI)来获得与适配器关联的有效显示模式。了解有效的显示模式可以确保应用程序能够正确地选择有效的全屏模式。如何获得适配器显示模式创建IDXGIFactory对象并使用它枚举可用适配器。有关更多信息,请参见如何:枚举适配器。 调用IDXGIAdapter:: EnumOutputs枚举每个适配器的输出。 IDXGIOutpu...原创 2019-04-24 17:34:16 · 973 阅读 · 0 评论 -
如何:枚举适配器(七)
DirectX 10和11使用DirectX图形基础设施(DXGI)枚举计算机上可用的图形适配器。您通常需要枚举适配器,原因如下:确定计算机上安装了多少图形适配器 帮助您选择要使用哪个适配器来创建Direct3D设备 要检索可用于检索设备功能的IDXGIAdapter对象枚举适配器通过调用CreateDXGIFactory函数创建IDXGIFactory对象。下面的代码示例演示如何初...原创 2019-04-24 17:24:49 · 956 阅读 · 0 评论 -
如何:创建交换链(六)
交换链封装2个以上的后背缓冲区用于渲染和显示。他们通常包含一个前置缓冲区用于显示和一个后背缓冲区用于渲染。实时上下文用于渲染后背缓冲区,交换链通过交换两个缓冲区来显示图像。交换链定义了几个渲染特性,包括:渲染区域的大小 显示刷新率 显示模式 缓冲区的数据格式通过填充DXGI_SWAPCHAIN_DESC结构并初始化IDXGISwapChain接口,定义交换链的特征。通过调用IDXG...原创 2019-04-24 17:16:50 · 1167 阅读 · 0 评论 -
如何:创建引用设备(五)
引用设备实现运行时的高度精确的软件实现。要创建引用设备,只需指定正在创建的设备将使用引用驱动程序。这个例子同时创建了一个设备和一个交换链。创建引用设备定义并初始化交换链变量。 DXGI_SWAP_CHAIN_DESC sd; ZeroMemory( &sd, sizeof( sd ) ); sd.BufferCount = 1; sd.Buffe...原创 2019-04-24 17:01:25 · 196 阅读 · 0 评论 -
软件层(四)
Direct3D 11运行时由层构建,从核心的基本功能开始,在外层构建可选的和开发人员辅助的功能。本节描述每个层的功能。一般来说,添加层能添加功能,但不修改现有的行为。例如,核心函数将返回相同的返回值,无论是否实例化调试层。调试层可以提供额外的输出。要在创建设备时创建层,请调用D3D11CreateDevice或D3D11CreateDeviceAndSwapChain,并提供一个或多个D3D...原创 2019-04-24 16:41:16 · 412 阅读 · 0 评论 -
介绍Direct3D 11中的一个设备(三)
Direct3D 11对象模型将资源创建和渲染功能分离到一个设备和一个或多个设备上下文中。这种分离旨在促进多线程。设备 设备上下文 实时设备上下文 延迟设备上下文 线程问题设备设备用于创建资源并枚举显示适配器的功能。在Direct3D 11中,设备用ID3D11Device接口表示。每个应用程序必须至少有一个设备,大多数应用程序只创建一个设备。通过调用D3D11Create...原创 2019-04-24 16:02:07 · 874 阅读 · 0 评论 -
Direct3D 11 特性(一)
编程指南包含如何使用Direct3D 11可编程管道科学地为游戏和桌面应用程序创建实时3D图形的信息。计算着色器 动态渲染链接 多线程 曲面细分 功能的完整列表计算着色器计算着色器允许在GPU上面并行处理,计算着色器是为通用数据并行处理操作而设计的可编程着色器。它在处理输入输出的方式上和其他可编程着色器(顶点、像素、几何体)相似。计算着色器集成到Direct3D中,可以通过Dir...原创 2019-04-23 16:37:56 · 1712 阅读 · 0 评论 -
D3D11学习网站
迈克老狼2012:https://www.cnblogs.com/mikewolf2002/category/351011.htmlX_Jun96:https://blog.youkuaiyun.com/X_Jun96/column/info/25871转载 2019-04-12 14:49:14 · 391 阅读 · 0 评论 -
Direct2D系列文章
https://www.cnblogs.com/graphics/category/412802.html转载 2019-03-20 17:40:02 · 1483 阅读 · 0 评论 -
D3D11中的设备介绍
Device Context可以被用于任何线程中,但一次只能在一个线程中使用。所有的ID3D11Device接口都是free-threaded(线程无关的)的,也就是说可以在多个线程中同时调用其接口函数。ID3D11DeviceContext的方法(除了那些在ID3D11DeviceChild中的方法)是线程相关的,也就是说只能一次在一个线程中使用其方法。创建WARP和Reference设备的限...转载 2018-07-12 15:42:51 · 1614 阅读 · 0 评论