Textures flottantes 32 bits filtrables
Les textures 32 bits à virgule flottante sont utilisées pour stocker des données de haute précision, telles que des images HDR et des cartes de profondeur. Ils sont particulièrement importants pour les GPU utilisés dans les applications professionnelles et de jeu haut de gamme.
La prise en charge des textures flottantes 32 bits filtrables décrit la capacité d'un GPU à filtrer des textures 32 bits à virgule flottante. Cela signifie que le GPU peut lisser les bords des textures à virgule flottante, ce qui les rend moins irréguliers. Elle est similaire à l'extension "OES_texture_float_linear" dans WebGL.
Tous les GPU ne sont pas compatibles avec les textures flottantes 32 bits filtrables. Lorsque la fonctionnalité "float32-filterable"
est disponible dans un GPUAdapter
, vous pouvez désormais demander une GPUDevice
avec cette fonctionnalité et filtrer les textures aux formats "r32float", "rg32float" et "rgba32float". Consultez l'exemple suivant et le problème dawn:1664.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-filterable"],
});
// Create a sampler with linear filtering.
const sampler = device.createSampler({
magFilter: "linear",
});
// Create a texture with rgba32float format.
const texture = device.createTexture({
size: [100, 100],
format: "rgba32float",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....
Format des sommets unorm10-10-10-2
Un nouveau format de sommet appelé "unorm10-10-10-2" (ou "rgb10a2") a été ajouté à la spécification WebGPU. Il se compose d'une valeur de 32 bits composée de quatre valeurs entières non signées normalisées, organisées en 10 bits, 10 bits, 10 bits et 2 bits. Consultez l'exemple et le problème dawn:2044 ci-dessous.
// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
{
arrayStride: 0,
attributes: [
{ format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
],
},
];
// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
module: myVertexShaderModule,
entryPoint: "main",
buffers,
};
// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.
format de texture rgb10a2uint
Un nouveau format de texture appelé "rgb10a2uint" a été ajouté à la spécification WebGPU. Il se compose d'un format de pixel 32 bits avec quatre composants entiers non signés: rouge 10 bits, vert 10 bits, bleu 10 bits et alpha 2 bits. Consultez l'exemple suivant et le problème dawn:1936.
// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
size: [100, 100],
format: "rgb10a2uint",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....
Mises à jour de l'aube
Les requêtes d'horodatage permettent aux applications WebGPU de mesurer avec précision (à la nanoseconde près) le temps nécessaire à l'exécution des commandes GPU. La forme d'API permettant de capturer les requêtes d'horodatage au début et à la fin des cartes a été mise à jour pour correspondre à la spécification WebGPU. Consultez l'exemple suivant et le code issue dawn:1800.
// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
.count = 2,
.type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);
wgpu::RenderPassTimestampWrites timestampWrites = {
.querySet = querySet,
.beginningOfPassWriteIndex = 0,
.endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = ×tampWrites};
// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);
Nous n'aborderons ici que certains des points clés. Consultez la liste exhaustive des commits.
Nouveautés de WebGPU
Liste des points abordés dans la série Nouveautés de WebGPU.
Chrome 125
- Sous-groupes (fonctionnalité en cours de développement)
- Effectuer le rendu sur une tranche de texture 3D
- Informations dès l'aube
Chrome 124
- Textures de stockage en lecture seule et en lecture/écriture
- Assistance pour les service workers et les workers partagés
- Nouveaux attributs d'informations sur l'adaptateur
- Corrections de bugs
- Informations dès l'aube
Chrome 123
- Compatibilité des fonctions intégrées DP4a en WGSL
- Paramètres de pointeur non restreints dans WGSL
- Sucre syntaxique pour déréférencer des composites en WGSL
- État en lecture seule distinct pour les aspects du pochoir et de la profondeur
- Informations dès l'aube
Chrome 122
- Élargir la couverture grâce au mode de compatibilité (fonctionnalité en développement)
- Augmenter la limite maxVertexAttributes
- Informations dès l'aube
Chrome 121
- Prendre en charge WebGPU sur Android
- Utiliser DXC au lieu de FXC pour la compilation de nuanceurs sous Windows
- Horodatage des requêtes dans les passes de calcul et de rendu
- Points d'entrée par défaut des modules de nuanceurs
- Prendre en charge display-p3 en tant qu'espace colorimétrique GPUExternalTexture
- Informations sur les segments de mémoire
- Informations dès l'aube
Chrome 120
- Compatibilité avec les valeurs à virgule flottante 16 bits dans WGSL
- Repoussez les limites
- Modifications de l'état du pochoir de profondeur
- Mises à jour des informations concernant l'adaptateur
- Quantification des requêtes d'horodatage
- Fonctionnalités de nettoyage de printemps
Chrome 119
- Textures flottantes 32 bits filtrables
- Format des sommets unorm10-10-10-2
- format de texture rgb10a2uint
- Informations dès l'aube
Chrome 118
- Compatibilité avec HTMLImageElement et ImageData dans
copyExternalImageToTexture()
- Compatibilité expérimentale avec la texture de stockage en lecture/écriture et en lecture seule
- Informations dès l'aube
Chrome 117
- Tampon des sommets non défini
- Groupe de liaisons non défini
- Couper le son des erreurs lors de la création asynchrone d'un pipeline en cas de perte d'un appareil
- Mises à jour apportées à la création du module de nuanceur SPIR-V
- Améliorer l'expérience des développeurs
- Mettre en cache des pipelines avec une mise en page générée automatiquement
- Informations dès l'aube
Chrome 116
- Intégration de WebCodecs
- Appareil perdu renvoyé par GPUAdapter
requestDevice()
- Assurer une lecture vidéo fluide si
importExternalTexture()
est appelé - Conformité aux spécifications
- Améliorer l'expérience des développeurs
- Informations dès l'aube
Chrome 115
- Extensions de langage WGSL compatibles
- Compatibilité expérimentale avec Direct3D 11
- Utiliser un GPU distinct par défaut sur secteur
- Améliorer l'expérience des développeurs
- Informations dès l'aube
Chrome 114
- Optimiser JavaScript
- getCurrentTexture() sur un canevas non configuré génère une erreur InvalidStateError
- Mises à jour WGSL
- Informations dès l'aube