diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2018-05-03 16:34:49 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-03 16:34:49 -0700 |
| commit | 00afea1e59e8929324df882009618534d3065138 (patch) | |
| tree | 384eb8724b51e345d3dbd2d4026cab8fe6bd58d4 /tests/bindings | |
| parent | f8472940229e8582ec9f941069fc9576bd09b94c (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')
| -rw-r--r-- | tests/bindings/array-of-struct-of-resource.hlsl | 6 | ||||
| -rw-r--r-- | tests/bindings/binding0.hlsl | 8 | ||||
| -rw-r--r-- | tests/bindings/binding1.hlsl | 8 | ||||
| -rw-r--r-- | tests/bindings/explicit-binding.hlsl | 24 | ||||
| -rw-r--r-- | tests/bindings/glsl-parameter-blocks.slang.glsl | 10 | ||||
| -rw-r--r-- | tests/bindings/multi-file-extra.hlsl | 56 | ||||
| -rw-r--r-- | tests/bindings/multi-file.hlsl | 56 | ||||
| -rw-r--r-- | tests/bindings/multiple-parameter-blocks.slang | 20 | ||||
| -rw-r--r-- | tests/bindings/packoffset.hlsl | 18 | ||||
| -rw-r--r-- | tests/bindings/parameter-blocks.slang | 6 | ||||
| -rw-r--r-- | tests/bindings/resources-in-cbuffer.hlsl | 52 | ||||
| -rw-r--r-- | tests/bindings/targets-and-uavs-structure.hlsl | 6 | ||||
| -rw-r--r-- | tests/bindings/targets-and-uavs.hlsl | 6 |
13 files changed, 138 insertions, 138 deletions
diff --git a/tests/bindings/array-of-struct-of-resource.hlsl b/tests/bindings/array-of-struct-of-resource.hlsl index 8ba71c7a3..11dcc18da 100644 --- a/tests/bindings/array-of-struct-of-resource.hlsl +++ b/tests/bindings/array-of-struct-of-resource.hlsl @@ -27,9 +27,9 @@ float4 main() : SV_Target #else -#define a _SV04testL0 -#define b _SV04testL1 -#define s _SV01s +#define a test_a_0 +#define b test_b_0 +#define s s_0 Texture2D a[2]; Texture2D b[2]; diff --git a/tests/bindings/binding0.hlsl b/tests/bindings/binding0.hlsl index fcd7e7b54..3e9f92992 100644 --- a/tests/bindings/binding0.hlsl +++ b/tests/bindings/binding0.hlsl @@ -9,10 +9,10 @@ #else #define R(X) X -#define C _SV022SLANG_parameterGroup_C -#define t _SV01t -#define s _SV01s -#define c _SV022SLANG_ParameterGroup_C1c +#define C C_0 +#define t t_0 +#define s s_0 +#define c c_0 #endif diff --git a/tests/bindings/binding1.hlsl b/tests/bindings/binding1.hlsl index adc06edaa..cc3389d93 100644 --- a/tests/bindings/binding1.hlsl +++ b/tests/bindings/binding1.hlsl @@ -16,11 +16,11 @@ #else #define R(X) X -#define tB _SV02tB -#define sB _SV02sB +#define tB tB_0 +#define sB sB_0 -#define C1 _SV023SLANG_parameterGroup_C1 -#define c1 _SV023SLANG_ParameterGroup_C12c1 +#define C1 C1_0 +#define c1 c1_0 #endif diff --git a/tests/bindings/explicit-binding.hlsl b/tests/bindings/explicit-binding.hlsl index 758be959b..b8da9a77a 100644 --- a/tests/bindings/explicit-binding.hlsl +++ b/tests/bindings/explicit-binding.hlsl @@ -8,22 +8,22 @@ #else #define R(X) X -#define CA _SV023SLANG_parameterGroup_CA -#define ca _SV023SLANG_ParameterGroup_CA2ca +#define CA CA_0 +#define ca ca_0 -#define CB _SV023SLANG_parameterGroup_CB -#define cb _SV023SLANG_ParameterGroup_CB2cb +#define CB CB_0 +#define cb cb_0 -#define CC _SV023SLANG_parameterGroup_CC -#define cc _SV023SLANG_ParameterGroup_CC2cc +#define CC CC_0 +#define cc cc_0 -#define sa _SV02sa -#define sb _SV02sb -#define sc _SV02sc +#define sa sa_0 +#define sb sb_0 +#define sc sc_0 -#define ta _SV02ta -#define tb _SV02tb -#define tc _SV02tc +#define ta ta_0 +#define tb tb_0 +#define tc tc_0 #endif diff --git a/tests/bindings/glsl-parameter-blocks.slang.glsl b/tests/bindings/glsl-parameter-blocks.slang.glsl index b65ee0e49..67aca71dc 100644 --- a/tests/bindings/glsl-parameter-blocks.slang.glsl +++ b/tests/bindings/glsl-parameter-blocks.slang.glsl @@ -1,12 +1,12 @@ //TEST_IGNORE_FILE: #version 450 core -#define Test _ST04Test -#define a _SV04Test1a +#define Test Test_0 +#define a a_0 -#define gTest _SV05gTestL0 -#define gTest_t _SV05gTestL1 -#define gTest_s _SV05gTestL2 +#define gTest gTest_0 +#define gTest_t gTest_t_0 +#define gTest_s gTest_s_0 #define ParameterBlock_gTest _S1 diff --git a/tests/bindings/multi-file-extra.hlsl b/tests/bindings/multi-file-extra.hlsl index 8bf8be414..92227d54a 100644 --- a/tests/bindings/multi-file-extra.hlsl +++ b/tests/bindings/multi-file-extra.hlsl @@ -10,34 +10,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 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 diff --git a/tests/bindings/multiple-parameter-blocks.slang b/tests/bindings/multiple-parameter-blocks.slang index 96a78316a..dee3c60f4 100644 --- a/tests/bindings/multiple-parameter-blocks.slang +++ b/tests/bindings/multiple-parameter-blocks.slang @@ -29,20 +29,20 @@ float4 main(float v : V) : SV_Target #else -Texture2D _SV01pL0 : register(t0, space0); -Texture2D _SV01pL1[4] : register(t1, space0); -SamplerState _SV01pL2 : register(s0, space0); +Texture2D p_t_0 : register(t0, space0); +Texture2D p_ta_0[4] : register(t1, space0); +SamplerState p_s_0 : register(s0, space0); -Texture2D _SV02p1L0 : register(t0, space1); -Texture2D _SV02p1L1[4] : register(t1, space1); -SamplerState _SV02p1L2 : register(s0, space1); +Texture2D p1_t_0 : register(t0, space1); +Texture2D p1_ta_0[4] : register(t1, space1); +SamplerState p1_s_0 : register(s0, space1); float4 main(float v : V) : SV_TARGET { - return use(_SV01pL0, _SV01pL2) - + use(_SV01pL1[int(v)], _SV01pL2) - + use(_SV02p1L0, _SV02p1L2) - + use(_SV02p1L1[int(v)], _SV02p1L2); + return use(p_t_0, p_s_0) + + use(p_ta_0[int(v)], p_s_0) + + use(p1_t_0, p1_s_0) + + use(p1_ta_0[int(v)], p1_s_0); } #endif diff --git a/tests/bindings/packoffset.hlsl b/tests/bindings/packoffset.hlsl index 5b8650a9b..f912e76d8 100644 --- a/tests/bindings/packoffset.hlsl +++ b/tests/bindings/packoffset.hlsl @@ -8,15 +8,15 @@ #else #define R(X) X -#define CA _SV023SLANG_parameterGroup_CAL0 -#define ca _SV023SLANG_ParameterGroup_CA2ca -#define cb _SV023SLANG_ParameterGroup_CA2cb -#define cc _SV023SLANG_ParameterGroup_CA2cc -#define cd _SV023SLANG_ParameterGroup_CA2cd -#define ce _SV023SLANG_ParameterGroup_CA2ce - -#define ta _SV023SLANG_parameterGroup_CAL1 -#define sa _SV023SLANG_parameterGroup_CAL2 +#define CA CA_0 +#define ca ca_0 +#define cb cb_0 +#define cc cc_0 +#define cd cd_0 +#define ce ce_0 + +#define ta CA_ta_0 +#define sa CA_sa_0 #endif diff --git a/tests/bindings/parameter-blocks.slang b/tests/bindings/parameter-blocks.slang index 62503e49b..756a6ec1a 100644 --- a/tests/bindings/parameter-blocks.slang +++ b/tests/bindings/parameter-blocks.slang @@ -26,9 +26,9 @@ float4 main(float v : V) : SV_Target #else -#define t _SV01pL0 -#define ta _SV01pL1 -#define s _SV01pL2 +#define t p_t_0 +#define ta p_ta_0 +#define s p_s_0 Texture2D t : register(t0, space0); Texture2D ta[4] : register(t1, space0); diff --git a/tests/bindings/resources-in-cbuffer.hlsl b/tests/bindings/resources-in-cbuffer.hlsl index 5706bd39c..e3dcfc28e 100644 --- a/tests/bindings/resources-in-cbuffer.hlsl +++ b/tests/bindings/resources-in-cbuffer.hlsl @@ -9,34 +9,34 @@ #else #define R(X) X -#define CA _SV023SLANG_parameterGroup_CAL0 -#define caa _SV023SLANG_ParameterGroup_CA3caa -#define cab _SV023SLANG_ParameterGroup_CA3cab -#define cac _SV023SLANG_ParameterGroup_CA3cac -#define cad _SV023SLANG_ParameterGroup_CA3cad -#define cae _SV023SLANG_ParameterGroup_CA3cae -#define ta _SV023SLANG_parameterGroup_CAL1 -#define sa _SV023SLANG_parameterGroup_CAL2 +#define CA CA_0 +#define caa caa_0 +#define cab cab_0 +#define cac cac_0 +#define cad cad_0 +#define cae cae_0 +#define ta CA_ta_0 +#define sa CA_sa_0 -#define CB _SV023SLANG_parameterGroup_CBL0 -#define cba _SV023SLANG_ParameterGroup_CB3cba -#define cbb _SV023SLANG_ParameterGroup_CB3cbb -#define cbc _SV023SLANG_ParameterGroup_CB3cbc -#define cbd _SV023SLANG_ParameterGroup_CB3cbd -#define cbe _SV023SLANG_ParameterGroup_CB3cbe -#define tbx _SV023SLANG_parameterGroup_CBL1 -#define tby _SV023SLANG_parameterGroup_CBL2 -#define sb _SV023SLANG_parameterGroup_CBL3 +#define CB CB_0 +#define cba cba_0 +#define cbb cbb_0 +#define cbc cbc_0 +#define cbd cbd_0 +#define cbe cbe_0 +#define tbx CB_tbx_0 +#define tby CB_tby_0 +#define sb CB_sb_0 -#define CC _SV023SLANG_parameterGroup_CCL0 -#define cca _SV023SLANG_ParameterGroup_CC3cca -#define ccb _SV023SLANG_ParameterGroup_CC3ccb -#define ccc _SV023SLANG_ParameterGroup_CC3ccc -#define ccd _SV023SLANG_ParameterGroup_CC3ccd -#define cce _SV023SLANG_ParameterGroup_CC3cce -#define tc _SV023SLANG_parameterGroup_CCL1 -#define scx _SV023SLANG_parameterGroup_CCL2 -#define scy _SV023SLANG_parameterGroup_CCL3 +#define CC CC_0 +#define cca cca_0 +#define ccb ccb_0 +#define ccc ccc_0 +#define ccd ccd_0 +#define cce cce_0 +#define tc CC_tc_0 +#define scx CC_scx_0 +#define scy CC_scy_0 #endif diff --git a/tests/bindings/targets-and-uavs-structure.hlsl b/tests/bindings/targets-and-uavs-structure.hlsl index 359083069..3c7499cf5 100644 --- a/tests/bindings/targets-and-uavs-structure.hlsl +++ b/tests/bindings/targets-and-uavs-structure.hlsl @@ -8,9 +8,9 @@ #else #define R(X) X -#define Foo _ST03Foo -#define v _SV03Foo1v -#define fooBuffer _SV09fooBuffer +#define Foo Foo_0 +#define v v_0 +#define fooBuffer fooBuffer_0 #endif diff --git a/tests/bindings/targets-and-uavs.hlsl b/tests/bindings/targets-and-uavs.hlsl index 24efa418c..7c6389e36 100644 --- a/tests/bindings/targets-and-uavs.hlsl +++ b/tests/bindings/targets-and-uavs.hlsl @@ -10,9 +10,9 @@ #else #define R(X) X -#define Foo _ST03Foo -#define v _SV03Foo1v -#define fooBuffer _SV09fooBuffer +#define Foo Foo_0 +#define v v_0 +#define fooBuffer fooBuffer_0 #endif |
