TL;DR är att Gallum lär göra saker bättre, men är SPIR-V/DXIL som lär plocka bort majoriteten av de problem vi historiskt sett i form av inkompatibilitet mellan GPUer.
Längre variant...
Gallium borde rimligen minska skillnaderna mellan olika GPU-tillverkare, för tanken med det projektet är att en rad saker är egentligen generellt i ramverk som OpenCL, OpenGL, Vulkan etc och det vore riktigt trevligt att man bara har en sådan implementation.
Men det finns fortfarande en lager som måste implementeras för varje GPU-arkitektur
Klicka för mer information
Visa mer
Dock en klar förbättring jämfört med tidigare när väldigt mycket av OpenGL/OpenCL duplicerades i varje drivare
Klicka för mer information
Visa mer
Men är inte i implementationer av API:erna mot applikationer, d.v.s. biblioteken för Vulkan, OpenGL och OpenCL jag upplevt de flesta buggarna utan de har främst dykt upp i kod för kernel/shader.
Exempel på problem är att koden för en "OpenCL kernel", <namn>.cl, innehållit buggar i form av avsteg från specifikationen men att detta ändå accepterats av det man testat med (typiskt AMDs drivare, då CUDA används långt mer och presterar typiskt bättre för Nvidia jämfört med OpenCL). Enligt specifikationen är programmet inkorrekt och det är egentligen odefinierat vad programmet egentligen gör. När detta körs på Intels drivare ser det ut som en bug, programmet startat inte då deras drivare vägrar kompilera kernel då den inte är korrekt.
Just den typen av problem är så vanliga både i shaders och compute-kernels att man insåg att det hela var "broken by design". Det har fixats i DX12, Vulkan och OpenCL >=2.2
Problemet med OpenCL 2.x visade sig (specifikt Nvidia bevisade detta) att OpenCL 2.x innehåller delar som gör det i stort sätt omöjligt att implementera den specifikationen både korrekt och effektivt om man kör på dGPU.
Vid det här läget tror jag de flesta gett upp på OpenCL som API för "vanliga" applikationer, men det har ändå ett värde som "low-level driver" för andra ramverk så man skapade OpenCL 3.x, det är i praktiken OpenCL 1.2 fast med den nya (korrekta) designen för hur kernels kompileras till specifika GPUer (via något som kallas SPIR-V).
Gallium+SPIR-V borde göra det långt enklare att i framtiden skriva program som faktiskt fungerar korrekt på de flesta GPUer
SPIR-V används också av Vulkan. DX12 använder något som kallas DXIL, allt fler Vulkan drivers kan även använda DXIL för shaders utöver SPIR-V.
Fördelen med ett format som SPIR-V och DXIL (båda är kan ses som en generell GPU-assembler) över att direkt översätta kod till faktiskt GPU-maskinkod är att kod lämnar långt mer öppet för tolkning -> olika personer tolkar saker olika -> detta är orsaken till majoriteten av alla buggar som gör att något fungerar på vissa GPUer men inte andra. Nu finns en implementation som översätter från kod till SPIR-V (tillverkas via Khronos) och DXIL (tillverkas av Microsoft).
Gallium3D gör som sagt motsvarande för runtime biblioteket för Vulkan, OpenCL och OpenGL (och implicit för SYCL då de flesta implementation använder OpenCL som "driver", men är inget krav och SYCL implementeras ovanpå CUDA för Nvidia).