Add reflection queries for thread local size and ssbo auto-binding
New command line option --shift-ssbo-binding mirrors --shift-ubo-binding, etc. New reflection query getLocalSize(int dim) queries local size, e.g, CS threads.
This commit is contained in:
parent
5da1f038d8
commit
932bb5cc4e
11 changed files with 265 additions and 15 deletions
|
|
@ -696,14 +696,27 @@ void TReflectionTraverser::visitSymbol(TIntermSymbol* base)
|
|||
// Implement TReflection methods.
|
||||
//
|
||||
|
||||
// Track any required attribute reflection, such as compute shader numthreads.
|
||||
//
|
||||
void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediate& intermediate)
|
||||
{
|
||||
if (stage == EShLangCompute) {
|
||||
// Remember thread dimensions
|
||||
for (int dim=0; dim<3; ++dim)
|
||||
localSize[dim] = intermediate.getLocalSize(dim);
|
||||
}
|
||||
}
|
||||
|
||||
// Merge live symbols from 'intermediate' into the existing reflection database.
|
||||
//
|
||||
// Returns false if the input is too malformed to do this.
|
||||
bool TReflection::addStage(EShLanguage, const TIntermediate& intermediate)
|
||||
bool TReflection::addStage(EShLanguage stage, const TIntermediate& intermediate)
|
||||
{
|
||||
if (intermediate.getNumEntryPoints() != 1 || intermediate.isRecursive())
|
||||
return false;
|
||||
|
||||
buildAttributeReflection(stage, intermediate);
|
||||
|
||||
TReflectionTraverser it(intermediate, *this);
|
||||
|
||||
// put the entry point on the list of functions to process
|
||||
|
|
@ -736,6 +749,16 @@ void TReflection::dump()
|
|||
indexToAttribute[i].dump();
|
||||
printf("\n");
|
||||
|
||||
if (getLocalSize(0) > 1) {
|
||||
static const char* axis[] = { "X", "Y", "Z" };
|
||||
|
||||
for (int dim=0; dim<3; ++dim)
|
||||
if (getLocalSize(dim) > 1)
|
||||
printf("Local size %s: %d\n", axis[dim], getLocalSize(dim));
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
// printf("Live names\n");
|
||||
// for (TNameToIndex::const_iterator it = nameToIndex.begin(); it != nameToIndex.end(); ++it)
|
||||
// printf("%s: %d\n", it->first.c_str(), it->second);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue