123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * Copyright 2019 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SKSL_EXTERNALVALUE
- #define SKSL_EXTERNALVALUE
- #include "src/sksl/ir/SkSLSymbol.h"
- namespace SkSL {
- class String;
- class Type;
- class ExternalValue : public Symbol {
- public:
- ExternalValue(const char* name, const Type& type)
- : INHERITED(-1, kExternal_Kind, name)
- , fType(type) {}
- virtual bool canRead() const {
- return false;
- }
- virtual bool canWrite() const {
- return false;
- }
- virtual bool canCall() const {
- return false;
- }
- /**
- * Returns the type for purposes of read and write operations.
- */
- virtual const Type& type() const {
- return fType;
- }
- virtual int callParameterCount() const {
- return -1;
- }
- /**
- * Fills in the outTypes array with pointers to the parameter types. outTypes must be able to
- * hold callParameterCount() pointers.
- */
- virtual void getCallParameterTypes(const Type** outTypes) const {
- SkASSERT(false);
- }
- /**
- * Returns the return type resulting from a call operation.
- */
- virtual const Type& callReturnType() const {
- return fType;
- }
- /**
- * Reads the external value and stores the resulting data in target. The caller must ensure
- * that target is a valid pointer to a region of sufficient size to hold the data contained
- * in this external value.
- * 'index' is the element index ([0 .. N-1]) within a call to ByteCode::run()
- */
- virtual void read(int index, float* target) {
- SkASSERT(false);
- }
- /**
- * Copies the value in src into this external value. The caller must ensure that src is a
- * pointer to the type of data expected by this external value.
- * 'index' is the element index ([0 .. N-1]) within a call to ByteCode::run()
- */
- virtual void write(int index, float* src) {
- SkASSERT(false);
- }
- /**
- * Calls the value as a function with the specified parameters. arguments must be a pointer to
- * a structure containing the arguments expected by the external value in source order, and
- * outResult must be a pointer to a region of sufficient size to hold the function's return
- * value.
- * 'index' is the element index ([0 .. N-1]) within a call to ByteCode::run()
- */
- virtual void call(int index, float* arguments, float* outResult) {
- SkASSERT(false);
- }
- /**
- * Resolves 'name' within this context and returns an ExternalValue which represents it, or
- * null if no such child exists. If the implementation of this method creates new
- * ExternalValues and there isn't a more convenient place for ownership of the objects to
- * reside, the compiler's takeOwnership method may be useful.
- *
- * The 'name' string may not persist after this call; do not store this pointer.
- */
- virtual ExternalValue* getChild(const char* name) const {
- return nullptr;
- }
- String description() const override {
- return String("external<") + fName + ">";
- }
- private:
- typedef Symbol INHERITED;
- const Type& fType;
- };
- } // namespace
- #endif
|