WebGPU
La API gráfica moderna de la web: adaptador y dispositivo, buffers y bind groups, WGSL a fondo, compute shaders, GPGPU y arquitecturas de render.
00
Nivel 0
5 temas- 01Qué es WebGPU: una API de GPU, no una biblioteca de gráficoshechoen curso
- 02Vulkan, Metal y D3D12: de qué es WebGPU el denominador comúnhechoen curso
- 03El modelo de objetos completo: quién crea a quién y cuánto vivehechoen curso
- 04El mapa del territorio: las cuatro regiones de WebGPUhechoen curso
- 05Dónde encaja WebGPU en la plataforma webhechoen curso
01
Nivel 1
5 temas- 01La máquina de estados global de WebGL y por qué produce bugshechoen curso
- 02La validación en cada llamada: qué comprueba WebGL antes de dibujarhechoen curso
- 03El coste de CPU: por qué el cuello de botella casi nunca es la GPUhechoen curso
- 04La ausencia de compute: cómo se hacía GPGPU en WebGL y qué costabahechoen curso
- 05Qué gana WebGPU: las cuatro decisiones de diseño y su preciohechoen curso
02
Nivel 2
5 temas- 01Anatomía de una GPU: por qué no es una CPU con muchos núcleoshechoen curso
- 02SIMT: por qué tus invocaciones no son hilos independienteshechoen curso
- 03Divergencia: por qué un if puede costar el doblehechoen curso
- 04La jerarquía de memoria y la latencia que no se vehechoen curso
- 05Ocupación: por qué a veces más hilos van más rápidohechoen curso
03
Nivel 3
5 temas- 01navigator.gpu y una detección de soporte que no se rompehechoen curso
- 02requestAdapter: elegir GPU sin poder verlahechoen curso
- 03requestDevice y las features: pedir capacidades sin rompersehechoen curso
- 04Los límites: lo que la especificación garantiza y lo que hay de verdadhechoen curso
- 05device.lost: sobrevivir a que la GPU desaparezcahechoen curso
04
Nivel 4
5 temas- 01getContext webgpu: qué es el contexto y qué no eshechoen curso
- 02configure: los siete campos del descriptor del canvashechoen curso
- 03getPreferredCanvasFormat: por qué existe esta funciónhechoen curso
- 04alphaMode: componer el canvas con el resto de la páginahechoen curso
- 05getCurrentTexture cada frame y el redimensionado que no rompe nadahechoen curso
05
Nivel 5
5 temas- 01createBuffer: reservar memoria en la GPUhechoen curso
- 02Los flags de usage y las combinaciones que la validación rechazahechoen curso
- 03mappedAtCreation: llenar un búfer sin copias intermediashechoen curso
- 04queue.writeBuffer: la escritura de cada fotogramahechoen curso
- 05El modelo de memoria: qué es visible desde dóndehechoen curso
06
Nivel 6
5 temas- 01El módulo de shader: de una cadena de WGSL a código de GPUhechoen curso
- 02El render pipeline: todo el estado gráfico en un objetohechoen curso
- 03El render pass: adjuntos, loadOp y storeOphechoen curso
- 04draw y submit: qué pasa cuando por fin dibujashechoen curso
- 05El triángulo completo: un archivo que puedes copiar y ejecutarhechoen curso
07
Nivel 7
5 temas- 01Grabar en vez de ejecutar: el modelo de comandoshechoen curso
- 02El command encoder y las operaciones fuera de los paseshechoen curso
- 03Los pases como ámbitos: estado que no sale de sus llaveshechoen curso
- 04finish y el GPUCommandBuffer inmutablehechoen curso
- 05La cola: orden total, un solo destino y el coste de cada submithechoen curso
08
Nivel 8
5 temas- 01Por qué leer de la GPU es carohechoen curso
- 02El búfer de staging: por qué hacen falta dos búferes y una copiahechoen curso
- 03mapAsync, getMappedRange y unmap: el ciclo completohechoen curso
- 04onSubmittedWorkDone: qué garantiza y para qué sirve de verdadhechoen curso
- 05Leer sin provocar un parón: el anillo de staging completohechoen curso
09
Nivel 9
5 temas- 01Por qué WebGPU inventó un lenguaje en vez de adoptar SPIR-Vhechoen curso
- 02La estructura de un módulo: directivas, declaraciones y el orden que no importahechoen curso
- 03Puntos de entrada: las tres etapas y las reglas de su firmahechoen curso
- 04El módulo de shader en la API: por qué createShaderModule nunca fallahechoen curso
- 05De GLSL a WGSL: el diccionario y las cinco trampashechoen curso
10
Nivel 10
5 temas- 01Escalares, literales abstractos y el tipo f16hechoen curso
- 02Vectores y matrices: constructores, swizzles y la columna que mandahechoen curso
- 03Arrays y structs: tamaño fijo, tamaño variable y valor cerohechoen curso
- 04Las reglas de disposición del lenguaje: alineación, tamaño y desplazamientohechoen curso
- 05Los seis espacios de dirección y qué se puede hacer en cada unohechoen curso
11
Nivel 11
5 temas- 01El catálogo de atributos de WGSLhechoen curso
- 02@location: un número con tres significados distintoshechoen curso
- 03@group y @binding: las dos coordenadas de un recursohechoen curso
- 04Los builtins de vértice y de fragmentohechoen curso
- 05Los builtins de compute y la aritmética que los relacionahechoen curso
12
Nivel 12
5 temas- 01Funciones: firma, paso por valor y la recursión que no existehechoen curso
- 02let, var, const y override: cuatro palabras, cuatro momentoshechoen curso
- 03Punteros: para qué sirven y las cuatro cosas que no puedes hacer con elloshechoen curso
- 04El control de flujo: loop, continuing y el switch sin fallthroughhechoen curso
- 05El control de flujo uniforme y el análisis que rechaza tu shaderhechoen curso
13
Nivel 13
5 temas- 01Matemáticas y trigonometría: el catálogo y lo que no garantizahechoen curso
- 02Las funciones geométricas: dot, cross, reflect, refract y faceForwardhechoen curso
- 03select, mix, step y smoothstep: escribir sin ramashechoen curso
- 04Bits y empaquetado: meter cuatro canales en un u32hechoen curso
- 05Derivadas y funciones de texturahechoen curso
14
Nivel 14
5 temas- 01El vertex buffer layout: de bytes a @locationhechoen curso
- 02La tabla de formatos de vértice con sus tamañoshechoen curso
- 03stepMode y varios buffers: el instancing por atributoshechoen curso
- 04El index buffer: dos formatos, cinco argumentos y un buffer para todohechoen curso
- 05De clip space al viewport: lo que hace el hardware después de tihechoen curso
15
Nivel 15
5 temas- 01Los tres modos de interpolación: perspective, linear y flathechoen curso
- 02center, centroid y sample: dónde se evalúa la interpolaciónhechoen curso
- 03Múltiples render targets: escribir a varios attachments a la vezhechoen curso
- 04frag_depth y discard: las dos formas de romper el early-zhechoen curso
- 05El coste real del fragment shaderhechoen curso
16
Nivel 16
5 temas- 01Las override constants: una constante que se decide al crear el pipelinehechoen curso
- 02El diccionario constants: dar valores al crear el pipelinehechoen curso
- 03Compilar variantes sin duplicar el shaderhechoen curso
- 04override frente a const: qué puede hacer cada unohechoen curso
- 05Configuración por pipeline o por uniform: cómo decidirhechoen curso
17
Nivel 17
5 temas- 01Por qué WebGPU agrupa recursos en vez de bindearlos uno a unohechoen curso
- 02GPUBindGroupLayout: el contrato entre el shader y la APIhechoen curso
- 03GPUBindGroup: rellenar el contrato con recursos concretoshechoen curso
- 04GPUPipelineLayout y la correspondencia con @grouphechoen curso
- 05El modo auto: qué hace, qué ahorra y por qué acaba estorbandohechoen curso
18
Nivel 18
5 temas- 01Organizar los bind groups por frecuencia de cambiohechoen curso
- 02Los cuatro grupos de un renderer que escalahechoen curso
- 03Compartir el pipeline layout para reutilizar bind groupshechoen curso
- 04El coste real de setBindGroup y cómo medirlohechoen curso
- 05Ordenar el bucle de dibujado por estadohechoen curso
19
Nivel 19
5 temas- 01El uniform buffer: qué es, qué límites tiene y cuándo no sirvehechoen curso
- 02Las reglas de alineación de WGSL, con la tabla completahechoen curso
- 03El padding implícito, el explícito y las reglas extra del espacio uniformhechoen curso
- 04Dynamic offsets: un buffer para miles de objetoshechoen curso
- 05Dejar de calcular offsets a manohechoen curso
20
Nivel 20
5 temas- 01Storage frente a uniform: límites, layout y modos de accesohechoen curso
- 02read y read_write: los modos de acceso de un storage bufferhechoen curso
- 03Arrays de tamaño en tiempo de ejecución y arrayLength()hechoen curso
- 04El patrón de doble buffer para simulacioneshechoen curso
- 05Cuándo un storage buffer gana al uniformhechoen curso
21
Nivel 21
5 temas- 01createTexture: el descriptor completo, campo a campohechoen curso
- 02Subir datos: writeTexture y copyExternalImageToTexturehechoen curso
- 03createView: por qué el shader nunca ve una texturahechoen curso
- 04La tabla de formatos: renderizable, filtrable, storagehechoen curso
- 05El sampler: filtros, modos de dirección y comparaciónhechoen curso
22
Nivel 22
5 temas- 01Generar mipmaps a mano: WebGPU no los genera soloshechoen curso
- 02Texture arrays: muchas texturas en un solo bindinghechoen curso
- 03Cubemaps: seis caras, un vector de direcciónhechoen curso
- 04Texturas 3D: volúmenes, LUTs y nieblahechoen curso
- 05Formatos comprimidos: BC, ETC2, ASTC y cuál pedirhechoen curso
23
Nivel 23
5 temas- 01Qué es una storage texture y en qué se diferencia de una normalhechoen curso
- 02textureStore y las funciones de acceso directohechoen curso
- 03Los formatos permitidos: la lista corta que hay que sabersehechoen curso
- 04write, read y read_write: los tres modos de accesohechoen curso
- 05Storage texture o storage buffer: el criterio realhechoen curso
24
Nivel 24
5 temas- 01El descriptor del render pipeline: el mapa de los seis bloqueshechoen curso
- 02Los bloques vertex y fragment: buffers, targets y blendinghechoen curso
- 03El bloque primitive: topología, orientación y descartehechoen curso
- 04Los bloques depthStencil y multisamplehechoen curso
- 05El coste de crear un pipeline y cómo no pagarlo en mitad del framehechoen curso
25
Nivel 25
5 temas- 01El depth buffer: qué guarda, en qué formato y quién lo declarahechoen curso
- 02Las ocho funciones de comparación y qué escena pide cada unahechoen curso
- 03Early-Z: la optimización invisible y las tres cosas que la desactivanhechoen curso
- 04Reversed-Z: por qué invertir el rango resuelve el z-fighting de raízhechoen curso
- 05Depth bias y el búfer de estarcidohechoen curso
26
Nivel 26
5 temas- 01La ecuación de mezcla: cinco operaciones y diecisiete factoreshechoen curso
- 02Alfa premultiplicado y el halo oscuro que no debería estar ahíhechoen curso
- 03Por qué ordenar no resuelve la transparenciahechoen curso
- 04OIT: weighted blended, depth peeling y listas por píxelhechoen curso
- 05Dithering estocástico y el árbol de decisión de la transparenciahechoen curso
27
Nivel 27
5 temas- 01Renderizar a textura: la misma máquina apuntando a otro sitiohechoen curso
- 02Varios attachments de color y su correspondencia con los @locationhechoen curso
- 03loadOp y storeOp: por qué clear es más barato que loadhechoen curso
- 04Elegir formato y tamaño de un render targethechoen curso
- 05Encadenar passes: la salida de uno como entrada del siguientehechoen curso
28
Nivel 28
5 temas- 01MSAA frente a supersampling: dónde está exactamente el ahorrohechoen curso
- 02La textura multimuestreada, el resolveTarget y las cuatro coherenciashechoen curso
- 03El coste real del multimuestreo: memoria, ancho de banda y densidad de triánguloshechoen curso
- 04Lo que el multimuestreo no arregla: textura, especular y siluetashechoen curso
- 05FXAA, SMAA y TAA: las tres alternativas de post-procesohechoen curso
29
Nivel 29
5 temas- 01El parámetro de instancias de draw y drawIndexedhechoen curso
- 02La disposición exacta del buffer de argumentos indirectoshechoen curso
- 03Generar los comandos de dibujo desde un compute shaderhechoen curso
- 04Depurar un dibujo indirecto que no dibuja nadahechoen curso
- 05multiDrawIndirect: qué es, qué resolvería y en qué estado estáhechoen curso
30
Nivel 30
5 temas- 01Qué es un render bundle y qué problema resuelvehechoen curso
- 02Qué se puede grabar en un bundle y qué nohechoen curso
- 03Cuándo un bundle ayuda de verdad y cuándo no cambia nadahechoen curso
- 04Bundles inmutables en escenas que cambianhechoen curso
- 05Medir si un bundle merece la pena en lugar de suponerlohechoen curso
31
Nivel 31
5 temas- 01El compute pass: del pipeline al dispatchhechoen curso
- 02La jerarquía de identificadores de una invocaciónhechoen curso
- 03@workgroup_size y los límites de la especificaciónhechoen curso
- 04Elegir el tamaño de workgroup con criteriohechoen curso
- 05Mapear el dominio: el guardia, el techo y el dispatch indirectohechoen curso
32
Nivel 32
5 temas- 01La memoria compartida del workgrouphechoen curso
- 02workgroupBarrier y storageBarrier: qué garantiza cada unahechoen curso
- 03Condiciones de carrera dentro de un workgrouphechoen curso
- 04La frontera entre workgroups: la restricción que lo condiciona todohechoen curso
- 05Operaciones atómicas en WGSLhechoen curso
37
Nivel 37
5 temas39
Nivel 39
5 temas41
Nivel 41
5 temas- 01Cómo se distribuyen los floats: el escalón crece con la magnitudhechoen curso
- 02Precisión en GPU frente a CPU: por qué el mismo cálculo da otro resultadohechoen curso
- 03El problema de las escalas grandes: cuando el mundo tiemblahechoen curso
- 04Coordenadas relativas a cámara: que ningún número grande llegue al shaderhechoen curso
- 05Depurar un NaN que se propagahechoen curso
42
Nivel 42
5 temas- 01Timestamp queries: la única medida real de la GPUhechoen curso
- 02El perfil por pass: un perfilador que puedes dejar encendidohechoen curso
- 03Occlusion queries: preguntar si algo se ve, y llegar tardehechoen curso
- 04El reloj de CPU y el de GPU: dos dominios que no se restanhechoen curso
- 05Cómputo o memoria: los tres experimentos que lo decidenhechoen curso
44
Nivel 44
5 temas- 01Error scopes: acotar el fallo en un API que casi nunca lanzahechoen curso
- 02Dispositivo perdido y uncapturederror: las dos redes globaleshechoen curso
- 03label: la propiedad que convierte un mensaje inútil en un diagnósticohechoen curso
- 04Qué comprueba la validación y qué sigue siendo tu problemahechoen curso
- 05El utillaje real: consola, volcados y capturadores nativoshechoen curso
46
Nivel 46
5 temas