Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
GrD3DPipelineStateBuilder.h
Go to the documentation of this file.
1/*
2 * Copyright 2020 Google LLC
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 GrD3DPipelineStateBuilder_DEFINED
9#define GrD3DPipelineStateBuilder_DEFINED
10
19
20namespace SkSL {
21
22enum class ProgramKind : int8_t;
23struct ProgramInterface;
24struct ProgramSettings;
25struct ShaderCaps;
26
27} // namespace SkSL
28
29class GrProgramDesc;
30class GrD3DGpu;
31class GrVkRenderPass;
32
34public:
35 /** Generates a pipeline state.
36 *
37 * The returned GrD3DPipelineState implements the supplied GrProgramInfo.
38 *
39 * @return the created pipeline if generation was successful; nullptr otherwise
40 */
41 static std::unique_ptr<GrD3DPipelineState> MakePipelineState(GrD3DGpu*,
43 const GrProgramDesc&,
44 const GrProgramInfo&);
45
47 const char* shader);
48
49 const GrCaps* caps() const override;
50
51 GrD3DGpu* gpu() const { return fGpu; }
52
53 void finalizeFragmentSecondaryColor(GrShaderVar& outputColor) override;
54
55private:
57 const GrProgramInfo&);
58
59 std::unique_ptr<GrD3DPipelineState> finalize();
60
61 bool loadHLSLFromCache(SkReadBuffer* reader, gr_cp<ID3DBlob> shaders[]);
62
63 gr_cp<ID3DBlob> compileD3DProgram(SkSL::ProgramKind kind,
64 const std::string& sksl,
65 const SkSL::ProgramSettings& settings,
66 SkSL::Program::Interface* outInterface,
67 std::string* outHLSL);
68
69 GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; }
70 const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; }
71 GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; }
72
73 GrD3DGpu* fGpu;
74 GrSPIRVVaryingHandler fVaryingHandler;
75 GrSPIRVUniformHandler fUniformHandler;
76 GrD3DRenderTarget* fRenderTarget;
77
78 using INHERITED = GrGLSLProgramBuilder;
79};
80
81namespace skgpu {
82
83class ShaderErrorHandler;
84
85inline bool SkSLToHLSL(const SkSL::ShaderCaps* caps,
86 const std::string& sksl,
87 SkSL::ProgramKind programKind,
88 const SkSL::ProgramSettings& settings,
89 std::string* hlsl,
90 SkSL::ProgramInterface* outInterface,
91 ShaderErrorHandler* errorHandler) {
92 return SkSLToBackend(caps, &SkSL::ToHLSL, "HLSL",
93 sksl, programKind, settings, hlsl, outInterface, errorHandler);
94}
95
96} // namespace skgpu
97
98#endif
GrGLSLVaryingHandler * varyingHandler() override
static sk_sp< GrD3DPipeline > MakeComputePipeline(GrD3DGpu *, GrD3DRootSignature *, const char *shader)
const GrCaps * caps() const override
const GrGLSLUniformHandler * uniformHandler() const override
void finalizeFragmentSecondaryColor(GrShaderVar &outputColor) override
static std::unique_ptr< GrD3DPipelineState > MakePipelineState(GrD3DGpu *, GrD3DRenderTarget *, const GrProgramDesc &, const GrProgramInfo &)
GrGLSLUniformHandler * uniformHandler() override
bool ToHLSL(Program &program, const ShaderCaps *caps, OutputStream &out)
bool SkSLToBackend(const SkSL::ShaderCaps *caps, bool(*toBackend)(SkSL::Program &, const SkSL::ShaderCaps *, std::string *), const char *backendLabel, const std::string &sksl, SkSL::ProgramKind programKind, const SkSL::ProgramSettings &settings, std::string *output, SkSL::ProgramInterface *outInterface, ShaderErrorHandler *errorHandler)