Re: LLVM-pipe: most powerful instructions set ;)

2022-11-22 Thread t...@profit-grand.ru

I see the point.

I was thinking about using a small, simplified, reliable fixed set of 
basic GPU functions which are always supported, and call them from time 
to time to speed up some mass operations such as texture scaling 
(instead of MMXing big textures on CPU, call existing OpenGL driver and 
free the CPU for different operations while GPU scales them). But it 
DOES involve lots of data exchange, at least unless embedded GPU core 
can process them in the common memory space).


So I see the point, the data exchange can "eat" all this profit.


On 22.11.2022 14:06, Jose Fonseca wrote:
Trying to combine two OpenGL implementations it's technically 
difficult.  Furthermore one might thing combining two implementations 
gives the best of both, but easily gives the worst of both worlds, 
because there's overhead moving data between them.


Image the worst case scenario: draw on driver A, copy data to driver 
B, draw on driver B, copy data to driver A.  One might devise a 
heuristic to avoid switching so often, but the end result would end 
being the bulk of the rendering beind done on the most capable drvier 
(llvmpipe in this case), so not much better than always using llvmpipe.



This is why technologies like NVIDIA SLI which divide the work across 
multiple identical GPUs tend to split the work in a granular fashion, 
like whole frames (GPU 1 draws frame 2*N, GPU 2 draws frame 2*N + 1).


Furthermore, mixing different implementations easily leads to 
artifacts, like depth fighting, overlapped geometry or gaps between, 
because 3D APIs specification have somewhat  lax rules about 
rasterization, and float conversion.


Honestly, it's more effective to buy a more modern device.

Jose



*From:* mesa-dev  on behalf of 
t...@profit-grand.ru 

*Sent:* Tuesday, November 15, 2022 12:48
*To:* mesa-dev@lists.freedesktop.org 
*Subject:* LLVM-pipe: most powerful instructions set ;)
!! External Email

First, thanks for saving my day. Software renderer works way faster than
no renderer at all :)

But there are an "instruction set" which is way faster than the MMX or
SSE sets: it's an existing OpenGL 2.0 driver which is not sufficient in
most cases, because at least 3.0 is required nowadays.

Of course, it's not literally an instruction set, but a source of
additional computing power for basic operations (assuming advanced
operations are not supported by the GPU, making LLVM-pipe necessary for
such systems).

So, the actual question is:

Can LLVM-pipe somehow support (today or in future versions) a "bridge
mode", relying on a different OpenGL driver for basic operations
(supported by some ancient GPU) and closing a gap between that driver
and the required OpenGL version it's usual way, by the state-of-art
software renderer?

It's also somewhat related to my OGLOED driver idea (see my Github), the
difference is "bridge mode" is local, OGLOED is not. But there are some
diagrams which can help understanding my question :)


!! External Email: This email originated from outside of the 
organization. Do not click links or open attachments unless you 
recognize the sender.

Re: LLVM-pipe: most powerful instructions set ;)

2022-11-22 Thread Jose Fonseca
Trying to combine two OpenGL implementations it's technically difficult.  
Furthermore one might thing combining two implementations gives the best of 
both, but easily gives the worst of both worlds, because there's overhead 
moving data between them.

Image the worst case scenario: draw on driver A, copy data to driver B, draw on 
driver B, copy data to driver A.  One might devise a heuristic to avoid 
switching so often, but the end result would end being the bulk of the 
rendering beind done on the most capable drvier (llvmpipe in this case), so not 
much better than always using llvmpipe.


This is why technologies like NVIDIA SLI which divide the work across multiple 
identical GPUs tend to split the work in a granular fashion, like whole frames 
(GPU 1 draws frame 2*N, GPU 2 draws frame 2*N + 1).

Furthermore, mixing different implementations easily leads to artifacts, like 
depth fighting, overlapped geometry or gaps between, because 3D APIs 
specification have somewhat  lax rules about rasterization, and float 
conversion.

Honestly, it's more effective to buy a more modern device.

Jose



From: mesa-dev  on behalf of 
t...@profit-grand.ru 
Sent: Tuesday, November 15, 2022 12:48
To: mesa-dev@lists.freedesktop.org 
Subject: LLVM-pipe: most powerful instructions set ;)

!! External Email

First, thanks for saving my day. Software renderer works way faster than
no renderer at all :)

But there are an "instruction set" which is way faster than the MMX or
SSE sets: it's an existing OpenGL 2.0 driver which is not sufficient in
most cases, because at least 3.0 is required nowadays.

Of course, it's not literally an instruction set, but a source of
additional computing power for basic operations (assuming advanced
operations are not supported by the GPU, making LLVM-pipe necessary for
such systems).

So, the actual question is:

Can LLVM-pipe somehow support (today or in future versions) a "bridge
mode", relying on a different OpenGL driver for basic operations
(supported by some ancient GPU) and closing a gap between that driver
and the required OpenGL version it's usual way, by the state-of-art
software renderer?

It's also somewhat related to my OGLOED driver idea (see my Github), the
difference is "bridge mode" is local, OGLOED is not. But there are some
diagrams which can help understanding my question :)


!! External Email: This email originated from outside of the organization. Do 
not click links or open attachments unless you recognize the sender.


LLVM-pipe: most powerful instructions set ;)

2022-11-15 Thread t...@profit-grand.ru
First, thanks for saving my day. Software renderer works way faster than 
no renderer at all :)


But there are an "instruction set" which is way faster than the MMX or 
SSE sets: it's an existing OpenGL 2.0 driver which is not sufficient in 
most cases, because at least 3.0 is required nowadays.


Of course, it's not literally an instruction set, but a source of 
additional computing power for basic operations (assuming advanced 
operations are not supported by the GPU, making LLVM-pipe necessary for 
such systems).


So, the actual question is:

Can LLVM-pipe somehow support (today or in future versions) a "bridge 
mode", relying on a different OpenGL driver for basic operations 
(supported by some ancient GPU) and closing a gap between that driver 
and the required OpenGL version it's usual way, by the state-of-art 
software renderer?


It's also somewhat related to my OGLOED driver idea (see my Github), the 
difference is "bridge mode" is local, OGLOED is not. But there are some 
diagrams which can help understanding my question :)