aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkProgramBuilder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/vk/GrVkProgramBuilder.h')
-rw-r--r--src/gpu/vk/GrVkProgramBuilder.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkProgramBuilder.h b/src/gpu/vk/GrVkProgramBuilder.h
new file mode 100644
index 0000000000..1d7bac62b9
--- /dev/null
+++ b/src/gpu/vk/GrVkProgramBuilder.h
@@ -0,0 +1,74 @@
+/*
+* Copyright 2016 Google Inc.
+*
+* Use of this source code is governed by a BSD-style license that can be
+* found in the LICENSE file.
+*/
+
+#ifndef GrVkProgramBuilder_DEFINED
+#define GrVkProgramBuilder_DEFINED
+
+#include "glsl/GrGLSLProgramBuilder.h"
+
+#include "GrPipeline.h"
+#include "vk/GrVkUniformHandler.h"
+#include "vk/GrVkVaryingHandler.h"
+
+#include "shaderc/shaderc.h"
+#include "vulkan/vulkan.h"
+
+class GrVkGpu;
+class GrVkRenderPass;
+class GrVkProgram;
+
+class GrVkProgramBuilder : public GrGLSLProgramBuilder {
+public:
+ /** Generates a shader program.
+ *
+ * The program implements what is specified in the stages given as input.
+ * After successful generation, the builder result objects are available
+ * to be used.
+ * @return true if generation was successful.
+ */
+ static GrVkProgram* CreateProgram(GrVkGpu*,
+ const DrawArgs&,
+ GrPrimitiveType,
+ const GrVkRenderPass& renderPass);
+
+ const GrCaps* caps() const override;
+ const GrGLSLCaps* glslCaps() const override;
+
+ GrVkGpu* gpu() const { return fGpu; }
+
+ void finalizeFragmentOutputColor(GrGLSLShaderVar& outputColor) override;
+
+private:
+ GrVkProgramBuilder(GrVkGpu*, const DrawArgs&);
+
+ void emitSamplers(const GrProcessor&,
+ GrGLSLTextureSampler::TextureSamplerArray* outSamplers) override;
+
+ GrVkProgram* finalize(const DrawArgs& args,
+ GrPrimitiveType primitiveType,
+ const GrVkRenderPass& renderPass);
+
+ static bool CreateVkShaderModule(const GrVkGpu* gpu,
+ VkShaderStageFlagBits stage,
+ const GrGLSLShaderBuilder& builder,
+ VkShaderModule* shaderModule,
+ VkPipelineShaderStageCreateInfo* stageInfo);
+
+ GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; }
+ const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; }
+ GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; }
+
+ GrVkGpu* fGpu;
+ GrVkVaryingHandler fVaryingHandler;
+ GrVkUniformHandler fUniformHandler;
+
+ SkTArray<UniformHandle> fSamplerUniforms;
+
+ typedef GrGLSLProgramBuilder INHERITED;
+};
+
+#endif \ No newline at end of file