Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
glslang
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
glslang
Commits
64bcfdb6
Commit
64bcfdb6
authored
Sep 05, 2016
by
Rex Xu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Parser: Add 64-bit type conversion for specialization constant.
parent
7d01bd6f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
90 additions
and
9 deletions
+90
-9
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+2
-2
spv.int64.frag.out
Test/baseResults/spv.int64.frag.out
+29
-1
spv.specConstant.vert.out
Test/baseResults/spv.specConstant.vert.out
+2
-2
spv.specConstantOperations.vert.out
Test/baseResults/spv.specConstantOperations.vert.out
+0
-0
spv.int64.frag
Test/spv.int64.frag
+35
-2
spv.specConstantOperations.vert
Test/spv.specConstantOperations.vert
+5
-1
Intermediate.cpp
glslang/MachineIndependent/Intermediate.cpp
+16
-0
ParseHelper.cpp
glslang/MachineIndependent/ParseHelper.cpp
+1
-1
No files found.
SPIRV/GlslangToSpv.cpp
View file @
64bcfdb6
...
@@ -3761,8 +3761,8 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
...
@@ -3761,8 +3761,8 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
case
glslang
:
:
EOpConvInt64ToUint64
:
case
glslang
:
:
EOpConvInt64ToUint64
:
if
(
builder
.
isInSpecConstCodeGenMode
())
{
if
(
builder
.
isInSpecConstCodeGenMode
())
{
// Build zero scalar or vector for OpIAdd.
// Build zero scalar or vector for OpIAdd.
zero
=
(
op
==
glslang
::
EOpConvUintToInt64
||
zero
=
(
op
==
glslang
::
EOpConvUint
64
ToInt64
||
op
==
glslang
::
EOpConvIntToUint64
)
?
builder
.
makeUint64Constant
(
0
)
:
builder
.
makeUintConstant
(
0
);
op
==
glslang
::
EOpConvInt
64
ToUint64
)
?
builder
.
makeUint64Constant
(
0
)
:
builder
.
makeUintConstant
(
0
);
zero
=
makeSmearedConstant
(
zero
,
vectorSize
);
zero
=
makeSmearedConstant
(
zero
,
vectorSize
);
// Use OpIAdd, instead of OpBitcast to do the conversion when
// Use OpIAdd, instead of OpBitcast to do the conversion when
// generating for OpSpecConstantOp instruction.
// generating for OpSpecConstantOp instruction.
...
...
Test/baseResults/spv.int64.frag.out
View file @
64bcfdb6
...
@@ -8,7 +8,7 @@ Linked fragment stage:
...
@@ -8,7 +8,7 @@ Linked fragment stage:
Missing functionality: shader int64
Missing functionality: shader int64
// Module Version 10000
// Module Version 10000
// Generated by (magic number): 80001
// Generated by (magic number): 80001
// Id's are bound by 4
55
// Id's are bound by 4
78
Capability Shader
Capability Shader
Capability Float64
Capability Float64
...
@@ -64,6 +64,11 @@ Missing functionality: shader int64
...
@@ -64,6 +64,11 @@ Missing functionality: shader int64
Decorate 452(Block) Block
Decorate 452(Block) Block
Decorate 454(block) DescriptorSet 0
Decorate 454(block) DescriptorSet 0
Decorate 454(block) Binding 1
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
2: TypeVoid
3: TypeFunction 2
3: TypeFunction 2
14: TypeInt 64 1
14: TypeInt 64 1
...
@@ -145,6 +150,29 @@ Missing functionality: shader int64
...
@@ -145,6 +150,29 @@ Missing functionality: shader int64
452(Block): TypeStruct 134(ivec3) 36(int)
452(Block): TypeStruct 134(ivec3) 36(int)
453: TypePointer Uniform 452(Block)
453: TypePointer Uniform 452(Block)
454(block): 453(ptr) Variable Uniform
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
4(main): 2 Function None 3
5: Label
5: Label
Return
Return
...
...
Test/baseResults/spv.specConstant.vert.out
View file @
64bcfdb6
...
@@ -61,6 +61,7 @@ Linked vertex stage:
...
@@ -61,6 +61,7 @@ Linked vertex stage:
38: TypeFloat 64
38: TypeFloat 64
39: 38(float) SpecConstant 1413754136 1074340347
39: 38(float) SpecConstant 1413754136 1074340347
40: 6(float) SpecConstant 1078523331
40: 6(float) SpecConstant 1078523331
41: 38(float) SpecConstantOp 115 40
50: 8(int) SpecConstant 12
50: 8(int) SpecConstant 12
51: TypeArray 7(fvec4) 50
51: TypeArray 7(fvec4) 50
52: TypePointer Input 51
52: TypePointer Input 51
...
@@ -69,6 +70,7 @@ Linked vertex stage:
...
@@ -69,6 +70,7 @@ Linked vertex stage:
63: 33(int) SpecConstant 2
63: 33(int) SpecConstant 2
67: 38(float) SpecConstant 1413754136 1074340347
67: 38(float) SpecConstant 1413754136 1074340347
68: 6(float) SpecConstant 1078523331
68: 6(float) SpecConstant 1078523331
69: 38(float) SpecConstantOp 115 68
75: TypePointer Function 8(int)
75: TypePointer Function 8(int)
77: 8(int) SpecConstant 8
77: 8(int) SpecConstant 8
4(main): 2 Function None 3
4(main): 2 Function None 3
...
@@ -87,7 +89,6 @@ Linked vertex stage:
...
@@ -87,7 +89,6 @@ Linked vertex stage:
Store 20(color) 37
Store 20(color) 37
Branch 32
Branch 32
32: Label
32: Label
41: 38(float) FConvert 40
42: 38(float) FDiv 39 41
42: 38(float) FDiv 39 41
43: 6(float) FConvert 42
43: 6(float) FConvert 42
44: 7(fvec4) Load 20(color)
44: 7(fvec4) Load 20(color)
...
@@ -119,7 +120,6 @@ Linked vertex stage:
...
@@ -119,7 +120,6 @@ Linked vertex stage:
Store 20(color) 66
Store 20(color) 66
Branch 62
Branch 62
62: Label
62: Label
69: 38(float) FConvert 68
70: 38(float) FDiv 67 69
70: 38(float) FDiv 67 69
71: 6(float) FConvert 70
71: 6(float) FConvert 70
72: 7(fvec4) Load 20(color)
72: 7(fvec4) Load 20(color)
...
...
Test/baseResults/spv.specConstantOperations.vert.out
View file @
64bcfdb6
This diff is collapsed.
Click to expand it.
Test/spv.int64.frag
View file @
64bcfdb6
...
@@ -225,4 +225,37 @@ void builtinFuncs()
...
@@ -225,4 +225,37 @@ void builtinFuncs()
// notEqual()
// notEqual()
bv
=
notEqual
(
u64v
,
u64vec3
(
u64
));
bv
=
notEqual
(
u64v
,
u64vec3
(
u64
));
bv
.
xy
=
notEqual
(
i64v
,
i64vec2
(
i64
));
bv
.
xy
=
notEqual
(
i64v
,
i64vec2
(
i64
));
}
}
\ No newline at end of file
// 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
);
\ No newline at end of file
Test/spv.specConstantOperations.vert
View file @
64bcfdb6
...
@@ -4,12 +4,16 @@ layout(constant_id = 200) const float sp_float = 3.1415926;
...
@@ -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
=
201
)
const
int
sp_int
=
10
;
layout
(
constant_id
=
202
)
const
uint
sp_uint
=
100
;
layout
(
constant_id
=
202
)
const
uint
sp_uint
=
100
;
layout
(
constant_id
=
203
)
const
int
sp_sint
=
-
10
;
layout
(
constant_id
=
203
)
const
int
sp_sint
=
-
10
;
layout
(
constant_id
=
204
)
const
double
sp_double
=
2
.
718281828459
;
//
//
// Scalars
// Scalars
//
//
// float <-> double conversion
const
float
float_from_double
=
float
(
sp_double
);
const
double
double_from_float
=
double
(
sp_float
);
// uint/int <-> bool conversion
// uint/int <-> bool conversion
const
bool
bool_from_int
=
bool
(
sp_int
);
const
bool
bool_from_int
=
bool
(
sp_int
);
const
bool
bool_from_uint
=
bool
(
sp_uint
);
const
bool
bool_from_uint
=
bool
(
sp_uint
);
...
...
glslang/MachineIndependent/Intermediate.cpp
View file @
64bcfdb6
...
@@ -1444,6 +1444,8 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
...
@@ -1444,6 +1444,8 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
case
EOpIndexIndirect
:
case
EOpIndexIndirect
:
case
EOpIndexDirectStruct
:
case
EOpIndexDirectStruct
:
case
EOpVectorSwizzle
:
case
EOpVectorSwizzle
:
case
EOpConvFloatToDouble
:
case
EOpConvDoubleToFloat
:
return
true
;
return
true
;
default
:
default
:
return
false
;
return
false
;
...
@@ -1474,6 +1476,20 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
...
@@ -1474,6 +1476,20 @@ bool TIntermediate::isSpecializationOperation(const TIntermOperator& node) const
case
EOpConvBoolToInt
:
case
EOpConvBoolToInt
:
case
EOpConvIntToUint
:
case
EOpConvIntToUint
:
case
EOpConvBoolToUint
:
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
// unary operations
case
EOpNegative
:
case
EOpNegative
:
...
...
glslang/MachineIndependent/ParseHelper.cpp
View file @
64bcfdb6
...
@@ -4942,7 +4942,7 @@ const TFunction* TParseContext::findFunction120(const TSourceLoc& loc, const TFu
...
@@ -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
// "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
// 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
// the exact match is used. If no exact match is found, then the implicit
// conversions in section 4.1.10
Implicit Conversions w
ill 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
// 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.
// 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
// Mismatched types on output parameters (out or inout) must have a conversion
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment