vulkan相关内容
我有一个敏锐的想法,用 C# 为 Vulkan 编写一个包装器.不幸的是,Vulkan API 的第二次调用已经无法解释地失败了.下面的代码取自 Sascha Willems 的 Vulkan 示例并转换为 c# 代码: Vk.ApplicationInfo applicationInfo = new Vk.ApplicationInfo();applicationInfo.sType = Vk
..
我正在尝试让 Vulkan 在 X11 下运行. 我(显然)成功创建了一个实例、设备和表面,并且与表面相关的几个调用也成功了,甚至返回了合理的值(例如 vkGetPhysicalDeviceSurfaceFormatsKHR 返回两种格式).但是,当我调用 vkGetPhysicalDeviceSurfaceCapabilitiesKHR 时,我得到以下信息: X Error of fa
..
我刚刚开始学习 Vulkan.我有 Graham Sellers 的书“Vulkan Programming Guide",以及我的系统中带有 AMDGPU pro 驱动程序的 RX 480.我正在运行 Arch Linux,并且能够在我的系统上运行一些 Vulkan 演示. 我有一个导致分段错误的最小代码块.奇怪的是,在我为了提出这个问题而生成这个块的过程中,我确实让它在从构造函数调用 v
..
我有基本的 Vulkan 应用程序“Hello triangle",源自本教程.在调试模式下,我使用两个验证层: VK_LAYER_KHRONOS_validation 和 VK_LAYER_LUNARG_monitor 在 Windows 上我没有问题.两个层都加载了,我可以在标题栏中看到 FPS 计数器.但是我在 Linux (Ubuntu 18.04) 上遇到了不同的行为.
..
我有一个具有单个 VkInstance 的应用程序.我也有相同的物理设备索引,但不同的 VkPhysicalDevice 对象和不同的 VkDevice 对象.与多个逻辑设备共享 VkBuffer 或 VkImage 的最简单和最正确的方法是什么? 解决方案 我没有这样做,但也许可以尝试使用 VK_KHR_external_memory 扩展.它允许您从 Vulkan 内存对象导出非 Vu
..
我实际上正在尝试使用 cmake 和 MinGW 在 windows 上制作 vcpkg,但似乎他不想使用 MinGW 这里是错误: -- 运行 vcpkg install - 完成-- C 编译器标识为 GNU 8.1.0-- CXX 编译器标识为 GNU 8.1.0-- 检测 C 编译器 ABI 信息-- 检测 C 编译器 ABI 信息 - 完成-- 检查工作的 C 编译器:C:/Pr
..
在 vulkan 头文件 (/usr/include/vulkan/*) 中声明的某些符号未在 vulkan 库 (libvulkan.so.1.1.82) 中定义>).(我在 Ubuntu 18.04 上使用标准的 vulkan 包,libvulkan1 和 libvulkan-dev) 例如: vkCreateInstance 在 vulkan 头文件中声明,并在 vulkan 库
..
我向我的实例添加了 VK_LAYER_LUNARG_standard_validation 验证层.接下来我创建了一个调试回调和其他 vulkan 对象.对于测试用例,我要清除的唯一对象是实例(因为验证层应该报告实例破坏).从所有的对象中,我有层只报告关于 VkDebugReportCallbackEXT: 验证层:之前未删除调试报告回调销毁实例 为什么我没有提到 VkSurfaceK
..
是否可以从主线程分配vkCommandPool,然后将它们移动到一个新线程中,在那里独占使用? 伪代码: //用于创建二级缓冲区的池threaded_command_pool = new CommandPool();//填充二级缓冲区的线程//threaded_command_poolzd 只在这里使用线程句柄 = 新线程(移动(命令池))thread_handle.join()//用于合
..
我在 Big Sur(2014 年中 15 英寸视网膜)上使用 Vulkan 1.2.170 和 MoltenVK(和 GLFW).我用 VK_LAYER_KHRONOS_validation 创建了实例,当我调用 vkCreateDevice 时,我收到警告 VUID-VkDeviceCreateInfo-pProperties-04451(ERROR/SPEC): msgNum: 97697
..
有 EXT、KHR 或 AMD 或 NV 扩展.也许还有其他一些.我知道 NV 意味着 Nvidia 并且它的 nv 扩展不太可能被 AMD 支持.但是 khr 的还是 ext 的呢?每个人都必须支持它们吗? 解决方案 有一个 网站 专门跟踪这个信息. 也许还有其他的 有大量 但是 khr 的还是 ext 的呢?每个人都必须支持它们吗? KHR 扩展通常是将被折叠到
..
查看 vulkan.h 我看到了: #if 已定义(__LP64__) ||已定义(_WIN64) ||已定义(__x86_64__) ||.....#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;#别的#define VK_DEFINE_NON_DISPATCHABLE_HA
..
我想使用查询系统来检索片段着色器的执行时间. 我正在创建一个带有两个时间戳查询的查询池,我正在使用 vkCmdWriteTimestamp. device.cmd_draw_indexed(draw_command_buffer, 6, 1, 0, 0, 1);device.cmd_write_timestamp(draw_command_buffer,vk::PIPELINE_STAGE
..
我想实现这个算法https://dournac.org/info/gpu_sum_reduction在 Vulkan 的计算着色器中.在 OpenCL 中,这很容易,因为我可以明确声明哪些缓冲区是 __local,哪些是 __global.不幸的是,我似乎无法找到Vulkan 中的任何此类机制.请有经验的人给我举个例子,如何让这些东西在 Vulkan 中工作? 解决方案 Vulkan 中的
..
我们有两个传输命令,vkCmdFillBuffer() 后跟 vkCmdCopyQueryPoolResults().传输命令写入重叠的缓冲区范围. 命令之间是否需要管道屏障以避免写后写的危险? Vulkan 是否为在同一流水线阶段执行的命令提供任何保证? 解决方案 当然,您几乎总是需要在 Vulkan 中进行同步.Vulkan 进行隐式同步的地方很少. 您对流水线阶段有
..
来自 vkEnumerateDeviceExtensionProperties 的手册页, vkEnumerateDeviceExtensionProperties 检索属性物理设备上的扩展,其句柄在物理设备.确定一个层集实现的扩展pLayerName 指向图层的名称和任何返回的扩展名由该层实现.将 pLayerName 设置为 NULL 将返回可用的非层扩展.pPropertyCount
..
目前,似乎所有的 Vulkan 教程和示例都在 Android 平台上使用 NativeActivity.我想知道我们是否可以在 Android 上将 Vulkan 与 Java Activity 一起使用? 解决方案 是的,您可以将 Vulkan 与您自己的 Activity 子类一起使用.由于 Android 没有针对 Vulkan 的 Java 语言绑定,因此您需要使用 JNI 或第
..
注意:我正在自学 Vulkan,对现代 OpenGL 知之甚少. 阅读 Vulkan 规范,我可以看到非常好的信号量,允许命令缓冲区和交换链同步.以下是我所理解的一种简单(但我认为效率低下)的做事方式: 使用vkAcquireNextImageKHR获取图像,信号sem_post_acq 构建命令缓冲区(或使用预构建): 图像屏障使图像远离VK_IMAGE_LAYOUT_UNDEF
..
在将要渲染的每个对象转换为辅助命令缓冲区并且这些命令缓冲区中的每一个最初绑定一个图形管道的简化场景中:是否有保证的无操作来绑定之前立即绑定的管道?或者二级命令缓冲区的执行顺序根本没有保证? 解决方案 是绑定之前绑定的管道的保证无操作吗? 没有.事实上,在您概述的情况下,您应该准确地假设相反.为什么? 由于您的每个 CB 都与其他 CB 隔离,因此 vkCmdBindPipe
..
某些 vkCmd* 函数指定何时使用某些参数.例如,在vkCmdBindDescriptorSets的文档中: pDynamicOffsets 的内容在执行期间立即被消耗执行 vkCmdBindDescriptorSets. 但是他们中的大多数都没有澄清.vkCmd* 调用期间是否消耗了所有参数?例如,在以下代码中: void copyHelper() {VkBufferCopy c
..