首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 从零开始写 SharpDx 应用 聊聊功能等级

在 DirectX 11 引入的功能等级的概念是一组明确的 GPU 功能,也就是说这是一个沟通硬件 GPU 和编程人员中间的特性,在调用此方法创建设备的时候,可以尝试为请求的功能等级创建设备(_d3DDevice...Dx12 和 Dx11 和 Dx9 的设备上运行程序,可以极大减少开发人员对具体硬件的关注 // 需要了解的是: //...在 DirectX 11 引入的功能等级的概念是一组明确的 GPU 功能,也就是说这是一个沟通硬件 GPU 和编程人员中间的特性,在调用此方法创建设备的时候,可以尝试为请求的功能等级创建设备(_d3DDevice...否则,表示在此设备上不支持此功能等级,咱可以使用较低的功能等级重新创建设备 利用此特性,就可以为 Dx9 和 Dx11 和 Dx12 开发应用程序,然后在不同的支持 Dx12 和 Dx11 和 Dx9...如上文所说,功能等级只是代表有多少功能而已,和性能无关 本文代码放在 github 欢迎小伙伴访问 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里问群主(不要问我

1.7K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用C#+FFmpeg+DirectX+dxva2硬件解码播放h264流

    vs所需功能模块 dx9的sdk理论上是不用安装的(如果你是高手,可以用c#的ilgenerator直接写calli;亦或者写unsafe代码直接进行内存call,文章最后我会为大家揭秘如何用c#调用c...我用了directx的managecode,由官方为我们做了dx的调用(见下方图片) ?...我们使用fixed达到的效果就是显式跳过了结构体中前部无关数据(参考上文中AVCodecContext等结构体定义),后文中我们还会使用fixed。   ...会自动降级为软解) 窗体大小改变 基于DirectX中设备后台缓冲的宽高无法动态重设,我们只能在控件大小改变时推倒重来。...进行可能的异常处理(实际上还是推倒重来)   番外篇:C#对DiretX调用的封装 上文中我们使用DirectX的方式看起来即非COM组件,又非C-DLL的P/Invoke,难道DirectX真有托管代码

    3.4K11

    2019-09-20

    这是这台计算机的大脑,所有的设备都围绕它展开。 CPU 和其他设备连接,要靠一种叫作总线(Bus)的东西,其实就是主板上密密麻麻的集成电路,这些东西组成了 CPU 和其他设备的高速通道。...数据单元 包括 CPU 内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。 通用寄存器 AX、BX、CX、DX、SP、BP、SI、DI。...例如只有两位,那 CPU 就只能认 00,01,10,11 四个位置,超过四个位置,就区分不出来了。位数越多,能够访问的位置就越多,能管理的内存的范围也就越广。...软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。...但过多的上下文切换,会将原本运行进程的 CPU 时间,消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成为性能瓶颈 自愿上下文切换 是指进程无法获取所需资源,导致的上下文切换

    66310

    【鹅厂网事】高性能网关设备及服务实践

    频繁调用malloc和free函数是导致性能降低的重要原因,不仅仅是函数调用本身非常耗时,而且会导致大量内存碎片。由于空间比较分散,也进一步增大了cache misses的概率。...同时要少用静态变量,因为静态变量分配在全局数据段,在一个反复调用的函数内访问该变量会导致cache的频繁换入换出,而如果是使用堆栈上的局部变量,函数每次调用时CPU可以直接在缓存中命中它。...多核CPU中每个核都拥有自己的L1/L2 cache,当运行多线程程序时,尽管算法上不需要共享变量,但实际执行中两个线程访问同一cache line的数据时就会引起冲突,每个线程在读取自己的数据时也会把别人的...4.6减少进程上下文切换 进程上下文切换(context switch,简称CS)对程序性能的影响往往会被大家忽视,但它其实一直在默默扼杀着程序的性能!...也不能为了减少内存拷贝而把所有字符串复制都修改为指针,这将导致极难维护和调试。 通过硬件指令加速hash计算,甚者直接使用intel的crc指令来计算hash,比传统纯软件hash算法性能大幅提升。

    1.1K10

    高性能网关设备及服务实践

    频繁调用malloc和free函数是导致性能降低的重要原因,不仅仅是函数调用本身非常耗时,而且会导致大量内存碎片。由于空间比较分散,也进一步增大了cache misses的概率。...同时要少用静态变量,因为静态变量分配在全局数据段,在一个反复调用的函数内访问该变量会导致cache的频繁换入换出,而如果是使用堆栈上的局部变量,函数每次调用时CPU可以直接在缓存中命中它。...多核CPU中每个核都拥有自己的L1/L2 cache,当运行多线程程序时,尽管算法上不需要共享变量,但实际执行中两个线程访问同一cache line的数据时就会引起冲突,每个线程在读取自己的数据时也会把别人的...图11 右侧实例程序性能测试结果 因此,数据cache大小非常有限,循环中数组访问的顺序非常重要,对性能的影响不容小觑。 另外,如果两个循环体可以合并到一个循环而不影响程序结果,则应该合并。...也不能为了减少内存拷贝而把所有字符串复制都修改为指针,这将导致极难维护和调试。 通过硬件指令加速hash计算,甚者直接使用intel的crc指令来计算hash,比传统纯软件hash算法性能大幅提升。

    3.5K94

    深入探究 redis

    从设备复制数据到内核缓冲区是阻塞的,从内核缓冲区拷贝到用户空间,也是阻塞的,直到 copy complete,内核返回结果,用户进程才解除block 的状态。 为了解决阻塞的问题,我们有几个思路。...在服务端创建多个线程或者使用线程池,但是在高并发的情况下需要的线程会很多,系统无法承受,而且创建和释放线程都需要消耗资源。...多路复用有很多的实现,以 select 为例,当用户进程调用了多路复用器,进程会被阻塞。内核会监视多路复用器负责的所有 socket,当任何一个 socket 的数据准备好了,多路复用器就会返回。...如果很多键过期了,但在将来很长一段时间内没有很多客户端访问该键导致过期键不会被删除,占用大量内存空间。 定期删除:是定时删除和惰性删除的一种折中。...具体的操作如下: Redis 会将每一个设置了 expire 的键存储在一个独立的字典中,以后会定时遍历这个字典来删除过期的 key。除了定时遍历外,它还会使用惰性删除策略来删除过期的 key。

    23620

    SQLite 并发的四种处理方式

    在嵌入式设备中,可能只需要几百 K 的内存就够了。因此在移动设备爆发时,它依然是最常见的数据持久化方案之一。...操作隔离:连续的两个数据库查询操作可能会出现结果差异,因为在并发环境下你无法保证着两个读操作中间不会出现写操作。 操作冲突:并发环境下数据库的新增和修改操作执行的时序并不一定与调用时序是一致的。...这就导致一个可能的情形就是:数据库多个更新操作调用后可能存在一些意料之外的情形,而且你还难以追踪排除。 明确这些问题后,接下来我们就来看看这些类库做出了何种应对。...通过这种设计,任意时刻都只会存在一个线程对数据库拥有访问权限。也就是说上诉第一个并发问题被完美解决了。 然而改方案却无法应对第二个问题。...但是这种设计也存在缺点,首先扩大后的上下文管理是一件非常麻烦的事,另外所有的写操作都会被严格束缚而且冲突处理依然很棘手,最后严格的上下文管理也让 Core Data 中编写正确的多线程代码也变得很困难。

    7K70

    Linux面试专题

    在Linux机器上,CPU要么处于受信任的内核模式,要么处于受限制的用户模式。除了内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。...内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。...被申请的内存不会被页分配器和slab分配器所使用和统计,也就是说它处于系统的可见内存之外,即使在将来的某个地方你释放了它。...sys_sched_yield(); 11) Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?...靠软件中断实现的,首先,用户程序为系统调用设置参数,其中一个编号是系统调用编号,参数设置完成后,程序执行系统调用指令,x86上的软中断是有int产生的,这个指令会导致一个异常,产生一个事件,这个事件会导致处理器跳转到内核态并跳转到一个新的地址

    13910

    Android 构建过程分析

    前言 或许我们都知道Android构建会经历资源合并打包、源码编译、dex生成及打包签名等步骤,可是不是每个人对这些过程中发生的事情都了然于心呢?...而冲突时会使用高优化级的设置; 若library的minSdkVersion高于src/main的设置,则会引发error,但可通过overrideLibrary解决。...格式后,修改内容中文件路径的指向并对资源文件进行相应的重命名即可。...dx命令前,需要做一些准备的工作,把编译后的class文件打包成jar包allclasses.jar,然后生成主dex中必须包含的文件列表。...到了CreateMainDexList,会调用dx命令,传入allclasses.jar、componentClasses.jar,分析后者依赖,把它直接引用的类也添加到主dex中,并生成新的multidex

    3.2K40

    优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源

    与此同时,随着我们获得更快的存储选项(NVMe、各种类型的 NVDIMM(N、F、P)或英特尔的 3D XPoint),对超低延迟的需求也随之增加,这导致了围绕其功能的新架构。...图片 图 4:毫无疑问,非易失性 DIMM(及其所有变体)将进一步推动对 RDMA 的需求(图片由 DELL 提供) 一般建议 1....避免在数据路径中使用控制操作 与保留在调用它们的同一上下文中(即不执行上下文切换)并且以优化方式编写的数据操作不同,控制操作(所有创建/销毁/查询/修改)操作非常昂贵, 因为: 大多数时候,他们执行上下文切换...有时他们分配或释放动态内存 有时他们参与访问 RDMA 设备 作为一般经验法则,应避免调用控制操作或减少其在数据路径中的使用。...根据经验,由于所有 MTU 值的数据包标头大小都相同,因此使用最大可用 MTU 大小将降低每个数据包的“支付价格(负载开销)”;有效负载数据占总使用带宽的百分比将会增加。

    1.7K32

    LINUX一些面试问题集合

    题二答案: (1)互斥量用于线程的互斥,信号量用于线程的同步。 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。...同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已 经实现了互斥,特别是所有写入资源的情况必定是互斥的。...,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问。...事实上,即使在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。...内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。

    1.2K21

    基础总结 (操作系统篇)

    内核态:R0,cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。中断用户态会陷入内核态。...用户态:R3,有限的访问内存,不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。中断时用户态cpu上下文是保存在内核栈的pt_regs里。...用户态和内核态:现代操作系统只使用R0和R3两种模式,对应于内核模式和用户模式 CPU所有指令中,有些指令是非常危险的,如果错用将导致系统崩溃,如清内存、设置时钟等。...故每个进程访问futex的虚拟地址不一样,但是操作系统知道所有这些虚拟地址映射到同一个表示futex变量的物理地址。...blkio子系统,限制进程的块设备io、devices子系统,控制进程能访问某些设备。

    41430

    虚拟化技术的总结

    而内存虚拟化的关键要求是地址管理,根据上下文配置和控制各个VM对物理内存的访问。 内存虚拟化通常是与通过内存分配和释放的管理相结合来实现的。...在座舱芯片中,典型的Device类型可以总结为: 软件模拟虚拟化设备:借助软件模拟或硬件虚拟化的方法捕捉原生驱动,之后在Hypervisor内模拟虚拟设备的行为,所有虚拟机都通过管理程序陷阱与该设备交互...; 半虚拟化设备:为所有虚拟机模拟一个实际的物理设备,所有虚拟机都可以通过一次下陷与该设备进行批处理调用; 直通设备:被虚拟化环境中的特定虚拟机完全独占; 共享设备:可以供一个VM使用,也可以供一个或多个...对于直通设备,Hypervisor只需要将来自物理设备的中断直接路由到对应的VM,并将来自VM的所有信号直接传递到对应的设备。...中介共享:所有授权的VM通过虚拟设备访问该设备,Hypervisor控制该设备并管理驱动程序。

    1.5K10

    25、【实战中提升自己】分支篇之VPN部署(包括对接、双链路冗余、优化与分析、策略路由与NAT的影响)

    ,这样的话VPN的流量就可以访问了,而且也不影响内部网络访问外网的策略。...,当然我们并不希望所有的流量都可以访问,所以这里必须定义一个路由过滤来允许我们希望给对方的路由,其余的则不发送。...,一个用于电信VPN建立,另外用于联通VPN建立 (5)拨号接口调用 两边路由的说明 说明:在实际工作中,一般直接默认路由指向出口ISP即可,这样既可以包含VPN的流量,也包含访问Internet的流量...NAT对于VPN的影响 说明:如果在平时的VPN部署中,NAT与VPN是冲突的,通常情况下需要在NAT中把对应的VPN流量不做源NAT,完成访问。...VPN优化 说明:为什么需要对VPN进行优化呢,我们都知道VPN的流量传输都是要经过加解密的,如果数据流量非常大的话,就会影响设备性能,而且VPN的传输速率也取决于VPN设备的性能与带宽。

    27110

    VPN部署(包括对接、双链路冗余、优化与分析、策略路由与NAT的影响)

    ,这样的话VPN的流量就可以访问了,而且也不影响内部网络访问外网的策略。...,当然我们并不希望所有的流量都可以访问,所以这里必须定义一个路由过滤来允许我们希望给对方的路由,其余的则不发送。...,一个用于电信VPN建立,另外用于联通VPN建立 (5)拨号接口调用 两边路由的说明 说明:在实际工作中,一般直接默认路由指向出口ISP即可,这样既可以包含VPN的流量,也包含访问Internet的流量...NAT对于VPN的影响 说明:如果在平时的VPN部署中,NAT与VPN是冲突的,通常情况下需要在NAT中把对应的VPN流量不做源NAT,完成访问。...VPN优化 说明:为什么需要对VPN进行优化呢,我们都知道VPN的流量传输都是要经过加解密的,如果数据流量非常大的话,就会影响设备性能,而且VPN的传输速率也取决于VPN设备的性能与带宽。

    34210

    Direct3D 11 Tutorial 1: Basics_Direct3D 11 教程1:基础

    Github-LearnDirectX-DX3D11 tutorial01 概述 在这第一篇教程中,我们将通过介绍创建最小Direct3D应用程序所必需的元素。...直接上下文是Direct3d 11中的一个新对象。 在Direct3D 10中,设备对象用于执行渲染和资源的创建。...在Direct3D 11中,应用程序使用直接上下文对缓冲区执行渲染,设备中包含创建资源的方法。 交换链负责接收设备渲染的缓冲区,并在实际监视器屏幕上显示内容。...填写完描述后,我们可以调用D3D11CreateDeviceAndSwapChain函数为我们创建设备和交换链。...一旦我们创建了渲染目标视图,我们就可以在直接上下文中调用OMSetRenderTargets()来将它绑定到管道上。这可确保管道呈现的输出被写入后台缓冲区。

    1.7K20
    领券