[Feature Request] Vulkan support in Bumblebee/Primus #769

Open
edoantonioco opened this Issue May 9, 2016 · 30 comments

Comments

Projects
None yet

edoantonioco commented May 9, 2016

Hello, I have tried with windows vulkan demos (on wine staging), the talos principle (which on the logs says than it use the intel card even if I use primusrun, only when trying to run it with the vulkan renderer), and the vulkan caps viewer (which can only sees the intel gpu even if I use primusrun), and it does not work, because when I try "primusrun randomVulkanApp' (for example), it never use the nvidia card, it uses the intel card.

My hardware is intel haswell, nvidia 960m, driver 364.19, Manjaro

@edoantonioco edoantonioco changed the title from Vulkan apps cant run on bumblebee to Vulkan apps doesn't run on bumblebee May 9, 2016

This comment has been minimized.

Show comment Hide comment
@ArchangeGabriel

ArchangeGabriel May 9, 2016

Owner

Yes, that’s expected. We don’t support Vulkan at all currently, and it’s probably not going to happen any time soon. I’m wondering what’s the status of PRIME on this thought. Is there any native Linux Vulkan demo thing that reports the used card for me to test that?

Owner

ArchangeGabriel commented May 9, 2016

Yes, that’s expected. We don’t support Vulkan at all currently, and it’s probably not going to happen any time soon. I’m wondering what’s the status of PRIME on this thought. Is there any native Linux Vulkan demo thing that reports the used card for me to test that?

@ArchangeGabriel ArchangeGabriel changed the title from Vulkan apps doesn't run on bumblebee to [Feature Request] Vulkan support in Bumblebee/Primus May 9, 2016

@ArchangeGabriel ArchangeGabriel added this to the Bumblebee Future milestone May 9, 2016

This comment has been minimized.

Show comment Hide comment
@edoantonioco

edoantonioco May 9, 2016

This is a shame, because for what I have seen PRIME is a technology than its meant mainly for ubuntu-based distros, and I guess than I could modify the Xorg.conf to only use the nvidia card, but on a laptop I also want to use the intel card.
Anyway, I havent found a vulkan demo easy to install without having to compile and etc, but if you want a software than tell you what card you are using, I found two ways, 1st is the talos principle, on the log it will tell you. 2nd, the vulkan hardware capability viewer, on the GUI appears which card it is detecting.
I hope than support for this new API will happen soon

edoantonioco commented May 9, 2016

This is a shame, because for what I have seen PRIME is a technology than its meant mainly for ubuntu-based distros, and I guess than I could modify the Xorg.conf to only use the nvidia card, but on a laptop I also want to use the intel card.
Anyway, I havent found a vulkan demo easy to install without having to compile and etc, but if you want a software than tell you what card you are using, I found two ways, 1st is the talos principle, on the log it will tell you. 2nd, the vulkan hardware capability viewer, on the GUI appears which card it is detecting.
I hope than support for this new API will happen soon

This comment has been minimized.

Show comment Hide comment
@ArchangeGabriel

ArchangeGabriel May 10, 2016

Owner

I think you’re confused about PRIME. What you cite is Nvidia reverse PRIME. But PRIME is way more than that (take a look at default PRIME function: https://wiki.archlinux.org/index.php/PRIME#PRIME_GPU_offloading).

However, after sleeping a bit, I found the answer by myself: Vulkan won’t work with PRIME currently, at least because they are no Vulkan driver in Mesa at all (and the only one that is coming for sure is Intel, which AFAIU we don’t need here). Nevertheless, it might work in reverse PRIME indeed. But that’s not ideal, granted.

For our purpose, it would take someone adding Vulkan support in Primus just like OpenGL is supported right now. I’m not sure anyone having this capacity is willing to spend time on this, especially given that in the individuals around this project I count at most 2 that could: @karolherbst, but he is busy developing nouveau — which is a far greater priority — and has already stated that he won’t maintain Primus ; a discussion that happened because the other one people I think of, @amonakov, actual Primus dev and maintainer, is almost MIA.

So, I’m sorry about this (not just for you, I would love to see that too), but unless you manage to find someone who can and want to implement this, nothing is going to happen here.

Owner

ArchangeGabriel commented May 10, 2016

I think you’re confused about PRIME. What you cite is Nvidia reverse PRIME. But PRIME is way more than that (take a look at default PRIME function: https://wiki.archlinux.org/index.php/PRIME#PRIME_GPU_offloading).

However, after sleeping a bit, I found the answer by myself: Vulkan won’t work with PRIME currently, at least because they are no Vulkan driver in Mesa at all (and the only one that is coming for sure is Intel, which AFAIU we don’t need here). Nevertheless, it might work in reverse PRIME indeed. But that’s not ideal, granted.

For our purpose, it would take someone adding Vulkan support in Primus just like OpenGL is supported right now. I’m not sure anyone having this capacity is willing to spend time on this, especially given that in the individuals around this project I count at most 2 that could: @karolherbst, but he is busy developing nouveau — which is a far greater priority — and has already stated that he won’t maintain Primus ; a discussion that happened because the other one people I think of, @amonakov, actual Primus dev and maintainer, is almost MIA.

So, I’m sorry about this (not just for you, I would love to see that too), but unless you manage to find someone who can and want to implement this, nothing is going to happen here.

This comment has been minimized.

Show comment Hide comment
@karolherbst

karolherbst May 10, 2016

@ArchangeGabriel there is an intal vulkan driver already, but I thought that offloading on other GPUs is already builtin into vulkan?

Well, if not, then they always forget the important bits

@ArchangeGabriel there is an intal vulkan driver already, but I thought that offloading on other GPUs is already builtin into vulkan?

Well, if not, then they always forget the important bits

This comment has been minimized.

Show comment Hide comment
@ArchangeGabriel

ArchangeGabriel May 11, 2016

Owner

I know about the Intel driver (first parenthesis in my previous message), but I thought that like in OpenGL case, we don’t care about the Intel part, only Nvidia side. However, you might well be right about offloading, I remember having read something about this and the ability to use very heterogeneous setups in terms of graphic cards. Which probably requires Vulkan on both sides.

So, in the end, if that’s right, maybe we could do something in Bumblebee for Vulkan support (it probably comes down to the --no-xorg option in fact, ensuring driver loading and paths setting, or a modification of it to take Vulkan into account).

Owner

ArchangeGabriel commented May 11, 2016

I know about the Intel driver (first parenthesis in my previous message), but I thought that like in OpenGL case, we don’t care about the Intel part, only Nvidia side. However, you might well be right about offloading, I remember having read something about this and the ability to use very heterogeneous setups in terms of graphic cards. Which probably requires Vulkan on both sides.

So, in the end, if that’s right, maybe we could do something in Bumblebee for Vulkan support (it probably comes down to the --no-xorg option in fact, ensuring driver loading and paths setting, or a modification of it to take Vulkan into account).

This comment has been minimized.

Show comment Hide comment
@bluca

bluca May 11, 2016

Member

Something else to keep an eye on is libglvnd: https://github.com/NVIDIA/libglvnd
Upstream's NVIDIA driver already uses it (coming in Debian as soon as the new versions clear the NEW queue), and work is going on to have Mesa use it.
Once they both do, it might be an alternative to Primus, maybe?

Member

bluca commented May 11, 2016

Something else to keep an eye on is libglvnd: https://github.com/NVIDIA/libglvnd
Upstream's NVIDIA driver already uses it (coming in Debian as soon as the new versions clear the NEW queue), and work is going on to have Mesa use it.
Once they both do, it might be an alternative to Primus, maybe?

This comment has been minimized.

Show comment Hide comment
@Amanieu

Amanieu May 19, 2016

Some quick experiments when running vulkaninfo under optirun (I am using the proprietary drivers):

  • optirun vulkaninfo will only recognize the Intel GPU.
  • DISPLAY=:8 optirun vulkaninfo will recognize both the Intel and Nvidia GPUs.

So it seems that Nvidia's vulkan driver only works if DISPLAY points to an X server running on the Nvidia GPU. Of course this isn't very useful for my laptop since that X server isn't connected to a screen, and no windows appear for graphical applications.

Amanieu commented May 19, 2016

Some quick experiments when running vulkaninfo under optirun (I am using the proprietary drivers):

  • optirun vulkaninfo will only recognize the Intel GPU.
  • DISPLAY=:8 optirun vulkaninfo will recognize both the Intel and Nvidia GPUs.

So it seems that Nvidia's vulkan driver only works if DISPLAY points to an X server running on the Nvidia GPU. Of course this isn't very useful for my laptop since that X server isn't connected to a screen, and no windows appear for graphical applications.

This comment has been minimized.

Show comment Hide comment
@karolherbst

karolherbst May 19, 2016

@Amanieu that is most likely the case because nvidia isn't loaded and the GPU is off.

What is the output of optirun -b none vulkaninfo?

@Amanieu that is most likely the case because nvidia isn't loaded and the GPU is off.

What is the output of optirun -b none vulkaninfo?

This comment has been minimized.

Show comment Hide comment
@Nightbane112

Nightbane112 May 19, 2016

@Amanieu @karolherbst Maybe something like this perhaps?

Intel HD 4000 , Nvidia GT 730M, Driver ver. 364.19, Antergos

optirun -b none vulkaninfo
http://pastebin.com/11VyuJrz

DISPLAY=:8 optirun -b none vulkaninfo
http://pastebin.com/jsgBVdHq

Nightbane112 commented May 19, 2016

@Amanieu @karolherbst Maybe something like this perhaps?

Intel HD 4000 , Nvidia GT 730M, Driver ver. 364.19, Antergos

optirun -b none vulkaninfo
http://pastebin.com/11VyuJrz

DISPLAY=:8 optirun -b none vulkaninfo
http://pastebin.com/jsgBVdHq

This comment has been minimized.

Show comment Hide comment
@ArchangeGabriel

ArchangeGabriel May 19, 2016

Owner

While running vulkaninfo, I’ve got:

Xlib:  extension "NV-GLX" missing on display ":0".
Xlib:  extension "NV-GLX" missing on display ":0".
WARNING: Haswell Vulkan support is incomplete
anv_device.c:429: FINISHME: Get correct values for VkPhysicalDeviceLimits
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO

And I’ve attached the output of:

Owner

ArchangeGabriel commented May 19, 2016

While running vulkaninfo, I’ve got:

Xlib:  extension "NV-GLX" missing on display ":0".
Xlib:  extension "NV-GLX" missing on display ":0".
WARNING: Haswell Vulkan support is incomplete
anv_device.c:429: FINISHME: Get correct values for VkPhysicalDeviceLimits
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
gen7_pipeline.c:241: FINISHME: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO

And I’ve attached the output of:

@ArchangeGabriel ArchangeGabriel referenced this issue May 19, 2016

Open

Documentations update #772

0 of 14 tasks complete

This comment has been minimized.

Show comment Hide comment
@karolherbst

karolherbst May 19, 2016

odd that the nvidia GPU isn't found in the case without DISPLAY.

odd that the nvidia GPU isn't found in the case without DISPLAY.

This comment has been minimized.

Show comment Hide comment
@AnAkkk

AnAkkk Jun 6, 2016

Would that be a bug in the Nvidia driver that Vulkan doesn't work with Optimus laptops? I've tried to contact Nvidia about it, but they didn't reply.

AnAkkk commented Jun 6, 2016

Would that be a bug in the Nvidia driver that Vulkan doesn't work with Optimus laptops? I've tried to contact Nvidia about it, but they didn't reply.

This comment has been minimized.

Show comment Hide comment
@ArchangeGabriel

ArchangeGabriel Jun 6, 2016

Owner

I think so.

Owner

ArchangeGabriel commented Jun 6, 2016

I think so.

This comment has been minimized.

Show comment Hide comment
@snj33v

snj33v Jul 11, 2016

mesa 12.0 now has glvnd support, hope it solves some problems

snj33v commented Jul 11, 2016

mesa 12.0 now has glvnd support, hope it solves some problems

This comment has been minimized.

Show comment Hide comment

This comment has been minimized.

Show comment Hide comment
@TiZ-EX1

TiZ-EX1 Jan 27, 2017

I just tried it with nvidia-378.

optirun -b none vulkaninfo: http://paste.ubuntu.com/23874988
DISPLAY=:8 optirun -b none vulkaninfo: http://paste.ubuntu.com/23874993

vulkaninfo crashes on my system with DISPLAY=:8 set. vulkaninfo: /build/vulkan-PwwbqY/vulkan-1.0.37.0+dfsg1/demos/vulkaninfo.c:978: AppDumpSurfaceFormats: Assertion '!err' failed.

TiZ-EX1 commented Jan 27, 2017

I just tried it with nvidia-378.

optirun -b none vulkaninfo: http://paste.ubuntu.com/23874988
DISPLAY=:8 optirun -b none vulkaninfo: http://paste.ubuntu.com/23874993

vulkaninfo crashes on my system with DISPLAY=:8 set. vulkaninfo: /build/vulkan-PwwbqY/vulkan-1.0.37.0+dfsg1/demos/vulkaninfo.c:978: AppDumpSurfaceFormats: Assertion '!err' failed.

This comment has been minimized.

Show comment Hide comment
@khalismur

khalismur Mar 30, 2017

Bumblebee development is totally dead? Any way to run Vulkan with it?

Bumblebee development is totally dead? Any way to run Vulkan with it?

This comment has been minimized.

Show comment Hide comment
@snj33v

snj33v Mar 31, 2017

no way to run vulkan with bumblebee as now, @edoantonioco comment is interesting

snj33v commented Mar 31, 2017

no way to run vulkan with bumblebee as now, @edoantonioco comment is interesting

This comment has been minimized.

Show comment Hide comment
@monotykamary

monotykamary Apr 7, 2017

I feel like there is some misunderstanding here. If you have nvidia's recent stable driver 378.13, you can run Vulkan without X running perfectly fine with bumblebee. Assuming our main display environment is DISPLAY=:0, running DISPLAY=:1 optirun --no-xorg vulkaninfo | grep GPU will display both integrated and discrete GPU. Mine in particular shows:

GPU id       : 0 (Intel(R) Ivybridge Mobile)
GPU id       : 1 (GeForce GT 640M LE)

In fact, it doesn't matter if you change the environment DISPLAY to 2, 3, or 8 since we've just removed the need to spawn an X server with optirun --no-xorg. What we really care about is displaying it to our main display. Unfortunately we come back to needing the same methods of development for Vulkan as we did for OpenGL.

Either we do screen scaping, which has many drawbacks, or we continue with extension forking. VirtualGL chose to do GLX forking for OpenGL. Primus is essentially the same thing without the overhead requirements for multiple users. However, even primus now doesn't support all OpenGL functions, like the issued glXAllocateMemoryNV and glXFreeMemoryNV.

We basically need a VirtualVulkan to do VulkanX forking and/or a low-client overhead equivalent. Writing all of Vulkan's extensions, with the API still changing and growing, would be very tedious and annoying.

I feel like there is some misunderstanding here. If you have nvidia's recent stable driver 378.13, you can run Vulkan without X running perfectly fine with bumblebee. Assuming our main display environment is DISPLAY=:0, running DISPLAY=:1 optirun --no-xorg vulkaninfo | grep GPU will display both integrated and discrete GPU. Mine in particular shows:

GPU id       : 0 (Intel(R) Ivybridge Mobile)
GPU id       : 1 (GeForce GT 640M LE)

In fact, it doesn't matter if you change the environment DISPLAY to 2, 3, or 8 since we've just removed the need to spawn an X server with optirun --no-xorg. What we really care about is displaying it to our main display. Unfortunately we come back to needing the same methods of development for Vulkan as we did for OpenGL.

Either we do screen scaping, which has many drawbacks, or we continue with extension forking. VirtualGL chose to do GLX forking for OpenGL. Primus is essentially the same thing without the overhead requirements for multiple users. However, even primus now doesn't support all OpenGL functions, like the issued glXAllocateMemoryNV and glXFreeMemoryNV.

We basically need a VirtualVulkan to do VulkanX forking and/or a low-client overhead equivalent. Writing all of Vulkan's extensions, with the API still changing and growing, would be very tedious and annoying.

This comment has been minimized.

Show comment Hide comment
@TiZ-EX1

TiZ-EX1 Apr 7, 2017

Wasn't GLVND supposed to be an important step toward fixing this sort of thing? And doesn't Vulkan have that kind of functionality just built right in? Where does GLVND fit in, in the scope of what bumblebee and optirun are meant to do? What does it not do that needs to be done?

TiZ-EX1 commented Apr 7, 2017

Wasn't GLVND supposed to be an important step toward fixing this sort of thing? And doesn't Vulkan have that kind of functionality just built right in? Where does GLVND fit in, in the scope of what bumblebee and optirun are meant to do? What does it not do that needs to be done?

This comment has been minimized.

Show comment Hide comment
@monotykamary

monotykamary Apr 7, 2017

As far as I understand it, libglvnd only arbitrates between multiple drivers/vendors in a way that allows each driver to ship its own OpenGL library without overwriting the main system libGL file. With the removal of libglx symlinks in xorg-server and libglvnd support in mesa, you can install mesa along with nvidia whereas before you would have to remove mesa-libgl for nvidia-libgl and vice-versa. It would allow mesa to call from /usr/lib/libGLX_mesa.so and nvidia to call from /usr/lib/nvidia/libglx.so. Since the OpenGL calls between these drivers can be run on a per-screen basis, it would be possible for you to run 2 X servers for iGPU and dGPU without much configuration. I have succeeded in running both and nvidia-xrun still works as designed.

This doesn't change the state of render offloading. Vulkan does not have this functionality built-in as it does not arbitrate its own API calls to X. As of now, it looks like libglvnd currently only supports OpenGL API calls and not Vulkan.

As to where libglvnd fits in bumblebee... it doesn't? I don't see any updates on bumblebee-devel regarding it so GLX forking seems unchanged. Maybe VirtualGL added updates for it, but I doubt it. Absolutely no updates for primus.

monotykamary commented Apr 7, 2017

As far as I understand it, libglvnd only arbitrates between multiple drivers/vendors in a way that allows each driver to ship its own OpenGL library without overwriting the main system libGL file. With the removal of libglx symlinks in xorg-server and libglvnd support in mesa, you can install mesa along with nvidia whereas before you would have to remove mesa-libgl for nvidia-libgl and vice-versa. It would allow mesa to call from /usr/lib/libGLX_mesa.so and nvidia to call from /usr/lib/nvidia/libglx.so. Since the OpenGL calls between these drivers can be run on a per-screen basis, it would be possible for you to run 2 X servers for iGPU and dGPU without much configuration. I have succeeded in running both and nvidia-xrun still works as designed.

This doesn't change the state of render offloading. Vulkan does not have this functionality built-in as it does not arbitrate its own API calls to X. As of now, it looks like libglvnd currently only supports OpenGL API calls and not Vulkan.

As to where libglvnd fits in bumblebee... it doesn't? I don't see any updates on bumblebee-devel regarding it so GLX forking seems unchanged. Maybe VirtualGL added updates for it, but I doubt it. Absolutely no updates for primus.

This comment has been minimized.

Show comment Hide comment
@Lekensteyn

Lekensteyn Apr 7, 2017

Owner

@monotykamary Some (Arch Linux at least) is patching Bumblebee with #845 for libglvnd support

Owner

Lekensteyn commented Apr 7, 2017

@monotykamary Some (Arch Linux at least) is patching Bumblebee with #845 for libglvnd support

This comment has been minimized.

Show comment Hide comment
@monotykamary

monotykamary Apr 8, 2017

@Lekensteyn That is not libglvnd support. __GLVND_DISALLOW_PATCHING=1 prevents GLdispatch in libglvnd from dispatching OpenGL functions that would otherwise point it away from library files that primus already defines (I am assuming the one that requires displaying libGL, PRIMUS_libGLd=${PRIMUS_libGLd:-'/usr/$LIB/libGL.so.1'}) when installed with libglvnd enabled mesa.

@Lekensteyn That is not libglvnd support. __GLVND_DISALLOW_PATCHING=1 prevents GLdispatch in libglvnd from dispatching OpenGL functions that would otherwise point it away from library files that primus already defines (I am assuming the one that requires displaying libGL, PRIMUS_libGLd=${PRIMUS_libGLd:-'/usr/$LIB/libGL.so.1'}) when installed with libglvnd enabled mesa.

This comment has been minimized.

Show comment Hide comment
@snj33v

snj33v Apr 9, 2017

@monotykamary can wayland(EGL) help in this scenario ?

snj33v commented Apr 9, 2017

@monotykamary can wayland(EGL) help in this scenario ?

This comment has been minimized.

Show comment Hide comment
@monotykamary

monotykamary Apr 9, 2017

@snj33v Hopefully in the near future. We still need to have Intel's open source driver to work together with the NVIDIA binary driver on Wayland for GPU-switching to work as designed, but it should be easier in concept since we can just leave it to the client to simply dump buffers with pixels on the screen.

@snj33v Hopefully in the near future. We still need to have Intel's open source driver to work together with the NVIDIA binary driver on Wayland for GPU-switching to work as designed, but it should be easier in concept since we can just leave it to the client to simply dump buffers with pixels on the screen.

@rhymoid rhymoid referenced this issue in krh/vkcube Jun 14, 2017

Closed

Nvidia optimus #8

This comment has been minimized.

Show comment Hide comment
@KoczurekK

KoczurekK Oct 2, 2017

So… is there any progress towards making Vulkan working with Bumblebee being made? There already are many games using Vulkan and RPCS3 relies on it heavily. I apparently have no choice but to reboot into Windows to do stuff that should be possible on Linux.

So… is there any progress towards making Vulkan working with Bumblebee being made? There already are many games using Vulkan and RPCS3 relies on it heavily. I apparently have no choice but to reboot into Windows to do stuff that should be possible on Linux.

This comment has been minimized.

Show comment Hide comment
@edoantonioco

edoantonioco Oct 2, 2017

@KoczurekK This doesn't seems to happen anytime soon. For now the only option is to use nvidia-xrun. it's not as convenient as this one, but it provides vulkan support, and better performance than bumblebee. SolusOS is also working on an alternative to this, if you want to take a look at it, but its on an early state.
Hopefully wayland will help to improve this whole scenario in the future.

edoantonioco commented Oct 2, 2017

@KoczurekK This doesn't seems to happen anytime soon. For now the only option is to use nvidia-xrun. it's not as convenient as this one, but it provides vulkan support, and better performance than bumblebee. SolusOS is also working on an alternative to this, if you want to take a look at it, but its on an early state.
Hopefully wayland will help to improve this whole scenario in the future.

This comment has been minimized.

Show comment Hide comment
@BlackDragonDv

BlackDragonDv Oct 5, 2017

In X.Org 1.20 there will be server side GLVND. With this hopefully we can get something like Bumblebee, but without additional software (out of the box). Vulkan should be supported too.

But for now the only option is nvidia-xrun. Of course, it's not convenient like Bumblebee or PRIME, but at least Vulkan works.

In X.Org 1.20 there will be server side GLVND. With this hopefully we can get something like Bumblebee, but without additional software (out of the box). Vulkan should be supported too.

But for now the only option is nvidia-xrun. Of course, it's not convenient like Bumblebee or PRIME, but at least Vulkan works.

This comment has been minimized.

Show comment Hide comment
@PierfrancescoArdino

PierfrancescoArdino Mar 11, 2018

The first RC for X.Org 1.20 has been released. Any chance to get something like Bumblebee out of the box? How it should work?

The first RC for X.Org 1.20 has been released. Any chance to get something like Bumblebee out of the box? How it should work?

This comment has been minimized.

Show comment Hide comment
@snj33v

snj33v Mar 15, 2018

what do they mean by "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU" ?

snj33v commented Mar 15, 2018

what do they mean by "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU" ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment