Parser: Add 64-bit type conversion for specialization constant.
This commit is contained in:
		
							parent
							
								
									7d01bd6f0b
								
							
						
					
					
						commit
						64bcfdb632
					
				| @ -3761,8 +3761,8 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec | ||||
|     case glslang::EOpConvInt64ToUint64: | ||||
|         if (builder.isInSpecConstCodeGenMode()) { | ||||
|             // Build zero scalar or vector for OpIAdd.
 | ||||
|             zero = (op == glslang::EOpConvUintToInt64 || | ||||
|                     op == glslang::EOpConvIntToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0); | ||||
|             zero = (op == glslang::EOpConvUint64ToInt64 || | ||||
|                     op == glslang::EOpConvInt64ToUint64) ? builder.makeUint64Constant(0) : builder.makeUintConstant(0); | ||||
|             zero = makeSmearedConstant(zero, vectorSize); | ||||
|             // Use OpIAdd, instead of OpBitcast to do the conversion when
 | ||||
|             // generating for OpSpecConstantOp instruction.
 | ||||
|  | ||||
| @ -8,7 +8,7 @@ Linked fragment stage: | ||||
| Missing functionality: shader int64 | ||||
| // Module Version 10000 | ||||
| // Generated by (magic number): 80001 | ||||
| // Id's are bound by 455 | ||||
| // Id's are bound by 478 | ||||
| 
 | ||||
|                               Capability Shader | ||||
|                               Capability Float64 | ||||
| @ -64,6 +64,11 @@ Missing functionality: shader int64 | ||||
|                               Decorate 452(Block) Block | ||||
|                               Decorate 454(block) DescriptorSet 0 | ||||
|                               Decorate 454(block) Binding 1 | ||||
|                               Decorate 455 SpecId 100 | ||||
|                               Decorate 456 SpecId 101 | ||||
|                               Decorate 457 SpecId 102 | ||||
|                               Decorate 458 SpecId 103 | ||||
|                               Decorate 459 SpecId 104 | ||||
|                2:             TypeVoid | ||||
|                3:             TypeFunction 2 | ||||
|               14:             TypeInt 64 1 | ||||
| @ -145,6 +150,29 @@ Missing functionality: shader int64 | ||||
|       452(Block):             TypeStruct 134(ivec3) 36(int) | ||||
|              453:             TypePointer Uniform 452(Block) | ||||
|       454(block):    453(ptr) Variable Uniform | ||||
|              455:     14(int) SpecConstant 4294967286 4294967295 | ||||
|              456:     36(int) SpecConstant 20 0 | ||||
|              457:     27(int) SpecConstant 4294967291 | ||||
|              458:     17(int) SpecConstant 4 | ||||
|              459:    53(bool) SpecConstantTrue | ||||
|              460:    53(bool) SpecConstantOp 171 455 67 | ||||
|              461:    53(bool) SpecConstantOp 171 456 67 | ||||
|              462:     14(int) SpecConstantOp 169 459 59 58 | ||||
|              463:     36(int) SpecConstantOp 169 459 68 67 | ||||
|              464:     27(int) SpecConstantOp 114 455 | ||||
|              465:     14(int) SpecConstantOp 114 457 | ||||
|              466:     17(int) SpecConstantOp 113 456 | ||||
|              467:     36(int) SpecConstantOp 113 458 | ||||
|              468:     14(int) SpecConstantOp 128 456 67 | ||||
|              469:     36(int) SpecConstantOp 128 455 67 | ||||
|              470:     17(int) SpecConstantOp 113 456 | ||||
|              471:     27(int) SpecConstantOp 128 470 217 | ||||
|              472:     14(int) SpecConstantOp 114 457 | ||||
|              473:     36(int) SpecConstantOp 128 472 67 | ||||
|              474:     27(int) SpecConstantOp 114 455 | ||||
|              475:     17(int) SpecConstantOp 128 474 217 | ||||
|              476:     36(int) SpecConstantOp 113 458 | ||||
|              477:     14(int) SpecConstantOp 128 476 67 | ||||
|          4(main):           2 Function None 3 | ||||
|                5:             Label | ||||
|                               Return | ||||
|  | ||||
| @ -61,6 +61,7 @@ Linked vertex stage: | ||||
|               38:             TypeFloat 64 | ||||
|               39:   38(float) SpecConstant 1413754136 1074340347 | ||||
|               40:    6(float) SpecConstant 1078523331 | ||||
|               41:   38(float) SpecConstantOp 115 40 | ||||
|               50:      8(int) SpecConstant 12 | ||||
|               51:             TypeArray 7(fvec4) 50 | ||||
|               52:             TypePointer Input 51 | ||||
| @ -69,6 +70,7 @@ Linked vertex stage: | ||||
|               63:     33(int) SpecConstant 2 | ||||
|               67:   38(float) SpecConstant 1413754136 1074340347 | ||||
|               68:    6(float) SpecConstant 1078523331 | ||||
|               69:   38(float) SpecConstantOp 115 68 | ||||
|               75:             TypePointer Function 8(int) | ||||
|               77:      8(int) SpecConstant 8 | ||||
|          4(main):           2 Function None 3 | ||||
| @ -87,7 +89,6 @@ Linked vertex stage: | ||||
|                                 Store 20(color) 37 | ||||
|                                 Branch 32 | ||||
|               32:             Label | ||||
|               41:   38(float) FConvert 40 | ||||
|               42:   38(float) FDiv 39 41 | ||||
|               43:    6(float) FConvert 42 | ||||
|               44:    7(fvec4) Load 20(color) | ||||
| @ -119,7 +120,6 @@ Linked vertex stage: | ||||
|                                 Store 20(color) 66 | ||||
|                                 Branch 62 | ||||
|               62:             Label | ||||
|               69:   38(float) FConvert 68 | ||||
|               70:   38(float) FDiv 67 69 | ||||
|               71:    6(float) FConvert 70 | ||||
|               72:    7(fvec4) Load 20(color) | ||||
|  | ||||
| @ -7,9 +7,10 @@ Linked vertex stage: | ||||
| 
 | ||||
| // Module Version 10000 | ||||
| // Generated by (magic number): 80001 | ||||
| // Id's are bound by 131 | ||||
| // Id's are bound by 135 | ||||
| 
 | ||||
|                               Capability Shader | ||||
|                               Capability Float64 | ||||
|                1:             ExtInstImport  "GLSL.std.450" | ||||
|                               MemoryModel Logical GLSL450 | ||||
|                               EntryPoint Vertex 4  "main" | ||||
| @ -22,6 +23,7 @@ Linked vertex stage: | ||||
|                               Decorate 40 SpecId 200 | ||||
|                               Decorate 42 SpecId 202 | ||||
|                               Decorate 43 SpecId 203 | ||||
|                               Decorate 45 SpecId 204 | ||||
|                2:             TypeVoid | ||||
|                3:             TypeFunction 2 | ||||
|                6:             TypeInt 32 1 | ||||
| @ -43,93 +45,97 @@ Linked vertex stage: | ||||
|               41:             TypeInt 32 0 | ||||
|               42:     41(int) SpecConstant 100 | ||||
|               43:      6(int) SpecConstant 4294967286 | ||||
|               44:     41(int) Constant 0 | ||||
|               45:    22(bool) SpecConstantOp 171 19 44 | ||||
|               46:    22(bool) SpecConstantOp 171 42 44 | ||||
|               47:      6(int) SpecConstantOp 169 45 32 12 | ||||
|               48:     41(int) Constant 1 | ||||
|               49:     41(int) SpecConstantOp 169 45 48 44 | ||||
|               50:     41(int) SpecConstantOp 128 43 44 | ||||
|               51:      6(int) SpecConstantOp 128 42 44 | ||||
|               52:      6(int) SpecConstantOp 126 19 | ||||
|               53:      6(int) SpecConstantOp 200 19 | ||||
|               54:      6(int) SpecConstantOp 128 19 20 | ||||
|               55:      6(int) SpecConstantOp 128 19 20 | ||||
|               56:      6(int) Constant 3 | ||||
|               57:      6(int) SpecConstantOp 130 55 56 | ||||
|               58:      6(int) Constant 4 | ||||
|               59:      6(int) SpecConstantOp 130 54 58 | ||||
|               60:      6(int) SpecConstantOp 132 43 20 | ||||
|               61:     41(int) Constant 2 | ||||
|               62:     41(int) SpecConstantOp 132 42 61 | ||||
|               63:      6(int) Constant 5 | ||||
|               64:      6(int) SpecConstantOp 135 60 63 | ||||
|               65:     41(int) Constant 5 | ||||
|               66:     41(int) SpecConstantOp 134 62 65 | ||||
|               67:      6(int) SpecConstantOp 139 43 58 | ||||
|               68:     41(int) Constant 4 | ||||
|               69:     41(int) SpecConstantOp 137 42 68 | ||||
|               70:      6(int) SpecConstantOp 132 43 56 | ||||
|               71:      6(int) SpecConstantOp 135 70 63 | ||||
|               72:      6(int) Constant 10 | ||||
|               73:      6(int) SpecConstantOp 195 43 72 | ||||
|               74:      6(int) Constant 20 | ||||
|               75:     41(int) SpecConstantOp 194 42 74 | ||||
|               76:      6(int) SpecConstantOp 196 43 32 | ||||
|               77:     41(int) SpecConstantOp 196 42 20 | ||||
|               78:      6(int) Constant 256 | ||||
|               79:      6(int) SpecConstantOp 197 43 78 | ||||
|               80:     41(int) Constant 512 | ||||
|               81:     41(int) SpecConstantOp 198 42 80 | ||||
|               82:    22(bool) SpecConstantOp 177 19 43 | ||||
|               83:    22(bool) SpecConstantOp 170 42 42 | ||||
|               84:    22(bool) SpecConstantOp 173 19 43 | ||||
|               85:      6(int) Constant 30 | ||||
|               86:             TypeVector 6(int) 4 | ||||
|               87:   86(ivec4) SpecConstantComposite 74 85 19 19 | ||||
|               88:     41(int) Constant 4294967295 | ||||
|               89:     41(int) Constant 4294967294 | ||||
|               90:             TypeVector 41(int) 4 | ||||
|               91:   90(ivec4) SpecConstantComposite 42 42 88 89 | ||||
|               92:             TypeVector 22(bool) 4 | ||||
|               93:   90(ivec4) ConstantComposite 44 44 44 44 | ||||
|               94:   92(bvec4) SpecConstantOp 171 87 93 | ||||
|               95:   92(bvec4) SpecConstantOp 171 91 93 | ||||
|               96:   86(ivec4) ConstantComposite 12 12 12 12 | ||||
|               97:   86(ivec4) ConstantComposite 32 32 32 32 | ||||
|               98:   86(ivec4) SpecConstantOp 169 94 97 96 | ||||
|               99:   90(ivec4) ConstantComposite 48 48 48 48 | ||||
|              100:   90(ivec4) SpecConstantOp 169 94 99 93 | ||||
|              101:   90(ivec4) SpecConstantOp 128 87 93 | ||||
|              102:   86(ivec4) SpecConstantOp 128 91 93 | ||||
|              103:   86(ivec4) SpecConstantOp 200 87 | ||||
|              104:   86(ivec4) SpecConstantOp 126 87 | ||||
|              105:   86(ivec4) ConstantComposite 20 20 20 20 | ||||
|              106:   86(ivec4) SpecConstantOp 128 87 105 | ||||
|              107:   86(ivec4) SpecConstantOp 128 87 105 | ||||
|              108:   86(ivec4) ConstantComposite 56 56 56 56 | ||||
|              109:   86(ivec4) SpecConstantOp 130 107 108 | ||||
|              110:   86(ivec4) ConstantComposite 58 58 58 58 | ||||
|              111:   86(ivec4) SpecConstantOp 130 109 110 | ||||
|              112:   86(ivec4) SpecConstantOp 132 87 105 | ||||
|              113:   86(ivec4) ConstantComposite 63 63 63 63 | ||||
|              114:   86(ivec4) SpecConstantOp 135 112 113 | ||||
|              115:   86(ivec4) SpecConstantOp 139 87 110 | ||||
|              116:   86(ivec4) ConstantComposite 72 72 72 72 | ||||
|              117:   86(ivec4) SpecConstantOp 195 87 116 | ||||
|              118:   86(ivec4) SpecConstantOp 196 87 105 | ||||
|              119:      6(int) Constant 1024 | ||||
|              120:   86(ivec4) ConstantComposite 119 119 119 119 | ||||
|              121:   86(ivec4) SpecConstantOp 197 87 120 | ||||
|              122:     41(int) Constant 2048 | ||||
|              123:   90(ivec4) ConstantComposite 122 122 122 122 | ||||
|              124:   90(ivec4) SpecConstantOp 198 91 123 | ||||
|              125:      6(int) SpecConstantOp 81 87 0 | ||||
|              126:             TypeVector 6(int) 2 | ||||
|              127:  126(ivec2) SpecConstantOp 79 87 87 1(GLSL.std.450) 0 | ||||
|              128:             TypeVector 6(int) 3 | ||||
|              129:  128(ivec3) SpecConstantOp 79 87 87 2 1(GLSL.std.450) 0 | ||||
|              130:   86(ivec4) SpecConstantOp 79 87 87 1(GLSL.std.450) 2 0 3 | ||||
|               44:             TypeFloat 64 | ||||
|               45:   44(float) SpecConstant 2333366019 1074118410 | ||||
|               46:   39(float) SpecConstantOp 115 45 | ||||
|               47:   44(float) SpecConstantOp 115 40 | ||||
|               48:     41(int) Constant 0 | ||||
|               49:    22(bool) SpecConstantOp 171 19 48 | ||||
|               50:    22(bool) SpecConstantOp 171 42 48 | ||||
|               51:      6(int) SpecConstantOp 169 49 32 12 | ||||
|               52:     41(int) Constant 1 | ||||
|               53:     41(int) SpecConstantOp 169 49 52 48 | ||||
|               54:     41(int) SpecConstantOp 128 43 48 | ||||
|               55:      6(int) SpecConstantOp 128 42 48 | ||||
|               56:      6(int) SpecConstantOp 126 19 | ||||
|               57:      6(int) SpecConstantOp 200 19 | ||||
|               58:      6(int) SpecConstantOp 128 19 20 | ||||
|               59:      6(int) SpecConstantOp 128 19 20 | ||||
|               60:      6(int) Constant 3 | ||||
|               61:      6(int) SpecConstantOp 130 59 60 | ||||
|               62:      6(int) Constant 4 | ||||
|               63:      6(int) SpecConstantOp 130 58 62 | ||||
|               64:      6(int) SpecConstantOp 132 43 20 | ||||
|               65:     41(int) Constant 2 | ||||
|               66:     41(int) SpecConstantOp 132 42 65 | ||||
|               67:      6(int) Constant 5 | ||||
|               68:      6(int) SpecConstantOp 135 64 67 | ||||
|               69:     41(int) Constant 5 | ||||
|               70:     41(int) SpecConstantOp 134 66 69 | ||||
|               71:      6(int) SpecConstantOp 139 43 62 | ||||
|               72:     41(int) Constant 4 | ||||
|               73:     41(int) SpecConstantOp 137 42 72 | ||||
|               74:      6(int) SpecConstantOp 132 43 60 | ||||
|               75:      6(int) SpecConstantOp 135 74 67 | ||||
|               76:      6(int) Constant 10 | ||||
|               77:      6(int) SpecConstantOp 195 43 76 | ||||
|               78:      6(int) Constant 20 | ||||
|               79:     41(int) SpecConstantOp 194 42 78 | ||||
|               80:      6(int) SpecConstantOp 196 43 32 | ||||
|               81:     41(int) SpecConstantOp 196 42 20 | ||||
|               82:      6(int) Constant 256 | ||||
|               83:      6(int) SpecConstantOp 197 43 82 | ||||
|               84:     41(int) Constant 512 | ||||
|               85:     41(int) SpecConstantOp 198 42 84 | ||||
|               86:    22(bool) SpecConstantOp 177 19 43 | ||||
|               87:    22(bool) SpecConstantOp 170 42 42 | ||||
|               88:    22(bool) SpecConstantOp 173 19 43 | ||||
|               89:      6(int) Constant 30 | ||||
|               90:             TypeVector 6(int) 4 | ||||
|               91:   90(ivec4) SpecConstantComposite 78 89 19 19 | ||||
|               92:     41(int) Constant 4294967295 | ||||
|               93:     41(int) Constant 4294967294 | ||||
|               94:             TypeVector 41(int) 4 | ||||
|               95:   94(ivec4) SpecConstantComposite 42 42 92 93 | ||||
|               96:             TypeVector 22(bool) 4 | ||||
|               97:   94(ivec4) ConstantComposite 48 48 48 48 | ||||
|               98:   96(bvec4) SpecConstantOp 171 91 97 | ||||
|               99:   96(bvec4) SpecConstantOp 171 95 97 | ||||
|              100:   90(ivec4) ConstantComposite 12 12 12 12 | ||||
|              101:   90(ivec4) ConstantComposite 32 32 32 32 | ||||
|              102:   90(ivec4) SpecConstantOp 169 98 101 100 | ||||
|              103:   94(ivec4) ConstantComposite 52 52 52 52 | ||||
|              104:   94(ivec4) SpecConstantOp 169 98 103 97 | ||||
|              105:   94(ivec4) SpecConstantOp 128 91 97 | ||||
|              106:   90(ivec4) SpecConstantOp 128 95 97 | ||||
|              107:   90(ivec4) SpecConstantOp 200 91 | ||||
|              108:   90(ivec4) SpecConstantOp 126 91 | ||||
|              109:   90(ivec4) ConstantComposite 20 20 20 20 | ||||
|              110:   90(ivec4) SpecConstantOp 128 91 109 | ||||
|              111:   90(ivec4) SpecConstantOp 128 91 109 | ||||
|              112:   90(ivec4) ConstantComposite 60 60 60 60 | ||||
|              113:   90(ivec4) SpecConstantOp 130 111 112 | ||||
|              114:   90(ivec4) ConstantComposite 62 62 62 62 | ||||
|              115:   90(ivec4) SpecConstantOp 130 113 114 | ||||
|              116:   90(ivec4) SpecConstantOp 132 91 109 | ||||
|              117:   90(ivec4) ConstantComposite 67 67 67 67 | ||||
|              118:   90(ivec4) SpecConstantOp 135 116 117 | ||||
|              119:   90(ivec4) SpecConstantOp 139 91 114 | ||||
|              120:   90(ivec4) ConstantComposite 76 76 76 76 | ||||
|              121:   90(ivec4) SpecConstantOp 195 91 120 | ||||
|              122:   90(ivec4) SpecConstantOp 196 91 109 | ||||
|              123:      6(int) Constant 1024 | ||||
|              124:   90(ivec4) ConstantComposite 123 123 123 123 | ||||
|              125:   90(ivec4) SpecConstantOp 197 91 124 | ||||
|              126:     41(int) Constant 2048 | ||||
|              127:   94(ivec4) ConstantComposite 126 126 126 126 | ||||
|              128:   94(ivec4) SpecConstantOp 198 95 127 | ||||
|              129:      6(int) SpecConstantOp 81 91 0 | ||||
|              130:             TypeVector 6(int) 2 | ||||
|              131:  130(ivec2) SpecConstantOp 79 91 91 1(GLSL.std.450) 0 | ||||
|              132:             TypeVector 6(int) 3 | ||||
|              133:  132(ivec3) SpecConstantOp 79 91 91 2 1(GLSL.std.450) 0 | ||||
|              134:   90(ivec4) SpecConstantOp 79 91 91 1(GLSL.std.450) 2 0 3 | ||||
|          4(main):           2 Function None 3 | ||||
|                5:             Label | ||||
|                               Return | ||||
|  | ||||
| @ -226,3 +226,36 @@ void builtinFuncs() | ||||
|     bv    = notEqual(u64v, u64vec3(u64)); | ||||
|     bv.xy = notEqual(i64v, i64vec2(i64)); | ||||
| } | ||||
| 
 | ||||
| // Type conversion for specialization constant | ||||
| layout(constant_id = 100) const int64_t  si64 = -10L; | ||||
| layout(constant_id = 101) const uint64_t su64 = 20UL; | ||||
| layout(constant_id = 102) const int  si = -5; | ||||
| layout(constant_id = 103) const uint su = 4; | ||||
| layout(constant_id = 104) const bool sb = true; | ||||
| 
 | ||||
| // bool <-> int64/uint64 | ||||
| const bool i64_to_b = bool(si64); | ||||
| const bool u64_to_b = bool(su64); | ||||
| const int64_t  b_to_i64 = int64_t(sb); | ||||
| const uint64_t b_to_u64 = uint64_t(sb); | ||||
| 
 | ||||
| // int <-> int64 | ||||
| const int     i64_to_i = int(si64); | ||||
| const int64_t i_to_i64 = int64_t(si); | ||||
| 
 | ||||
| // uint <-> uint64 | ||||
| const uint     u64_to_u = uint(su64); | ||||
| const uint64_t u_to_u64 = uint64_t(su); | ||||
| 
 | ||||
| // int64 <-> uint64 | ||||
| const int64_t  u64_to_i64 = int64_t(su64); | ||||
| const uint64_t i64_to_u64 = uint64_t(si64); | ||||
| 
 | ||||
| // int <-> uint64 | ||||
| const int      u64_to_i = int(su64); | ||||
| const uint64_t i_to_u64 = uint64_t(si); | ||||
| 
 | ||||
| // uint <-> int64 | ||||
| const uint    i64_to_u = uint(si64); | ||||
| const int64_t u_to_i64 = int64_t(su); | ||||
| @ -4,12 +4,16 @@ layout(constant_id = 200) const float sp_float = 3.1415926; | ||||
| layout(constant_id = 201) const int sp_int = 10; | ||||
| layout(constant_id = 202) const uint sp_uint = 100; | ||||
| layout(constant_id = 203) const int sp_sint = -10; | ||||
| 
 | ||||
| layout(constant_id = 204) const double sp_double = 2.718281828459; | ||||
| 
 | ||||
| // | ||||
| // Scalars | ||||
| // | ||||
| 
 | ||||
| // float <-> double conversion | ||||
| const float float_from_double = float(sp_double); | ||||
| const double double_from_float = double(sp_float); | ||||
| 
 | ||||
| // uint/int <-> bool conversion | ||||
| const bool bool_from_int = bool(sp_int); | ||||
| const bool bool_from_uint = bool(sp_uint); | ||||
|  | ||||
| @ -1444,6 +1444,8 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const | ||||
|         case EOpIndexIndirect: | ||||
|         case EOpIndexDirectStruct: | ||||
|         case EOpVectorSwizzle: | ||||
|         case EOpConvFloatToDouble: | ||||
|         case EOpConvDoubleToFloat: | ||||
|             return true; | ||||
|         default: | ||||
|             return false; | ||||
| @ -1474,6 +1476,20 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const | ||||
|     case EOpConvBoolToInt: | ||||
|     case EOpConvIntToUint: | ||||
|     case EOpConvBoolToUint: | ||||
|     case EOpConvInt64ToBool: | ||||
|     case EOpConvBoolToInt64: | ||||
|     case EOpConvUint64ToBool: | ||||
|     case EOpConvBoolToUint64: | ||||
|     case EOpConvInt64ToInt: | ||||
|     case EOpConvIntToInt64: | ||||
|     case EOpConvUint64ToUint: | ||||
|     case EOpConvUintToUint64: | ||||
|     case EOpConvInt64ToUint64: | ||||
|     case EOpConvUint64ToInt64: | ||||
|     case EOpConvInt64ToUint: | ||||
|     case EOpConvUintToInt64: | ||||
|     case EOpConvUint64ToInt: | ||||
|     case EOpConvIntToUint64: | ||||
| 
 | ||||
|     // unary operations
 | ||||
|     case EOpNegative: | ||||
|  | ||||
| @ -4942,7 +4942,7 @@ const TFunction* TParseContext::findFunction120(const TSourceLoc& loc, const TFu | ||||
| // "When function calls are resolved, an exact type match for all the arguments
 | ||||
| // is sought. If an exact match is found, all other functions are ignored, and
 | ||||
| // the exact match is used. If no exact match is found, then the implicit
 | ||||
| // conversions in section 4.1.10 “Implicit Conversions” will be applied to find
 | ||||
| // conversions in section 4.1.10 Implicit Conversions will be applied to find
 | ||||
| // a match. Mismatched types on input parameters (in or inout or default) must
 | ||||
| // have a conversion from the calling argument type to the formal parameter type.
 | ||||
| // Mismatched types on output parameters (out or inout) must have a conversion
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Rex Xu
						Rex Xu