[doc] Add some documentation around translations.
This CL adds the start of a document listing how things translate into various backends. Change-Id: Iebeb4488450b4f299e83d0de7ee124b441795e98 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/31240 Reviewed-by: David Neto <dneto@google.com> Commit-Queue: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
parent
5ede1190cf
commit
d2fa57d26d
|
@ -0,0 +1,157 @@
|
|||
# Translations
|
||||
|
||||
This document attempts to document how WGSL translates into the various backends
|
||||
for the cases where the translation is not a direct mapping.
|
||||
|
||||
# Access Control
|
||||
|
||||
## HLSL
|
||||
* ReadOnly -> `ByteAddressBuffer`
|
||||
* ReadWrite -> `RWByteAddressBuffer`
|
||||
|
||||
## MSL
|
||||
* ReadOnly -> `const`
|
||||
|
||||
## SPIR-V
|
||||
There are two ways this can be achieved in SPIR-V. Either the variable can be
|
||||
decorated with `NonWritable` or each member of the struct can be decorated with
|
||||
`NonWritable`. We chose to go the struct member route.
|
||||
* The read-only becomes part of the type in this case. Otherwise, you are
|
||||
treating the readonly type information as part of the variable which is
|
||||
confusing.
|
||||
* Treating the readonly as part of the variable means we should be
|
||||
deduplicating the types behind the access control, which causes confusing
|
||||
with the type_names and various tracking systems within Tint.
|
||||
|
||||
|
||||
# Builtin Decorations
|
||||
Name | SPIR-V | MSL | HLSL
|
||||
=====|========|=====|=====
|
||||
position | SpvBuiltInPosition |position | SV_Position
|
||||
vertex_idx | SpvBuiltInVertexIndex |vertex_id | SV_VertexID
|
||||
instance_idx | SpvBuiltInInstanceIndex | instance_id| SV_InstanceID
|
||||
front_facing | SpvBuiltInFrontFacing | front_facing | SV_IsFrontFacing
|
||||
frag_coord | SpvBuiltInFragCoord | position | SV_Position
|
||||
frag_depth | SpvBuiltInFragDepth | depth(any) | SV_Depth
|
||||
local_invocation_id | SpvBuiltInLocalInvocationId | thread_position_in_threadgroup | SV_GroupThreadID
|
||||
local_invocation_idx | SpvBuiltInLocalInvocationIndex | thread_index_in_threadgroup | SV_GroupIndex
|
||||
global_invocation_id | SpvBuiltInGlobalInvocationId | thread_position_in_grid | SV_DispatchThreadID
|
||||
|
||||
|
||||
# Builtins Methods
|
||||
Name | SPIR-V | MSL | HLSL
|
||||
=====|========|=====|======
|
||||
abs | GLSLstd450FAbs or GLSLstd450SAbs| fabs or abs | abs
|
||||
acos | GLSLstd450Acos | acos | acos
|
||||
all | SpvOpAll | all | all
|
||||
any | SpvOpAny | any | any
|
||||
arrayLength | SpvOpArrayLength | |
|
||||
asin | GLSLstd450Asin | asin | asin
|
||||
atan | GLSLstd450Atan | atan | atan
|
||||
atan2 | GLSLstd450Atan2| atan2 | atan2
|
||||
ceil | GLSLstd450Ceil| ceil | ceil
|
||||
clamp | GLSLstd450NClamp or GLSLstd450UClamp or GLSLstd450SClamp| clamp | clamp
|
||||
cos | GLSLstd450Cos | cos | cos
|
||||
cosh | GLSLstd450Cosh | cosh | cosh
|
||||
countOneBits | SpvOpBitCount | popcount | countbits
|
||||
cross | GLSLstd450Cross | cross | cross
|
||||
determinant | GLSLstd450Determinant | determinant | determinant
|
||||
distance | GLSLstd450Distance | distance | distance
|
||||
dot | SpOpDot | dot | dot
|
||||
dpdx | SpvOpDPdx | dpdx | ddx
|
||||
dpdxCoarse | SpvOpDPdxCoarse | dpdx | ddx_coarse
|
||||
dpdxFine | SpvOpDPdxFine | dpdx | ddx_fine
|
||||
dpdy | SpvOpDPdy | dpdy | ddy
|
||||
dpdyCoarse | SpvOpDPdyCoarse | dpdy | ddy_coarse
|
||||
dpdyFine | SpvOpDPdyFine | dpdy | ddy_fine
|
||||
exp | GLSLstd450Exp | exp | exp
|
||||
exp2 | GLSLstd450Exp2 | exp2 | exp2
|
||||
faceForward | GLSLstd450FaceForward | faceforward | faceforward
|
||||
floor | GLSLstd450Floor | floor | floor
|
||||
fma | GLSLstd450Fma | fma | fma
|
||||
fract | GLSLstd450Fract | fract | frac
|
||||
frexp | GLSLstd450Frexp | |
|
||||
fwidth | SpvOpFwidth | fwidth | fwidth
|
||||
fwidthCoarse | SpvOpFwidthCoarse | fwidth | fwidth
|
||||
fwidthFine | SpvOpFwidthFine | fwidth | fwidth
|
||||
inverseSqrt | GLSLstd450InverseSqrt | rsqrt | rsqrt
|
||||
isFinite | | isfinite | isfinite
|
||||
isInf | SpvOpIsInf | isinf | isinf
|
||||
isNan | SpvOpIsNan | isnan | isnan
|
||||
isNormal | | isnormal |
|
||||
ldexp | GLSLstd450Ldexp | |
|
||||
length | GLSLstd450Length | length | length
|
||||
log | GLSLstd450Log | log | log
|
||||
log2 | GLSLstd450Log2 | log2 | log2
|
||||
max | GLSLstd450NMax or GLSLstd450SMax or GLSLstd450UMax | fmax or max | max
|
||||
min | GLSLstd450NMin or GLSLstd450SMin or GLSLstd450UMin | fmin or min | min
|
||||
mix | GLSLstd450FMix | mix | mix
|
||||
modf | GLSLstd450Modf | |
|
||||
normalize | GLSLstd450Normalize | normalize | normalize
|
||||
outerProduct | SpvOpOuterProduct | |
|
||||
pow | GLSLstd450Pow | pow | pow
|
||||
reflect | GLSLstd450Reflect | reflect | reflect
|
||||
reverseBits | SpvOpBitReverse | reverse_bits | reversebits
|
||||
round | GLSLstd450Round | round | round
|
||||
select | SpvOpSelect | select |
|
||||
sign | GLSLstd450FSign | sign | sign
|
||||
sin | GLSLstd450Sin | sin | sin
|
||||
sinh | GLSLstd450Sinh | sinh | sinh
|
||||
smoothStep | GLSLstd450SmoothStep | smoothstep | smoothstep
|
||||
sqrt | GLSLstd450Sqrt | sqrt | sqrt
|
||||
step | GLSLstd450Step | step | step
|
||||
tan | GLSLstd450Tan | tan | tan
|
||||
tanh | GLSLstd450Tanh | tanh | tanh
|
||||
trunc | GLSLstd450Trunc | trunc | trunc
|
||||
|
||||
# Short-circuting
|
||||
## HLSL
|
||||
TODO(dsinclair): Nested if's
|
||||
|
||||
## SPIR-V
|
||||
TODO(dsinclair): Nested if's
|
||||
|
||||
# Storage classes
|
||||
TODO(dsinclair): do ...
|
||||
|
||||
# Storage buffers
|
||||
## HLSL
|
||||
TODO(dsinclair): Rewriting of accessors to loads
|
||||
|
||||
# Loop blocks
|
||||
## HLSL
|
||||
TODO(dsinclair): Rewrite with bools
|
||||
|
||||
## MSL
|
||||
TODO(dsinclair): Rewrite with bools
|
||||
|
||||
# Input / Output storage class
|
||||
## HLSL
|
||||
TODO(dsinclair): Structs and params
|
||||
|
||||
## MSL
|
||||
TODO(dsinclair): Structs and params
|
||||
|
||||
# Discard
|
||||
## HLSL
|
||||
* `discard`
|
||||
|
||||
## MSL
|
||||
* `discard_fragment()`
|
||||
|
||||
|
||||
# Specialization constants
|
||||
## HLSL
|
||||
```
|
||||
#ifndef WGSL_SPEC_CONSTANT_<id>
|
||||
-- if default provided
|
||||
#define WGSL_SPEC_CONSTANT_<id> default value
|
||||
-- else
|
||||
#error spec constant required for constant id
|
||||
--
|
||||
#endif
|
||||
static const <type> <name> = WGSL_SPEC_CONSTANT_<id>
|
||||
```
|
||||
|
||||
## MSL
|
||||
`[[function_constant(<id>)]]`
|
Loading…
Reference in New Issue