mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-10 04:20:06 +00:00
Merge pull request #801 from amdrexu/bugfix
HLSL: Fix an issue of frexp().
This commit is contained in:
commit
714e58b2fc
@ -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));
|
||||
|
335
Test/baseResults/hlsl.intrinsic.frexp.frag.out
Normal file
335
Test/baseResults/hlsl.intrinsic.frexp.frag.out
Normal 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
|
221
Test/baseResults/hlsl.intrinsic.frexp.vert.out
Normal file
221
Test/baseResults/hlsl.intrinsic.frexp.vert.out
Normal 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
37
Test/hlsl.intrinsic.frexp.frag
Normal file
37
Test/hlsl.intrinsic.frexp.frag
Normal 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;
|
||||
};
|
28
Test/hlsl.intrinsic.frexp.vert
Normal file
28
Test/hlsl.intrinsic.frexp.vert
Normal 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);
|
||||
|
@ -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"},
|
||||
|
Loading…
Reference in New Issue
Block a user