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
1dc5dcf0
Commit
1dc5dcf0
authored
Jan 29, 2019
by
baldurk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move TObjectReflection into public interface to clean up reflection
* Forwarding functions are left to preserve source compatibility with code using the old queries.
parent
9983f99e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
177 additions
and
82 deletions
+177
-82
ShaderLang.cpp
glslang/MachineIndependent/ShaderLang.cpp
+9
-21
reflection.cpp
glslang/MachineIndependent/reflection.cpp
+29
-0
reflection.h
glslang/MachineIndependent/reflection.h
+0
-41
ShaderLang.h
glslang/Public/ShaderLang.h
+139
-20
No files found.
glslang/MachineIndependent/ShaderLang.cpp
View file @
1dc5dcf0
...
...
@@ -1983,27 +1983,15 @@ bool TProgram::buildReflection()
return
true
;
}
int
TProgram
::
getNumLiveUniformVariables
()
const
{
return
reflection
->
getNumUniforms
();
}
int
TProgram
::
getNumLiveUniformBlocks
()
const
{
return
reflection
->
getNumUniformBlocks
();
}
const
char
*
TProgram
::
getUniformName
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
name
.
c_str
();
}
const
char
*
TProgram
::
getUniformBlockName
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
).
name
.
c_str
();
}
int
TProgram
::
getUniformBlockSize
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
).
size
;
}
int
TProgram
::
getUniformIndex
(
const
char
*
name
)
const
{
return
reflection
->
getIndex
(
name
);
}
int
TProgram
::
getUniformBinding
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
getBinding
();
}
EShLanguageMask
TProgram
::
getUniformStages
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
stages
;
}
int
TProgram
::
getUniformBlockBinding
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
).
getBinding
();
}
int
TProgram
::
getUniformBlockIndex
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
index
;
}
int
TProgram
::
getUniformBlockCounterIndex
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
).
counterIndex
;
}
int
TProgram
::
getUniformType
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
glDefineType
;
}
int
TProgram
::
getUniformBufferOffset
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
offset
;
}
int
TProgram
::
getUniformArraySize
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
size
;
}
int
TProgram
::
getNumLiveAttributes
()
const
{
return
reflection
->
getNumAttributes
();
}
const
char
*
TProgram
::
getAttributeName
(
int
index
)
const
{
return
reflection
->
getAttribute
(
index
).
name
.
c_str
();
}
int
TProgram
::
getAttributeType
(
int
index
)
const
{
return
reflection
->
getAttribute
(
index
).
glDefineType
;
}
const
TType
*
TProgram
::
getAttributeTType
(
int
index
)
const
{
return
reflection
->
getAttribute
(
index
).
getType
();
}
const
TType
*
TProgram
::
getUniformTType
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
).
getType
();
}
const
TType
*
TProgram
::
getUniformBlockTType
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
).
getType
();
}
unsigned
TProgram
::
getLocalSize
(
int
dim
)
const
{
return
reflection
->
getLocalSize
(
dim
);
}
unsigned
TProgram
::
getLocalSize
(
int
dim
)
const
{
return
reflection
->
getLocalSize
(
dim
);
}
int
TProgram
::
getReflectionIndex
(
const
char
*
name
)
const
{
return
reflection
->
getIndex
(
name
);
}
int
TProgram
::
getNumUniformVariables
()
const
{
return
reflection
->
getNumUniforms
();
}
const
TObjectReflection
&
TProgram
::
getUniform
(
int
index
)
const
{
return
reflection
->
getUniform
(
index
);
}
int
TProgram
::
getNumUniformBlocks
()
const
{
return
reflection
->
getNumUniformBlocks
();
}
const
TObjectReflection
&
TProgram
::
getUniformBlock
(
int
index
)
const
{
return
reflection
->
getUniformBlock
(
index
);
}
int
TProgram
::
getNumAttributes
()
const
{
return
reflection
->
getNumAttributes
();
}
const
TObjectReflection
&
TProgram
::
getAttribute
(
int
index
)
const
{
return
reflection
->
getAttribute
(
index
);
}
void
TProgram
::
dumpReflection
()
{
reflection
->
dump
();
}
...
...
glslang/MachineIndependent/reflection.cpp
View file @
1dc5dcf0
...
...
@@ -833,6 +833,35 @@ void TReflectionTraverser::visitSymbol(TIntermSymbol* base)
}
//
// Implement TObjectReflection methods.
//
TObjectReflection
::
TObjectReflection
(
const
std
::
string
&
pName
,
const
TType
&
pType
,
int
pOffset
,
int
pGLDefineType
,
int
pSize
,
int
pIndex
)
:
name
(
pName
),
offset
(
pOffset
),
glDefineType
(
pGLDefineType
),
size
(
pSize
),
index
(
pIndex
),
counterIndex
(
-
1
),
stages
(
EShLanguageMask
(
0
)),
type
(
pType
.
clone
())
{
}
int
TObjectReflection
::
getBinding
()
const
{
if
(
type
==
nullptr
||
!
type
->
getQualifier
().
hasBinding
())
return
-
1
;
return
type
->
getQualifier
().
layoutBinding
;
}
void
TObjectReflection
::
dump
()
const
{
printf
(
"%s: offset %d, type %x, size %d, index %d, binding %d, stages %d"
,
name
.
c_str
(),
offset
,
glDefineType
,
size
,
index
,
getBinding
(),
stages
);
if
(
counterIndex
!=
-
1
)
printf
(
", counter %d"
,
counterIndex
);
printf
(
"
\n
"
);
}
//
// Implement TReflection methods.
//
...
...
glslang/MachineIndependent/reflection.h
View file @
1dc5dcf0
...
...
@@ -52,47 +52,6 @@ class TIntermediate;
class
TIntermAggregate
;
class
TReflectionTraverser
;
// Data needed for just a single object at the granularity exchanged by the reflection API
class
TObjectReflection
{
public
:
TObjectReflection
(
const
std
::
string
&
pName
,
const
TType
&
pType
,
int
pOffset
,
int
pGLDefineType
,
int
pSize
,
int
pIndex
)
:
name
(
pName
),
offset
(
pOffset
),
glDefineType
(
pGLDefineType
),
size
(
pSize
),
index
(
pIndex
),
counterIndex
(
-
1
),
stages
(
EShLanguageMask
(
0
)),
type
(
pType
.
clone
())
{
}
const
TType
*
getType
()
const
{
return
type
;
}
int
getBinding
()
const
{
if
(
type
==
nullptr
||
!
type
->
getQualifier
().
hasBinding
())
return
-
1
;
return
type
->
getQualifier
().
layoutBinding
;
}
void
dump
()
const
{
printf
(
"%s: offset %d, type %x, size %d, index %d, binding %d, stages %d"
,
name
.
c_str
(),
offset
,
glDefineType
,
size
,
index
,
getBinding
(),
stages
);
if
(
counterIndex
!=
-
1
)
printf
(
", counter %d"
,
counterIndex
);
printf
(
"
\n
"
);
}
static
TObjectReflection
badReflection
()
{
return
TObjectReflection
();
}
std
::
string
name
;
int
offset
;
int
glDefineType
;
int
size
;
// data size in bytes for a block, array size for a (non-block) object that's an array
int
index
;
int
counterIndex
;
EShLanguageMask
stages
;
protected
:
TObjectReflection
()
:
offset
(
-
1
),
glDefineType
(
-
1
),
size
(
-
1
),
index
(
-
1
),
counterIndex
(
-
1
),
stages
(
EShLanguageMask
(
0
)),
type
(
nullptr
)
{
}
const
TType
*
type
;
};
// The full reflection database
class
TReflection
{
public
:
...
...
glslang/Public/ShaderLang.h
View file @
1dc5dcf0
...
...
@@ -599,6 +599,35 @@ private:
TShader
&
operator
=
(
TShader
&
);
};
//
// A reflection database and its interface, consistent with the OpenGL API reflection queries.
//
// Data needed for just a single object at the granularity exchanged by the reflection API
class
TObjectReflection
{
public
:
TObjectReflection
(
const
std
::
string
&
pName
,
const
TType
&
pType
,
int
pOffset
,
int
pGLDefineType
,
int
pSize
,
int
pIndex
);
const
TType
*
getType
()
const
{
return
type
;
}
int
getBinding
()
const
;
void
dump
()
const
;
static
TObjectReflection
badReflection
()
{
return
TObjectReflection
();
}
std
::
string
name
;
int
offset
;
int
glDefineType
;
int
size
;
// data size in bytes for a block, array size for a (non-block) object that's an array
int
index
;
int
counterIndex
;
EShLanguageMask
stages
;
protected
:
TObjectReflection
()
:
offset
(
-
1
),
glDefineType
(
-
1
),
size
(
-
1
),
index
(
-
1
),
counterIndex
(
-
1
),
stages
(
EShLanguageMask
(
0
)),
type
(
nullptr
)
{
}
const
TType
*
type
;
};
class
TReflection
;
class
TIoMapper
;
...
...
@@ -689,27 +718,117 @@ public:
// Reflection Interface
bool
buildReflection
();
// call first, to do liveness analysis, index mapping, etc.; returns false on failure
int
getNumLiveUniformVariables
()
const
;
// can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
int
getNumLiveUniformBlocks
()
const
;
// can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
const
char
*
getUniformName
(
int
index
)
const
;
// can be used for "name" part of glGetActiveUniform()
const
char
*
getUniformBlockName
(
int
blockIndex
)
const
;
// can be used for glGetActiveUniformBlockName()
int
getUniformBlockSize
(
int
blockIndex
)
const
;
// can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
int
getUniformIndex
(
const
char
*
name
)
const
;
// can be used for glGetUniformIndices()
int
getUniformBinding
(
int
index
)
const
;
// returns the binding number
EShLanguageMask
getUniformStages
(
int
index
)
const
;
// returns Shaders Stages where a Uniform is present
int
getUniformBlockBinding
(
int
index
)
const
;
// returns the block binding number
int
getUniformBlockIndex
(
int
index
)
const
;
// can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
int
getUniformBlockCounterIndex
(
int
index
)
const
;
// returns block index of associated counter.
int
getUniformType
(
int
index
)
const
;
// can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
int
getUniformBufferOffset
(
int
index
)
const
;
// can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
int
getUniformArraySize
(
int
index
)
const
;
// can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
int
getNumLiveAttributes
()
const
;
// can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
unsigned
getLocalSize
(
int
dim
)
const
;
// return dim'th local size
const
char
*
getAttributeName
(
int
index
)
const
;
// can be used for glGetActiveAttrib()
int
getAttributeType
(
int
index
)
const
;
// can be used for glGetActiveAttrib()
const
TType
*
getUniformTType
(
int
index
)
const
;
// returns a TType*
const
TType
*
getUniformBlockTType
(
int
index
)
const
;
// returns a TType*
const
TType
*
getAttributeTType
(
int
index
)
const
;
// returns a TType*
int
getReflectionIndex
(
const
char
*
name
)
const
;
int
getNumUniformVariables
()
const
;
const
TObjectReflection
&
getUniform
(
int
index
)
const
;
int
getNumUniformBlocks
()
const
;
const
TObjectReflection
&
getUniformBlock
(
int
index
)
const
;
int
getNumAttributes
()
const
;
const
TObjectReflection
&
getAttribute
(
int
index
)
const
;
// Legacy Reflection Interface - expressed in terms of above interface
int
getNumLiveUniformVariables
()
const
// can be used for glGetProgramiv(GL_ACTIVE_UNIFORMS)
{
return
getNumUniformVariables
();
}
int
getNumLiveUniformBlocks
()
const
// can be used for glGetProgramiv(GL_ACTIVE_UNIFORM_BLOCKS)
{
return
getNumUniformBlocks
();
}
int
getNumLiveAttributes
()
const
// can be used for glGetProgramiv(GL_ACTIVE_ATTRIBUTES)
{
return
getNumAttributes
();
}
int
getUniformIndex
(
const
char
*
name
)
const
// can be used for glGetUniformIndices()
{
return
getReflectionIndex
(
name
);
}
const
char
*
getUniformName
(
int
index
)
const
// can be used for "name" part of glGetActiveUniform()
{
return
getUniform
(
index
).
name
.
c_str
();
}
int
getUniformBinding
(
int
index
)
const
// returns the binding number
{
return
getUniform
(
index
).
getBinding
();
}
EShLanguageMask
getUniformStages
(
int
index
)
const
// returns Shaders Stages where a Uniform is present
{
return
getUniform
(
index
).
stages
;
}
int
getUniformBlockIndex
(
int
index
)
const
// can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
{
return
getUniform
(
index
).
index
;
}
int
getUniformType
(
int
index
)
const
// can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
{
return
getUniform
(
index
).
glDefineType
;
}
int
getUniformBufferOffset
(
int
index
)
const
// can be used for glGetActiveUniformsiv(GL_UNIFORM_OFFSET)
{
return
getUniform
(
index
).
offset
;
}
int
getUniformArraySize
(
int
index
)
const
// can be used for glGetActiveUniformsiv(GL_UNIFORM_SIZE)
{
return
getUniform
(
index
).
size
;
}
const
TType
*
getUniformTType
(
int
index
)
const
// returns a TType*
{
return
getUniform
(
index
).
getType
();
}
const
char
*
getUniformBlockName
(
int
index
)
const
// can be used for glGetActiveUniformBlockName()
{
return
getUniformBlock
(
index
).
name
.
c_str
();
}
int
getUniformBlockSize
(
int
index
)
const
// can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
{
return
getUniformBlock
(
index
).
size
;
}
int
getUniformBlockBinding
(
int
index
)
const
// returns the block binding number
{
return
getUniformBlock
(
index
).
getBinding
();
}
int
getUniformBlockCounterIndex
(
int
index
)
const
// returns block index of associated counter.
{
return
getUniformBlock
(
index
).
counterIndex
;
}
const
TType
*
getUniformBlockTType
(
int
index
)
const
// returns a TType*
{
return
getUniformBlock
(
index
).
getType
();
}
const
char
*
getAttributeName
(
int
index
)
const
// can be used for glGetActiveAttrib()
{
return
getAttribute
(
index
).
name
.
c_str
();
}
int
getAttributeType
(
int
index
)
const
// can be used for glGetActiveAttrib()
{
return
getAttribute
(
index
).
glDefineType
;
}
const
TType
*
getAttributeTType
(
int
index
)
const
// returns a TType*
{
return
getAttribute
(
index
).
getType
();
}
void
dumpReflection
();
...
...
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