Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

WebGPU

Servon WebGPU-toteutus perustuu wgpu(-core) -kirjastoon, ja se koostuu kahdesta osasta:

  • DOM-toteutus
  • WGPU-toteutus
flowchart LR
    subgraph Sisältöprosessi
        Script[Script-säie]
    end

    subgraph Pääprosessi
        WGPU[WGPU-säie]
        poller[WGPU poller]
        WebRender
        Constellation
    end

    %% init
    Script--RequestAdapter-->Constellation
    Constellation--RequestAdapter/WebRender-->WGPU
    Script--WebGPURequest-->WGPU
    WGPU--Adapter/WebGPU chan-->Script

    %% normal operation
    WGPU--token(), wake()-->poller
    WGPU--Create/Update Image-->WebRender
    WGPU--WebGPUResponse/WebGPUMsg-->Script

DOM-toteutus

DOM-toteutus sijaitsee components/script/dom/webgpu -hakemistossa, ja se toteuttaa JS-rajapinnat, jotka on määritelty WebGPU IDL -tiedostossa ja jotka on altistettu web-alustalle.

Täällä toteutamme vain logiikan, joka on kuvattu WebGPU-spesifikaatiossa content timeline -osiossa. Tämä sisältää pääasiassa JS-tyyppien muuntamisen wgpu-types-kuvauksiksi, jotka lähetetään WGPU-säieelle IPC-viesteillä, jotka on määritelty https://github.com/servo/servo/blob/main/components/shared/webgpu/messages/recv.rs. WebGPU on suunniteltu asynkroniseksi, joten WGPU-säieen operaatioiden valmistumista ei tarvitse odottaa. Tämä tehdään tallentamalla tunnuksia DOM WebGPU -objekteihin, jotka linkittävät WGPU-säieellä eläviin WGPU-objekteihin (joita wgpu-core tarjoaa). Lisätietoa tästä suunnittelusta on saatavilla wgpu-repositoriossa.

WGPU-toteutus

Varsinainen käsittely tapahtuu kahdella omistetulla säieellä pääselainprosessissa: yksi WGPU:lle ja yksi WGPU poller:ille. Nämä säieet käynnistetään laiskasti ensimmäisellä adapter-pyynnöllä.

WGPU-säie toteuttaa device timeline -osiossa määritellyt vaiheet dispatch:amalla wgpu-core-funktioita vastauksena scriptiltä tuleviin IPC-viesteihin. Jotkin kutsut herättävät myös WGPU poller -säieen, joka ajaa tehokkaasti queue timeline -osioita kutsumalla poll_all_devices wgpu-coresta.

WebGPU CTS -odotusten päivittäminen

WebGPU CTS -odotukset ovat valtavia, joten mach update-wpt:n sijaan käytämme moz-webgpu-cts -työkalun forkkia odotusten päivittämiseen.

Odotusten päivittämiseksi sinun täytyy hankkia ajon wptreport-loki joko käynnistämällä täysi CTS-ajo CI:ssä (mach try webgpu) tai ajamalla tiettyjä testejä paikallisesti:

$ mach test-wpt -r --log-wptreport report.json [tests ...]

Huomaa, että odotukset asetetaan release- ja production-käännöksille, koska debug-käännökset ovat liian hitaita. Päivitä odotukset seuraavasti:

$ moz-webgpu-cts --servo process-reports --preset set report.json

Voit myös testata Servoa live CTS:ää vastaan:

$ mach run -r --pref dom.webgpu.enabled 'https://gpuweb.github.io/cts/standalone/?runnow=1&q=<test>'

Tällä hetkellä meillä on useita epävakaita tehtäviä webgpu:shader,execution,expression -kategoriassa, joita seurataan #31397 -issue:ssa. Ne voidaan jättää huomiotta, jos ne ilmestyvät try-ajojesi odottamattomiin tuloksiin.

Työskentely upstream gfx-rs/wgpu -projektissa

Servoa voidaan käyttää wgpu-muutosten testaamiseen WebGPU CTS:ää vasten seuraavasti:

  1. Päivitä wgpu Servon Cargo.toml:ssa uusimpaan committiin (valinnainen, mutta suositeltavaa jos Servo on vanhentunut)
  2. Perusta wgpu-muutoksesi samaan wgpu-committiin, jota Servo käyttää
  3. Päivitä wgpu Servon Cargo.toml:ssa haaraan, jossa muutoksesi ovat
  4. Testaa muutoksesi käynnistämällä täysi CTS-ajo: mach try webgpu
  5. Sisällytä linkki testituloksiin wgpu-pull requestiisi

Lisäresurssit