Vulkan + NVidia 940mx + Intel integrated GPU doesn't work

Hi there,

First, excuse me for my poor english because I’m not native (i’m french)…
I’m going to try to tell what my problem is.

My configuration :
Asus laptop X556U
Ubuntu 10.10
GPU : Intel integrated GPU + Nvidia GeForce 940mx
Driver : nvidia-driver-440 (free)

I installed the Vulkan SDK in my home dir in : /home/seb/vulkan-sdk
I put in my .profile file :

source /home/seb/vulkan-sdk/1.1.126.0/setup-env.sh

Then, I created the file /etc/ld.so.conf.d/vulkan-libs.conf wich contains :

seb@seb-X556UQK:/etc/ld.so.conf.d$ cat vulkan-libs.conf 
/home/seb/vulkan-sdk/1.1.126.0/x86_64/lib

Then I did :

sudo ldconfig

In the NVidia configuration panel, in PRIME profile I selected “NVIDIA (Performance mode)”

If I launch vkcube, a black window appears (there is no rotating cube)

If I try vulkaninfo, it says the following :

WARNING: [Loader Message] Code 0 : loader_icd_scan: Can not find 'ICD' object in ICD JSON file /usr/share/vulkan/icd.d/nvidia_layers.json.  Skipping ICD JSON
/home/seb/vulkan-sdk/1.1.126.0/source/Vulkan-Tools/vulkaninfo/vulkaninfo.h:803: failed with ERROR_INITIALIZATION_FAILED

In the NVidia panel if I switch to “Intel (Power saving mode)”, reboot,

vkcube now works, it shows a rotating cube in a window

vulkaninfo now says a lot of things :

WARNING: [Loader Message] Code 0 : loader_icd_scan: Can not find 'ICD' object in ICD JSON file /usr/share/vulkan/icd.d/nvidia_layers.json.  Skipping ICD JSON
...
...
Presentable Surfaces:
=====================
GPU id : 0 (Intel(R) HD Graphics 620 (Kaby Lake GT2)):
...
...

(but there is no NVidia GPU)

If I delete /usr/share/vulkan/icd.d/nvidia_layers.json, the WARNING message doesn’t appears anymore but vulkaninfo still doesn’t show my NVidia GPU and vkcube still doesn’t show the rotating cube

Is it normal that a nvidia_layers.json file is in the icd.d directory ?

here is the content of :

  • /usr/share/vulkan/icd.d/nvidia_icd.json :
    {
    “file_format_version” : “1.0.0”,
    “ICD”: {
    “library_path”: “libGLX_nvidia.so.0”,
    “api_version” : “1.1.99”
    }
    }

  • /usr/share/vulkan/icd.d/nvidia_layers.json :
    {
    “file_format_version” : “1.0.0”,
    “layer”: {
    “name”: “VK_LAYER_NV_optimus”,
    “type”: “INSTANCE”,
    “library_path”: “libGLX_nvidia.so.0”,
    “api_version” : “1.1.119”,
    “implementation_version” : “1”,
    “description” : “NVIDIA Optimus layer”,
    “functions”: {
    “vkGetInstanceProcAddr”: “vk_optimusGetInstanceProcAddr”,
    “vkGetDeviceProcAddr”: “vk_optimusGetDeviceProcAddr”
    },
    “enable_environment”: {
    “__NV_PRIME_RENDER_OFFLOAD”: “1”
    },
    “disable_environment”: {
    “DISABLE_LAYER_NV_OPTIMUS_1”: “”
    }
    }
    }

  • With those following drivers there is no nvidia_layers.json in /usr/share/vulkan/icd.d/ :
    nvidia-driver-430 (proprietary)
    nvidia-driver-390 (proprietary)

But vkcube doesn’t work with my NVidia GPU and vulkaninfo only show my Intel integrated GPU

Is someone could help me please ?