Front-end: Make ES floatBitsToInt/intBitsToFloat/etc. all be highp.

This commit is contained in:
John Kessenich 2016-06-14 20:38:58 -06:00
Родитель c51287d744
Коммит 9000bd5eb6
5 изменённых файлов: 311 добавлений и 35 удалений

Просмотреть файл

@ -136,24 +136,24 @@ ERROR: node is still EOpNull!
0:53 isinf (global 4-component vector of bool)
0:53 'v4' (global mediump 4-component vector of float)
0:56 Sequence
0:56 move second child to first child (temp mediump int)
0:56 move second child to first child (temp highp int)
0:56 'i' (temp mediump int)
0:56 floatBitsToInt (global mediump int)
0:56 floatBitsToInt (global highp int)
0:56 'f' (global mediump float)
0:57 Sequence
0:57 move second child to first child (temp mediump 4-component vector of uint)
0:57 move second child to first child (temp highp 4-component vector of uint)
0:57 'uv11' (temp mediump 4-component vector of uint)
0:57 floatBitsToUint (global mediump 4-component vector of uint)
0:57 floatBitsToUint (global highp 4-component vector of uint)
0:57 'v4' (global mediump 4-component vector of float)
0:58 Sequence
0:58 move second child to first child (temp mediump 4-component vector of float)
0:58 move second child to first child (temp highp 4-component vector of float)
0:58 'v14' (temp mediump 4-component vector of float)
0:58 intBitsToFloat (global mediump 4-component vector of float)
0:58 intBitsToFloat (global highp 4-component vector of float)
0:58 'iv4a' (global mediump 4-component vector of int)
0:59 Sequence
0:59 move second child to first child (temp mediump 2-component vector of float)
0:59 move second child to first child (temp highp 2-component vector of float)
0:59 'v15' (temp mediump 2-component vector of float)
0:59 uintBitsToFloat (global mediump 2-component vector of float)
0:59 uintBitsToFloat (global highp 2-component vector of float)
0:59 'uv2c' (global mediump 2-component vector of uint)
0:62 Sequence
0:62 move second child to first child (temp highp uint)
@ -343,24 +343,24 @@ ERROR: node is still EOpNull!
0:53 isinf (global 4-component vector of bool)
0:53 'v4' (global mediump 4-component vector of float)
0:56 Sequence
0:56 move second child to first child (temp mediump int)
0:56 move second child to first child (temp highp int)
0:56 'i' (temp mediump int)
0:56 floatBitsToInt (global mediump int)
0:56 floatBitsToInt (global highp int)
0:56 'f' (global mediump float)
0:57 Sequence
0:57 move second child to first child (temp mediump 4-component vector of uint)
0:57 move second child to first child (temp highp 4-component vector of uint)
0:57 'uv11' (temp mediump 4-component vector of uint)
0:57 floatBitsToUint (global mediump 4-component vector of uint)
0:57 floatBitsToUint (global highp 4-component vector of uint)
0:57 'v4' (global mediump 4-component vector of float)
0:58 Sequence
0:58 move second child to first child (temp mediump 4-component vector of float)
0:58 move second child to first child (temp highp 4-component vector of float)
0:58 'v14' (temp mediump 4-component vector of float)
0:58 intBitsToFloat (global mediump 4-component vector of float)
0:58 intBitsToFloat (global highp 4-component vector of float)
0:58 'iv4a' (global mediump 4-component vector of int)
0:59 Sequence
0:59 move second child to first child (temp mediump 2-component vector of float)
0:59 move second child to first child (temp highp 2-component vector of float)
0:59 'v15' (temp mediump 2-component vector of float)
0:59 uintBitsToFloat (global mediump 2-component vector of float)
0:59 uintBitsToFloat (global highp 2-component vector of float)
0:59 'uv2c' (global mediump 2-component vector of uint)
0:62 Sequence
0:62 move second child to first child (temp highp uint)

Просмотреть файл

@ -0,0 +1,234 @@
spv.310.bitcast.frag
Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 153
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148
ExecutionMode 4 OriginUpperLeft
Source ESSL 310
Name 4 "main"
Name 9 "idata"
Name 14 "f1"
Name 26 "f2"
Name 37 "f3"
Name 48 "f4"
Name 55 "udata"
Name 85 "fdata"
Name 89 "i1"
Name 98 "i2"
Name 107 "i3"
Name 116 "i4"
Name 122 "u1"
Name 130 "u2"
Name 139 "u3"
Name 148 "u4"
Decorate 14(f1) RelaxedPrecision
Decorate 15 RelaxedPrecision
Decorate 26(f2) RelaxedPrecision
Decorate 27 RelaxedPrecision
Decorate 37(f3) RelaxedPrecision
Decorate 38 RelaxedPrecision
Decorate 57 RelaxedPrecision
Decorate 64 RelaxedPrecision
Decorate 72 RelaxedPrecision
Decorate 89(i1) RelaxedPrecision
Decorate 89(i1) Flat
Decorate 90 RelaxedPrecision
Decorate 98(i2) RelaxedPrecision
Decorate 98(i2) Flat
Decorate 99 RelaxedPrecision
Decorate 107(i3) RelaxedPrecision
Decorate 107(i3) Flat
Decorate 108 RelaxedPrecision
Decorate 116(i4) Flat
Decorate 122(u1) RelaxedPrecision
Decorate 122(u1) Flat
Decorate 123 RelaxedPrecision
Decorate 130(u2) RelaxedPrecision
Decorate 130(u2) Flat
Decorate 131 RelaxedPrecision
Decorate 139(u3) RelaxedPrecision
Decorate 139(u3) Flat
Decorate 140 RelaxedPrecision
Decorate 148(u4) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeVector 6(int) 4
8: TypePointer Function 7(ivec4)
10: 6(int) Constant 0
11: 7(ivec4) ConstantComposite 10 10 10 10
12: TypeFloat 32
13: TypePointer Input 12(float)
14(f1): 13(ptr) Variable Input
17: TypeInt 32 0
18: 17(int) Constant 0
19: TypePointer Function 6(int)
24: TypeVector 12(float) 2
25: TypePointer Input 24(fvec2)
26(f2): 25(ptr) Variable Input
28: TypeVector 6(int) 2
35: TypeVector 12(float) 3
36: TypePointer Input 35(fvec3)
37(f3): 36(ptr) Variable Input
39: TypeVector 6(int) 3
46: TypeVector 12(float) 4
47: TypePointer Input 46(fvec4)
48(f4): 47(ptr) Variable Input
53: TypeVector 17(int) 4
54: TypePointer Function 53(ivec4)
56: 53(ivec4) ConstantComposite 18 18 18 18
59: TypePointer Function 17(int)
65: TypeVector 17(int) 2
73: TypeVector 17(int) 3
84: TypePointer Function 46(fvec4)
86: 12(float) Constant 0
87: 46(fvec4) ConstantComposite 86 86 86 86
88: TypePointer Input 6(int)
89(i1): 88(ptr) Variable Input
92: TypePointer Function 12(float)
97: TypePointer Input 28(ivec2)
98(i2): 97(ptr) Variable Input
106: TypePointer Input 39(ivec3)
107(i3): 106(ptr) Variable Input
115: TypePointer Input 7(ivec4)
116(i4): 115(ptr) Variable Input
121: TypePointer Input 17(int)
122(u1): 121(ptr) Variable Input
129: TypePointer Input 65(ivec2)
130(u2): 129(ptr) Variable Input
138: TypePointer Input 73(ivec3)
139(u3): 138(ptr) Variable Input
147: TypePointer Input 53(ivec4)
148(u4): 147(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(idata): 8(ptr) Variable Function
55(udata): 54(ptr) Variable Function
85(fdata): 84(ptr) Variable Function
Store 9(idata) 11
15: 12(float) Load 14(f1)
16: 6(int) Bitcast 15
20: 19(ptr) AccessChain 9(idata) 18
21: 6(int) Load 20
22: 6(int) IAdd 21 16
23: 19(ptr) AccessChain 9(idata) 18
Store 23 22
27: 24(fvec2) Load 26(f2)
29: 28(ivec2) Bitcast 27
30: 7(ivec4) Load 9(idata)
31: 28(ivec2) VectorShuffle 30 30 0 1
32: 28(ivec2) IAdd 31 29
33: 7(ivec4) Load 9(idata)
34: 7(ivec4) VectorShuffle 33 32 4 5 2 3
Store 9(idata) 34
38: 35(fvec3) Load 37(f3)
40: 39(ivec3) Bitcast 38
41: 7(ivec4) Load 9(idata)
42: 39(ivec3) VectorShuffle 41 41 0 1 2
43: 39(ivec3) IAdd 42 40
44: 7(ivec4) Load 9(idata)
45: 7(ivec4) VectorShuffle 44 43 4 5 6 3
Store 9(idata) 45
49: 46(fvec4) Load 48(f4)
50: 7(ivec4) Bitcast 49
51: 7(ivec4) Load 9(idata)
52: 7(ivec4) IAdd 51 50
Store 9(idata) 52
Store 55(udata) 56
57: 12(float) Load 14(f1)
58: 17(int) Bitcast 57
60: 59(ptr) AccessChain 55(udata) 18
61: 17(int) Load 60
62: 17(int) IAdd 61 58
63: 59(ptr) AccessChain 55(udata) 18
Store 63 62
64: 24(fvec2) Load 26(f2)
66: 65(ivec2) Bitcast 64
67: 53(ivec4) Load 55(udata)
68: 65(ivec2) VectorShuffle 67 67 0 1
69: 65(ivec2) IAdd 68 66
70: 53(ivec4) Load 55(udata)
71: 53(ivec4) VectorShuffle 70 69 4 5 2 3
Store 55(udata) 71
72: 35(fvec3) Load 37(f3)
74: 73(ivec3) Bitcast 72
75: 53(ivec4) Load 55(udata)
76: 73(ivec3) VectorShuffle 75 75 0 1 2
77: 73(ivec3) IAdd 76 74
78: 53(ivec4) Load 55(udata)
79: 53(ivec4) VectorShuffle 78 77 4 5 6 3
Store 55(udata) 79
80: 46(fvec4) Load 48(f4)
81: 53(ivec4) Bitcast 80
82: 53(ivec4) Load 55(udata)
83: 53(ivec4) IAdd 82 81
Store 55(udata) 83
Store 85(fdata) 87
90: 6(int) Load 89(i1)
91: 12(float) Bitcast 90
93: 92(ptr) AccessChain 85(fdata) 18
94: 12(float) Load 93
95: 12(float) FAdd 94 91
96: 92(ptr) AccessChain 85(fdata) 18
Store 96 95
99: 28(ivec2) Load 98(i2)
100: 24(fvec2) Bitcast 99
101: 46(fvec4) Load 85(fdata)
102: 24(fvec2) VectorShuffle 101 101 0 1
103: 24(fvec2) FAdd 102 100
104: 46(fvec4) Load 85(fdata)
105: 46(fvec4) VectorShuffle 104 103 4 5 2 3
Store 85(fdata) 105
108: 39(ivec3) Load 107(i3)
109: 35(fvec3) Bitcast 108
110: 46(fvec4) Load 85(fdata)
111: 35(fvec3) VectorShuffle 110 110 0 1 2
112: 35(fvec3) FAdd 111 109
113: 46(fvec4) Load 85(fdata)
114: 46(fvec4) VectorShuffle 113 112 4 5 6 3
Store 85(fdata) 114
117: 7(ivec4) Load 116(i4)
118: 46(fvec4) Bitcast 117
119: 46(fvec4) Load 85(fdata)
120: 46(fvec4) FAdd 119 118
Store 85(fdata) 120
123: 17(int) Load 122(u1)
124: 12(float) Bitcast 123
125: 92(ptr) AccessChain 85(fdata) 18
126: 12(float) Load 125
127: 12(float) FAdd 126 124
128: 92(ptr) AccessChain 85(fdata) 18
Store 128 127
131: 65(ivec2) Load 130(u2)
132: 24(fvec2) Bitcast 131
133: 46(fvec4) Load 85(fdata)
134: 24(fvec2) VectorShuffle 133 133 0 1
135: 24(fvec2) FAdd 134 132
136: 46(fvec4) Load 85(fdata)
137: 46(fvec4) VectorShuffle 136 135 4 5 2 3
Store 85(fdata) 137
140: 73(ivec3) Load 139(u3)
141: 35(fvec3) Bitcast 140
142: 46(fvec4) Load 85(fdata)
143: 35(fvec3) VectorShuffle 142 142 0 1 2
144: 35(fvec3) FAdd 143 141
145: 46(fvec4) Load 85(fdata)
146: 46(fvec4) VectorShuffle 145 144 4 5 6 3
Store 85(fdata) 146
149: 53(ivec4) Load 148(u4)
150: 46(fvec4) Bitcast 149
151: 46(fvec4) Load 85(fdata)
152: 46(fvec4) FAdd 151 150
Store 85(fdata) 152
Return
FunctionEnd

41
Test/spv.310.bitcast.frag Normal file
Просмотреть файл

@ -0,0 +1,41 @@
#version 310 es
flat in mediump int i1;
flat in lowp ivec2 i2;
flat in mediump ivec3 i3;
flat in highp ivec4 i4;
flat in mediump uint u1;
flat in lowp uvec2 u2;
flat in mediump uvec3 u3;
flat in highp uvec4 u4;
mediump in float f1;
lowp in vec2 f2;
mediump in vec3 f3;
highp in vec4 f4;
void main()
{
highp ivec4 idata = ivec4(0);
idata.x += floatBitsToInt(f1);
idata.xy += floatBitsToInt(f2);
idata.xyz += floatBitsToInt(f3);
idata += floatBitsToInt(f4);
highp uvec4 udata = uvec4(0);
udata.x += floatBitsToUint(f1);
udata.xy += floatBitsToUint(f2);
udata.xyz += floatBitsToUint(f3);
udata += floatBitsToUint(f4);
highp vec4 fdata = vec4(0.0);
fdata.x += intBitsToFloat(i1);
fdata.xy += intBitsToFloat(i2);
fdata.xyz += intBitsToFloat(i3);
fdata += intBitsToFloat(i4);
fdata.x += uintBitsToFloat(u1);
fdata.xy += uintBitsToFloat(u2);
fdata.xyz += uintBitsToFloat(u3);
fdata += uintBitsToFloat(u4);
}

Просмотреть файл

@ -859,26 +859,26 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan)
if ((profile == EEsProfile && version >= 300) ||
(profile != EEsProfile && version >= 330)) {
commonBuiltins.append(
"int floatBitsToInt(float value);"
"ivec2 floatBitsToInt(vec2 value);"
"ivec3 floatBitsToInt(vec3 value);"
"ivec4 floatBitsToInt(vec4 value);"
"highp int floatBitsToInt(highp float value);"
"highp ivec2 floatBitsToInt(highp vec2 value);"
"highp ivec3 floatBitsToInt(highp vec3 value);"
"highp ivec4 floatBitsToInt(highp vec4 value);"
"uint floatBitsToUint(float value);"
"uvec2 floatBitsToUint(vec2 value);"
"uvec3 floatBitsToUint(vec3 value);"
"uvec4 floatBitsToUint(vec4 value);"
"float intBitsToFloat(int value);"
"vec2 intBitsToFloat(ivec2 value);"
"vec3 intBitsToFloat(ivec3 value);"
"vec4 intBitsToFloat(ivec4 value);"
"float uintBitsToFloat(uint value);"
"vec2 uintBitsToFloat(uvec2 value);"
"vec3 uintBitsToFloat(uvec3 value);"
"vec4 uintBitsToFloat(uvec4 value);"
"highp uint floatBitsToUint(highp float value);"
"highp uvec2 floatBitsToUint(highp vec2 value);"
"highp uvec3 floatBitsToUint(highp vec3 value);"
"highp uvec4 floatBitsToUint(highp vec4 value);"
"highp float intBitsToFloat(highp int value);"
"highp vec2 intBitsToFloat(highp ivec2 value);"
"highp vec3 intBitsToFloat(highp ivec3 value);"
"highp vec4 intBitsToFloat(highp ivec4 value);"
"highp float uintBitsToFloat(highp uint value);"
"highp vec2 uintBitsToFloat(highp uvec2 value);"
"highp vec3 uintBitsToFloat(highp uvec3 value);"
"highp vec4 uintBitsToFloat(highp uvec4 value);"
"\n");
}

Просмотреть файл

@ -100,6 +100,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.300layout.vert",
"spv.300layoutp.vert",
"spv.310.comp",
"spv.310.bitcast.frag",
"spv.330.geom",
"spv.400.frag",
"spv.400.tesc",