@@ -5,10 +5,10 @@ utilisée.
5
5
6
6
## Origine de Vulkan
7
7
8
- Comme les APIs précédents , Vulkan est conçue comme une abstraction des
8
+ Comme les APIs précédentes , Vulkan est conçue comme une abstraction des
9
9
[ GPUs] ( https://en.wikipedia.org/wiki/Graphics_processing_unit ) . Le problème avec la plupart de ces APIs est qu'elles
10
10
furent créées à une époque où le hardware graphique était limité à des fonctionnalités prédéfinies tout juste
11
- configurables. Les développeurs devaient fournir les vertices dans un format standardisé, et étaient ainsi à la merci
11
+ configurables. Les développeurs devaient fournir les sommets dans un format standardisé, et étaient ainsi à la merci
12
12
des constructeurs pour les options d'éclairage et les jeux d'ombre.
13
13
14
14
Au fur et à mesure que les cartes graphiques progressèrent, elles offrirent de plus en plus de fonctionnalités
@@ -24,7 +24,7 @@ multithreading, menant à des goulot d'étranglement du coté du CPU. Au-delà d
24
24
été témoin de l’arrivée de matériel mobile. Ces GPUs portables ont des architectures différentes qui prennent en compte
25
25
des contraintes spatiales ou énergétiques.
26
26
27
- Vulkan résout ces problèmes en ayant été repensée à partir de rien pour des architectures modernes. Il réduit le travail
27
+ Vulkan résout ces problèmes en ayant été repensée à partir de rien pour des architectures modernes. Elle réduit le travail
28
28
du driver en permettant (en fait en demandant) au développeur d’expliciter ses objectifs en passant par une API plus
29
29
prolixe. Elle permet à plusieurs threads d’invoquer des commandes de manière asynchrone. Elle supprime les différences lors
30
30
de la compilation des shaders en imposant un format en bytecode compilé par un compilateur officiel. Enfin, elle
@@ -39,9 +39,9 @@ simplement de vous donner une vue d’ensemble afin d’y replacer tous les él
39
39
40
40
### Étape 1 - Instance et sélection d’un Physical Device
41
41
42
- Une application commence par paramétrer l’API à l’aide d’une «` VkInstance ` ». Une instance est crée en décrivant votre
42
+ Une application commence par paramétrer l’API à l’aide d’une «` VkInstance ` ». Une instance est créée en décrivant votre
43
43
application et les extensions que vous comptez utiliser. Après avoir créé votre ` VkInstance ` , vous pouvez demander l’accès
44
- à du hardware compatible avec Vulkan, et ainsi sélectionner un ou plusieurs «VkPhysicalDevice» pour y réaliser vos
44
+ à du hardware compatible avec Vulkan, et ainsi sélectionner un ou plusieurs «` VkPhysicalDevice ` » pour y réaliser vos
45
45
opérations. Vous pouvez traiter des informations telles que la taille de la VRAM ou des capacités de la carte graphique,
46
46
et ainsi préférer par exemple du matériel dédié.
47
47
@@ -50,7 +50,7 @@ et ainsi préférer par exemple du matériel dédié.
50
50
Après avoir séléctionné le hardware qui vous convient, vous devez créer un «` VkDevice ` » (logical device). Vous décrivez
51
51
pour cela quelles ` VkPhysicalDeviceFeatures ` vous utiliserez, comme l’affichage multi-fenêtre ou des floats de 64 bits.
52
52
Vous devrez également spécifier quelles ` vkQueueFamilies ` vous utiliserez. La plupart des opérations, comme les
53
- commandes d’affichage et les allocations de mémoire, sont exécutés de manière asynchrone en les envoyant à une VkQueue.
53
+ commandes d’affichage et les allocations de mémoire, sont exécutés de manière asynchrone en les envoyant à une ` VkQueue ` .
54
54
Ces queues sont crées à partir d’une famille de queues, chacune de ces dernières supportant uniquement une certaine
55
55
collection d’opérations. Il pourrait par exemple y avoir des familles différentes pour les graphismes, le calcul et les
56
56
opérations mémoire. L’existence d’une famille peut aussi être un critère pour la sélection d’un physical
@@ -78,7 +78,7 @@ d’assurer que l’image sur laquelle nous travaillons n’est pas celle utilis
78
78
l’image affichée est complète. Chaque fois que nous voudrons afficher une image nous devrons demander à la swap chain de
79
79
nous fournir une cible disponible. Une fois le traitement de la cible terminé, nous la rendrons à la swap chain qui
80
80
l’utilisera en temps voulu pour l’affichage à l’écran. Le nombre de cibles et les conditions de leur affichage dépend
81
- du mode utilisé lors du paramétrage de la swap chain . Ceux-ci peuvent être le double buffering (synchronisation verticale)
81
+ du mode utilisé lors du paramétrage de la Swap Chain . Ceux-ci peuvent être le double buffering (synchronisation verticale)
82
82
ou le triple buffering. Nous détaillerons tout cela dans le chapitre dédié à la Swap Chain.
83
83
84
84
### Étape 4 - Image Views et Framebuffers
@@ -91,7 +91,7 @@ Framebuffers pour chacune d’entre elles, puis sélectionnerons celle qui nous
91
91
92
92
### Étape 5 - Render Passes
93
93
94
- Avec Vulkan, une Render Pass décrit le type d’images utilisées lors du rendu, comment elles sont utilisées et
94
+ Avec Vulkan, une Render Pass décrit les types d’images utilisées lors du rendu, comment elles sont utilisées et
95
95
comment leur contenu doit être traité. Pour notre affichage d’un triangle, nous dirons à Vulkan que nous utilisons une
96
96
seule image pour la couleur et que nous voulons qu’elle soit préparée avant l’affichage en la remplissant d’une couleur
97
97
opaque. Là où la passe décrit le type d’images utilisées, un Framebuffer sert à lier les emplacements utilisés par la
@@ -105,7 +105,7 @@ programmables à l’aide de `VkShaderModules`. Ces derniers sont créés à par
105
105
informé des cibles du rendu utilisées dans le pipeline, ce que nous lui disons en référençant la render pass.
106
106
107
107
L’une des particularités les plus importantes de Vulkan est que la quasi totalité de la configuration des étapes doit
108
- être réalisée à l’avance. Cela implique que si vous voulez changer un shader ou la conformation des vertices , la
108
+ être réalisée à l’avance. Cela implique que si vous voulez changer un shader ou la conformation des sommets , la
109
109
totalité du pipeline doit être recréée. Vous aurez donc probablement de nombreux ` VkPipeline ` correspondant à toutes
110
110
les combinaisons dont votre programme aura besoin. Seules quelques configurations basiques peuvent être changées de
111
111
manière dynamique, comme la couleur de fond. Les états doivent aussi être anticipés : il n’y a par exemple pas de
@@ -124,17 +124,17 @@ opérations suivantes :
124
124
125
125
* Lancer la Render Pass
126
126
* Lier le pipeline graphique
127
- * Afficher 3 vertices
127
+ * Afficher 3 sommets
128
128
* Terminer la passe
129
129
130
- Du fait que l’image que nous avons extrait du framebuffer pour s’ en servir comme cible dépend de l’image que la swap
130
+ Du fait que l’image que nous avons extraite du framebuffer pour nous en servir comme cible dépend de l’image que la swap
131
131
chain nous fournira, nous devons préparer un command buffer pour chaque image possible et choisir le bon au moment de
132
- l’affichage. Nous pourrions en créer un à chaque frame mais ce serait peu efficace.
132
+ l’affichage. Nous pourrions en créer un à chaque frame mais ce ne serait pas aussi efficace.
133
133
134
134
### Étape 8 - Boucle principale
135
135
136
136
Maintenant que nous avons inscrit les commandes graphiques dans des Command Buffers, la boucle principale n’est qu’une
137
- histoire d’appels. Nous acquérerons d’abord une image de la Swap Chain en utilisant ` vkAcquireNextImageKHR ` . Nous
137
+ histoire d’appels. Nous acquérons d’abord une image de la Swap Chain en utilisant ` vkAcquireNextImageKHR ` . Nous
138
138
sélectionnons ensuite le command buffer approprié pour cette image et le postons à la queue avec vkQueueSubmit. Enfin,
139
139
nous retournons l’image à la Swap Chain pour sa présentation à l’écran à l’aide de ` vkQueuePresentKHR ` .
140
140
@@ -150,7 +150,7 @@ Ce tour devrait vous donner une compréhension basique du travail que nous auron
150
150
triangle. Un véritable programme contient plus d’étapes comme allouer des vertex Buffers, créer des Uniform Buffers et
151
151
envoyer des textures, mais nous verrons cela dans des chapitres suivants. Nous allons commencer par les bases car Vulkan
152
152
a suffisamment d’étapes ainsi. Notez que nous allons ‘tricher’ en écrivant les coordonnées du triangle directement dans
153
- un shader, afin d’éviter l’utilisation d’un vertex buffer qui nécessitent une certaine familiarité avec les Command
153
+ un shader, afin d’éviter l’utilisation d’un vertex buffer qui nécessite une certaine familiarité avec les Command
154
154
Buffers.
155
155
156
156
En résumé nous devrons, pour afficher un triangle :
@@ -167,7 +167,7 @@ En résumé nous devrons, pour afficher un triangle :
167
167
* Dessiner sur les Frames en acquérant une image, en soumettant la commande d’affichage correspondante et en retournant
168
168
l’image à la Swap Chain
169
169
170
- Cela fait beaucoup d’étapes, cependant le but de chacune d’entre elles sera explicité clairement et simplement dans les
170
+ Cela fait beaucoup d’étapes, cependant le but de chacune d’entre elles sera explicitée clairement et simplement dans les
171
171
chapitres suivants. Si vous êtes confus quant à l’intérêt d’une étape dans le programme entier, référez-vous à ce
172
172
premier chapitre.
173
173
0 commit comments