PDA

View Full Version : extend older gpu driver for opengl4.5?



epicpints
11-30-2016, 11:52 PM
Ok so I have a laptop with an on board gpu. Specifically the nvidia 320m, supports up to opengl3.3. It is of course not reasonable to replace this gpu, and there is no slot available to plug a newer one in. But I want to run some things that require opengl4.5.

So I've been looking and asking around about how to extend the driver so that my gpu will answer the instructions sent to it that are in the higher versions of OpenGL. But so far all I get is that its not possible. Yet no one has been able to tell me why exactly. i just figure its a technical question of HOW.

As I see it a gpu is just some processors and registers. You change architecture when you make a newer line, You have to rewrite the driver for the new architecture to implement the old standard. you make a new standard you rewrite the old driver to add the functionality. so here i am combining the two concepts. sure its been done before.

so when someone is saying that an older gpu does not support opengl4.5 i think they only mean that no one has written the driver to do it. it is not the same question as if the hardware is physically capable of implementing the software. what changed between opengl3.3 and ogl4.5 that would make hardware physically and logically incapable of implementing it? and would it still not be possible to code a driver to work with these differences anyway? i mean the nvidia 420m is ogl4.5 compatible. can't i just get the source and architecture definitions of the 2 drivers/gpus and do a bit of translation to merge the extended OpenGL functionality to the older driver?

thanks

Dark Photon
12-01-2016, 06:27 AM
Ok so I have ... nvidia 320m, supports up to opengl3.3.... But I want to run some things that require opengl4.5.

So I've been looking and asking around about how to extend the driver so that my gpu will answer the instructions sent to it that are in the higher versions of OpenGL. But so far all I get is that its not possible. Yet no one has been able to tell me why exactly. ...

Implicit in a GPU driver supporting a specific version of OpenGL is that it supports the core features of that version in hardware, not software.

This isn't a requirement, but you can imagine the bad rap a GPU vendor would get if when you started to use new functionality, it kicked your program off the GPU and emulated most/all of the pipeline on the CPU in the driver.

In OpenGL 4.0 (https://www.opengl.org/wiki/History_of_OpenGL#OpenGL_4.0_.282010.29), several features were added which require (for good performance) new fixed-function hardware on the GPUs. For instance, tessellation.

Now that doesn't mean that "all" of the features added to the OpenGL 4.0 spec require a new GPU. For instance, sift the list of extensions advertised on your GeForce 320M GPU, and you might very well find some of the extensions merged into core OpenGL 4.0 (see link above).


what changed between opengl3.3 and ogl4.5 that would make hardware physically and logically incapable of implementing it? and would it still not be possible to code a driver to work with these differences anyway?

If you're willing to accept functionality at any performance (that is, with any portion or all portions of the OpenGL pipeline emulated on the CPU), then yes. If you're willing to accept that, then you can use Mesa3D (http://www.mesa3d.org/). It will let you run OpenGL apps supporting up to OpenGL 4.4-4.5 on your PC now.

However if you want to run OpenGL 4.4-4.5 applications with full hardware accelleration, you'll want to consider a GPU upgrade.

GClements
12-01-2016, 07:13 AM
As I see it a gpu is just some processors and registers.
There's more to it than that. In particular, the memory architecture is very important for a GPU, because GPU code tends to have a much higher ratio of memory access to processing compared to a CPU. There's also a fair amount of fixed-function hardware, e.g. texture units.

Beyond that, while some of the features could realistically be implemented in software, many can't. E.g. if you wanted to use a texture type, format or size which isn't supported by the GPU's texture units, the only solution would be to run the entire rendering pipeline on the CPU, which for most applications would be unacceptably slow.