summaryrefslogtreecommitdiff
path: root/tests/bindings/multi-file.hlsl
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2018-05-03 16:34:49 -0700
committerGitHub <noreply@github.com>2018-05-03 16:34:49 -0700
commit00afea1e59e8929324df882009618534d3065138 (patch)
tree384eb8724b51e345d3dbd2d4026cab8fe6bd58d4 /tests/bindings/multi-file.hlsl
parentf8472940229e8582ec9f941069fc9576bd09b94c (diff)
Pass through original names for most declarations (#547)
The basic idea here is that when lowering to the IR, the front-end will attach a "name hint" to the IR instruction(s) that represent a given declaration, and then the passes that work on the IR will try to preserve and propagate those names, and then finally the emit logic will use them in place of mangled or unique names when available. This change does *not* try to deal with the issues that arise when we try to use those variable names in the output without any modification (e.g., handling cases where they might clash with keywords or builtins in the target language). Instead, it tries to establish baseline behavior for propagating through names, so that a later change can concentrate on the issue of using those names exactly when it is legal to do so. In order to avoid issues around the name "hints" causing problems we take two main steps: 1. We "scrub" each name to reduce it down to the allowed set of identifier characters in C-like languages, and then ensure that it doesn't do things that would be illegal in some downstream languages (e.g., consecutive underscores are not allowed in GLSL) or could clash with Slang's mangled names. This process isn't guaranteed to give distinct results for distinct inputs (it isn't a mangling scheme, after all). 2. We generate a unique ID for each occurence of a given name and always use that as a suffix. This means that even if a name happens to overlap with a keyword (if you somehow have a variable named `do`), we will still add a suffix that makes it not a problem (we'd output `do_0` which is fine). The logic for generating these names is mostly straightforward. For simple variables, we use their given name directly, while for other declarations we try to form a name that includes their parent declaration (e.g. `SomeType.someMethod`). Various IR passes need to propagate or preserve this information. The most interesting is type legalization, when we take a variable with an aggregate type and split some of the fields out into their own variables. In that case we generate "dotted" names like `someVar.someTexture` and rely on the emit logic to turn that into `someVar_someTexture`. During SSA generation, if we are promoting a variable to SSA temporaries, we will try to propagate the name of the variable over to the temporaries (unless they already have a name from some other place). The same applies to block parameters ("phi nodes"). Many of the test changes need their expected output to be updated for this change. Luckily in most cases the output has gotten easier to understand.
Diffstat (limited to 'tests/bindings/multi-file.hlsl')
-rw-r--r--tests/bindings/multi-file.hlsl56
1 files changed, 28 insertions, 28 deletions
diff --git a/tests/bindings/multi-file.hlsl b/tests/bindings/multi-file.hlsl
index bc00b0f69..992703155 100644
--- a/tests/bindings/multi-file.hlsl
+++ b/tests/bindings/multi-file.hlsl
@@ -11,34 +11,34 @@
#else
#define R(X) X
-#define sharedC _SV028SLANG_parameterGroup_sharedC
-#define sharedCA _SV028SLANG_ParameterGroup_sharedC8sharedCA
-#define sharedCB _SV028SLANG_ParameterGroup_sharedC8sharedCB
-#define sharedCC _SV028SLANG_ParameterGroup_sharedC8sharedCC
-#define sharedCD _SV028SLANG_ParameterGroup_sharedC8sharedCD
-
-#define vertexC _SV028SLANG_parameterGroup_vertexC
-#define vertexCA _SV028SLANG_ParameterGroup_vertexC8vertexCA
-#define vertexCB _SV028SLANG_ParameterGroup_vertexC8vertexCB
-#define vertexCC _SV028SLANG_ParameterGroup_vertexC8vertexCC
-#define vertexCD _SV028SLANG_ParameterGroup_vertexC8vertexCD
-
-#define fragmentC _SV030SLANG_parameterGroup_fragmentC
-#define fragmentCA _SV030SLANG_ParameterGroup_fragmentC10fragmentCA
-#define fragmentCB _SV030SLANG_ParameterGroup_fragmentC10fragmentCB
-#define fragmentCC _SV030SLANG_ParameterGroup_fragmentC10fragmentCC
-#define fragmentCD _SV030SLANG_ParameterGroup_fragmentC10fragmentCD
-
-#define sharedS _SV07sharedS
-#define sharedT _SV07sharedT
-#define sharedTV _SV08sharedTV
-#define sharedTF _SV08sharedTF
-
-#define vertexS _SV07vertexS
-#define vertexT _SV07vertexT
-
-#define fragmentS _SV09fragmentS
-#define fragmentT _SV09fragmentT
+#define sharedC sharedC_0
+#define sharedCA sharedCA_0
+#define sharedCB sharedCB_0
+#define sharedCC sharedCC_0
+#define sharedCD sharedCD_0
+
+#define vertexC vertexC_0
+#define vertexCA vertexCA_0
+#define vertexCB vertexCB_0
+#define vertexCC vertexCC_0
+#define vertexCD vertexCD_0
+
+#define fragmentC fragmentC_0
+#define fragmentCA fragmentCA_0
+#define fragmentCB fragmentCB_0
+#define fragmentCC fragmentCC_0
+#define fragmentCD fragmentCD_0
+
+#define sharedS sharedS_0
+#define sharedT sharedT_0
+#define sharedTV sharedTV_0
+#define sharedTF sharedTF_0
+
+#define vertexS vertexS_0
+#define vertexT vertexT_0
+
+#define fragmentS fragmentS_0
+#define fragmentT fragmentT_0
#endif