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