Lines Matching defs:expr

765 SpvId SPIRVCodeGenerator::writeExpression(const Expression& expr, OutputStream& out) {
766 switch (expr.kind()) {
768 return this->writeBinaryExpression(expr.as<BinaryExpression>(), out);
770 return this->writeExpression(*expr.as<ConstructorArrayCast>().argument(), out);
773 return this->writeCompositeConstructor(expr.asAnyConstructor(), out);
775 return this->writeConstructorDiagonalMatrix(expr.as<ConstructorDiagonalMatrix>(), out);
777 return this->writeConstructorMatrixResize(expr.as<ConstructorMatrixResize>(), out);
779 return this->writeConstructorScalarCast(expr.as<ConstructorScalarCast>(), out);
781 return this->writeConstructorSplat(expr.as<ConstructorSplat>(), out);
783 return this->writeConstructorCompound(expr.as<ConstructorCompound>(), out);
785 return this->writeConstructorCompoundCast(expr.as<ConstructorCompoundCast>(), out);
787 return this->writeFieldAccess(expr.as<FieldAccess>(), out);
789 return this->writeFunctionCall(expr.as<FunctionCall>(), out);
791 return this->writeLiteral(expr.as<Literal>());
793 return this->writePrefixExpression(expr.as<PrefixExpression>(), out);
795 return this->writePostfixExpression(expr.as<PostfixExpression>(), out);
797 return this->writeSwizzle(expr.as<Swizzle>(), out);
799 return this->writeVariableReference(expr.as<VariableReference>(), out);
801 return this->writeTernaryExpression(expr.as<TernaryExpression>(), out);
803 return this->writeIndexExpression(expr.as<IndexExpression>(), out);
805 SkDEBUGFAILF("unsupported expression: %s", expr.description().c_str());
1846 static SpvStorageClass_ get_storage_class(const Expression& expr) {
1847 switch (expr.kind()) {
1849 const Variable& var = *expr.as<VariableReference>().variable();
1856 return get_storage_class(*expr.as<FieldAccess>().base());
1858 return get_storage_class(*expr.as<IndexExpression>().base());
1864 std::vector<SpvId> SPIRVCodeGenerator::getAccessChain(const Expression& expr, OutputStream& out) {
1866 switch (expr.kind()) {
1868 const IndexExpression& indexExpr = expr.as<IndexExpression>();
1874 const FieldAccess& fieldExpr = expr.as<FieldAccess>();
1880 SpvId id = this->getLValue(expr, out)->getPointer();
2015 std::unique_ptr<SPIRVCodeGenerator::LValue> SPIRVCodeGenerator::getLValue(const Expression& expr,
2017 const Type& type = expr.type();
2019 switch (expr.kind()) {
2021 const Variable& var = *expr.as<VariableReference>().variable();
2035 SkASSERTF(entry != fVariableMap.end(), "%s", expr.description().c_str());
2042 std::vector<SpvId> chain = this->getAccessChain(expr, out);
2045 this->writeWord(this->getPointerType(type, get_storage_class(expr)), out);
2054 const Swizzle& swizzle = expr.as<Swizzle>();
2079 // expr isn't actually an lvalue, create a placeholder variable for it. This case
2087 this->writeInstruction(SpvOpStore, result, this->writeExpression(expr, out), out);
2183 SpvId SPIRVCodeGenerator::writeIndexExpression(const IndexExpression& expr, OutputStream& out) {
2184 if (expr.base()->type().isVector()) {
2185 SpvId base = this->writeExpression(*expr.base(), out);
2186 SpvId index = this->writeExpression(*expr.index(), out);
2188 this->writeInstruction(SpvOpVectorExtractDynamic, this->getType(expr.type()), result, base,
2192 return getLValue(expr, out)->load(out);
2707 // This converts `expr / 2` into `expr * 0.5`
2805 SpvId expr = this->writeExpression(*p.operand(), out);
2807 this->writeInstruction(SpvOpFNegate, typeId, result, expr, out);
2809 this->writeInstruction(SpvOpSNegate, typeId, result, expr, out);