006 Métodos
006.6 Gráficos
006.68 Software

2.3 Componentes API WebGPU

Antes de continuar con los ejemplos de codificación, vale la pena tomarse un tiempo para revisar rápidamente algunos de los componentes clave que conforman la API (por ejemplo, la canalización, los búferes y los grupos de enlaces). Estos se muestran en la Figura 2.3.

2.3.1 Buffers

Los buffers son bloques de memoria de administración en la GPU (usados ​​para operaciones/sombreadores/canalización de la GPU). Todos los datos, datos de vértices, estructuras de control y uniformes para los sombreadores deben crearse de modo que sean accesibles en la GPU (es decir, GPUBuffer). Cuando crea el búfer, define su tamaño y usos (permisos de acceso), luego puede copiar datos predefinidos o usarlos para almacenar/recibir datos.

2.3.2 Grupos vinculantes (Binding Groups)

Los grupos de enlace son el pegamento que conecta los sombreadores, los buffers, las texturas y el pipeline (garantizan la consistencia entre tamaños/estructuras/formatos).

2.3.3 Módulos sombreadores (Shader Modules)

Los sombreadores se escriben en un formato de texto legible para humanos (lenguaje WGSL). Estos sombreadores se compilan en lenguaje de máquina para la GPU (los módulos de sombreador administran la conversión, los detalles y los controladores de los binarios de sombreador).

2.3.4 Colas (Queues)

Las colas en WebGPU son los “puntos de ejecución” para las GPU. Cada GPU tiene varias colas disponibles, e incluso puedes usarlas al mismo tiempo para ejecutar diferentes secuencias de comandos. Los comandos enviados a colas separadas pueden ejecutarse a la vez. Esto es muy útil si estás haciendo un trabajo en segundo plano que no se corresponde exactamente con el bucle del marco principal. Puedes crear colas específicamente para el trabajo en segundo plano y tenerlas separadas entre sí (por ejemplo, renderizado fuera de la pantalla o simulaciones de computación en segundo plano).

2.3.5 Texturas (Vistas de texturas)

Las texturas vienen en una variedad de formatos (1d/2d/3d/cubo) y se pueden usar en varios contextos/diseños (múltiples resoluciones/mipmaps). Por lo tanto, las texturas se almacenan de manera diferente a los datos de búfer sin procesar. Las vistas de textura son un medio para administrar el control de acceso a los datos de textura (acceder a los datos de textura mediante una vista de textura).

2.3.6 Muestreadores (Samplers)

Los samplers WebGPU codifican transformaciones e información de filtrado que se puede utilizar en un shader para interpretar los datos de recursos de textura. Básicamente, el sampler determina cómo se interpreta la información de la textura. En el shader, normalmente se accede a las texturas a través de samplers, que aplicarán filtros y transformaciones para calcular el color final que se recupera.

2.3.7 Búfers de comandos (Command Buffers)

Todos los comandos para la GPU se graban en un búfer de comandos. Todas las funciones que ejecutarán el trabajo de la GPU no harán nada hasta que el búfer de comandos se envíe a la GPU (los comandos se almacenan en búferes y se colocan en colas para que la GPU los procese).

2.3.8 Tuberías (Pipelines)

Una tubería de renderizado (GPURenderPipeline) Se compone de las siguientes etapas de renderizado:

  1. Vertex fetch, controlado por GPUVertexState.buffers
  2. Vertex shader, controlado por GPUVertexState
  3. Primitive assembly, controlado por GPUPrimitiveState
  4. Rasterization, controlado por GPUPrimitiveState, GPUDepthStencilState, and GPUMultisampleState
  5. Fragment shader, controlado por GPUFragmentState
  6. Stencil test and operation, controlado por GPUDepthStencilState
  7. Depth test and write, controlado por GPUDepthStencilState
  8. Output merging, controlado por GPUFragmentState.targets

Una secuencia de procesamiento (GPUComputePipeline) consta de una única etapa:

  1. Calcular sombreador (Compute shader)

2.3.9 Pases (Passes)

La representación (u operación de cálculo) se lleva a cabo durante un “Pase” (ya sea un pase de representación o un pase de cálculo). Los detalles del mismo se describen mediante una “estructura de descriptor”. GPURenderPassDescriptor/GPUComputePassDescriptor. El descriptor del pase detalla información sobre los enlaces y la salida de los sombreadores.