Commit fc618919 by Rex Xu

SPIRV: Add the support of missing image functions #72

parent d4782c10
...@@ -822,6 +822,7 @@ Id Builder::createVariable(StorageClass storageClass, Id type, const char* name) ...@@ -822,6 +822,7 @@ Id Builder::createVariable(StorageClass storageClass, Id type, const char* name)
case StorageClassWorkgroupLocal: case StorageClassWorkgroupLocal:
case StorageClassPrivateGlobal: case StorageClassPrivateGlobal:
case StorageClassWorkgroupGlobal: case StorageClassWorkgroupGlobal:
case StorageClassAtomicCounter:
constantsTypesGlobals.push_back(inst); constantsTypesGlobals.push_back(inst);
module.mapInstruction(inst); module.mapInstruction(inst);
break; break;
...@@ -975,6 +976,15 @@ void Builder::createNoResultOp(Op opCode, Id operand) ...@@ -975,6 +976,15 @@ void Builder::createNoResultOp(Op opCode, Id operand)
buildPoint->addInstruction(op); buildPoint->addInstruction(op);
} }
// An opcode that has one operand, no result id, and no type
void Builder::createNoResultOp(Op opCode, const std::vector<Id>& operands)
{
Instruction* op = new Instruction(opCode);
for (auto operand : operands)
op->addIdOperand(operand);
buildPoint->addInstruction(op);
}
void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics) void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics)
{ {
Instruction* op = new Instruction(OpControlBarrier); Instruction* op = new Instruction(OpControlBarrier);
......
...@@ -137,6 +137,11 @@ public: ...@@ -137,6 +137,11 @@ public:
bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; } bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; }
unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); } unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
bool isSignedType(Id typeId) const
{
assert(getTypeClass(typeId) == OpTypeInt);
return module.getInstruction(typeId)->getImmediateOperand(1) == 0u;
}
int getTypeNumColumns(Id typeId) const int getTypeNumColumns(Id typeId) const
{ {
...@@ -241,6 +246,7 @@ public: ...@@ -241,6 +246,7 @@ public:
void createNoResultOp(Op); void createNoResultOp(Op);
void createNoResultOp(Op, Id operand); void createNoResultOp(Op, Id operand);
void createNoResultOp(Op, const std::vector<Id>& operands);
void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask); void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask);
void createMemoryBarrier(unsigned executionScope, unsigned memorySemantics); void createMemoryBarrier(unsigned executionScope, unsigned memorySemantics);
Id createUnaryOp(Op, Id typeId, Id operand); Id createUnaryOp(Op, Id typeId, Id operand);
......
...@@ -768,7 +768,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) ...@@ -768,7 +768,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
} }
break; break;
case EOpReflect: case EOpReflect:
// I 2 * dot(N, I) * N: Arguments are (I, N). // I - 2 * dot(N, I) * N: Arguments are (I, N).
dot = childConstUnions[0].dot(childConstUnions[1]); dot = childConstUnions[0].dot(childConstUnions[1]);
dot *= 2.0; dot *= 2.0;
for (int comp = 0; comp < numComps; ++comp) for (int comp = 0; comp < numComps; ++comp)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment