Mozilla Firefoxто WebGPU API жана WGSL (WebGPU Shading Language) колдоосун иштетүүнү чечти. Платформа үчүн Windows WebGPU колдоосу Firefox 141де 22-июлга пландаштырылган демейки шартта иштетилет. Андан кийин WebGPU колдоосу кийинки айларда курулмаларда иштетилет деп пландаштырылууда: Linux и macOS, жана платформа үчүн версиясында бир аз убакыт өткөндөн кийин AndroidWebGPU'ну кол менен иштетүү үчүн, about:config барагындагы "dom.webgpu.enabled" жана "gfx.webrender.all" параметрлерин колдонсоңуз болот.
Chrome'до WebGPU колдоосу демейки боюнча 113-жылдын май айында чыккан 2023-версиясында сунушталган. Safariде WebGPU колдоосу демейки боюнча ушул күздө иштетилет (эксперименталдык колдоо 2021-жылдын ноябрынан бери жеткиликтүү). Firefox'то, эксперименталдык WebGPU колдоосу 2020-жылдан бери бар, бирок Firefoxтун түнкү түзүмдөрүндө демейки боюнча гана иштетилген. Firefox'тун WebGPU ишке ашыруусу Rust тилинде жазылган жана Direct3D 12, Vulkan, OpenGL жана Металл графикасынын API'леринин үстүндө иштөөгө жөндөмдүү WGPU долбоорунун кодуна негизделген.
WebGPU GPU тарабында операцияларды аткаруу үчүн Vulkan, Metal жана Direct3D 12ге окшош API менен камсыз кылат. 3D графикасынан тышкары, WebGPU ошондой эле GPU тарабына эсептөөлөрдү түшүрүүгө жана шейдерлерди аткарууга байланыштуу мүмкүнчүлүктөрдү камтыйт. Концептуалдык жактан алганда, WebGPU эски WebGL спецификациясынан Vulkan графикалык API OpenGLден айырмалангандай эле айырмаланат. Ошол эле учурда, WebGPU белгилүү бир графикалык API'ге негизделбейт, бирок Vulkan, Metal жана Direct3Dде бар ошол эле төмөн деңгээлдеги примитивдерди колдонгон универсалдуу катмар.
WebGPU JavaScript тиркемелерин GPUга буйруктарды уюштурууну, иштетүүнү жана өткөрүп берүүнү көзөмөлдөөгө жана байланышкан ресурстарды, эстутумду, буферлерди, текстура объекттерин жана компиляцияланган графикалык шейдерлерди башкарууга мүмкүнчүлүк берет. Бул ыкма кошумча чыгымдарды азайтуу жана GPU менен иштөөнүн натыйжалуулугун жогорулатуу аркылуу графикалык тиркемелерди жогорку аткарууга мүмкүндүк берет.
WebGPU менен сиз Vulkan, Metal же Direct3D түздөн-түз колдонгон өз алдынча программалар менен бирге платформа-агностикалык, татаал 3D долбоорлорду түзө аласыз. WebGPU ошондой эле WebAssembly компиляциясынын аркасында жергиликтүү графикалык программаларды браузерлерде иштей турган формага өткөрүү үчүн кошумча мүмкүнчүлүктөрдү камсыз кылат.
WebGPU негизги өзгөчөлүктөрү жана WebGL айырмачылыктары:
- Ресурстарды өзүнчө башкаруу, даярдык иштери жана GPUге буйруктарды берүү (WebGLде бир объект бир эле учурда бардыгы үчүн жооптуу болгон). Үч өзүнчө контекст берилген: текстуралар жана буферлер сыяктуу ресурстарды түзүү үчүн GPUDevice; GPUCommandEncoder жеке буйруктарды, анын ичинде көрсөтүү жана эсептөө этаптарын коддоо үчүн; GPUCommandBuffer GPUде аткаруу үчүн кезекке коюлат. Натыйжа бир же бир нече кенеп элементтери менен байланышкан аймакта көрсөтүлүшү мүмкүн, же чыгарылбастан иштетилет (мисалы, эсептөө тапшырмаларын аткарып жатканда). Этаптарды бөлүү ресурстарды түзүү жана даярдоо операцияларын ар кандай жиптерде иштей турган ар кандай иштеткичтерге бөлүүнү жеңилдетет.
- Иштетүү мамлекеттерине башкача мамиле. WebGPU эки объектти сунуштайт - GPURenderPipeline жана GPUComputePipeline, алар иштеп чыгуучу тарабынан алдын ала аныкталган ар кандай абалдарды бириктирүүгө мүмкүндүк берет, бул браузерге шейдерлерди кайра компиляциялоо сыяктуу кошумча жумуштарга ресурстарды текке кетирбөөгө мүмкүндүк берет. Колдоого алынган мамлекеттерге төмөнкүлөр кирет: шейдерлер, чоку буфер жана атрибут макеттери, жабышчаак топ макеттери, аралаштыруу, тереңдик жана үлгүлөр, жана рендерден кийинки чыгаруу форматтары.
- Вулкандын ресурстарды топтоо өзгөчөлүктөрүнө окшош болгон милдеттүү модель. Ресурстарды чогуу топтош үчүн, WebGPU GPUBindGroup объектисин берет, ал буйруктарды жазып жатканда шейдерлерде колдонуу үчүн башка ушул сыяктуу объекттер менен байланыштыра алат. Мындай топторду түзүү драйверге алдын ала керектүү даярдык аракеттерин жасоого мүмкүндүк берет жана браузерге тартуу чалууларынын ортосундагы ресурстук байланыштарды тезирээк өзгөртүүгө мүмкүндүк берет. Ресурстук байланыштардын схемасын GPUBindGroupLayout объектисинин жардамы менен алдын ала аныктоого болот.
Source: opennet.ru
