summaryrefslogtreecommitdiffstats
path: root/docs/design/capabilities.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/design/capabilities.md')
-rw-r--r--docs/design/capabilities.md14
1 files changed, 7 insertions, 7 deletions
diff --git a/docs/design/capabilities.md b/docs/design/capabilities.md
index a4f4fa396..b4bd4c099 100644
--- a/docs/design/capabilities.md
+++ b/docs/design/capabilities.md
@@ -31,7 +31,7 @@ struct Texture2D
{
...
- // Implicit-graident sampling operation.
+ // Implicit-gradient sampling operation.
[availableFor(implicit_gradient_texture_fetches)]
float4 Sample(SamplerState s, float2 uv);
}
@@ -54,7 +54,7 @@ capability fragment : implicit_gradient_texture_fetches;
Here we've said that whenever the `fragment` capability is available, we can safely assume that the `implicit_gradient_texture_fetches` capability is available (but not vice versa).
-Given even a rudientary tool like that, we can start to build up capabilities that relate closely to the "profiles" in things like D3D:
+Given even a rudimentary tool like that, we can start to build up capabilities that relate closely to the "profiles" in things like D3D:
```
capability d3d;
@@ -77,12 +77,12 @@ capability opengl : khronos;
Here we are saying that `sm_5_1` supports everything `sm_5_0` supports, and potentially more. We are saying that `d3d12` supports `sm_6_0` but maybe not, e.g., `sm_6_3`.
We are expressing that fact that having a `glsl_*` capability means you are on some Khronos API target, but that it doesn't specify which one.
-(The extact details of these declarations obviously aren't the point; getting a good hierarchy of capabilites will take time.)
+(The exact details of these declarations obviously aren't the point; getting a good hierarchy of capabilities will take time.)
Capability Composition
----------------------
-Sometimes we'll want to give a distinct name to a specific combination of capabilties, but not say that it supports anything new:
+Sometimes we'll want to give a distinct name to a specific combination of capabilities, but not say that it supports anything new:
```
capability ps_5_1 = sm_5_1 & fragment;
@@ -129,7 +129,7 @@ For a given function definition `F`, the front end will scan its body and see wh
If `F` doesn't have an `[availableFor(...)]` attribute, then we can derive its *effective* `[availableFor(...)]` capability as `R` (this probably needs to be expressed as an iterative dataflow problem over the call graph, to handle cycles).
-If `F` *does* have one or more `[availabelFor(...)]` clauses that amount to a declared capability `C` (again in disjunctive normal form), then we can check that `C` implies `R` and error out if it is not the case.
+If `F` *does* have one or more `[availableFor(...)]` clauses that amount to a declared capability `C` (again in disjunctive normal form), then we can check that `C` implies `R` and error out if it is not the case.
A reasonable implementation would track which calls introduced which requirements, and be able to explain *why* `C` does not capture the stated requirements.
For a shader entry point, we should check it as if it had an `[availableFor(...)]` that is the OR of all the specified target profiles (e.g., `sm_5_0 | glsl_450 | ...`) ANDed with the specified stage (e.g., `fragment`).
@@ -152,7 +152,7 @@ It should be possible to define multiple versions of a function, having differen
```
For front-end checking, these should be treated as if they were a single definition of `myFunc` with an ORed capability (e.g., `vulkan | d3d12`).
-Overload resoultion will pick the "best" candidate at a call site based *only* on the signatures of the function (note that this differs greatly from how profile-specific function overloading works in Cg).
+Overload resolution will pick the "best" candidate at a call site based *only* on the signatures of the function (note that this differs greatly from how profile-specific function overloading works in Cg).
The front-end will then generate initial IR code for each definition of `myFunc`.
Each of the IR functions will have the *same* mangled name, but different bodies, and each will have appropriate IR decorations to indicate the capabilities it requires.
@@ -213,7 +213,7 @@ Certain compositions of capabilities make no sense. If a user declared a functio
Knowing that certain capabilities are disjoint can also help improve the overall user experience.
If a function requires `(vulkan & extensionA) | (d3d12 & featureb)` and we know we are compiling for `vulkan` we should be able to give the user a pointed error message saying they need to ask for `extensionA`, because adding `featureB` isn't going to do any good.
-As a first-pass model we could have a notion of `abstract` capabilities that are used to model the root of hierarcies of disjoint capabilities:
+As a first-pass model we could have a notion of `abstract` capabilities that are used to model the root of hierarchies of disjoint capabilities:
```
abstract capability api;