Merge pull request #801 from amdrexu/bugfix

HLSL: Fix an issue of frexp().
This commit is contained in:
John Kessenich 2017-03-29 10:04:30 -06:00 committed by GitHub
commit 714e58b2fc
11 changed files with 10037 additions and 9638 deletions

View File

@ -4618,6 +4618,9 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
spv::Id typeId0 = 0;
if (consumedOperands > 0)
typeId0 = builder.getTypeId(operands[0]);
spv::Id typeId1 = 0;
if (consumedOperands > 1)
typeId1 = builder.getTypeId(operands[1]);
spv::Id frexpIntType = 0;
switch (op) {
@ -4739,13 +4742,22 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall = spv::GLSLstd450Fma;
break;
case glslang::EOpFrexp:
libCall = spv::GLSLstd450FrexpStruct;
if (builder.getNumComponents(operands[0]) == 1)
frexpIntType = builder.makeIntegerType(32, true);
else
frexpIntType = builder.makeVectorType(builder.makeIntegerType(32, true), builder.getNumComponents(operands[0]));
typeId = builder.makeStructResultType(typeId0, frexpIntType);
consumedOperands = 1;
{
libCall = spv::GLSLstd450FrexpStruct;
assert(builder.isPointerType(typeId1));
typeId1 = builder.getContainedTypeId(typeId1);
#ifdef AMD_EXTENSIONS
int width = builder.getScalarTypeWidth(typeId1);
#else
int width = 32;
#endif
if (builder.getNumComponents(operands[0]) == 1)
frexpIntType = builder.makeIntegerType(width, true);
else
frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true), builder.getNumComponents(operands[0]));
typeId = builder.makeStructResultType(typeId0, frexpIntType);
consumedOperands = 1;
}
break;
case glslang::EOpLdexp:
libCall = spv::GLSLstd450Ldexp;
@ -4853,9 +4865,18 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]);
break;
case glslang::EOpFrexp:
assert(operands.size() == 2);
builder.createStore(builder.createCompositeExtract(id, frexpIntType, 1), operands[1]);
id = builder.createCompositeExtract(id, typeId0, 0);
{
assert(operands.size() == 2);
if (builder.isFloatType(builder.getScalarTypeId(typeId1))) {
// "exp" is floating-point type (from HLSL intrinsic)
spv::Id member1 = builder.createCompositeExtract(id, frexpIntType, 1);
member1 = builder.createUnaryOp(spv::OpConvertSToF, typeId1, member1);
builder.createStore(member1, operands[1]);
} else
// "exp" is integer type (from GLSL built-in function)
builder.createStore(builder.createCompositeExtract(id, frexpIntType, 1), operands[1]);
id = builder.createCompositeExtract(id, typeId0, 0);
}
break;
default:
break;

View File

@ -134,6 +134,9 @@ public:
bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
bool isBoolType(Id typeId) const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
bool isIntType(Id typeId) const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
bool isUintType(Id typeId) const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
bool isFloatType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat; }
bool isPointerType(Id typeId) const { return getTypeClass(typeId) == OpTypePointer; }
bool isScalarType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
bool isVectorType(Id typeId) const { return getTypeClass(typeId) == OpTypeVector; }
@ -153,6 +156,13 @@ public:
unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
int getScalarTypeWidth(Id typeId) const
{
Id scalarTypeId = getScalarTypeId(typeId);
assert(getTypeClass(scalarTypeId) == OpTypeInt || getTypeClass(scalarTypeId) == OpTypeFloat);
return module.getInstruction(scalarTypeId)->getImmediateOperand(0);
}
int getTypeNumColumns(Id typeId) const
{
assert(isMatrixType(typeId));

View File

@ -0,0 +1,335 @@
hlsl.intrinsic.frexp.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: PixelShaderFunctionS(f1;f1; ( temp float)
0:3 Function Parameters:
0:3 'inF0' ( in float)
0:3 'inF1' ( in float)
0:? Sequence
0:4 Sequence
0:4 move second child to first child ( temp float)
0:4 'r000' ( temp float)
0:4 frexp ( temp float)
0:4 'inF0' ( in float)
0:4 'inF1' ( in float)
0:5 Branch: Return with expression
0:5 Constant:
0:5 0.000000
0:9 Function Definition: PixelShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
0:9 Function Parameters:
0:9 'inF0' ( in 2-component vector of float)
0:9 'inF1' ( in 2-component vector of float)
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 2-component vector of float)
0:10 'r000' ( temp 2-component vector of float)
0:10 frexp ( temp 2-component vector of float)
0:10 'inF0' ( in 2-component vector of float)
0:10 'inF1' ( in 2-component vector of float)
0:11 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
0:15 Function Parameters:
0:15 'inF0' ( in 3-component vector of float)
0:15 'inF1' ( in 3-component vector of float)
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 3-component vector of float)
0:16 'r000' ( temp 3-component vector of float)
0:16 frexp ( temp 3-component vector of float)
0:16 'inF0' ( in 3-component vector of float)
0:16 'inF1' ( in 3-component vector of float)
0:17 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:21 Function Parameters:
0:21 'inF0' ( in 4-component vector of float)
0:21 'inF1' ( in 4-component vector of float)
0:? Sequence
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
0:22 'r000' ( temp 4-component vector of float)
0:22 frexp ( temp 4-component vector of float)
0:22 'inF0' ( in 4-component vector of float)
0:22 'inF1' ( in 4-component vector of float)
0:23 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:33 Function Parameters:
0:? Sequence
0:35 move second child to first child ( temp 4-component vector of float)
0:35 color: direct index for structure ( temp 4-component vector of float)
0:35 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:35 Constant:
0:35 0 (const int)
0:35 Constant:
0:35 1.000000
0:35 1.000000
0:35 1.000000
0:35 1.000000
0:36 Branch: Return with expression
0:36 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:33 Function Definition: main( ( temp void)
0:33 Function Parameters:
0:? Sequence
0:33 Sequence
0:33 move second child to first child ( temp 4-component vector of float)
0:? 'color' (layout( location=0) out 4-component vector of float)
0:33 color: direct index for structure ( temp 4-component vector of float)
0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:33 Constant:
0:33 0 (const int)
0:? Linker Objects
0:? 'color' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:3 Function Definition: PixelShaderFunctionS(f1;f1; ( temp float)
0:3 Function Parameters:
0:3 'inF0' ( in float)
0:3 'inF1' ( in float)
0:? Sequence
0:4 Sequence
0:4 move second child to first child ( temp float)
0:4 'r000' ( temp float)
0:4 frexp ( temp float)
0:4 'inF0' ( in float)
0:4 'inF1' ( in float)
0:5 Branch: Return with expression
0:5 Constant:
0:5 0.000000
0:9 Function Definition: PixelShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
0:9 Function Parameters:
0:9 'inF0' ( in 2-component vector of float)
0:9 'inF1' ( in 2-component vector of float)
0:? Sequence
0:10 Sequence
0:10 move second child to first child ( temp 2-component vector of float)
0:10 'r000' ( temp 2-component vector of float)
0:10 frexp ( temp 2-component vector of float)
0:10 'inF0' ( in 2-component vector of float)
0:10 'inF1' ( in 2-component vector of float)
0:11 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
0:15 Function Parameters:
0:15 'inF0' ( in 3-component vector of float)
0:15 'inF1' ( in 3-component vector of float)
0:? Sequence
0:16 Sequence
0:16 move second child to first child ( temp 3-component vector of float)
0:16 'r000' ( temp 3-component vector of float)
0:16 frexp ( temp 3-component vector of float)
0:16 'inF0' ( in 3-component vector of float)
0:16 'inF1' ( in 3-component vector of float)
0:17 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:21 Function Parameters:
0:21 'inF0' ( in 4-component vector of float)
0:21 'inF1' ( in 4-component vector of float)
0:? Sequence
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
0:22 'r000' ( temp 4-component vector of float)
0:22 frexp ( temp 4-component vector of float)
0:22 'inF0' ( in 4-component vector of float)
0:22 'inF1' ( in 4-component vector of float)
0:23 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
0:33 Function Parameters:
0:? Sequence
0:35 move second child to first child ( temp 4-component vector of float)
0:35 color: direct index for structure ( temp 4-component vector of float)
0:35 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:35 Constant:
0:35 0 (const int)
0:35 Constant:
0:35 1.000000
0:35 1.000000
0:35 1.000000
0:35 1.000000
0:36 Branch: Return with expression
0:36 'ps_output' ( temp structure{ temp 4-component vector of float color})
0:33 Function Definition: main( ( temp void)
0:33 Function Parameters:
0:? Sequence
0:33 Sequence
0:33 move second child to first child ( temp 4-component vector of float)
0:? 'color' (layout( location=0) out 4-component vector of float)
0:33 color: direct index for structure ( temp 4-component vector of float)
0:33 Function Call: @main( ( temp structure{ temp 4-component vector of float color})
0:33 Constant:
0:33 0 (const int)
0:? Linker Objects
0:? 'color' (layout( location=0) out 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 98
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 95
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 11 "PixelShaderFunctionS(f1;f1;"
Name 9 "inF0"
Name 10 "inF1"
Name 18 "PixelShaderFunction2(vf2;vf2;"
Name 16 "inF0"
Name 17 "inF1"
Name 25 "PixelShaderFunction3(vf3;vf3;"
Name 23 "inF0"
Name 24 "inF1"
Name 32 "PixelShaderFunction(vf4;vf4;"
Name 30 "inF0"
Name 31 "inF1"
Name 34 "PS_OUTPUT"
MemberName 34(PS_OUTPUT) 0 "color"
Name 36 "@main("
Name 38 "r000"
Name 41 "ResType"
Name 49 "r000"
Name 52 "ResType"
Name 62 "r000"
Name 65 "ResType"
Name 74 "r000"
Name 77 "ResType"
Name 87 "ps_output"
Name 95 "color"
Decorate 95(color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Function 6(float)
8: TypeFunction 6(float) 7(ptr) 7(ptr)
13: TypeVector 6(float) 2
14: TypePointer Function 13(fvec2)
15: TypeFunction 13(fvec2) 14(ptr) 14(ptr)
20: TypeVector 6(float) 3
21: TypePointer Function 20(fvec3)
22: TypeFunction 20(fvec3) 21(ptr) 21(ptr)
27: TypeVector 6(float) 4
28: TypePointer Function 27(fvec4)
29: TypeFunction 27(fvec4) 28(ptr) 28(ptr)
34(PS_OUTPUT): TypeStruct 27(fvec4)
35: TypeFunction 34(PS_OUTPUT)
40: TypeInt 32 1
41(ResType): TypeStruct 6(float) 40(int)
46: 6(float) Constant 0
51: TypeVector 40(int) 2
52(ResType): TypeStruct 13(fvec2) 51(ivec2)
57: 6(float) Constant 1065353216
58: 6(float) Constant 1073741824
59: 13(fvec2) ConstantComposite 57 58
64: TypeVector 40(int) 3
65(ResType): TypeStruct 20(fvec3) 64(ivec3)
70: 6(float) Constant 1077936128
71: 20(fvec3) ConstantComposite 57 58 70
76: TypeVector 40(int) 4
77(ResType): TypeStruct 27(fvec4) 76(ivec4)
82: 6(float) Constant 1082130432
83: 27(fvec4) ConstantComposite 57 58 70 82
86: TypePointer Function 34(PS_OUTPUT)
88: 40(int) Constant 0
89: 27(fvec4) ConstantComposite 57 57 57 57
94: TypePointer Output 27(fvec4)
95(color): 94(ptr) Variable Output
4(main): 2 Function None 3
5: Label
96:34(PS_OUTPUT) FunctionCall 36(@main()
97: 27(fvec4) CompositeExtract 96 0
Store 95(color) 97
Return
FunctionEnd
11(PixelShaderFunctionS(f1;f1;): 6(float) Function None 8
9(inF0): 7(ptr) FunctionParameter
10(inF1): 7(ptr) FunctionParameter
12: Label
38(r000): 7(ptr) Variable Function
39: 6(float) Load 9(inF0)
42: 41(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 39
43: 40(int) CompositeExtract 42 1
44: 6(float) ConvertSToF 43
Store 10(inF1) 44
45: 6(float) CompositeExtract 42 0
Store 38(r000) 45
ReturnValue 46
FunctionEnd
18(PixelShaderFunction2(vf2;vf2;): 13(fvec2) Function None 15
16(inF0): 14(ptr) FunctionParameter
17(inF1): 14(ptr) FunctionParameter
19: Label
49(r000): 14(ptr) Variable Function
50: 13(fvec2) Load 16(inF0)
53: 52(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 50
54: 51(ivec2) CompositeExtract 53 1
55: 13(fvec2) ConvertSToF 54
Store 17(inF1) 55
56: 13(fvec2) CompositeExtract 53 0
Store 49(r000) 56
ReturnValue 59
FunctionEnd
25(PixelShaderFunction3(vf3;vf3;): 20(fvec3) Function None 22
23(inF0): 21(ptr) FunctionParameter
24(inF1): 21(ptr) FunctionParameter
26: Label
62(r000): 21(ptr) Variable Function
63: 20(fvec3) Load 23(inF0)
66: 65(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 63
67: 64(ivec3) CompositeExtract 66 1
68: 20(fvec3) ConvertSToF 67
Store 24(inF1) 68
69: 20(fvec3) CompositeExtract 66 0
Store 62(r000) 69
ReturnValue 71
FunctionEnd
32(PixelShaderFunction(vf4;vf4;): 27(fvec4) Function None 29
30(inF0): 28(ptr) FunctionParameter
31(inF1): 28(ptr) FunctionParameter
33: Label
74(r000): 28(ptr) Variable Function
75: 27(fvec4) Load 30(inF0)
78: 77(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 75
79: 76(ivec4) CompositeExtract 78 1
80: 27(fvec4) ConvertSToF 79
Store 31(inF1) 80
81: 27(fvec4) CompositeExtract 78 0
Store 74(r000) 81
ReturnValue 83
FunctionEnd
36(@main():34(PS_OUTPUT) Function None 35
37: Label
87(ps_output): 86(ptr) Variable Function
90: 28(ptr) AccessChain 87(ps_output) 88
Store 90 89
91:34(PS_OUTPUT) Load 87(ps_output)
ReturnValue 91
FunctionEnd

View File

@ -0,0 +1,221 @@
hlsl.intrinsic.frexp.vert
Shader version: 450
0:? Sequence
0:2 Function Definition: VertexShaderFunctionS(f1;f1; ( temp float)
0:2 Function Parameters:
0:2 'inF0' ( in float)
0:2 'inF1' ( in float)
0:? Sequence
0:3 frexp ( temp float)
0:3 'inF0' ( in float)
0:3 'inF1' ( in float)
0:4 Branch: Return with expression
0:4 Constant:
0:4 0.000000
0:8 Function Definition: VertexShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
0:8 Function Parameters:
0:8 'inF0' ( in 2-component vector of float)
0:8 'inF1' ( in 2-component vector of float)
0:? Sequence
0:9 frexp ( temp 2-component vector of float)
0:9 'inF0' ( in 2-component vector of float)
0:9 'inF1' ( in 2-component vector of float)
0:10 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
0:14 Function Parameters:
0:14 'inF0' ( in 3-component vector of float)
0:14 'inF1' ( in 3-component vector of float)
0:? Sequence
0:15 frexp ( temp 3-component vector of float)
0:15 'inF0' ( in 3-component vector of float)
0:15 'inF1' ( in 3-component vector of float)
0:16 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float)
0:20 Function Parameters:
0:20 'inF0' ( in 4-component vector of float)
0:20 'inF1' ( in 4-component vector of float)
0:? Sequence
0:21 frexp ( temp 4-component vector of float)
0:21 'inF0' ( in 4-component vector of float)
0:21 'inF1' ( in 4-component vector of float)
0:22 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
Linked vertex stage:
WARNING: Linking vertex stage: Entry point not found
Shader version: 450
0:? Sequence
0:2 Function Definition: VertexShaderFunctionS(f1;f1; ( temp float)
0:2 Function Parameters:
0:2 'inF0' ( in float)
0:2 'inF1' ( in float)
0:? Sequence
0:3 frexp ( temp float)
0:3 'inF0' ( in float)
0:3 'inF1' ( in float)
0:4 Branch: Return with expression
0:4 Constant:
0:4 0.000000
0:8 Function Definition: VertexShaderFunction2(vf2;vf2; ( temp 2-component vector of float)
0:8 Function Parameters:
0:8 'inF0' ( in 2-component vector of float)
0:8 'inF1' ( in 2-component vector of float)
0:? Sequence
0:9 frexp ( temp 2-component vector of float)
0:9 'inF0' ( in 2-component vector of float)
0:9 'inF1' ( in 2-component vector of float)
0:10 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float)
0:14 Function Parameters:
0:14 'inF0' ( in 3-component vector of float)
0:14 'inF1' ( in 3-component vector of float)
0:? Sequence
0:15 frexp ( temp 3-component vector of float)
0:15 'inF0' ( in 3-component vector of float)
0:15 'inF1' ( in 3-component vector of float)
0:16 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float)
0:20 Function Parameters:
0:20 'inF0' ( in 4-component vector of float)
0:20 'inF1' ( in 4-component vector of float)
0:? Sequence
0:21 frexp ( temp 4-component vector of float)
0:21 'inF0' ( in 4-component vector of float)
0:21 'inF1' ( in 4-component vector of float)
0:22 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 78
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "VertexShaderFunction"
Name 4 "VertexShaderFunction"
Name 11 "VertexShaderFunctionS(f1;f1;"
Name 9 "inF0"
Name 10 "inF1"
Name 18 "VertexShaderFunction2(vf2;vf2;"
Name 16 "inF0"
Name 17 "inF1"
Name 25 "VertexShaderFunction3(vf3;vf3;"
Name 23 "inF0"
Name 24 "inF1"
Name 32 "VertexShaderFunction4(vf4;vf4;"
Name 30 "inF0"
Name 31 "inF1"
Name 36 "ResType"
Name 46 "ResType"
Name 58 "ResType"
Name 69 "ResType"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Function 6(float)
8: TypeFunction 6(float) 7(ptr) 7(ptr)
13: TypeVector 6(float) 2
14: TypePointer Function 13(fvec2)
15: TypeFunction 13(fvec2) 14(ptr) 14(ptr)
20: TypeVector 6(float) 3
21: TypePointer Function 20(fvec3)
22: TypeFunction 20(fvec3) 21(ptr) 21(ptr)
27: TypeVector 6(float) 4
28: TypePointer Function 27(fvec4)
29: TypeFunction 27(fvec4) 28(ptr) 28(ptr)
35: TypeInt 32 1
36(ResType): TypeStruct 6(float) 35(int)
41: 6(float) Constant 0
45: TypeVector 35(int) 2
46(ResType): TypeStruct 13(fvec2) 45(ivec2)
51: 6(float) Constant 1065353216
52: 6(float) Constant 1073741824
53: 13(fvec2) ConstantComposite 51 52
57: TypeVector 35(int) 3
58(ResType): TypeStruct 20(fvec3) 57(ivec3)
63: 6(float) Constant 1077936128
64: 20(fvec3) ConstantComposite 51 52 63
68: TypeVector 35(int) 4
69(ResType): TypeStruct 27(fvec4) 68(ivec4)
74: 6(float) Constant 1082130432
75: 27(fvec4) ConstantComposite 51 52 63 74
4(VertexShaderFunction): 2 Function None 3
5: Label
Return
FunctionEnd
11(VertexShaderFunctionS(f1;f1;): 6(float) Function None 8
9(inF0): 7(ptr) FunctionParameter
10(inF1): 7(ptr) FunctionParameter
12: Label
34: 6(float) Load 9(inF0)
37: 36(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 34
38: 35(int) CompositeExtract 37 1
39: 6(float) ConvertSToF 38
Store 10(inF1) 39
40: 6(float) CompositeExtract 37 0
ReturnValue 41
FunctionEnd
18(VertexShaderFunction2(vf2;vf2;): 13(fvec2) Function None 15
16(inF0): 14(ptr) FunctionParameter
17(inF1): 14(ptr) FunctionParameter
19: Label
44: 13(fvec2) Load 16(inF0)
47: 46(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 44
48: 45(ivec2) CompositeExtract 47 1
49: 13(fvec2) ConvertSToF 48
Store 17(inF1) 49
50: 13(fvec2) CompositeExtract 47 0
ReturnValue 53
FunctionEnd
25(VertexShaderFunction3(vf3;vf3;): 20(fvec3) Function None 22
23(inF0): 21(ptr) FunctionParameter
24(inF1): 21(ptr) FunctionParameter
26: Label
56: 20(fvec3) Load 23(inF0)
59: 58(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 56
60: 57(ivec3) CompositeExtract 59 1
61: 20(fvec3) ConvertSToF 60
Store 24(inF1) 61
62: 20(fvec3) CompositeExtract 59 0
ReturnValue 64
FunctionEnd
32(VertexShaderFunction4(vf4;vf4;): 27(fvec4) Function None 29
30(inF0): 28(ptr) FunctionParameter
31(inF1): 28(ptr) FunctionParameter
33: Label
67: 27(fvec4) Load 30(inF0)
70: 69(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 67
71: 68(ivec4) CompositeExtract 70 1
72: 27(fvec4) ConvertSToF 71
Store 31(inF1) 72
73: 27(fvec4) CompositeExtract 70 0
ReturnValue 75
FunctionEnd

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
float PixelShaderFunctionS(float inF0, float inF1)
{
float r000 = frexp(inF0, inF1);
return 0.0;
}
float2 PixelShaderFunction2(float2 inF0, float2 inF1)
{
float2 r000 = frexp(inF0, inF1);
return float2(1,2);
}
float3 PixelShaderFunction3(float3 inF0, float3 inF1)
{
float3 r000 = frexp(inF0, inF1);
return float3(1,2,3);
}
float4 PixelShaderFunction(float4 inF0, float4 inF1)
{
float4 r000 = frexp(inF0, inF1);
return float4(1,2,3,4);
}
// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
#define MATFNS(MT) \
MT r000 = frexp(inF0, inF1);
struct PS_OUTPUT { float4 color : SV_Target0; };
PS_OUTPUT main()
{
PS_OUTPUT ps_output;
ps_output.color = 1.0;
return ps_output;
};

View File

@ -0,0 +1,28 @@
float VertexShaderFunctionS(float inF0, float inF1)
{
frexp(inF0, inF1);
return 0.0;
}
float2 VertexShaderFunction2(float2 inF0, float2 inF1)
{
frexp(inF0, inF1);
return float2(1,2);
}
float3 VertexShaderFunction3(float3 inF0, float3 inF1)
{
frexp(inF0, inF1);
return float3(1,2,3);
}
float4 VertexShaderFunction4(float4 inF0, float4 inF1)
{
frexp(inF0, inF1);
return float4(1,2,3,4);
}
// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
#define MATFNS() \
frexp(inF0, inF1);

View File

@ -52,7 +52,6 @@ float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint i
// TODO: fma(inD0, inD1, inD2);
float r033 = fmod(inF0, inF1);
float r034 = frac(inF0);
float r035 = frexp(inF0, inF1);
float r036 = fwidth(inF0);
bool r037 = isinf(inF0);
bool r038 = isnan(inF0);
@ -136,7 +135,6 @@ float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
// TODO: fma(inD0, inD1, inD2);
float2 r035 = fmod(inF0, inF1);
float2 r036 = frac(inF0);
float2 r037 = frexp(inF0, inF1);
float2 r038 = fwidth(inF0);
bool2 r039 = isinf(inF0);
bool2 r040 = isnan(inF0);
@ -217,7 +215,6 @@ float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, u
// TODO: fma(inD0, inD1, inD2);
float3 r036 = fmod(inF0, inF1);
float3 r037 = frac(inF0);
float3 r038 = frexp(inF0, inF1);
float3 r039 = fwidth(inF0);
bool3 r040 = isinf(inF0);
bool3 r041 = isnan(inF0);
@ -299,7 +296,6 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
// TODO: fma(inD0, inD1, inD2);
float4 r036 = fmod(inF0, inF1);
float4 r037 = frac(inF0);
float4 r038 = frexp(inF0, inF1);
float4 r039 = fwidth(inF0);
bool4 r040 = isinf(inF0);
bool4 r041 = isnan(inF0);
@ -369,7 +365,6 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
MT r021 = floor(inF0); \
MT r022 = fmod(inF0, inF1); \
MT r023 = frac(inF0); \
MT r024 = frexp(inF0, inF1); \
MT r025 = fwidth(inF0); \
MT r026 = ldexp(inF0, inF1); \
MT r026a = lerp(inF0, inF1, inF2); \

View File

@ -28,7 +28,6 @@ float VertexShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -99,7 +98,6 @@ float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -170,7 +168,6 @@ float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -241,7 +238,6 @@ float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0,
// TODO: fma(inD0, inD1, inD2);
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -305,7 +301,6 @@ float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0,
floor(inF0); \
fmod(inF0, inF1); \
frac(inF0); \
frexp(inF0, inF1); \
ldexp(inF0, inF1); \
lerp(inF0, inF1, inF2); \
log(inF0); \

View File

@ -138,6 +138,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.intrinsics.f1632.frag", "main"},
{"hlsl.intrinsics.f3216.frag", "main"},
{"hlsl.intrinsics.frag", "main"},
{"hlsl.intrinsic.frexp.frag", "main"},
{"hlsl.intrinsics.lit.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
@ -239,6 +240,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.structStructName.frag", "main"},
{"hlsl.this.frag", "main"},
{"hlsl.intrinsics.vert", "VertexShaderFunction"},
{"hlsl.intrinsic.frexp.vert", "VertexShaderFunction"},
{"hlsl.matType.frag", "PixelShaderFunction"},
{"hlsl.matType.bool.frag", "main"},
{"hlsl.matType.int.frag", "main"},