diff --git a/readme.md b/readme.md index 1ba4bec31..9b0ad4f50 100644 --- a/readme.md +++ b/readme.md @@ -95,16 +95,34 @@ text names from that specification. Here is an example. ``` OpCapability Shader OpMemoryModel Logical Simple -OpEntryPoint GLCompute $3 "main" -OpExecutionMode $3 LocalSize 64 64 1 +OpEntryPoint GLCompute %3 "main" +OpExecutionMode %3 LocalSize 64 64 1 OpTypeVoid %1 -OpTypeFunction %2 $1 -OpFunction $1 %3 None $2 +OpTypeFunction %2 %1 +OpFunction %1 %3 None %2 OpLabel %4 OpReturn OpFunctionEnd ``` +In order to improve the text's readability, the `` generated by an +instruction can be moved to the beginning of that instruction and followed by +an `=` sign. This allows us to distinguish between variable defs and uses and +locate variable defs more easily. So, the above example can also be written as: + +``` + OpCapability Shader + OpMemoryModel Logical Simple + OpEntryPoint GLCompute %3 "main" + OpExecutionMode %3 LocalSize 64 64 1 +%1 = OpTypeVoid +%2 = OpTypeFunction %1 +%3 = OpFunction %1 None %2 +%4 = OpLabel + OpReturn + OpFunctionEnd +``` + Each line encapsulates one and only one instruction, or an OpCode and all of its operands. OpCodes use the names provided in section 3.28 Instructions of the SPIR-V specification, immediate values such as Addressing Model, Memory Model, @@ -114,11 +132,9 @@ Capability of the SPIR-V specification. Literals strings are enclosed in quotes ##### ID Definitions & Usage -An ID definition pertains to the `Result ` of an OpCode, and ID usage is any -input to an OpCode. To differentiate between definitions and uses, all ID -definitions are prefixed with `%` and take the form `%`, meanwhile all ID -uses are prefixed with `$` and take the form `$`. See the above example to -see this in action. +An ID definition pertains to the `` of an OpCode, and ID usage is any +input to an OpCode. All IDs are prefixed with `%`. To differentiate between +defs and uses, we suggest using the second format shown in the above. ##### Named IDs @@ -128,16 +144,16 @@ apply. Names must begin with an character in the range `[a-z|A-Z]`. The following example will result in identical SPIR-V binary as the example above. ``` -OpCapability Shader -OpMemoryModel Logical Simple -OpEntryPoint GLCompute $main "main" -OpExecutionMode $main LocalSize 64 64 1 -OpTypeVoid %void -OpTypeFunction %fnMain $void -OpFunction $void %main None $fnMain -OpLabel %lbMain -OpReturn -OpFunctionEnd + OpCapability Shader + OpMemoryModel Logical Simple + OpEntryPoint GLCompute %main "main" + OpExecutionMode %main LocalSize 64 64 1 + %void = OpTypeVoid +%fnMain = OpTypeFunction %void + %main = OpFunction %void None %fnMain +%lbMain = OpLabel + OpReturn + OpFunctionEnd ``` ##### Arbitrary Integers