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
92d05c0c
Unverified
Commit
92d05c0c
authored
May 25, 2018
by
John Kessenich
Committed by
GitHub
May 25, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1386 from zeux/master
Fix TextureUpgradeAndSamplerRemovalTransform when used with qualifiers
parents
369dc87a
b239d22f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
13 deletions
+29
-13
Intermediate.cpp
glslang/MachineIndependent/Intermediate.cpp
+29
-13
No files found.
glslang/MachineIndependent/Intermediate.cpp
View file @
92d05c0c
...
...
@@ -3769,23 +3769,39 @@ struct TextureUpgradeAndSamplerRemovalTransform : public TIntermTraverser {
bool
visitAggregate
(
TVisit
,
TIntermAggregate
*
ag
)
override
{
using
namespace
std
;
TIntermSequence
&
seq
=
ag
->
getSequence
();
// remove pure sampler variables
TIntermSequence
::
iterator
newEnd
=
remove_if
(
seq
.
begin
(),
seq
.
end
(),
[](
TIntermNode
*
node
)
{
TIntermSymbol
*
symbol
=
node
->
getAsSymbolNode
();
if
(
!
symbol
)
return
false
;
TQualifierList
&
qual
=
ag
->
getQualifierList
();
// qual and seq are indexed using the same indices, so we have to modify both in lock-step
assert
(
seq
.
size
()
==
qual
.
size
()
||
qual
.
empty
());
size_t
write
=
0
;
for
(
size_t
i
=
0
;
i
<
seq
.
size
();
++
i
)
{
TIntermSymbol
*
symbol
=
seq
[
i
]
->
getAsSymbolNode
();
if
(
symbol
&&
symbol
->
getBasicType
()
==
EbtSampler
&&
symbol
->
getType
().
getSampler
().
isPureSampler
())
{
// remove pure sampler variables
continue
;
}
TIntermNode
*
result
=
seq
[
i
];
return
(
symbol
->
getBasicType
()
==
EbtSampler
&&
symbol
->
getType
().
getSampler
().
isPureSampler
());
});
seq
.
erase
(
newEnd
,
seq
.
end
());
// replace constructors with sampler/textures
for_each
(
seq
.
begin
(),
seq
.
end
(),
[](
TIntermNode
*&
node
)
{
TIntermAggregate
*
constructor
=
node
->
getAsAggregate
();
// replace constructors with sampler/textures
TIntermAggregate
*
constructor
=
seq
[
i
]
->
getAsAggregate
();
if
(
constructor
&&
constructor
->
getOp
()
==
EOpConstructTextureSampler
)
{
if
(
!
constructor
->
getSequence
().
empty
())
node
=
constructor
->
getSequence
()[
0
];
result
=
constructor
->
getSequence
()[
0
];
}
});
// write new node & qualifier
seq
[
write
]
=
result
;
if
(
!
qual
.
empty
())
qual
[
write
]
=
qual
[
i
];
write
++
;
}
seq
.
resize
(
write
);
if
(
!
qual
.
empty
())
qual
.
resize
(
write
);
return
true
;
}
};
...
...
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