/** * Abstract superclass of all code generators, which take a Program as input and produce code as * output.
*/ class CodeGenerator { public:
CodeGenerator(const Context* context, const ShaderCaps* caps, const Program* program,
OutputStream* stream)
: fProgram(*program)
, fContext(fProgram.fContext->fTypes, *fProgram.fContext->fErrors)
, fCaps(*caps)
, fOut(stream) {
fContext.fConfig = fProgram.fConfig.get();
fContext.fModule = fProgram.fContext->fModule;
fContext.fSymbolTable = fProgram.fSymbols.get();
}
virtual ~CodeGenerator() = default;
virtualbool generateCode() = 0;
// Intended for use by AutoOutputStream.
OutputStream* outputStream() { return fOut; } void setOutputStream(OutputStream* output) { fOut = output; }
protected: #ifdefined(SK_USE_LEGACY_MIPMAP_LOD_BIAS) static constexpr float kSharpenTexturesBias = -.5f; #else // For SkMipmapMode::kLinear we want a bias such that when the unbiased LOD value is // midway between levels we select just the larger level, i.e. a bias of -.5. However, using // this bias with kNearest mode with a draw that is a perfect power of two downscale puts us // right on the rounding edge where it could go up or down depending on the particular GPU. // Experimentally we found that at -.49 most iOS devices (iPhone 7, 8, and iPad Pro // [PowerVRGT7800 version]) all round to the level twice as big as the device space footprint // for some such draws in our unit tests on GLES. However, the iPhone 11 still fails and so // we are using -.475. They do not at -.48. All other GPUs passed tests with -.499. Though, at // this time the bias is not implemented in the MSL codegen and so iOS/Metal was not tested. static constexpr float kSharpenTexturesBias = -.475f; #endif
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.