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
1363fcd6
Commit
1363fcd6
authored
Jul 31, 2015
by
John Kessenich
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #45 from google/source-string-name
Add mechanism for specifying names for source strings.
parents
b9e54247
1719fb20
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
17 deletions
+61
-17
Scan.h
glslang/MachineIndependent/Scan.h
+5
-1
ShaderLang.cpp
glslang/MachineIndependent/ShaderLang.cpp
+50
-16
ShaderLang.h
glslang/Public/ShaderLang.h
+6
-0
No files found.
glslang/MachineIndependent/Scan.h
View file @
1363fcd6
...
@@ -51,7 +51,7 @@ const int EndOfInput = -1;
...
@@ -51,7 +51,7 @@ const int EndOfInput = -1;
//
//
class
TInputScanner
{
class
TInputScanner
{
public
:
public
:
TInputScanner
(
int
n
,
const
char
*
const
s
[],
size_t
L
[],
int
b
=
0
,
int
f
=
0
)
:
TInputScanner
(
int
n
,
const
char
*
const
s
[],
size_t
L
[],
const
char
*
const
*
names
=
nullptr
,
int
b
=
0
,
int
f
=
0
)
:
numSources
(
n
),
numSources
(
n
),
sources
(
reinterpret_cast
<
const
unsigned
char
*
const
*>
(
s
)),
// up to this point, common usage is "char*", but now we need positive 8-bit characters
sources
(
reinterpret_cast
<
const
unsigned
char
*
const
*>
(
s
)),
// up to this point, common usage is "char*", but now we need positive 8-bit characters
lengths
(
L
),
currentSource
(
0
),
currentChar
(
0
),
stringBias
(
b
),
finale
(
f
)
lengths
(
L
),
currentSource
(
0
),
currentChar
(
0
),
stringBias
(
b
),
finale
(
f
)
...
@@ -60,6 +60,10 @@ public:
...
@@ -60,6 +60,10 @@ public:
for
(
int
i
=
0
;
i
<
numSources
;
++
i
)
{
for
(
int
i
=
0
;
i
<
numSources
;
++
i
)
{
loc
[
i
].
init
();
loc
[
i
].
init
();
}
}
if
(
names
!=
nullptr
)
{
for
(
int
i
=
0
;
i
<
numSources
;
++
i
)
loc
[
i
].
name
=
names
[
i
];
}
loc
[
currentSource
].
string
=
-
stringBias
;
loc
[
currentSource
].
string
=
-
stringBias
;
loc
[
currentSource
].
line
=
1
;
loc
[
currentSource
].
line
=
1
;
loc
[
currentSource
].
column
=
0
;
loc
[
currentSource
].
column
=
0
;
...
...
glslang/MachineIndependent/ShaderLang.cpp
View file @
1363fcd6
...
@@ -450,6 +450,7 @@ bool ProcessDeferred(
...
@@ -450,6 +450,7 @@ bool ProcessDeferred(
const
char
*
const
shaderStrings
[],
const
char
*
const
shaderStrings
[],
const
int
numStrings
,
const
int
numStrings
,
const
int
*
inputLengths
,
const
int
*
inputLengths
,
const
char
*
const
stringNames
[],
const
char
*
customPreamble
,
const
char
*
customPreamble
,
const
EShOptimizationLevel
optLevel
,
const
EShOptimizationLevel
optLevel
,
const
TBuiltInResource
*
resources
,
const
TBuiltInResource
*
resources
,
...
@@ -485,8 +486,10 @@ bool ProcessDeferred(
...
@@ -485,8 +486,10 @@ bool ProcessDeferred(
// string numStrings+2: "int;"
// string numStrings+2: "int;"
const
int
numPre
=
2
;
const
int
numPre
=
2
;
const
int
numPost
=
requireNonempty
?
1
:
0
;
const
int
numPost
=
requireNonempty
?
1
:
0
;
size_t
*
lengths
=
new
size_t
[
numStrings
+
numPre
+
numPost
];
const
int
numTotal
=
numPre
+
numStrings
+
numPost
;
const
char
**
strings
=
new
const
char
*
[
numStrings
+
numPre
+
numPost
];
size_t
*
lengths
=
new
size_t
[
numTotal
];
const
char
**
strings
=
new
const
char
*
[
numTotal
];
const
char
**
names
=
new
const
char
*
[
numTotal
];
for
(
int
s
=
0
;
s
<
numStrings
;
++
s
)
{
for
(
int
s
=
0
;
s
<
numStrings
;
++
s
)
{
strings
[
s
+
numPre
]
=
shaderStrings
[
s
];
strings
[
s
+
numPre
]
=
shaderStrings
[
s
];
if
(
inputLengths
==
0
||
inputLengths
[
s
]
<
0
)
if
(
inputLengths
==
0
||
inputLengths
[
s
]
<
0
)
...
@@ -494,6 +497,13 @@ bool ProcessDeferred(
...
@@ -494,6 +497,13 @@ bool ProcessDeferred(
else
else
lengths
[
s
+
numPre
]
=
inputLengths
[
s
];
lengths
[
s
+
numPre
]
=
inputLengths
[
s
];
}
}
if
(
stringNames
!=
nullptr
)
{
for
(
int
s
=
0
;
s
<
numStrings
;
++
s
)
names
[
s
+
numPre
]
=
stringNames
[
s
];
}
else
{
for
(
int
s
=
0
;
s
<
numStrings
;
++
s
)
names
[
s
+
numPre
]
=
nullptr
;
}
// First, without using the preprocessor or parser, find the #version, so we know what
// First, without using the preprocessor or parser, find the #version, so we know what
// symbol tables, processing rules, etc. to set up. This does not need the extra strings
// symbol tables, processing rules, etc. to set up. This does not need the extra strings
...
@@ -573,14 +583,18 @@ bool ProcessDeferred(
...
@@ -573,14 +583,18 @@ bool ProcessDeferred(
// Fill in the strings as outlined above.
// Fill in the strings as outlined above.
strings
[
0
]
=
parseContext
.
getPreamble
();
strings
[
0
]
=
parseContext
.
getPreamble
();
lengths
[
0
]
=
strlen
(
strings
[
0
]);
lengths
[
0
]
=
strlen
(
strings
[
0
]);
names
[
0
]
=
nullptr
;
strings
[
1
]
=
customPreamble
;
strings
[
1
]
=
customPreamble
;
lengths
[
1
]
=
strlen
(
strings
[
1
]);
lengths
[
1
]
=
strlen
(
strings
[
1
]);
names
[
1
]
=
nullptr
;
assert
(
2
==
numPre
);
assert
(
2
==
numPre
);
if
(
requireNonempty
)
{
if
(
requireNonempty
)
{
strings
[
numStrings
+
numPre
]
=
"
\n
int;"
;
const
int
postIndex
=
numStrings
+
numPre
;
lengths
[
numStrings
+
numPre
]
=
strlen
(
strings
[
numStrings
+
numPre
]);
strings
[
postIndex
]
=
"
\n
int;"
;
lengths
[
postIndex
]
=
strlen
(
strings
[
numStrings
+
numPre
]);
names
[
postIndex
]
=
nullptr
;
}
}
TInputScanner
fullInput
(
numStrings
+
numPre
+
numPost
,
strings
,
lengths
,
numPre
,
numPost
);
TInputScanner
fullInput
(
numStrings
+
numPre
+
numPost
,
strings
,
lengths
,
n
ames
,
n
umPre
,
numPost
);
// Push a new symbol allocation scope that will get used for the shader's globals.
// Push a new symbol allocation scope that will get used for the shader's globals.
symbolTable
.
push
();
symbolTable
.
push
();
...
@@ -595,6 +609,7 @@ bool ProcessDeferred(
...
@@ -595,6 +609,7 @@ bool ProcessDeferred(
delete
[]
lengths
;
delete
[]
lengths
;
delete
[]
strings
;
delete
[]
strings
;
delete
[]
names
;
return
success
;
return
success
;
}
}
...
@@ -814,6 +829,7 @@ bool PreprocessDeferred(
...
@@ -814,6 +829,7 @@ bool PreprocessDeferred(
const
char
*
const
shaderStrings
[],
const
char
*
const
shaderStrings
[],
const
int
numStrings
,
const
int
numStrings
,
const
int
*
inputLengths
,
const
int
*
inputLengths
,
const
char
*
const
stringNames
[],
const
char
*
preamble
,
const
char
*
preamble
,
const
EShOptimizationLevel
optLevel
,
const
EShOptimizationLevel
optLevel
,
const
TBuiltInResource
*
resources
,
const
TBuiltInResource
*
resources
,
...
@@ -826,8 +842,9 @@ bool PreprocessDeferred(
...
@@ -826,8 +842,9 @@ bool PreprocessDeferred(
std
::
string
*
outputString
)
std
::
string
*
outputString
)
{
{
DoPreprocessing
parser
(
outputString
);
DoPreprocessing
parser
(
outputString
);
return
ProcessDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
return
ProcessDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
stringNames
,
preamble
,
optLevel
,
resources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
preamble
,
optLevel
,
resources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
forwardCompatible
,
messages
,
intermediate
,
parser
,
false
);
forwardCompatible
,
messages
,
intermediate
,
parser
,
false
);
}
}
...
@@ -848,6 +865,7 @@ bool CompileDeferred(
...
@@ -848,6 +865,7 @@ bool CompileDeferred(
const
char
*
const
shaderStrings
[],
const
char
*
const
shaderStrings
[],
const
int
numStrings
,
const
int
numStrings
,
const
int
*
inputLengths
,
const
int
*
inputLengths
,
const
char
*
const
stringNames
[],
const
char
*
preamble
,
const
char
*
preamble
,
const
EShOptimizationLevel
optLevel
,
const
EShOptimizationLevel
optLevel
,
const
TBuiltInResource
*
resources
,
const
TBuiltInResource
*
resources
,
...
@@ -859,8 +877,9 @@ bool CompileDeferred(
...
@@ -859,8 +877,9 @@ bool CompileDeferred(
TIntermediate
&
intermediate
)
// returned tree, etc.
TIntermediate
&
intermediate
)
// returned tree, etc.
{
{
DoFullParse
parser
;
DoFullParse
parser
;
return
ProcessDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
return
ProcessDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
stringNames
,
preamble
,
optLevel
,
resources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
preamble
,
optLevel
,
resources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
forwardCompatible
,
messages
,
intermediate
,
parser
,
true
);
forwardCompatible
,
messages
,
intermediate
,
parser
,
true
);
}
}
...
@@ -1003,7 +1022,9 @@ int ShCompile(
...
@@ -1003,7 +1022,9 @@ int ShCompile(
compiler
->
infoSink
.
debug
.
erase
();
compiler
->
infoSink
.
debug
.
erase
();
TIntermediate
intermediate
(
compiler
->
getLanguage
());
TIntermediate
intermediate
(
compiler
->
getLanguage
());
bool
success
=
CompileDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
""
,
optLevel
,
resources
,
defaultVersion
,
ENoProfile
,
false
,
forwardCompatible
,
messages
,
intermediate
);
bool
success
=
CompileDeferred
(
compiler
,
shaderStrings
,
numStrings
,
inputLengths
,
nullptr
,
""
,
optLevel
,
resources
,
defaultVersion
,
ENoProfile
,
false
,
forwardCompatible
,
messages
,
intermediate
);
//
//
// Call the machine dependent compiler
// Call the machine dependent compiler
...
@@ -1262,7 +1283,7 @@ public:
...
@@ -1262,7 +1283,7 @@ public:
};
};
TShader
::
TShader
(
EShLanguage
s
)
TShader
::
TShader
(
EShLanguage
s
)
:
pool
(
0
),
stage
(
s
),
preamble
(
""
),
lengths
(
nullptr
)
:
pool
(
0
),
stage
(
s
),
preamble
(
""
),
lengths
(
nullptr
)
,
stringNames
(
nullptr
)
{
{
infoSink
=
new
TInfoSink
;
infoSink
=
new
TInfoSink
;
compiler
=
new
TDeferredCompiler
(
stage
,
*
infoSink
);
compiler
=
new
TDeferredCompiler
(
stage
,
*
infoSink
);
...
@@ -1290,6 +1311,16 @@ void TShader::setStringsWithLengths(const char* const* s, const int* l, int n)
...
@@ -1290,6 +1311,16 @@ void TShader::setStringsWithLengths(const char* const* s, const int* l, int n)
numStrings
=
n
;
numStrings
=
n
;
lengths
=
l
;
lengths
=
l
;
}
}
void
TShader
::
setStringsWithLengthsAndNames
(
const
char
*
const
*
s
,
const
int
*
l
,
const
char
*
const
*
names
,
int
n
)
{
strings
=
s
;
numStrings
=
n
;
lengths
=
l
;
stringNames
=
names
;
}
//
//
// Turn the shader strings into a parse tree in the TIntermediate.
// Turn the shader strings into a parse tree in the TIntermediate.
//
//
...
@@ -1306,7 +1337,10 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
...
@@ -1306,7 +1337,10 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion
if
(
!
preamble
)
if
(
!
preamble
)
preamble
=
""
;
preamble
=
""
;
return
CompileDeferred
(
compiler
,
strings
,
numStrings
,
lengths
,
preamble
,
EShOptNone
,
builtInResources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
forwardCompatible
,
messages
,
*
intermediate
);
return
CompileDeferred
(
compiler
,
strings
,
numStrings
,
lengths
,
stringNames
,
preamble
,
EShOptNone
,
builtInResources
,
defaultVersion
,
defaultProfile
,
forceDefaultVersionAndProfile
,
forwardCompatible
,
messages
,
*
intermediate
);
}
}
bool
TShader
::
parse
(
const
TBuiltInResource
*
builtInResources
,
int
defaultVersion
,
bool
forwardCompatible
,
EShMessages
messages
)
bool
TShader
::
parse
(
const
TBuiltInResource
*
builtInResources
,
int
defaultVersion
,
bool
forwardCompatible
,
EShMessages
messages
)
...
@@ -1329,10 +1363,10 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources,
...
@@ -1329,10 +1363,10 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources,
if
(
!
preamble
)
if
(
!
preamble
)
preamble
=
""
;
preamble
=
""
;
return
PreprocessDeferred
(
compiler
,
strings
,
numStrings
,
return
PreprocessDeferred
(
compiler
,
strings
,
numStrings
,
lengths
,
stringNames
,
preamble
,
lengths
,
preamble
,
EShOptNone
,
builtInResources
,
EShOptNone
,
builtInResources
,
defaultVersion
,
default
Version
,
defaultProfile
,
forceDefaultVersionAndProfile
,
forwardCompatible
,
messag
e
,
default
Profile
,
forceDefaultVersionAndProfil
e
,
*
intermediate
,
output_string
);
forwardCompatible
,
message
,
*
intermediate
,
output_string
);
}
}
const
char
*
TShader
::
getInfoLog
()
const
char
*
TShader
::
getInfoLog
()
...
...
glslang/Public/ShaderLang.h
View file @
1363fcd6
...
@@ -285,6 +285,8 @@ public:
...
@@ -285,6 +285,8 @@ public:
virtual
~
TShader
();
virtual
~
TShader
();
void
setStrings
(
const
char
*
const
*
s
,
int
n
);
void
setStrings
(
const
char
*
const
*
s
,
int
n
);
void
setStringsWithLengths
(
const
char
*
const
*
s
,
const
int
*
l
,
int
n
);
void
setStringsWithLengths
(
const
char
*
const
*
s
,
const
int
*
l
,
int
n
);
void
setStringsWithLengthsAndNames
(
const
char
*
const
*
s
,
const
int
*
l
,
const
char
*
const
*
names
,
int
n
);
void
setPreamble
(
const
char
*
s
)
{
preamble
=
s
;
}
void
setPreamble
(
const
char
*
s
)
{
preamble
=
s
;
}
bool
parse
(
const
TBuiltInResource
*
,
int
defaultVersion
,
EProfile
defaultProfile
,
bool
forceDefaultVersionAndProfile
,
bool
forwardCompatible
,
EShMessages
);
bool
parse
(
const
TBuiltInResource
*
,
int
defaultVersion
,
EProfile
defaultProfile
,
bool
forceDefaultVersionAndProfile
,
bool
forwardCompatible
,
EShMessages
);
// Equivalent to parse() without a default profile and without forcing defaults.
// Equivalent to parse() without a default profile and without forcing defaults.
...
@@ -312,8 +314,12 @@ protected:
...
@@ -312,8 +314,12 @@ protected:
// integers containing the length of the associated strings.
// integers containing the length of the associated strings.
// if lengths is null or lengths[n] < 0 the associated strings[n] is
// if lengths is null or lengths[n] < 0 the associated strings[n] is
// assumed to be null-terminated.
// assumed to be null-terminated.
// stringNames is the optional names for all the strings. If stringNames
// is null, then none of the strings has name. If a certain element in
// stringNames is null, then the corresponding string does not have name.
const
char
*
const
*
strings
;
const
char
*
const
*
strings
;
const
int
*
lengths
;
const
int
*
lengths
;
const
char
*
const
*
stringNames
;
const
char
*
preamble
;
const
char
*
preamble
;
int
numStrings
;
int
numStrings
;
...
...
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