Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
GrMtlPipelineStateBuilder.h
Go to the documentation of this file.
1/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrMtlPipelineStateBuilder_DEFINED
9#define GrMtlPipelineStateBuilder_DEFINED
10
17
18#import <Metal/Metal.h>
19
20class GrProgramDesc;
21class GrProgramInfo;
22class GrMtlCaps;
23class GrMtlGpu;
25class SkReadBuffer;
26
27namespace SkSL { class Compiler; }
28
30 // TODO: wrap these in sk_cfp<> or unique_ptr<> when we remove ARC
31 id<MTLLibrary> fVertexLibrary;
32 id<MTLLibrary> fFragmentLibrary;
33 bool fRTFlip = false;
34};
35
37public:
38 /** Generates a pipeline state.
39 *
40 * The returned GrMtlPipelineState implements the supplied GrProgramInfo.
41 *
42 * @return the created pipeline if generation was successful; nullptr otherwise
43 */
45 GrMtlGpu*,
46 const GrProgramDesc&,
47 const GrProgramInfo&,
48 const GrMtlPrecompiledLibraries* precompiledLibs = nullptr);
49
50 static bool PrecompileShaders(GrMtlGpu*, const SkData&,
51 GrMtlPrecompiledLibraries* precompiledLibs);
52
53private:
55
56 GrMtlPipelineState* finalize(const GrProgramDesc&, const GrProgramInfo&,
57 const GrMtlPrecompiledLibraries* precompiledLibraries);
58
59 const GrCaps* caps() const override;
60
61 void finalizeFragmentSecondaryColor(GrShaderVar& outputColor) override;
62
63 id<MTLLibrary> compileMtlShaderLibrary(const std::string& shader,
66 void storeShadersInCache(const std::string shaders[],
70 bool isSkSL);
71
72 GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; }
73 const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; }
74 GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; }
75
76 GrMtlGpu* fGpu;
77 GrMtlUniformHandler fUniformHandler;
78 GrMtlVaryingHandler fVaryingHandler;
79
80 using INHERITED = GrGLSLProgramBuilder;
81};
82#endif
static GrMtlPipelineState * CreatePipelineState(GrMtlGpu *, const GrProgramDesc &, const GrProgramInfo &, const GrMtlPrecompiledLibraries *precompiledLibs=nullptr)
GrGLSLVaryingHandler * varyingHandler() override
void finalizeFragmentSecondaryColor(GrShaderVar &outputColor) override
const GrCaps * caps() const override
const GrGLSLUniformHandler * uniformHandler() const override
GrGLSLUniformHandler * uniformHandler() override
static bool PrecompileShaders(GrMtlGpu *, const SkData &, GrMtlPrecompiledLibraries *precompiledLibs)