jjzjj

c++ - 是否可以在不调用 vkQueueWaitIdle 的情况下等待暂存缓冲区的传输完成

以下代码向您展示了我如何将顶点缓冲区数据从暂存缓冲区传输到本地内存缓冲区:boolVulkan::UpdateVertexBuffer(std::vector&data,VULKAN_BUFFER&vertex_buffer){std::memcpy(this->staging_buffer.pointer,&data[0],vertex_buffer.size);size_tflush_size=static_cast(vertex_buffer.size);unsignedintmultiple=static_cast(flush_size/this->physical_devic

c++ - 将 apiVersion 参数设置为 0 时的 VK_ERROR_INCOMPATIBLE_DRIVER

我正在尝试创建一个vulkan实例。这是我的代码:vk::ApplicationInfoappInfo("Test",1,nullptr,0,0);vk::InstanceCreateInfoinfo;info.pApplicationInfo(&appInfo);vk::Instanceinstance;constautoresult=vk::createInstance(&info,nullptr,&instance);std::cout但是这会返回VK_ERROR_INCOMPATIBLE_DRIVER。如果我不提供自己的ApplicationInfo而是使用默认构造的,它就可以

c++ - 无法使用 vkCreateWin32SurfaceKHR 创建 vulkan 表面

我想将vulkan与SDL2一起使用,但我停留在表面创建阶段,我无法使用vkCreateWin32SurfaceKHR扩展函数以及VkWin32SurfaceCreateInfoKHR扩展结构,因为它们未定义,虽然我在使用其他扩展元素(如(vkGetPhysicalDeviceSurfaceSupportKHR等..))时没有任何问题,但表面扩展是否需要单独的头文件?我怎样才能让它工作?我使用的预处理器指令如下#include#include#include#include#include#include#defineVK_USE_PLATFORM_WIN32_KHR请注意,我在没有任

c++ - 全局加载 Vulkan 函数

随着Vulkan的发布,我决定(作为一种爱好)编写一个基于Vulkan的GUI。但是,我目前停留在第一步-加载Vulkan函数。我正在使用Nvidia的C++Vulkan包装器,据我所知,它需要全局加载Vulkan函数。我可以成功加载本地函数,但是::vkCreateInstance失败了:voidloadInstanceFunctions(){PFN_vkCreateInstancevkCreateInstance=(PFN_vkCreateInstance)vkGetInstanceProcAddr(nullptr,"vkCreateInstance");//works::vkCr

c++ - Vulkan:延迟分配内存?

我有一种情况,我可能需要在渲染过程中使用模板缓冲区,但是,直到执行渲染过程的中途我才会“知道”。不幸的是,一旦渲染过程已经在进行中(如在D3D12中),Vulkan就无法修改帧缓冲区的附件。但是,我在规范中发现有"lazilyallocatedmemory"的概念。在分配内存时使用VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,在表面使用VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT。不幸的是,似乎VkPhysicalDeviceMemoryProperties中的所有VkMemoryType条目(从vkGetPhysic

c++ - 怎么能不对 C++ 结构布局做出假设呢?

我刚刚从BuginVC++14.0(2015)compiler?中了解到人们不应该假设结构的布局将如何在内存中结束。但是,我不明白在我见过的很多代码中这是常见的做法。例如,Vulkan图形API执行以下操作:定义一个结构struct{glm::mat4projection;glm::mat4model;glm::vec4lightPos;}uboVS;然后填写它的字段:uboVS.model=...uboVS....然后通过memcpy将结构(在主机内存中)复制到设备内存:uint8_t*pData;vkMapMemory(device,memory,0,sizeof(uboVS),0

c++ - Vulkan 中的 Queue 族实际上是什么?

我目前正在学习vulkan,现在我只是拆开每个命令并检查结构以尝试理解它们的含义。现在我正在分析QueueFamilies,为此我有以下代码:vectorqueue_families=device.getQueueFamilyProperties();for(auto&q_family:queue_families){cout这会产生这个输出:Queuenumber:16Queueflags:{Graphics|Compute|Transfer|SparseBinding}Queuenumber:1Queueflags:{Transfer}Queuenumber:8Queueflags

c++ - 为什么 vulkan 在集成显卡和 GPU 的系统中报告单个设备?

在C++中,我正在检查可用设备的数量,如下所示:uint32_tdeviceCount=0;vkEnumeratePhysicalDevices(instance,&deviceCount,nullptr);cout这是打印出1GeforceGTX1070。我的系统配备GTX1070和带集成显卡的第4代英特尔5处理器。据我所知,这对于Vulkan来说应该足够好了。那么为什么我的程序只接收GTX1070?不应该也能找到集成显卡吗?编辑:根据cpuinfo的确切型号是:Intel(R)Core(TM)i5-4460CPU@3.20GHz编辑2:我的操作系统是Archlinux

c++ - Vulkan-hpp 正在将非标准布局类重新解释为另一个类。这是合法的吗?

最近我一直在使用Vulkan-Hpp(VulkanApi的官方c++绑定(bind),GithubLink)。查看源代码,我发现他们围绕原生Vulkan结构创建了包装器类(例如vk::InstanceCreateInfo围绕着VkInstanceCreateInfo)。(注意:环绕,而不是派生自)调用nativeVulkanAPI时,指向包装器类的指针被reinterpret_cast编辑到nativeVulkan结构中。使用vk::InstanceCreateInfo的示例://definitionofvk::InstanceCreateInfostructInstanceCreat

c++ - 如何将 Vulkan 与 MinGW 一起使用? (R_X86_64_32 错误)

我正在尝试设置一个基本程序来使用Vulkan。我安装了LunarGSDK。我有一个基本上只调用vkCreateInstance的小程序。我用这一行编译:g++-std=c++11-I/c/VulkanSDK/1.0.3.1/Include-L/c/VulkanSDK/1.0.3.1/Binmain.cpp-lvulkan-1我在使用64位mingw(MSYS2)时遇到此编译器错误:relocationtruncatedtofit||R_X86_64_32againstsymbol`__imp_vkCreateInstance'definedin.idata$5sectioninC:\V