首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
vulkan专题
Vulkan描述符、描述符Pool、Layout概念
1、DescriptorSetLayout为了组织和管理着色器资源(如缓冲区、纹理、采样器等),多个相同类型的Descriptor放在一个Layout中以优化GPU对资源的访问 //DescriptorSetLayout定义了哪些描述符Descriptor类型(Buffers、Textures、Samplers)可以包含在其中 VkDescriptorSetLayoutBinding
阅读更多...
尝试进入Vulkan的ValidationLayer中的代码调用栈
问题 当前,我遇到了一个Vulkan中的错误断点: (可以看到最后的位置是“VkLayer_khronos_validation.dll”,即Validation Layer) 这个中断可以在工程YaksueGraphics的这个提交中复现: 当我双击最后的栈时,提示没有cpp文件可供查看 这个core_validation.cpp是Validation Layer中的代码,而对于V
阅读更多...
Vulkan统一所有平台的API
本文是系列博客文章中的第一篇,旨在更深入地探讨在“2015计算机图形图像特别兴趣小组(SIGGRAPH)”大会上披露的有关Vulkan的信息。我不是要透露任何新信息,新信息我会留待Khronos官方发布!我要做的是,解释已经发布的信息的含义,以及说明具备这些含义的信息对从上到下的整个产品交付链中每一方的影响,从我们这样拥有知识产权(IP)的厂商到设备厂商和开发商直至消费者都在这个链条上。
阅读更多...
Vulkan入门系列17 - 多重采样( Multisampling)
一:概述 我们的程序现在可以加载多个级别的纹理,从而解决了在渲染远离观察者的物体时出现的伪影问题。现在图像变得平滑多了,但仔细观察,你会发现绘制的几何图形边缘呈现锯齿状。这在我们早期渲染一个四边形的程序中尤为明显: 这种不希望有的效果被称为 “锯齿”,这是由于可用于渲染的像素数量有限造成的。由于没有无限分辨率的显示器,因此在某种程度上总是会出现这种现象。解决
阅读更多...
Vulkan 学习(7)---- vkImage 创建
目录 OverviewVkImage 创建Important Flags参考代码 Overview VkImage 用于存储图像数据,支持 2D,3D 图像以及Multi Layer,Multi MipLevel的图像,它可以用于纹理,渲染目标等 VkImage比 vkBuffer更加复杂,因为它们是多维的,有独特的布局和格式信息,可以作为过滤,深度或者模板测试等复杂操作的
阅读更多...
Vulkan入门系列15 - 加载模型
一:概述 现在,我们的程序已经可以渲染带纹理的 3D 网格图形了,但我们前面文章中使用的几何图形还不是很有趣。在本章中,我们将扩展程序功能,从实际的3D模型文件中加载顶点和索引数据,让显卡做些实际有趣的工作。 许多图像API教程都像本章这样,让读者编写自己的 OBJ 加载器。这样做的问题是,任何稍微有趣的3D应用需要一些该(OBJ)文件格式不支持的功能,比如骨骼
阅读更多...
编译运行 llama.cpp (vulkan, Intel GPU SYCL)
llama.cpp 是一个运行 AI (神经网络) 语言大模型的推理程序, 支持多种 后端 (backend), 也就是不同的具体的运行方式, 比如 CPU 运行, GPU 运行等. 但是编译运行 llama.cpp 并不是那么容易的, 特别是对于 SYCL 后端 (用于 Intel GPU), 坑那是一大堆. 只有特定版本的 llama.cpp, 特定版本的 Linux 系统和 GPU 驱动程
阅读更多...
Vulkan教程 - 20 图像采样器
本章我们继续创建两个资源,用于图形管线采样图像。第一个资源是我们已经见过的,也就是和交换链图像打交道的时候用的,但是第二个则是新的,它和着色器如何从图像读取纹素有关。 我们之前就见到过,有了交换链图像和帧缓冲,图像可以通过图像视图访问而不是直接访问。也要为贴图图像创建这样一个图像视图。 添加一个类成员textureImageView存储贴图图像的VkImageView,然后创建一个新的方法cr
阅读更多...
Vulkan教程 - 17 描述符与内存对齐
之前章节的描述符布局描述了描述符可以绑定的类型。本章我们要对每个VkBuffer资源创建一个描述符集合来将它绑定到统一缓冲描述符上。 描述符集合不能够直接创建,必须从一个池中分配,就和命令缓冲一样。同样的,对应也有描述符池。写一个新方法createDescriptorPool来建立它,把它放在初始化Vulkan的创建统一缓冲之后: createUniformBuffers();createD
阅读更多...
Vulkan教程 - 16 MVP与统一缓冲对象
我们现在能为每个顶点传输任意属性到顶点着色器了,但是用全局变量怎么样呢?我们本章要转移到3D图形上,这就需要Model-View-Projection矩阵了,也就是MVP矩阵(模型-视口-投影矩阵)。我们可以将它包括进来作为顶点数据,但是这比较浪费内存,也要求我们在它的变换改变的时候更新顶点缓冲,而变换是很可能在每一帧都改变的。 Vulkan中正确处理该问题的方法
阅读更多...
Vulkan教程 - 15 索引缓冲
顶点缓冲已经能正常工作了,但是让我们能够从CPU访问的内存类型可能对显卡本身读取来说不是最优的。最好的内存会有VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT标记,且通常在专用显卡上不可以用CPU访问。本章我们创建两个顶点缓冲,一个位于CPU可访问内存中的临时缓冲来上传来自顶点数组的数据,一个设备本地内存中的最终的顶点缓冲。我们使用缓冲复制命令来移动数据,从临
阅读更多...
Vulkan教程 - 14 顶点缓冲
接下来几章,我们会使用内存中的顶点缓冲替换掉顶点着色器中的硬编码顶点数据。我们用最简单的方式开始,创建一个CPU可见的缓冲,使用memcpy来将顶点数据直接拷贝到它上面,之后我们会介绍如何使用临时缓冲来拷贝顶点数据到高性能内存中。 首先修改顶点着色器,不要再在着色器代码中包括顶点数据。顶点着色器使用in关键字接收来自顶点缓冲的输入: #version 450#
阅读更多...
Vulkan教程 - 12 栅栏和信号量
这一章所有东西都会整合到一起了。我们将会写一个drawFrame方法,它会被主循环调用,将三角形呈现到屏幕上。创建drawFrame方法在mainLoop的while内处理事件后调用: void mainLoop() {while (!glfwWindowShouldClose(window)) {glfwPollEvents();drawFrame();}}
阅读更多...
Vulkan教程 - 11 帧缓冲和命令缓冲
帧缓冲我们前面的章节已经讨论很多了,而且我们已经建立了渲染通道,以便得到单个的帧缓冲,有着和交换链图像一样的格式,但是我们还没有真正创建什么东西呢。 在渲染通道创建过程中指定的附件通过把它们包装成一个VkFramebuffer对象来绑定到一起。帧缓冲对象引用了所有表示附件的VkImageView对象。我们这里就一个附件,即颜色附件。但是,我们为了这个附件要用的图像
阅读更多...
Vulkan教程 - 10 创建图形管线
在我们完成管线创建之前,我们需要告诉Vulkan渲染将要用到的帧缓冲附件的信息。我们需要明确有多少颜色和深度缓冲,每个又有多少采样以及它们的内容应该如何通过渲染操作来进行处理。所有这些信息都包装在渲染通道(render pass)对象中,我们就创建一个新的方法createRenderPass,在initVulkan中调用它,且它在createGraphicsPipeline之前。
阅读更多...
Vulkan教程 - 09 固定管线
固定管线 老式图形API为多数图形管线提供了默认状态。而在Vulkan中你必须明确所有的东西,从视口大小到混合函数。本章我们会填充所有的结构体来配置这些固定管线操作。 VkPipelineVertexInputStateCreateInfo结构体描述了将要传给顶点着色器的顶点数据的格式,它主要通过以下两种方式描述: 绑定:数据间的距离以及数据是
阅读更多...
Vulkan教程 - 08 着色器及编译SPIR-V
着色器模块 不像是之前的API,Vulkan着色器代码一定要用字节码格式,而不是人类可读的语法如GLSL和HLSL。这个字节码就是SPIR-V,设计用于Vulkan和OpenCL。这是一个可以用于编写图形和计算着色器的格式,但是我们主要关注的是Vulkan的图形管线。使用字节码格式的优点之一是GPU厂商写的编译器将着色器代码转化为原生代码会非常简单。过去的经验表明,人类易读的语法如GLSL,某些
阅读更多...
Ubuntu 安装 Vulkan SDK
LunarG VulkanSDK Packages 此存储库包含Ubuntu 20.04和22.04的最新SDK版本。 This repository contains the most recent SDK releases for Ubuntu 20.04 and 22.04. 有关LunarG Vulkan SDK的更多信息,请访问文档部分。 For more informa
阅读更多...
第 5 章. Vulkan 中的命令缓冲区以及内存管理
首发于 Vulkan 学习指南 关注专栏 写文章 第 5 章. Vulkan 中的命令缓冲区以及内存管理 SnowFox 图形学 AI 分布式 操作系统 编译器 架构 后端 多线程 1 人 赞同了该文章 命令缓冲区是若干命令的集合,它会被提交给适当的硬件队列供 GPU 进行处理。 然后
阅读更多...
现代图形API综合比较:Vulkan | DirectX | Metal | WebGPU
Vulkan、DirectX、Metal 和 WebGPU 等低级图形 API 正在融合为类似于当前 GPU 构建方式的模型。 图形处理单元 (GPU) 是异步计算单元,可以处理大量数据,例如复杂的网格几何形状、图像纹理、输出帧缓冲区、变换矩阵或你想要计算的任何数据。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模
阅读更多...
OpenGL/DirectX/Metal/Vulkan
我想了解一下上面提到的东西,大体上指什么? DirectX、Vulkan和OpenGL是什么?什么是图形API?_哔哩哔哩_bilibili 图形API:图形化的应用程序编程接口 Vulkan和OpenGL都是图形API。 OpenGL:开源,跨平台 采用了相对较高级别的抽象设计,更易于学习和使用,但增加了额外的驱动开销。 OpenGL的函数调用需要经过多个软件层级(应用程序,Ope
阅读更多...
M芯片 mac配置Vulkan环境报错 Xcode
报错: Ignoring file ‘/usr/local/Cellar/glfw/3.3.4/lib/libglfw.3.3.dylib’: found architecture ‘x86_64’, required architecture ‘arm64’ Undefined symbols: Linker command failed with exit code 1 (use -v to
阅读更多...
vulkan 渲染模型加载找错,stride 不对
加载下来的顶点数组,我跟教程是一样的 但是输入到顶点着色器的数据就不一样了 教程的是 可以看到,顶点之间都是紧密挨着的,就是正常的三角形 回去看一下顶点数据,就是 6 个 6 个 float 的读进顶点着色器的 但是我的是 一看就是 stride 不对
阅读更多...
metal opencv opengl Vulkan
使用 Metal 和 Core ML 评价照片质量 https://www.ctolib.com/topics-136716.html https://www.zhihu.com/question/55839095
阅读更多...
ncnn - ubuntu调用vulkan加速ncnn是的CMakeLists.txt和bashrc配置
概述 ncnn使用vulkan来加速时,需要先安装vulkan,然后再使用vulkan来编译ncnn,最后才是使用编译好的ncnn来推理模型。。 这里的vulkan再Ubuntu中通常是直接解压安装,然后配置环境变量如下: export VULKAN_SDK=/home/fwq/softs/1.2.182.0/x86_64 1.2.182.0 是我使用的vulkan版本。。 配置完上述路
阅读更多...
Vulkan Synchronization 同步
Vulkan的同步有两个作用,一是控制Command的执行顺序,二是控制缓存的刷新。 Vulkan会保证在同一个Command Queue中的Command按顺序开始执行,但并不会保证谁先执行完成,而且会多个Command同时执行。例如Command1 开执行后会,立即开始执行Command2,两个命令会同时执行,且不保证谁先执行完。 GPU是incoherent caches(缓存不一致),
阅读更多...