0

I have the VK_LAYER_KHRONOS_validation layer activated and don't get any validation errors, although when I try running my app under Valgrind I get the following messages.

==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E273BAF: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E274182: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x2193CB74: DispatchCmdPipelineBarrier(VkCommandBuffer_T*, unsigned int, unsigned int, unsigned int, unsigned int, VkMemoryBarrier const*, unsigned int, VkBufferMemoryBarrier const*, unsigned int, VkImageMemoryBarrier const*) (layer_chassis_dispatch.cpp:3336)
==119404==    by 0x218B389F: vulkan_layer_chassis::CmdPipelineBarrier(VkCommandBuffer_T*, unsigned int, unsigned int, unsigned int, unsigned int, VkMemoryBarrier const*, unsigned int, VkBufferMemoryBarrier const*, unsigned int, VkImageMemoryBarrier const*) (chassis.cpp:3533)
==119404==    by 0x5206EC: ImGui_ImplVulkan_CreateFontsTexture(VkCommandBuffer_T*) (imgui_impl_vulkan.cpp:683)
==119404==    by 0x4DE854: Renderer::UploadImguiImages() (Renderer.cpp:169)
==119404==    by 0x494E47: main (main.cpp:437)
==119404== 
==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E26FF73: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E273DF7: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E274182: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x2193CB74: DispatchCmdPipelineBarrier(VkCommandBuffer_T*, unsigned int, unsigned int, unsigned int, unsigned int, VkMemoryBarrier const*, unsigned int, VkBufferMemoryBarrier const*, unsigned int, VkImageMemoryBarrier const*) (layer_chassis_dispatch.cpp:3336)
==119404==    by 0x218B389F: vulkan_layer_chassis::CmdPipelineBarrier(VkCommandBuffer_T*, unsigned int, unsigned int, unsigned int, unsigned int, VkMemoryBarrier const*, unsigned int, VkBufferMemoryBarrier const*, unsigned int, VkImageMemoryBarrier const*) (chassis.cpp:3533)
==119404==    by 0x4FD6A7: Util::TransitionImageLayout(VkCommandBuffer_T*, VkImage_T*, VkImageLayout, VkImageLayout) (Utilities.cpp:136)
==119404==    by 0x4D85B4: Image::SendToGPU(VkDevice_T*, PhysicalDeviceInfo const*, VkCommandBuffer_T*) (Image.cpp:214)
==119404==    by 0x4E0C9E: Renderer::SendDataToGPU(entt::basic_registry<entt::entity>*, VkCommandBuffer_T*) (Renderer.cpp:575)
==119404==    by 0x4E134D: Renderer::Render(entt::basic_registry<entt::entity>*, ImDrawData*) (Renderer.cpp:637)
==119404==    by 0x4950A0: main (main.cpp:477)
==119404== 
==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E26FF73: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E220970: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E227314: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x218BA58C: UnknownInlinedFun (layer_chassis_dispatch.cpp:3463)
==119404==    by 0x218BA58C: vulkan_layer_chassis::CmdBeginRenderPass(VkCommandBuffer_T*, VkRenderPassBeginInfo const*, VkSubpassContents) (chassis.cpp:3698)
==119404==    by 0x4E14DB: Renderer::Render(entt::basic_registry<entt::entity>*, ImDrawData*) (Renderer.cpp:656)
==119404==    by 0x4950A0: main (main.cpp:477)
==119404== 
==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E273BAF: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E274182: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E221561: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E225127: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E22184E: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x218B5B24: UnknownInlinedFun (layer_chassis_dispatch.cpp:3480)
==119404==    by 0x218B5B24: vulkan_layer_chassis::CmdEndRenderPass(VkCommandBuffer_T*) (chassis.cpp:3739)
==119404==    by 0x4E1862: Renderer::Render(entt::basic_registry<entt::entity>*, ImDrawData*) (Renderer.cpp:684)
==119404==    by 0x4950A0: main (main.cpp:477)
==119404== 
==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E26FF73: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E27167D: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E28EB9F: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E28ECF4: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E273BF4: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E274182: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E221561: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E225127: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E22184E: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x218B5B24: UnknownInlinedFun (layer_chassis_dispatch.cpp:3480)
==119404==    by 0x218B5B24: vulkan_layer_chassis::CmdEndRenderPass(VkCommandBuffer_T*) (chassis.cpp:3739)
==119404==    by 0x4E1862: Renderer::Render(entt::basic_registry<entt::entity>*, ImDrawData*) (Renderer.cpp:684)
==119404==    by 0x4950A0: main (main.cpp:477)
==119404== 
==119404== Conditional jump or move depends on uninitialised value(s)
==119404==    at 0x1E26FF73: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E220970: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x1E22185B: ??? (in /usr/lib64/libnvidia-glcore.so.515.57)
==119404==    by 0x218B5B24: UnknownInlinedFun (layer_chassis_dispatch.cpp:3480)
==119404==    by 0x218B5B24: vulkan_layer_chassis::CmdEndRenderPass(VkCommandBuffer_T*) (chassis.cpp:3739)
==119404==    by 0x4E1862: Renderer::Render(entt::basic_registry<entt::entity>*, ImDrawData*) (Renderer.cpp:684)
==119404==    by 0x4950A0: main (main.cpp:477)
==119404== 

Is this undefined behaviour in NVidia's driver? or is there something else I need to check for?

Update: I made an MCVE...

#include <iostream>
#include <vulkan/vulkan.h>

int main(int argc, char** argv) {
    VkApplicationInfo app_info = {};
    app_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    app_info.apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 224);

    VkInstanceCreateInfo instance_create_info = {};
    instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    instance_create_info.pApplicationInfo = &app_info;

    VkInstance instance = nullptr;

    vkCreateInstance(&instance_create_info, nullptr, &instance);
    vkDestroyInstance(instance, nullptr);
    std::cout << "done\n";
}
==215482== LEAK SUMMARY:
==215482==    definitely lost: 81,640 bytes in 36 blocks
==215482==    indirectly lost: 183,467 bytes in 1,170 blocks
==215482==      possibly lost: 0 bytes in 0 blocks
==215482==    still reachable: 165,087 bytes in 2,123 blocks
==215482==         suppressed: 0 bytes in 0 blocks
David Carpenter
  • 1,389
  • 2
  • 16
  • 29
  • 1
    It's very possible that you're passing the nvidia driver an invalid pointer, or something along those lines. It's impossible to diagnose this though without any code. Make an MCVE. – Colonel Thirty Two Aug 11 '22 at 16:37
  • `VkInstance instance;` leaves `instance` uninitialized. You them pass that (pointer, object, struct -- whatever it is) to `vkCreateInstance()` and `vkDestroyInstance()`. I'm not familiar with vulkan, but I suspect initializing `instance` would help with valgrind. Could you not do `VkInstance instance{};`? (or initialize it in some other manner if brace-initialization isn't supported) – David C. Rankin Aug 29 '22 at 06:11
  • I've initialized instance and updated the code. it still does the same thing. – David Carpenter Aug 29 '22 at 06:18

0 Answers0