Commit 714e58b2 by John Kessenich Committed by GitHub

Merge pull request #801 from amdrexu/bugfix

HLSL: Fix an issue of frexp().
parents 3feac2eb 470026f9
......@@ -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;
......
......@@ -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));
......
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
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
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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;
};
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);
......@@ -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); \
......
......@@ -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); \
......
......@@ -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"},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment