GrVkPipelineStateBuilder.h revision d632bb4dfc184d7c523bb436940c182ed42551ea
187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin/*
287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin* Copyright 2016 Google Inc.
387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin*
487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin* Use of this source code is governed by a BSD-style license that can be
587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin* found in the LICENSE file.
687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin*/
787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#ifndef GrVkPipelineStateBuilder_DEFINED
987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#define GrVkPipelineStateBuilder_DEFINED
1087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
1187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "glsl/GrGLSLProgramBuilder.h"
1287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
1387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "GrPipeline.h"
1487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "GrVkPipelineState.h"
1587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "GrVkUniformHandler.h"
1687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "GrVkVaryingHandler.h"
1787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
1887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "shaderc/shaderc.h"
1987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#include "vk/GrVkDefines.h"
2087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
2187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinclass GrVkGpu;
2287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinclass GrVkRenderPass;
2387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinclass GrVkProgramDesc;
2487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
2587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinclass GrVkPipelineStateBuilder : public GrGLSLProgramBuilder {
2687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinpublic:
2787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    /** Generates a pipeline state.
2887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    *
2987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    * The GrVkPipelineState implements what is specified in the GrPipeline and GrPrimitiveProcessor
3087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    * as input. After successful generation, the builder result objects are available to be used.
3187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    * @return true if generation was successful.
3287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    */
3387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    static GrVkPipelineState* CreatePipelineState(GrVkGpu*,
3487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                                  const GrPipeline&,
3587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                                  const GrPrimitiveProcessor&,
3687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                                  GrPrimitiveType,
3787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                                  const GrVkPipelineState::Desc&,
3887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                                  const GrVkRenderPass& renderPass);
3987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
4087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    const GrCaps* caps() const override;
4187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    const GrGLSLCaps* glslCaps() const override;
4287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
4387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrVkGpu* gpu() const { return fGpu; }
4487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
4587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    void finalizeFragmentOutputColor(GrGLSLShaderVar& outputColor) override;
4687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    void finalizeFragmentSecondaryColor(GrGLSLShaderVar& outputColor) override;
4787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
4887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levinprivate:
4987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrVkPipelineStateBuilder(GrVkGpu*,
5087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                             const GrPipeline&,
513d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                             const GrPrimitiveProcessor&,
523d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                             const GrVkProgramDesc&);
533d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin
543d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin    GrVkPipelineState* finalize(GrPrimitiveType primitiveType,
553d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                                const GrVkRenderPass& renderPass,
563d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                                const GrVkPipelineState::Desc&);
573d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin
583d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin    static bool CreateVkShaderModule(const GrVkGpu* gpu,
593d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                                     VkShaderStageFlagBits stage,
603d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                                     const GrGLSLShaderBuilder& builder,
613d54c92691b3881b6b1d9a08c283417cdbb5ac0aDmitry V. Levin                                     VkShaderModule* shaderModule,
6287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin                                     VkPipelineShaderStageCreateInfo* stageInfo);
6387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
6487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; }
6587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; }
6687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; }
6787e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
6887e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrVkGpu* fGpu;
6987e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrVkVaryingHandler        fVaryingHandler;
7087e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    GrVkUniformHandler        fUniformHandler;
7187e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
7287e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin    typedef GrGLSLProgramBuilder INHERITED;
7387e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin};
7487e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin
7587e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin#endif
7687e6b230fff800eb768b68b2e5173ebbe83fd3efDmitry V. Levin