New uniform mapping handling
- add optional callback to handle mapping of uniform variables in linking phase - if no resolver is provided, it uses the internal default resolver with all shifts and auto bind settings Change-Id: Icfe38a9eabe8bfc8f8bb6d8150c06f7ed38bb762
This commit is contained in:
parent
9507885537
commit
c2016a52d2
5 changed files with 304 additions and 163 deletions
|
|
@ -445,7 +445,36 @@ private:
|
|||
class TReflection;
|
||||
class TIoMapper;
|
||||
|
||||
// Make one TProgram per set of shaders that will get linked together. Add all
|
||||
// Allows to customize the binding layout after linking.
|
||||
// All used uniform variables will invoke at least validateBinding.
|
||||
// If validateBinding returned true then the other resolveBinding
|
||||
// and resolveSet are invoked to resolve the binding and descriptor
|
||||
// set index respectively.
|
||||
// Invocations happen in a particular order:
|
||||
// 1) var with binding and set already defined
|
||||
// 2) var with binding but no set defined
|
||||
// 3) var with set but no binding defined
|
||||
// 4) var with no binding and no set defined
|
||||
//
|
||||
// NOTE: that still limit checks are applied to bindings and sets
|
||||
// and may result in an error.
|
||||
class TIoMapResolver
|
||||
{
|
||||
public:
|
||||
virtual ~TIoMapResolver() {}
|
||||
|
||||
// Should return true if the resulting/current binding would be ok.
|
||||
// Basic idea is to do aliasing binding checks with this.
|
||||
virtual bool validateBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
|
||||
// Should return a value >= 0 if the current binding should be overridden.
|
||||
// Return -1 if the current binding (including no binding) should be kept.
|
||||
virtual int resolveBinding(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
|
||||
// Should return a value >= 0 if the current set should be overriden.
|
||||
// Return -1 if the current set (including no set) should be kept.
|
||||
virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
|
||||
};
|
||||
|
||||
// Make one TProgram per set of shaders that will get linked together. Add all
|
||||
// the shaders that are to be linked together. After calling shader.parse()
|
||||
// for all shaders, call link().
|
||||
//
|
||||
|
|
@ -485,7 +514,9 @@ public:
|
|||
void dumpReflection();
|
||||
|
||||
// I/O mapping: apply base offsets and map live unbound variables
|
||||
bool mapIO();
|
||||
// If resolver is not provided it uses the previous approach
|
||||
// and respects auto assignment and offsets.
|
||||
bool mapIO(TIoMapResolver* resolver = NULL);
|
||||
|
||||
protected:
|
||||
bool linkStage(EShLanguage, EShMessages);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue