Free memory associated with SPIR-V generation.
This commit is contained in:
parent
863aa667f3
commit
b7946d16bb
5 changed files with 109 additions and 93 deletions
|
|
@ -784,7 +784,9 @@ class TIntermAggregate : public TIntermOperator {
|
|||
public:
|
||||
TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(0) { }
|
||||
TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(0) { }
|
||||
~TIntermAggregate() { delete pragmaTable; }
|
||||
// Since pragmaTable is allocated with the PoolAllocator, we
|
||||
// only want to destroy it, not free the associated memory.
|
||||
~TIntermAggregate() { pragmaTable->~TPragmaTable(); }
|
||||
virtual TIntermAggregate* getAsAggregate() { return this; }
|
||||
virtual const TIntermAggregate* getAsAggregate() const { return this; }
|
||||
virtual void setOperator(TOperator o) { op = o; }
|
||||
|
|
|
|||
|
|
@ -1613,7 +1613,13 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
|
|||
void TIntermAggregate::addToPragmaTable(const TPragmaTable& pTable)
|
||||
{
|
||||
assert(!pragmaTable);
|
||||
pragmaTable = new TPragmaTable();
|
||||
|
||||
// We allocate this with the thread-pool allocator because the destructors
|
||||
// for TIntermNode's are never called. When TIntermNodes are no longer
|
||||
// needed, the pool allocator destroys all memory at once without
|
||||
// destruction.
|
||||
void* memory = GetThreadPoolAllocator().allocate(sizeof(TPragmaTable));
|
||||
pragmaTable = new(memory) TPragmaTable();
|
||||
*pragmaTable = pTable;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue