Skip to content
Open Source Developer Blog

Linuxda Grafika

Maqolaning maqsadi

Ushbu keng qamrovli maqolaning maqsadi Linux operatsion tizimidagi grafikalarning nozik tomonlarini yoritishdir. Linux server muhitida, embedded tizimlarda va yaqinda, hatto foydalanuvchi uchun ish-stollarida keng qo'llanilishiga qaramay, ko'plab foydalanuvchilar va ishlab chiquvchilar uning grafik quyi tizimi bilan to'liq tanish emas. Ushbu qism dasturiy ta'minot ishlab chiquvchilari, Linux ishqibozlari, system administratorlar va Linuxning grafika bilan qanday ishlashini tushunishga qiziqqan barcha texnologiyaga ega bo'lgan barcha shaxslar uchun manba bo'lib xizmat qilishiga qaratilgan.

Bugun biz nafaqat Linuxda grafikaga balki umuman grafikaga chuqur shong'iymiz. Sayohatga tayyor bo'lsangiz kettik ))

Linux grafikasi haqida qisqacha ma'lumot

Linuxda grafik ishlov berish - bu ekranda vizual chiqishni ta'minlash uchun uzluksiz o'zaro ta'sir qiluvchi komponentlar majmuasini o'z ichiga olgan murakkab, ko'p bosqichli jarayon. Ushbu komponentlar qatoriga 2D va 3D vektorli grafikalarni koʻrsatish, GUI yaratish, software applicationlar va grafik hardwarelar oʻrtasidagi aloqani taʼminlashgacha boʻlgan bir qator funksiyalarni taklif qiluvchi librarylar kiradi.

Bundan tashqari, Linux grafik muhiti doimiy ravishda rivojlanib bormoqda, landshaftni qayta belgilashga qaratilgan yangi tendentsiyalar va texnologiyalar. Ushbu maqola Linuxning grafik ishlovi, librarylar(kutubxona), kernel roli, jalb qilingan drayverlar va ushbu makonni shakllantiradigan kelajakdagi qiziqarli tendentsiyalarni to'liq ko'rib chiqadigan ushbu elementlarni o'rganadi.

Ushbu maqolaning oxiriga kelib, o'quvchilar Linuxda grafikalar haqida yaxshi tushunchaga ega bo'ladilar, bu esa rivojlanish, muammolarni bartaraf etish yoki shunchaki shaxsiy qiziqishni qondirish uchun keyingi tadqiqotlar uchun mustahkam poydevor yaratadi. Keling, Linux grafikasining jozibali dunyosiga sayohatimizni boshlaylik.

Linuxda grafikaning qisqacha tarixi

Linuxda grafika tarixi o'ttiz yildan ortiq davom etadigan va Linux kernelining o'zi evolyutsiyasi bilan uzviy bog'liq bo'lgan sayohatdir. Bu innovatsiyalar, hamjamiyat hamkorligi va yuqori samarali, to'liq open-source grafik stackga tinimsiz intilish bilan ajralib turadigan hikoya.

Erta kunlar (1990-yillar)

Sayohat 1990-yillarning boshida, Linux kerneli Linus Torvalds tomonidan birinchi marta chiqarilgandan so'ng boshlangan. Dastlabki kunlarda Linux o'ziga xos grafik tizimiga ega emas edi. U asosan buyruq qatori interfeyslari(CLI) orqali boshqarildi, grafik displeylar uchun juda oddiy yordam bilan. Ammo foydalanuvchilar uchun qulayroq interfeysga ehtiyoj paydo bo'lishi bilan, X11 yoki oddiygina X deb nomlanuvchi X Window System Unix dunyosidan qabul qilindi.

Dastlab 1984 yilda Massachusetts texnologiya institutida ishlab chiqilgan X Window System grafik tasvirlarni ko'rsatish va oynalarni boshqarish uchun asosiy mexanizmlarni taqdim etdi, ammo u standart ko'rinish va hisni aniqlamadi. Ushbu moslashuvchanlik KDE va GNOME kabi turli xil desktop environmentlarini tug'dirdi, ularning har biri o'ziga xos estetika va xatti-harakatlarga ega.

X Window System (1984 yildan hozirgi kungacha) X, X11 yoki X Window System nomi bilan ham tanilgan, Unix-ga o'xshash operatsion tizimlarda, jumladan Linuxda grafik foydalanuvchi interfeyslari uchun asos bo'lgan protokol va dasturiy ta'minot. X 1980-yillarning o'rtalarida MITda Linuxdan oldin ishlab chiqilgan. Linux ishlab chiqilganda, u o'zining grafik muhiti uchun X ni qabul qildi. X GUI-ni ishlab chiqish uchun asosiy asosni taqdim etadi, bu ilovalarga GUI elementlarini ko'rsatish, sichqonchani bosish va tugmalarni bosish va hokazolarni boshqarish imkonini beradi. Biroq, X ish stoli(desktop) qanday ko'rinishini aniqlamaydi; bu window manageri va desktop environmentning roli.

Window Managerlar (1980-yillar - hozirgi) Window Manager - bu X Window System muhitida oynalarning ko'rinishi va joylashishini boshqaradigan X clientlari. Birinchi window managerlaridan ba'zilari TWM (Tab Window Manager) va keyinchalik FVWM (F Virtual Window Manager) ni o'z ichiga olgan. Ular minimalist va zamonaviy standartlarga nisbatan juda qulay emas edi, lekin ular keyingi rivojlanish uchun asos bo'ldi.

Desktop Environment (1990-yillar - hozirgi) 1990-yillarning oʻrtalaridan oxirigacha ishlab chiquvchilar yanada kengroq desktop environment(ish stoli muhitlari)ni yaratishni boshladilar. KDE (K Desktop Environment) Unix workstationlari uchun birinchi desktop environment bo'lib, birinchi marta 1996 yilda chiqarilgan. GNOME, yana bir mashhur desktop environment 1999 yilda chiqarilgan. KDE ham, GNOME ham kengroq ilovalar, sozlamalar va yordamchi dasturlar to'plamini taqdim etgan. Linux kundalik foydalanuvchilar uchun qulayroq. Ular vazifalar paneli(taskbar), ishga tushirish menyusi va drag-and-drop(sudrab tashlash) fayllarni boshqarish kabi xususiyatlarni o'z ichiga olgan.

Grafik stackni yetishtirish (2000-yillar)

2000-yillarning boshida to'g'ridan-to'g'ri ko'rsatish infratuzilmasi (Direct Rendering Infrastructure DRI) ko'rinishida sezilarli yutuqlarga erishildi. DRI applicationlarga X serverini chetlab o'tish va grafik qurilmalarga to'g'ridan-to'g'ri kirish imkonini berdi, bu esa ishlashning sezilarli yaxshilanishiga olib keldi, ayniqsa 3D grafikalar va o'yinlar uchun juda muhim.

2000-yillarda, shuningdek, Linux platformasida OpenGLni impelement qiluvchi open-source loyiha Mesaning rivojlanishi va yetukligi kuzatildi. Mesa hardware-accelerated 3D grafikalarni taqdim etish uchun DRI bilan birgalikda ishladi. Taxminan bir vaqtning o'zida, grafik karta ishlab chiqaruvchilari, ayniqsa Nvidia va AMD, Linux uchun xususiy drayverlarni taklif qila boshladilar, bu esa grafik ish faoliyatini yanada yaxshilaydi.

Compositing Window Manager(Window Managerlarni kompozitsiyalash) (2000-yillar - hozirgi) 2000-yillarning o'rtalarida Compiz, KWin (KDE uchun) va Mutter (GNOME uchun) kabi kompozitsion window managerlari paydo bo'ldi. Ular har bir oynani ekranda ko'rsatishdan oldin uni ekrandan tashqari buferda ko'rsatish orqali ko'zni qamashtiruvchi grafik effektlarni taqdim etdi.

Modernizatsiya sari (2010-yillar)

Ushbu yutuqlarga qaramay, X Window System o'zining cheklovlariga ega edi, birinchi navbatda uning yoshi va dizayn falsafasidan kelib chiqqan holda, zamonaviy grafik qurilmalardan to'liq foydalana olmagan. Yechim 2008 yilda Kristian Høgsberg tomonidan boshlangan yangi displey protokoli Wayland ko'rinishida paydo bo'ldi. Wayland zamonaviy kompozitsion window managerlari bilan yaratilgan soddaroq va samaraliroq displey tizimini taqdim etish orqali X11 o'rnini bosishni maqsad qilgan.

Bu davrda yana bir muhim texnologiya, Kernel Mode Setting (KMS)(kernel rejimni sozlash) paydo bo'ldi. KMS ko'chirilgan rejimni sozlash(mode setting) vazifalari, jumladan, grafik rejimlarni(mode) tanlash va frame bufferlarini o'rnatish, Linux kerneliga. Bu yuklash jarayonlari(boot process) va resolution switche tugmachalarini yumshatishga olib keldi, shuningdek, yanada ilg'or grafik texnologiyalar uchun poydevor qo'ydi.

Wayland (2012 - hozirgi): X Window System chekloclariga yechim sifatida ishlab chiqilgan. Birinchi marta 2012 yilda chiqarilgan Wayland grafik muhitni yaratish uchun sodda va zamonaviy protokoldir. Bu X-ga qaraganda xavfsizroq va samaraliroq, ammo uni qabul qilish sekin kechdi, chunki u mavjud dasturiy ta'minotning katta qismini qayta yozishni talab qiladi.

Vulkan (2016 yildan hozirgi kungacha) Vulkan - yuqori unumdor 3D grafika uchun low-leveladagi, o'zaro faoliyat platformali API. U GPU ustidan ko'proq to'g'ridan-to'g'ri nazorat(direct control ) qilish va protsessordan kamroq foydalanishni taklif qilish uchun mo'ljallangan, bu video o'yinlar va boshqa grafik talab qiladigan ilovalar uchun foydalidir.

Hozirgi kun (2020-yildan)

Bugungi kunda Linux grafik stacklari rivojlanishda davom etmoqda. Wayland tobora ommalashib bormoqda, garchi Xorg moslik sabablari tufayli keng qo'llanilsa ham. Open Source grafik drayverlar sezilarli darajada yaxshilandi, ko'pincha xususiylar bilan teng sharoitlarda raqobatlashdi. Vulkan, yangi avlod grafikasi va hisoblash API-si ishlab chiquvchilarga grafik qurilmalar ustidan ko'proq nazoratni ta'minlab, o'ziga jalb etilmoqda.

Waylandni qabul qilishning ko'payishi (2020-2021): Wayland o'zining soddalashtirilgan yondashuvi va yaxshi xavfsizligi tufayli ancha vaqtdan beri X ning vorisi sifatida e'tirof etilgan. Ushbu davrda Wayland turli xil Linux distribyutorlari bo'ylab qabul qilishning kuchayishini ko'rdi. Masalan, Fedora Fedora 25 (2016) dan beri Wayland-dan standart bo'yicha foydalanmoqda, ammo Ubuntu Ubuntu 21.04 (2021) da uni standart bo'yicha ishlata boshladi. GNOME bir muncha vaqtdan beri Wayland-ni qo'llab-quvvatlab kelmoqda, ammo bu davrda KDE-ning Wayland-ni qo'llab-quvvatlashi sezilarli darajada yaxshilandi.

Vulkanni rivojlantirishni davom ettirish (2020-2021): 3D grafika uchun low-leveldagi, yuqori samarali, o'zaro faoliyat platformali yechimni ta'minlovchi Vulkan API keyingi qabul qilish va ishlab chiqishda davom etdi. 2021-yildan boshlab u oʻyinlarni ishlab chiqishda, jumladan, AAA oʻyin sarlavhalari va Linux oʻyinlarida Valve’ning Proton moslik vositasi tufayli tobora koʻproq foydalanilmoqda.

Linux kerneli grafik quyi tizimi yutuqlari (2020-2021): Linux kernelining grafik subsystemi ham ushbu davrda muntazam yangilanishlarni koʻrdi. Misol uchun, Direct Rendering Manager (DRM) subsystemdagi yaxshilanishlar izchil bo'ldi, jumladan, AMD va Intel GPU-larni yaxshiroq qo'llab-quvvatlash.

PipeWire (2020-2021): PipeWire - PulseAudio va JACK o'rnini bosuvchi Linux ostida audio va video bilan ishlashni yaxshilashga qaratilgan loyiha. Bu shuningdek, grafikaga ham ta'sir qiladi, chunki u Wayland ostida ekran almashish va masofaviy ish stoliga yordam berish uchun mo'ljallangan, stsenariylarda Waylandning xavfsizlikka yo'naltirilgan dizayni X11 ostida qo'llaniladigan an'anaviy usullarni qiyinlashtirdi.

HDR-ni qo'llab-quvvatlash (2020-2021): Yana bir muhim yutuq - Intelning open-source jamoasining katta hissasi bilan Linux ostida yuqori dinamik diapazonli (HDR) displeyni qo'llab-quvvatlash bo'yicha olib borilayotgan ishlar. 2021 yil holatiga ko'ra, Linux ekotizimida HDR joriy etish hali ham ishda.

Bular 2020 va 2021 yillarda Linux grafik landshaftida roʻy bergan baʼzi yutuqlar. Biroq bu soha butun dunyo boʻylab bir qancha ishlab chiquvchilar, hamjamiyat va kompaniyalarning hissasi bilan doimiy ravishda rivojlanib bormoqda.

Linux-dagi grafik sayohati open-source rivojlanish kuchidan dalolat beradi, uning hamkorlik, innovatsiya va doimiy takomillashtirish ruhini o'zida aks ettiradi. Linux oldinga siljishi bilan uning grafik tizimlari rivojlanishda davom etadi va foydalanuvchilar va ishlab chiquvchilarga ko'proq imkoniyatlar, yaxshi ishlash va ko'proq moslashuvchanlikni beradi.

Linux Graphics Stack

Linux Graphics Stack - bu layerli structura(qatlamli tuzulma) bo'lib, u kompyuter applicationlariga kompyuter ekranida tasvirlarni yaratish, o'zgartirish va ko'rsatish imkonini beradi. Stack application leveldan boshlanadi va hardwaregacha bo'lgan jarayonni o'z ichiga oladi. Buni layerma-layer ko'rib chiqanuz

Application Layer stackning yuqori qismi applicationlar joylashgan joy. Bu sizning web-browserngiz, matn muhariringiz yoki ekraningizga tasvir yoki matnni ko'rsatishi kerak bo'lgan boshqa turdagi application(dastur, ilova) bo'lishi mumkin.

Toolkit Layer Applicationlar foydalanuvchi interfeyslarini(user interface) ko'rsatishga yordam berish uchun ko'pincha grafik toolkitlardan foydalanadilar. Ushbu toolkitlar tugmalar(button), matn maydonchalari(text boxes), slayderlar(slider) va boshqalar kabi oldindan tayyorlangan elementlar kutubxonalarini taqdim etadi. Masalan, GTK, Qt yoki FLTK.

Window System Layer Keyingi layer Window System Layer. Ushbu layer oynalarni(window) boshqa joyga ko'chirish, o'lchamlarini o'zgartirish yoki Z-tartibini o'zgartirish kabi asosiy imkoniyatlarni taqdim etadi. Ko'pgina Linux tizimlarida bu X Window System (X11) yoki Wayland bo'ladi.

Compositing Window Manager Window System Layerning ustiga qo'yish - Compositing Window Manager. Hamma tizimlarda ham bunday layer bo'lmaydi. Compositing Window Managerlari (masalan, Compiz yoki Mutter) ekranga yuborishdan oldin oynalarni buferga birlashtiradi. Bu shaffoflik(transparency), animatsiya yoki 3D desktop kabi effektlarni beradi.

Window System Server Layer Window System Server Layeri client applicationlari(mijoz ilovalari) va display hardware o'rtasidagi aloqani boshqarish uchun javobgardir. Linuxda buning eng keng tarqalgan misoli X11 bilan ishlaydigan tizimlardagi X Server bo'lishi mumkin.

Graphics Library Layer Window System Serveri ostida Graphics Library(grafik kutubxona) joylashgan. Bu dasturiy ta'minotning GPU bilan standartlashtirilgan tarzda o'zaro ishlashiga imkon beruvchi APIni taqdim etadi. Bu yerda asosiy misol - OpenGL va Vulkan kabi bir nechta grafik API-larni amalga oshiradigan Mesa.

Kernel Mode Setting (KMS) va Direct Rendering Manager (DRM) layeri Bu layer to'g'ridan-to'g'ri kernel bilan ishlaydi. KMS resolutionni aniqlash, rang chuqurligi(color depth) va refresh rateni(yangilanish tezligi) uchun javobgardir. DRM Linux kernelining subsystem(quyi tizi)mi bo'lib, u GPU-lar bilan interfeysga ega va memory management, interrupt handling va DMA kabi vazifalarni bajaradi.

Kernel Layer kernel operatsion tizimning asosiy qismidir. U to'g'ridan-to'g'ri hardware bilan bog'lanadi va memory management va task scheduling(vazifalarni rejalashtirish) kabi low-leveldagi service(xizmat)larni taqdim etadi.

Hardware Layer stackning pastki qismi actual grafik hardwaredir. Bu NVIDIA GeForce, AMD Radeon yoki Intel integratsiya qilingan GPU kabi bo'lishi mumkin bo'lgan grafik kartangiz.

Stackning har bir layer(qatla)mi to'g'ridan-to'g'ri uning ustidagi va ostidagi layerlar bilan bog'lanib, abstraktsiya darajasini ta'minlaydi. Bu dasturiy ta'minotni ishlab chiquvchilarga boshqa layerlarning barcha tafsilotlarini tushunmasdan turib, o'zlarining maxsus vazifalariga e'tibor qaratish imkonini beradi.

Hardware Layer

Linux grafik staxkining hardware layeri grafiklarni haqiqiy renderlash va ko'rsatish bilan shug'ullanadigan jismoniy(physical) komponentlardan iborat. Ushbu komponentlar GPU (Graphics Processing Unit), video xotira (VRAM- Video random-access memory) va monitorlar yoki ekranlar kabi displey hardwareni o'z ichiga oladi.

GPU Graphics Processing Unit grafiklarni ko'rsatish uchun zarur bo'lgan hisob-kitoblar uchun optimallashtirilgan maxsus protsessordir. U tizimning asosiy protsessoridan mustaqil ishlaydi va boshqa vazifalar uchun resurslarni bo'shatadi. GPU piksellarni chizish, teksturalar bilan ishlash va 3D grafikalar va animatsiyalar uchun zarur bo'lgan murakkab calculationlarni bajarish uchun javobgardir.

GPU bir nechta asosiy elementlardan iborat

GPU Core Bu GPUning yuragi. GPU core instructionlarni bajarish va actual computationlarni bajarish uchun javobgardir. Muayyan GPU modeliga qarab, u yuzlab yoki hatto minglab corelarga ega bo'lishi mumkin. Har bir core bir vaqtning o'zida bir nechta thereadlarni boshqarish uchun mo'ljallangan, shuning uchun GPUlar parallel ishlov berishda juda samarali.

CUDA Corelar/Stream Processor Bular GPU coresidagi parallel protsessorlar bo'lib, ular mos ravishda NVIDIA va AMD o'zlarining GPUlarida foydalanadilar. CUDA corelari NVIDIA GPU-lariga xos bo'lib, bir vaqtning o'zida ko'p vazifalarni bajarish uchun mo'ljallangan qayta ishlash coresining bir turidir. AMD ning ekvivalenti Stream Processor deb ataladi.

Memory Bu GPU-ning o'ziga xos maxsus operativ xotirasi bo'lib, ko'pincha VRAM (Video Random Access Memory) deb ataladi. U teksturalarni, framebufferni va GPU ko'rsatish uchun zarur bo'lgan boshqa ma'lumotlarni saqlash uchun ishlatiladi. Yuqori darajali grafik protsessorlarda ko'pincha juda yuqori ma'lumotlarni uzatish tezligini bajara oladigan katta hajmdagi GDDR6 (Graphics Double Data Rate 6) xotirasi yoki HBM (High Bandwidth Memory) mavjud.

Memory Bus Memory Bus GPU coresi VRAM bilan aloqa qiladigan yo'ldir. Kengroq mmemory busi bir vaqtning o'zida ko'proq ma'lumotlarni uzatish imkonini beradi, bu esa ishlashga sezilarli ta'sir ko'rsatishi mumkin.

Memory Clock Bu GPU xotirasining ishlash tezligini bildiradi. Bu ma'lumotni xotiradan o'qish va xotiraga yozish tezligiga ta'sir qiladi, bu GPUning umumiy ishlashiga ta'sir qiladi.

Clock Speed Clock Speed GPU coresining ishlash tezligidir. Yuqori clock Speed odatda tezroq ishlashni anglatadi, lekin ular ko'proq issiqlik hosil bo'lishiga ham olib kelishi mumkin.

Shader Unit Bu effektlar va ranglarni ko'rsatish uchun ishlatiladigan GPU ichidagi maxsus ishlov berish birliklari. Ular vertex, geometriya va piksel soyasi bilan bog'liq keng ko'lamli vazifalarni bajarish uchun dasturlashtirilishi mumkin.

Texture Mapping Unit (TMU) Bular 3D modellarga teksturalarni qo'llash uchun javobgardir. GPUdagi TMUlar soni uning murakkab teksturali yuzalarni ko'rsatish qobiliyatiga ta'sir qilishi mumkin.

Render Output Unit (ROP) Ular tasvirlashning oxirgi bosqichlarini, masalan, anti-aliasingni boshqaradi va yakuniy piksel ma'lumotlarini xotiraga yozadi. ROPlar soni GPU ning tasvirlarni yuqori aniqlikda ko'rsatish qobiliyatiga ta'sir qilishi mumkin.

Thermal Design Power (TDP) Bu GPU og'ir yuk ostida ishlab chiqarishi kutilayotgan issiqlikning maksimal miqdorini bildiradi. Bu GPU uchun zarur sovutish yechimlarini aniqlash uchun muhimdir.

Power Connector Bular GPU ni ishlashi uchun zarur quvvat bilan ta'minlaydi. Yuqori darajadagi GPUlar yuqori quvvat sarfi tufayli ko'pincha bir nechta quvvat ulagichlarini talab qiladi.

PCI Express Interface Bu GPU kompyuterning qolgan qismi bilan aloqa qiladigan ulanish. PCI Express interfeysining tezligi va kengligi GPUning umumiy ishlashiga ta'sir qilishi mumkin.

Video portlar Bular GPU uchun chiqishlar(output) va ular displeylarni ulash uchun ishlatiladi. Umumiy turlarga HDMI, DisplayPort va DVI kiradi.

Esda tutingki, ushbu elementlarning barchasi grafik tasvirlash va hisoblash vazifalari uchun optimal ishlashni ta'minlash uchun uyg'unlikda ishlashga mo'ljallangan. Ushbu elementlarning o'ziga xos soni va konfiguratsiyasi GPU modeliga va undan foydalanish maqsadiga qarab juda farq qilishi mumkin.

Shuni ham aytib o'tish kerakki GPU mavzusini o'zi katta mavzu shuning uchun qisqa to'xtalib o'tdik ))

Image

Image

Video Random Access Memory (VRAM) - kompyuter graphics processing unit (GPU) ishlov beradigan tasvir va video ma'lumotlarni saqlash uchun kompyuterlarda ishlatiladigan xotira turi. VRAM protsessor va video karta protsessori o'rtasidagi buferdir. Nomidan ko'rinib turibdiki, bu tasodifiy kirish, ya'ni GPU unda saqlangan ma'lumotlarga tezda kirishi mumkin.

VRAM frame bufferi bo'lib xizmat qiladi, bu asosan hozirda ko'rsatilayotgan tasvirlar uchun ma'lumotlarni saqlaydigan xotira ("frame buffer" buferidagi "frame"). Nisbatan sekin bo'lgan monitor va ancha tez bo'lgan protsessor o'rtasidagi tezlik farqi tufayli frame bufferi kerak.

Grafik kartaga kerak bo'lgan VRAM miqdori o'yinlaringiz yoki boshqa grafik talab qiladigan vazifalarni bajarayotganingizning ruxsatiga bog'liq. Yuqori aniqlik uchun ko'proq VRAM kerak. Xuddi shunday, anti-aliasing, yuqori dinamik diapazon (HDR) va murakkab yoritish yoki soya algoritmlari kabi ilg'or grafik texnikasi ko'proq VRAMni talab qiladi.

VRAM turlariga quyidagilar kiradi:

GDDR (Graphics Double Data Rate) Bu DDR xotira turi, lekin grafik kartadan foydalanish uchun maxsus moʻljallangan. U GDDR2, GDDR3, GDDR4, GDDR5, GDDR6 va GDDR6X versiyalarini o'z ichiga oladi. Har bir keyingi versiya odatda avvalgilariga nisbatan yaxshilanishlarni taklif etadi, masalan, quvvatni yaxshiroq boshqarish yoki yuqori tezlik.

HBM (High Bandwidth Memory) Bu yuqori sifatli grafik kartalar va HPC (High Performance Computing) da qo'llaniladigan yuqori samarali RAM interfeysi. HBM GDDR xotira turlariga qaraganda kamroq quvvat sarflagan holda yuqori xotira tarmoqli kengligiga erishish uchun keng interfeysli arxitekturadan foydalanadi.

SGRAM (Synchronous Graphics RAM) Ushbu turdagi VRAM kompyuterning bus speedi bilan bir xil tezlikda ishlaydi. Hozirgi kunda u kamroq tarqalgan, ammo ba'zi eski grafik kartalarda ishlatilgan.

VRAM GPU ning muhim komponenti bo‘lib, uning hajmi, tezligi va samaradorligi GPU ishlashiga sezilarli ta’sir ko‘rsatishi mumkin. Zamonaviy grafik protsessorlar odatda eng yuqori darajadagi kartalarda bir necha gigabaytdan 24 Gb gacha bo'lgan VRAM miqdoriga ega.

Image

Monitorlar/Ekranlar(Monitors/Screens) Bular aslida foydalanuvchiga ko'rsatilgan grafiklarni ko'rsatadigan chiqish qurilmalari( output device). Ular GPU dan yakuniy tasvir ma'lumotlarini oladi va uni ko'rsatilishi mumkin bo'lgan formatga aylantiradi. Monitorlar kichik mobil displeylardan tortib yuqori aniqlikdagi katta ekranlargacha bo'lgan har xil turdagi, o'lcham va resolutionlarda bo'lishi mumkin.

Monitorlar haqida gapirganda e'tiborga olish kerak bo'lgan ba'zi asosiy jihatlar

Ekran o'lchami: Bu burchakdan burchakka diagonal ravishda o'lchanadi. Ish stoli monitorlari uchun odatiy o'lchamlar taxminan 20 dyuymdan 32 dyuymgacha yoki undan kattaroq, noutbuk ekranlari esa odatda 12 dan 17 dyuymgacha.

Resolution: Bu ekranda ko'rsatilgan piksellar sonini bildiradi va odatda kenglik x balandlik sifatida ifodalanadi. Masalan, 1920x1080 o'lchamdagi monitor displeyning kengligi bo'ylab 1920 pikselni va balandligi bo'yicha 1080 pikselni ko'rsatishi mumkin. Yuqori aniqlik aniqroq, aniqroq tasvirni anglatadi, lekin ko'proq grafik quvvat talab qiladi. Umumiy resolutionlarga 1080p (Full HD), 1440p (2K yoki QHD) va 2160p (4K yoki UHD) kiradi.

Aspect Ratio: Bu ekran kengligining balandligiga nisbati. Eng keng tarqalgan tomonlar nisbati 16:9, ammo 21:9 (ultra keng) va 4:3 (eski monitorlarda qo'llaniladi) kabi boshqa nisbatlar ham mavjud.

Panel turi: Bu ekranda tasvirni yaratish uchun ishlatiladigan texnologiya turiga ishora qiladi. Eng keng tarqalgan turlari TN (Twisted Nematic), VA (Vertical Alignment) va IPS (In-Plane Switching). Har birining o'ziga xos kuchli va zaif tomonlari bor, IPS odatda eng yaxshi rang aniqligi va ko'rish burchaklarini ta'minlaydi, TN eng tez javob vaqtini taklif qiladi va VA o'rta darajadagi tanlovdir.

Refresh Rate: Bu monitorning soniyada yangi ma'lumotlar bilan yangilanishi va gerts (Hz) bilan o'lchanadigan soni. Odatda yangilanish tezligi(Refresh Rate) 60Hz, 120Hz, 144Hz va 240Hz ni o'z ichiga oladi. Yuqori yangilanish stavkalari harakatni silliq ko'rinishga olib kelishi va kiritish kechikishini kamaytirishi mumkin, bu ayniqsa tez sur'atli video o'yinlarda qimmatlidir.

Response Time: Bu pikselning qoradan oqga yoki bir kul rangdan ikkinchisiga o‘zgarishini qanchalik tez ko‘rsatishini o‘lchaydi. Kamroq javob vaqti(response time) tezroq harakat paytida kamroq xiralashgan harakat va aniqroq tasvirni anglatadi.

Color Depth(rang chuqurligi) Bu monitor qancha rang ko'rsatishi mumkinligini o'lchaydi. Aksariyat monitorlar kamida 16,7 million rangni (24 bitli true color) ko'rsatishi mumkin, ammo professional darajadagi monitorlar 1,07 milliard (30 yoki 32 bit true color) yoki undan ko'p rangni ko'rsatishi mumkin.

Yorqinlik(Brightness): Bu displeydan chiqadigan yorug'lik miqdori va odatda kvadrat metrga (cd/m²) candelalarda o'lchanadi.

Contrast nisbati: Bu monitor ishlab chiqarishga qodir bo'lgan eng yorqin rang (oq) yorqinligining eng quyuq rangga (qora) nisbati. Yuqori kontrast stavkalari, odatda, monitor yanada nozik rang farqlari va chuqurroq qora ranglarni ko'rsatishi mumkinligini ko'rsatadi.

Input Connectorlari: Bular monitorni kompyuteringizga ulash uchun ishlatiladigan portlardir. Umumiy turlarga HDMI, DisplayPort, DVI va VGA kiradi.

Monitorlar, shuningdek, moslashuvchan sinxronlash texnologiyasi (NVIDIA G-Sync yoki AMD FreeSync), o'rnatilgan dinamiklar(built-in speaker), USB portlar, curved ekranlar va boshqalar kabi xususiyatlarga ega bo'lishi mumkin.

Dasturiy ta'minot nuqtai nazaridan, Linux grafik stackining hardware layeri birinchi navbatda kernel bilan o'zaro ta'sir qiladi, bu esa turli quyi tizimlar(subsystem) va interfeyslar orqali hardwarega low-leveldagi kirishni ta'minlaydi. Bunga GPUga kirishni boshqarish uchun Direct Rendering Manager (DRM), oddiy chizish operatsiyalari uchun framebuffer qurilmasi va videoni suratga olish va chiqarish uchun Video4Linux interfeysi kiradi.

GPU va hardware layerining boshqa komponentlari bilan aloqa qilish uchun open-source va xususiy driver dasturiy ta'minotidan foydalaniladi. Driverlar high-leveldagi buyruqlarni operatsion tizimdan hardware tushunadigan low-leveldagi instructionlarga tarjima qiladi. Shuningdek, ular resurslarni boshqaradilar, xatolarni hal qiladilar va grafik hardwarening yaxshi va samarali ishlashini ta'minlash uchun tizimning qolgan qismi bilan muvofiqlashtiradilar.

Ushbu hardware layer Linux grafik stackining qolgan qismi uchun asos bo'lib xizmat qiladi,

Kernel layer

Linux grafik stackidagi kernel layeri to'g'ridan-to'g'ri hardware layerii bilan interfeyslarni o'rnatadi va interfeyslar va abstraksiyalarni stackning yuqori darajadagi komponentlariga, masalan, window system yoki user-space applicationlarga ochib beradi. Ushbu kontekstda kernel layerining asosiy komponentlari quyidagilardan iborat:

Direct Rendering Manager (DRM) Linux kernelining quyi tizimi(subsystem) bo'lib, zamonaviy video kartalarning GPU-lari bilan o'zaro bog'lanish uchun javobgardir va dasturlarning grafik qurilmalar bilan o'zaro ta'siri uchun umumiy API taqdim etadi. DRM user-space dasturlari buyruqlar va ma'lumotlarni GPUga yuborish va displeyning rejim sozlamalarini sozlash kabi operatsiyalarni bajarish uchun foydalanishi mumkin bo'lgan APIni ochib beradi. DRM birinchi marta X Server Direct Rendering Infratuzilmasining kernel-space komponenti sifatida ishlab chiqilgan , ammo o'shandan beri u Wayland kabi boshqa grafik stack alternativlari va SDL2 va Kodi kabi mustaqil ilovalar va kutubxonalar tomonidan qo'llanila boshlandi.

User-space dasturlar DRM API-dan GPU-ga hardware-accelerator 3D renderlash va video dekodlash(video decoding), shuningdek, GPGPU hisoblashlarini buyurish uchun foydalanishi mumkin. DRM dastlab XFree86 da Direct Rendering Infrastructure (DRI) qo'llab-quvvatlash uchun ishlab chiqilgan, ammo keyinchalik turli xil grafik funksiyalarni boshqarish uchun kengaytirilgan.

Image

DRM bir necha qismlardan iborat

`Kernel Component, DRM qurilma drayverlari, Graphics Execution Manager (GEM), Kernel Mode Setting (KMS), DMA-BUF, DRM Driver, User-space Componet, Direct, Rendering Infrastructure (DRI)

DRM ekranda grafiklarni ko'rsatish bilan bog'liq vazifalarni boshqarishda asosiy rol o'ynaydi, grafik qurilmaning murakkabligini mavhumlashtiradi va Linux grafik stackidagi yuqori qatlamlarga asosiy grafik uskunasining o'ziga xos xususiyatlaridan tashvishlanmaslik imkonini beradi.

Texnik darajada, DRM user-space applicationlarga ioctl sstem callari orqali buyruqlarni GPUga yuborishga ruxsat berish orqali erishadi. DRM drayveri ushbu buyruqlarni GPUdagi buyruqlar navbatlariga(command queue) surishdan oldin tasdiqlaydi. Zamonaviy GPU-larda bir nechta buyruqlar navbati(multiple command queue) bir vaqtning o'zida bir nechta vazifalarni bajarish uchun ishlatilishi mumkin, bu esa GPU-dan umumiy foydalanish va unumdorlikni oshiradi.

DRM/DRI

Direct Rendering Infrastructure - bu X clienlariga grafik qurilma bilan to'g'ridan-to'g'ri gaplashish imkonini beruvchi yangi arxitektura. DRI-ni implement qilish grafik stackning turli qismlariga, jumladan X serveriga, kernelga va turli xil clientlar kutubxonalariga o'zgartirishlar kiritishni talab qildi.

DRI atamasi odatda to'liq arxitekturani nazarda tutsa ham, u ko'pincha uning faqat X server bilan applicationlarning o'zaro ta'sirini o'z ichiga olgan ma'lum bir qismiga ishora qilish uchun ishlatiladi, shuning uchun internetda ushbu ma'lumot haqida o'qiyotganingizda ushbu ikki tomonlama ma'noga e'tibor bering. DRI ning yana bir muhim qismi bu Direct Rendering Manager (DRM) dir. Bu DRI arxitekturasining kernel tomoni. Bu yerda kernel hardware blokirovkasi, kirish sinxronizatsiyasi, video xotira va boshqalar kabi nozik jihatlarni boshqaradi. DRM shuningdek, foydalanuvchilarga zamonaviy grafik protsessorlar uchun mos formatda buyruqlar va ma'lumotlarni yuborish uchun foydalanishi mumkin bo'lgan API bilan ta'minlaydi, bu esa foydalanuvchilarga grafik qurilmalar bilan samarali muloqot qilish imkonini beradi.

E'tibor bering, bularning ko'pchiligi maqsadli uskuna uchun maxsus bajarilishi kerak, shuning uchun har bir GPU uchun turli xil DRM drayverlari mavjud.

OpenGL ham, window systemi ham ekranda ob'ektlarni chizish bilan bog'liq qismlarni amalga oshiradi. Shuning uchun ular Linux kerneli Direct Rendering Manager (DRM) orqali boshqaradigan card-specific instructionlar to'plamini ishlab chiqaradi.

Linuxda bizda libdrm mavjud bo'lib, bu operatsion tizimda DRMga kirishni osonlashtiradi. DRM grafik ob'ektlar uchun xotira ajratish va kerakli buyruqlar va teksturalarni to'ldirish uchun umumiy tizim ioctlsto'plamidan foydalanadi. ioctl tizimi - bu qurilmaga xos(device-specific) kiritish(input) va chiqarish(output) operatsiyalari bilan shug'ullanadigan system callning(tizim chaqiruv) maxsus turi. Bunday holda, u video kartani kiritish va chiqarish operatsiyalari bilan shug'ullanadi.

Shunday qilib, biz grafik dasturni ishga tushirganimizda, u OpenGL drayverini yuklaydi - masalan, Mesa. Driver, o'z navbatida, ioctl orqali kernel bilan to'g'ridan-to'g'ri gaplashishga imkon beruvchi libdrm-ni yuklaydi.

Demak, bu jarayon grafik dastur ishlayotgan ekan davom etadi. Biroq, bizga X Server kabi window system,iga nima sodir bo'layotganini bilish imkonini beradigan usul kerak bo'lib, u o'zini sinxronlashi va yangilashi mumkin. Ushbu sinxronizatsiya jarayoni Direct Rendering Infrastructure (DRI) sifatida tanilgan.

Image To'g'ridan-to'g'ri(Direct Rendering) renderlash OpenGL bilan

Image

DRI/DRM foydalanuvchi dasturlariga grafik qurilmalarga bevosita samarali va xavfsiz kirish imkonini beruvchi qurilish bloklarini taqdim etadi, ammo OpenGL-dan foydalanish uchun bizga DRI/DRM tomonidan taqdim etilgan infratuzilmadan foydalanib, OpenGL-ni amalga oshiradigan boshqa dasturiy ta'minot kerak bo'ladi. X server talablariga rioya qilgan holda API.

Graphics Execution Manager (GEM)

Video xotira hajmining o'sishi va OpenGL kabi grafik API-larning o'sib borayotgan murakkabligi tufayli har bir kontekstni almashtirishda grafik karta holatini qayta ishga tushirish strategiyasi unumdorlik jihatidan juda qimmatga tushdi. Bundan tashqari, zamonaviy Linux ish stollari ekrandan tashqari buferlarni kompozitsion menejer bilan almashishning optimal usuliga muhtoj edi. Ushbu talablar kernel ichidagi grafik buferlarni boshqarishning yangi usullarini ishlab chiqishga olib keldi. Ushbu usullardan biri sifatida Graphics Execution Manager (GEM) paydo bo'ldi. Graphics Execution Manager (GEM) DRM quyi tizimidagi xotira menejeri, u GPU xotirasini boshqarish uchun javobgardir. U GPU xotirasidan foydalanishning murakkabliklarini, including c, mapping(xaritalash) va swappingni boshqaradi. GEM GPU xotirasi bilan ishlash uchun standart interfeysni taqdim etadi, bu user-space applicationlarga GPUdan optimal foydalanish imkonini beradi.

GEM aniq xotirani boshqarish primitivlari bilan API taqdim etadi. GEM orqali user-space dastur GPU video xotirasida yashovchi xotira obyektlarini yaratishi, boshqarishi va yoʻq qilishi mumkin. "GEM objects" deb nomlangan ushbu obyektlar user-space dasturi nuqtai nazaridan qat'iydir va har safar dastur GPU nazoratini tiklaganda qayta yuklanishi shart emas. Agar user-space dasturiga video xotiraning bir qismi kerak bo'lsa (framebuffer, tekstura yoki GPU tomonidan talab qilinadigan boshqa ma'lumotlarni saqlash uchun), u GEM API yordamida DRM drayveriga ajratishni so'raydi. DRM drayveri ishlatilgan video xotirani kuzatib boradi va agar bo'sh xotira mavjud bo'lsa, so'rovni bajarishga qodir va kelgusi operatsiyalarda ajratilgan xotiraga qo'shimcha murojaat qilish uchun foydalanuvchi maydoniga "handle"ni qaytaradi. GEM API shuningdek, buferni to'ldirish va kerak bo'lmaganda uni chiqarish operatsiyalarini ham ta'minlaydi. Chiqarilmagan GEM handlelari xotirasi, user-space processi DRM qurilmasi fayl identifikatorini yopib qo'yganda - ataylab yoki tugatilganligi sababli tiklanadi.

GEM dastlab Intel muhandislari tomonidan i915 drayveri uchun video xotira menejerini ta'minlash uchun ishlab chiqilgan. Intel GMA 9xx oilasi Uniform Memory Architecture (UMA) bilan birlashtirilgan GPU-lar bo'lib, u yerda GPU va CPU jismoniy xotirani baham ko'radi va maxsus VRAM mavjud emas. GEM xotira sinxronizatsiyasi uchun "xotira domenlarini" belgilaydi va bu xotira domenlari GPU-dan mustaqil bo'lsa-da, ular UMA xotira arxitekturasini hisobga olgan holda maxsus ishlab chiqilgan bo'lib, ularni alohida VRAMga ega bo'lganlar kabi boshqa xotira arxitekturalari uchun kamroq moslashtiradi. Shu sababli, boshqa DRM drayverlari GEM API-ni foydalanuvchi dasturlari bilan tanishtirishga qaror qilishdi, biroq ular o'zlarining hardware va xotira arxitekturasi uchun mosroq bo'lgan boshqa xotira menejerini o'rnatdilar. GEM API, shuningdek, execution flowni boshqarish uchun ioctls (command buffer) bilan ta'minlaydi, biroq ular Intel i915 va undan keyingi GPUlar bilan foydalanish uchun Intelga xosdir. Hech bir boshqa DRM drayveri GEM API ning xotira boshqaruviga xos ioctls-dan tashqari biron bir qismini amalga oshirishga urinmagan.

Kernel Mode Setting (KMS)

Kernel Mode Setting (KMS) Linux kerneli grafik stackidagi metod bo'lib, kernelga grafik rejim displeylari bilan bog'liq sozlamalarni boshqarish imkonini beradi. Bu kernelga grafik qurilmalar ustidan toʻliq nazoratni taʼminlovchi texnika boʻlib, flicker-free boot processlari(miltillashsiz yuklash), crash recovery va multi-seat computing kabi qator afzalliklarni beradi.

Image

KMS dan oldin User Mode Setting (UMS) ishlatilgan, bu yerda rejimni sozlash operatsiyalari X serveri tomonidan user spaceda amalga oshirilgan. Biroq, KMS-ga o'tish X serverining endi imtiyozsiz ishlashini anglatadi, bu esa umuman xavfsizroq tizimni ta'minlaydi.

KMSning texnik tomonini yaxshiroq ko'rib chiqamiz

Responsibility of KMS Nomidan ko'rinib turibdiki, rejim sozlamalari(mode setting) monitoringizning piksellar sonini, rang chuqurligini(color depth) va yangilanish tezligini(refresh rate) sozlashdir. KMS shuningdek, matn va grafik konsollar o'rtasida almashinish, bir nechta monitorlarni sozlash va to'xtatib turish(suspend) va davom ettirish hodisalarini boshqarish uchun javobgardir.

DRM/KMS API KMS Linux kernelidagi subsystem(quyi tizim) bo'lgan Direct Rendering Manager (DRM) orqali amalga oshiriladi. Bu user space dasturlari buyruqlar va ma'lumotlarni GPUga yuborish uchun foydalanishi mumkin bo'lgan APIni taqdim etadi. Ushbu API frame bufferlarini yaratish va boshqarish, monitor rejimini o'rnatish va framelar orasidagi smooth transition uchun sahifalarni aylantirish(page flipping) funksiyalarini o'z ichiga oladi.

Image Image

Frame Buffer va Display Controllers: Frame Buffer(Kadr bufer)i display controller tomonidan displeyga yuboriladigan bitmapni o'z ichiga olgan RAMning bir qismidir. KMS user applicationlariga frame bufferlarini yaratish va ular bilan bog'liq event(hodisa)larni boshqarish imkonini beradi. KMS GPUda mavjud bo'lgan CRTCs (Cathode Ray Tube Controllers) yoki display controllerlarini boshqaradi, ular frame buferidan ma'lumotlarni o'qiydi va ularni display hardwarega uzatadi.

Frame Buffer Frame Buffer Frame Buffer Frame Buffer

Atomic Mode Setting An'anaviy KMSga nisbatan yaxshilanish sifatida kiritilgan Atomic Mode Setting - bu displey rejimlarini atomic tarzda yoki bir vaqtning o'zida(all-at-once) sozlash imkonini beruvchi metod. Ilgari, displey rejimini o'rnatish uchun bir nechta IOCTLs (I/O Controls) kerak edi va har bir IOCTL mos kelmaydigan holatlarga olib keladigan muvaffaqiyatsizlik ehtimoli bor edi. Atom rejimini sozlash barcha o'zgarishlarni bir vaqtning o'zida amalga oshirishga ruxsat berish orqali bu muammoni hal qiladi, barqaror va xatosiz rejim sozlamalarini ta'minlaydi.

Boshqa komponentlar bilan o'zaro ta'sir KMS Linux grafik stackining boshqa qismlari, masalan, Mesa (3D grafikalar uchun umumiy interfeysni ta'minlovchi user-space grafik kutubxonasi) va X server yoki Wayland (kirish va oynalarni boshqarish uchun mas'ul) bilan birgalikda ishlaydi.

KMS dan foydalanish va uning davom etayotgan takomillashtirilishi displey miltillashini kamaytirish va zamonaviy grafik hardware va funksiyalarni yaxshiroq qo'llab-quvvatlash orqali Linuxda foydalanuvchi tajribasini sezilarli darajada yaxshiladi.

Graphics Library Layer

Linux displey stacki sifatida ham ma'lum bo'lgan Linux grafik stegi juda murakkab bo'lishi mumkin, ammo bu Linuxning grafik foydalanuvchi interfeyslarini amalga oshirishning muhim qismidir. Graphics Library Layeri ushbu stakning muhim tarkibiy qismidir. Ushbu layer grafik tarkibni yaratish funksiyalarini ta'minlaydigan bir nechta librarylardan iborat. Grafik API umumiy instructionmalar to'plamini GPU bajarishi mumkin bo'lgan aniqroq kodga uchburchak chizish kabi tarjima qilish uchun javobgardir. Shuning uchun, grafik API - bu ishlab chiquvchilarning kodlari GPU bilan qanday bog'lanishining tavsifi. OpenGL, OpenGL ES, Metal, Direct3D va Vulkan kabi bir nechta mashhur grafik API mavjud. Biroq, Linux-dagi grafik stakning aksariyati OpenGL-dan ko'p foydalanadi, chunki u bepul va cross-platformdir.

OpenGL

OpenGL (Open Graphics Library) 2D va 3D vektor grafikalarini renderlash uchun cross-language(tillararo), cross-platform(platformalararo) application programming interface (API). API odatda hardware-accelerated renderinga erishish uchun graphics processing unit (GPU) bilan ishlash uchun ishlatiladi.

Silicon Graphics, Inc. (SGI) 1991 yilda OpenGLni ishlab chiqishni boshladi va uni 1992 yil 30 iyunda chiqardi; ilovalar uni computer-aided design (CAD), virtual reality, ilmiy vizualizatsiya(scientific visualization), axborot vizualizatsiyasi, parvozlarni simulyatsiya qilish va video o'yinlar sohalarida keng qo'llaydi. 2006 yildan beri OpenGL Khronos Group notijorat texnologiya consortium tomonidan boshqariladi.

Tarixi

1980-yillarda keng diapazonli grafik qurilmalar bilan ishlashi mumkin bo'lgan dasturiy ta'minotni ishlab chiqish haqiqiy muammo edi. Dasturiy ta'minot ishlab chiquvchilari har bir uskuna uchun maxsus interfeys va drayverlarni yozdilar. Bu qimmatga tushdi va natijada harakatlar ko'paydi.

1990-yillarning boshlariga kelib, Silicon Graphics (SGI) ish stantsiyalari uchun 3D grafika sohasida yetakchi edi. Ularning IRIS GL API'si sanoat standartiga aylandi, u ochiq standartlarga asoslangan PHIGSga qaraganda kengroq qo'llaniladi. Buning sababi, IRIS GL-dan foydalanish osonroq deb hisoblangan va u darhol rejimni ko'rsatishni qo'llab-quvvatlagan. Aksincha, PHIGS-dan foydalanish qiyin va funksionalligi eskirgan deb hisoblangan.

SGI raqobatchilari (jumladan, Sun Microsystems, Hewlett-Packard(HP) va IBM) PHIGS standartiga kiritilgan kengaytmalar bilan qo'llab-quvvatlanadigan 3D apparatlarini bozorga chiqarishga muvaffaq bo'lishdi, bu esa SGIga IRIS GL versiyasini OpenGL deb nomlangan ommaviy standart sifatida ochishga majbur qildi.

1992 yilda SGI kelajakda OpenGL spetsifikatsiyasini saqlab turadigan va kengaytiradigan kompaniyalar guruhini (OpenGL ARB) yaratishga rahbarlik qildi.

1994 yilda SGI "OpenGL++" deb nomlangan loyihani chiqarish g'oyasi bilan o'ynadi, unga scene-graphi API kabi elementlar kiradi (ehtimol ularning Performer texnologiyasiga asoslangan). Spetsifikatsiya bir nechta manfaatdor tomonlar orasida tarqatildi - lekin hech qachon mahsulotga aylanmadi.

1996 yilda Microsoft Direct3D-ni chiqardi, u oxir-oqibat OpenGLning asosiy raqobatchisiga aylandi. 50 dan ortiq o'yin ishlab chiqaruvchilari Microsoft-ga 1997 yil 12 iyunda e'lon qilingan ochiq xatni imzoladilar va kompaniyani OpenGL-ni faol qo'llab-quvvatlashga chaqirdilar. 1997-yil 17-dekabrda Microsoft va SGI OpenGLva Direct3D interfeyslarini birlashtirish (va scene-graph API-ni qo'shish) maqsadida birgalikdagi sa'y-harakatlar bo'lgan Fahrenheit loyihasini boshladilar. 1998 yilda Hewlett-Packard(HP) loyihaga qo'shildi. Bu dastlab interaktiv 3D kompyuter grafikasi API'lari dunyosiga tartib o'rnatishga va'da berdi, ammo SGI'dagi moliyaviy cheklovlar, Microsoft'dagi strategik sabablar va sanoatni qo'llab-quvvatlashning umumiy etishmasligi tufayli, 1999 yilda tashlab ketilgan.

2006 yil iyul oyida OpenGL Architecture Review Board OpenGL API standarti nazoratini Khronos Groupga topshirish uchun ovoz berdi.

OpenGL spetsifikatsiyasi 2D va 3D grafiklarni chizish uchun abstract APIni tavsiflaydi. API to'liq dasturiy ta'minotda amalga oshirilishi mumkin bo'lsa-da, u asosan yoki butunlay hardwareda amalga oshirilishi uchun mo'ljallangan. API nomli butun son konstantalari to‘plami bilan bir qatorda client dasturi tomonidan chaqirilishi mumkin bo‘lgan funksiyalar to‘plami sifatida aniqlanadi (masalan, 3553 kasr soniga mos keladigan GL_TEXTURE_2D constantasi). Funksiya definitionlari C dasturlash tiliga yuzaki o'xshash bo'lsa-da, ular tildan mustaqildir. Shunday qilib, OpenGL ko'plab tillarni bog'laydi, ulardan ba'zilari JavaScript-ni bog'lovchi WebGL (API, OpenGL ES 2.0 asosida, veb-brauzer ichidan 3D renderlash uchun); C ulanishlari(binding) WGL, GLX va CGL; iOS tomonidan taqdim etilgan C ulanishi; va Android tomonidan taqdim etilgan Java va C ulanishlari. Tildan mustaqil bo'lishdan tashqari, OpenGL ham o'zaro faoliyat platformadir. Spetsifikatsiyada OpenGL kontekstini olish va boshqarish haqida hech narsa aytilmagan va buni asosiy windowing systemining tafsiloti sifatida qoldiradi. Xuddi shu sababga ko'ra, OpenGL faqat renderlash bilan bog'liq bo'lib, kiritish(input), audio yoki windowing(oynalash) bilan bog'liq hech qanday API taqdim etmaydi.

OpenGL endi faol ishlab chiqilmaydi: 2001-2014 yillar orasida OpenGL spetsifikatsiyasi asosan har yili yangilanib turardi, ikkita reliz (3.1 va 3.2) 2009-yilda va uchtasi (3.3, 4.0 va 4.1) 2010-yilda, eng yangi OpenGL. 4.6 spetsifikatsiyasi 2017 yilda uch yillik tanaffusdan so'ng chiqarildi va o'n bitta mavjud ARB va EXT extensionlarini asosiy profilga kiritish bilan cheklandi. OpenGL-ning faol rivojlanishi 2016-yilda chiqarilgan Vulkan API foydasiga to'xtatildi va dastlabki ishlab chiqish vaqtida glNext kod nomini oldi. 2017-yilda Khronos Group OpenGL ESning yangi versiyalari boʻlmasligini eʼlon qildi va shundan beri asosiy eʼtiborni Vulkan va boshqa texnologiyalarni ishlab chiqishga qaratdi. Natijada, zamonaviy GPUlar tomonidan taqdim etilgan muayyan imkoniyatlar, masalan. nurlarni kuzatish OpenGL tomonidan qo'llab-quvvatlanmaydi. OpenGL spetsifikatsiyalarining yangi versiyalari Khronos Group tomonidan chiqariladi, ularning har biri turli xil yangi xususiyatlarni qo'llab-quvvatlash uchun APIni kengaytiradi. Har bir versiyaning tafsilotlari Guruh aʼzolari, jumladan, grafik karta ishlab chiqaruvchilari, operatsion tizim dizaynerlari va Mozilla va Google kabi umumiy texnologiya kompaniyalari oʻrtasida kelishuv orqali hal qilinadi.

Asosiy API tomonidan talab qilinadigan xususiyatlarga qo'shimcha ravishda, graphics processing unit (GPU) ishlab chiqaruvchilari extensionlar shaklida qo'shimcha funksiyalarni taqdim etishi mumkin. Extensionlar yangi funksiyalar va yangi konstantalarni kiritishi va mavjud OpenGL funksiyalaridagi cheklovlarni yumshatishi yoki olib tashlashi mumkin. Sotuvchilar boshqa sotuvchilardan yoki umuman Khronos guruhidan yordam talab qilmasdan maxsus API-larni ochish uchun extensionlardan foydalanishlari mumkin, bu OpenGLning moslashuvchanligini sezilarli darajada oshiradi. Barcha extensionlar OpenGL registrida to'planadi va ular tomonidan belgilanadi

Har bir extension uni ishlab chiqqan kompaniya nomiga asoslangan qisqa identifikator bilan bog'langan. Masalan, Nvidia identifikatori GL_NV_half_float extension nomi, GL_HALF_FLOAT_NV konstantasi va glVertex2hNV() funksiyasining bir qismi bo'lgan NV dir. Agar bir nechta ishlab chiqaruvchilar bir xil API yordamida bir xil funksiyani amalga oshirishga rozi bo'lsa, EXT identifikatoridan foydalangan holda umumiy extension chiqarilishi mumkin. Bunday hollarda, Khronos guruhining arxitekturani ko'rib chiqish kengashi extensionni aniq ma'qullashi mumkin, bu holda ARB identifikatori ishlatiladi.

OpenGL ning har bir yangi versiyasi tomonidan taqdim etilgan xususiyatlar odatda bir nechta keng tarqalgan extensionlarning, ayniqsa ARB yoki EXT tipidagi extensionlarning birlashtirilgan xususiyatlaridan hosil bo'ladi.

Sanoatni qo'llab-quvvatlash

2018-yil iyun oyida Apple o‘zining barcha platformalarida (iOS, macOS va tvOS) OpenGL API’larini bekor qildi, bu esa ishlab chiquvchilarni 2014-yilda taqdim etilgan o‘zlarining xususiy Metal API’laridan foydalanishga undadi.

id Software 1997-yilda chiqarilgan GLQuake (bir necha oʻzgartirishlar bilan Quake portidan OpenGL gacha) bilan boshlangan oʻyinlarida OpenGL-dan foydalanmoqda. Kompaniyaning OpenGL-ni qoʻllab-quvvatlaydigan birinchi litsenziyalangan engine Quake II engine boʻlib, u id Tech 2 nomi bilan ham tanilgan. 2016-yilda, ular OpenGL vorisi Vulkanni qo'llab-quvvatlovchi id Tech 6 uchun yangilanishni chiqardilar. ID Tech 7 OpenGL-ni qo'llab-quvvatlashni bekor qildi.

2023-yil mart oyida Valve OpenGL-ni Dota 2-dan olib tashladi.

Khronos bir qator zamonaviy grafik texnologiyalar uchun OpenGL-da qo'llab-quvvatlashni to'xtatdi, masalan: Ray Tracing, GPU-da video dekodlash, deep learning bilan anti-aliasing algoritmi - AMD FidelityFX Super Resolution(FSR) va Nvidia DLSS.

Atypical Games Samsung koʻmagida oʻz oʻyin mexanizmini Apple boʻlmagan barcha platformalarda OpenGL emas, balki Vulkan ishlatish uchun yangiladi.

Google Stadia va Fuchsia OS Vulkan-dan native grafik API sifatida foydalanadi va Vulkan-mos GPU-larni talab qiladi. Fuchsia ANGLE translation layeri yordamida Vulkan tepasida OpenGL-ni qo'llab-quvvatlamoqchi.

Vulkan

Vulkan - bu 3D grafika va hisoblash uchun ochiq standart bo'lgan, low-overheaddagi, cross-platform API. Bu shaxsiy kompyuterlar va konsollardan tortib mobil telefonlar va embedded platformalargacha bo'lgan keng turdagi qurilmalarda qo'llaniladigan zamonaviy GPU-larga yuqori samarali, platformalararo(cross-platform) kirishni ta'minlaydigan yangi grafik va hisoblash APIsidir. Vulkan video o'yinlar va interaktiv media kabi yuqori samarali real-time rejimida 3D-grafika ilovalari va yuqori darajada parallellashtirilgan hisoblashlarni maqsad qiladi. Vulkan eski OpenGL va Direct3D 11 API-larga nisbatan yuqori mahsuldorlik va samaraliroq CPU va GPU-dan foydalanishni taklif qilish uchun mo'ljallangan. U buni zamonaviy grafik protsessorlar qanday ishlashiga yaqinroq o'xshash eski API-larga qaraganda ilova uchun ancha lower-leveldagi API taqdim etish orqali amalga oshiradi.

Vulkanni Apple'ning Metal API’si va Microsoft’ning Direct3D 12’si bilan solishtirish mumkin va undan foydalanish yuqori darajadagi OpenGL va Direct3D 11 API’lariga qaraganda qiyinroq. Vulkan protsessorni kamroq ishlatishiga qo'shimcha ravishda ishlab chiquvchilarga ishni bir nechta CPU yadrolari(core) o'rtasida yaxshiroq taqsimlash imkonini berish uchun mo'ljallangan. Vulkan birinchi marta GDC 2015 ko'rgazmasida Khronos notijorat guruhi tomonidan e'lon qilingan. Vulkan API dastlab Khronos tomonidan "keyingi avlod OpenGL tashabbusi" yoki "OpenGL next" deb atalgan, ammo "Vulkan" e'lon qilinganida bu nomlardan foydalanish to'xtatilgan. Vulkan AMD tomonidan Khronosga hadya qilingan AMD Mantle API komponentlaridan olingan va ular asosida qurilgan bo'lib, u Khronosga sanoat bo'ylab standartlashtirishi mumkin bo'lgan low-leveldagi APIni ishlab chiqishni boshlash uchun poydevor berish niyatida.

Vulkan boshqa API-larga, shuningdek, o'zidan oldingi OpenGL-ga nisbatan turli afzalliklarni taqdim etishga mo'ljallangan. Vulkan kamroq yuk, GPU ustidan ko'proq to'g'ridan-to'g'ri nazorat va kamroq CPU foydalanishni taklif qiladi. Vulkanning umumiy kontseptsiyasi va xususiyatlari to'plami Mantleda ko'rilgan va keyinchalik Microsoft tomonidan Direct3D 12 va Apple bilan Metall bilan qabul qilingan tushunchalarga o'xshaydi. Vulkanning oldingi avlod API-larga nisbatan afzalliklari quyidagilardan iborat:

Cross platform

Vulkan bir nechta zamonaviy operatsion tizimlarda mavjud.OpenGL kabi va Direct3D 12 dan farqli o'laroq, Vulkan API bitta operatsion tizim yoki qurilma shakli faktoriga qulflanmagan.Vulkan Android, Linux, BSD Unix, QNX, Haiku, Nintendo Switch, Raspberry Pi, Stadia, Fuchsia, Tizen va Windows 7, 8, 10 va 11-da ishlaydi.MoltenVK Apple Metal API-ni o'rash orqali macOS, iOS va tvOS uchun bepul litsenziyalangan uchinchi tomon yordamini taqdim etadi.

Tarixi

Khronos Group keyingi avlod grafik API yaratish loyihasini 2014-yil iyul oyida Valve’da bo‘lib o‘tgan uchrashuv bilan boshladi. SIGGRAPH 2014 ko'rgazmasida loyiha ishtirokchilarni chaqirish bilan ochiq e'lon qilindi. AQSh Patent va savdo belgilari idorasiga ko'ra, Vulkan uchun tovar belgisi 2015 yil 19 fevralda topshirilgan. Vulkan 2015 yilgi O'yinni ishlab chiquvchilar konferentsiyasida rasman nomlandi va e'lon qilindi, garchi yangi API atrofida gaplar va mish-mishlar ilgari mavjud bo'lgan va uni glNext deb atashgan.

Khronos Group 2015-yil mart oyida Vulkan API-ni rasman eʼlon qildi va 2016-yil 16-fevralda Vulkan 1.0-ni rasman chiqardi. Vulkan OpenGL bilan moslikni buzadi va monolit holat mashinasi kontseptsiyasidan butunlay voz kechadi. Gallium3D-ni ishlab chiquvchilari Vulkanni Gallium3D 2.0-ga o'xshash narsa deb atashadi - Gallium3D OpenGL state machineni implement qiladigan kodni hardwarega xos bo'lgan koddan ajratadi.

Image OpenGL va Vulkan ikkalasi ham render API hisoblanadi. Ikkala holatda ham GPU shaderlarni bajaradi, protsessor esa hamma narsani bajaradi.

Mesa

Mesa, shuningdek, Mesa3D va The Mesa 3D Graphics Library deb ataladi, OpenGL, Vulkan va boshqa grafik API spetsifikatsiyalarining open source ilovasi. Mesa ushbu spetsifikatsiyalarni vendor-specific grafik hardware drayverlariga tarjima qiladi. Uning eng muhim foydalanuvchilari asosan Intel va AMD tomonidan o'zlarining tegishli qurilmalari uchun ishlab chiqilgan va moliyalashtirilgan ikkita grafik drayverdir (AMD o'zlarining Mesa drayverlarini Radeon va RadeonSI-ni eskirgan AMD Catalyst orqali targ'ib qiladi va Intel faqat Mesa drayverini qo'llab-quvvatlaydi). Xususiy grafik drayverlar (masalan, Nvidia GeForce drayveri va Catalyst) barcha Mesa-ning o'rnini bosadi va grafik API-ni o'z amalga oshirishini ta'minlaydi. Nouveau deb nomlangan Mesa Nvidia drayverini yozish bo'yicha ochiq manbali harakat asosan hamjamiyat tomonidan ishlab chiqilgan. O'yinlar kabi 3D ilovalardan tashqari, zamonaviy displey serverlari (X.org Glamour yoki Wayland Weston) OpenGL/EGLdan foydalanadi; shuning uchun barcha grafikalar odatda Mesa orqali o'tadi. Mesa freedesktop.org saytida joylashgan va 1993 yil avgust oyida loyihada hali ham faol bo'lgan Brian Paul tomonidan boshlangan. Keyinchalik Mesa keng tarqalgan bo'lib qabul qilindi va hozirda butun dunyo bo'ylab turli shaxslar va korporatsiyalarning, shu jumladan OpenGL spetsifikatsiyasini boshqaruvchi Khronos Group grafik uskunalari ishlab chiqaruvchilarining ko'plab hissalarini o'z ichiga oladi. Linux uchun rivojlanish qisman crowdfunding(bu odatda internet orqali ko'p odamlardan pul yig'ish orqali loyiha yoki korxonani moliyalashtirish amaliyotidir) tomonidan ham amalga oshirildi.

Grafik chipsetlar uchun mavjud bepul va open-source drayverlari Mesa tomonidan "boshqariladi" (chunki mavjud bepul va open-source API ilovalari Mesa ichida ishlab chiqilgan). Hozirgi vaqtda grafik drayverlarni yozish uchun ikkita framework mavjud: "classic" va Gallium3D. Mesa-da mavjud bo'lgan drayverlarning ba'zilari (lekin hammasi emas) haqida umumiy ma'lumot mesamatrix.net (opens in a new tab) saytida berilgan.

Gallium3D

Gallium3D - bu bir nechta operatsion tizimlar, renderlash yoki video acceleration API'lari uchun 3D grafik chipsetlari uchun qurilma drayverlarini dasturlashni osonlashtirish uchun mo'ljallangan interfeyslar to'plami va qo'llab-quvvatlovchi kutubxonalar to'plami. Bu bepul va ochiq manbali grafik qurilma drayverlari dasturi.

Gallium3D-ni ishlab chiqish 2008 yilda Tungsten Graphics-da boshlangan va uni amalga oshirish freedesktop.org saytida joylashgan Mesa 3D-ning bir qismi sifatida bepul va ochiq manbali dasturiy ta'minot sifatida mavjud. Asosiy maqsad drayverlarni ishlab chiqishni osonlashtirish, bir vaqtning o'zida bir nechta turli drayverlarning takrorlangan kodlarini birlashtirish va zamonaviy hardware arxitekturasini qo'llab-quvvatlash. Bu yaxshi mehnat taqsimotini ta'minlash orqali amalga oshiriladi, masalan, xotira boshqaruvini kernel DRI drayveriga qoldirish. Gallium3D 2009-yildan beri Mesa-ning bir qismi bo‘lib, hozirda Nvidia (nouveau loyihasi), AMD R300–R900, Intelning 8+ iGPU-lar uchun Iris drayveri va boshqa bepul va ochiq manbali grafik drayverlari tomonidan qo‘llaniladi.

Gallium3D grafik qurilma drayverini uch qismga bo'lish orqali qurilma drayverlarini dasturlashni osonlashtiradi. Bunga ikkita interfeysni joriy etish orqali erishiladi: Gallium3D State Tracker Interface va Gallium3D WinSys Interface. Uch komponent deyiladi:

Gallium3D State Tracker Qurilma drayveriga murojaat qilinayotgan har bir grafik API oʻzining State Trackerga ega, masalan. OpenGL uchun Gallium3D State Tracker va Direct3D yoki GLX uchun boshqasi mavjud. Har bir State Tracker Gallium3D State Tracker Interface ilovasini o'z ichiga oladi va noyobdir, bu vosita barcha Gallium3D qurilma drayverlari tomonidan baham ko'riladi.

Gallium3D hardware qurilma drayveri

Bu asosiy 3D grafik acceleratorga xos bo'lgan haqiqiy koddir, lekin Gallium3D WinSys interfeysi imkon qadar. Har bir mavjud grafik chip uchun noyob Gallium3D hardware drayverlari mavjud va ularning har biri Gallium3D State Tracker interfeysi hamda Gallium3D WinSys interfeysini amalga oshiradi. Gallium3D hardware qurilmasi drayveri faqat TGSI (Tungsten Graphics Shader Infrastructure), shaderlarni tavsiflash uchun intermediate languageni tushunadi. Ushbu kod GLSL dan TGSI ga tarjima qilingan shaderlarni keyinchalik GPU tomonidan amalga oshirilgan instruction setga tarjima qildi.

Gallium3D WinSys Bu operatsion tizimning asosiy kernelga xos bo'lib, har biri Gallium3D WinSys interfeysini barcha mavjud Gallium3D hardware drayverlari bilan interfeysga tatbiq etadi.

Gallium3D ning asl mualliflari Tungsten Graphics kompaniyasida Keith Whitwell va Brian Paul edi (2008 yilda VMware tomonidan sotib olingan)

Image Mesa /DRI va Gallium3D turli xil drayver modellariga ega. Ikkalasi ham juda ko'p bepul va open-source kodlarga ega

Image Linux Graphics Stack

Mesa kelib chiqishni

Loyiha tashabbuskori Brian Paul grafika ishqibozi edi. U OpenGL API yordamida oddiy 3D grafik kutubxonasini implement qilish qiziqarli bo'ladi, deb o'yladi, keyin u VOGL (very ordinary GL Like Library) o'rniga foydalanishi mumkin edi. 1993-yildan boshlab, u 1995-yil fevralida Internetda dasturiy taʼminotni chiqarishdan oldin oʻn sakkiz oylik yarim kunlik ishlanmani oʻtkazdi. Dasturiy taʼminot yaxshi qabul qilindi va odamlar uning rivojlanishiga hissa qoʻshishni boshladilar. Mesa barcha 3D kompyuter grafikalarini protsessorda ko'rsatish bilan boshlandi. Shunga qaramay, Mesa ichki arxitekturasi graphics processor-accelerated 3D renderlashga ulanish uchun ochiq bo'lishi uchun yaratilgan. Ushbu birinchi bosqichda renderlash bilvosita displey serverida amalga oshirildi, ba'zi bir ortiqcha yuk va sezilarli tezlikni nazariy maksimaldan orqada qoldirdi. Voodoo Graphics chipsetidan foydalangan holda Diamond Monster 3D Mesa tomonidan qo'llab-quvvatlanadigan birinchi 3D hardware qurilmalaridan biri edi.

Birinchi haqiqiy grafik hardware yordami 1997 yilda Mesa-ga o'sha paytdagi yangi 3dfx Voodoo I/II grafik kartalari va ularning vorislari uchun Glide API asosida qo'shilgan. Glide-dan acceleration layeri sifatida foydalanishning asosiy muammosi Glide-ning faqat kompyuter o'yinlari uchun mos bo'lgan to'liq ekranni ishlatish odati edi. Bundan tashqari, Glide ekran xotirasining qulfini oldi va shu tariqa displey serveri boshqa GUI vazifalarini bajarishdan bloklandi.

Biz bu maqolada Linux grafik stacking Graphics Library Layer gacha ko'rib chiqdik qolgani keyingi qismlarda))