blob: 69281eff3f9845f4746e251f031b8ce09c19728e [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
2* Copyright 2016 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 GrVkPipeline_DEFINED
9#define GrVkPipeline_DEFINED
10
Brian Salomonf4a00e42018-03-23 15:15:03 -040011#include "GrTypesPriv.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050012#include "GrVkResource.h"
jvanverthe50f3e72016-03-28 07:03:06 -070013#include "vk/GrVkDefines.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050014
Greg Daniel164a9f02016-02-22 09:56:40 -050015class GrPipeline;
16class GrPrimitiveProcessor;
Chris Dalton46983b72017-06-06 12:27:16 -060017class GrRenderTarget;
18class GrXferProcessor;
csmartdaltonc633abb2016-11-01 08:55:55 -070019class GrStencilSettings;
egdaniel470d77a2016-03-18 12:50:27 -070020class GrVkCommandBuffer;
Greg Daniel164a9f02016-02-22 09:56:40 -050021class GrVkGpu;
22class GrVkRenderPass;
Chris Dalton46983b72017-06-06 12:27:16 -060023struct SkIRect;
Greg Daniel164a9f02016-02-22 09:56:40 -050024
25class GrVkPipeline : public GrVkResource {
26public:
halcanary9d524f22016-03-29 09:03:52 -070027 static GrVkPipeline* Create(GrVkGpu* gpu,
Brian Salomonff168d92018-06-23 15:17:27 -040028 const GrPrimitiveProcessor& primProc,
Greg Daniel164a9f02016-02-22 09:56:40 -050029 const GrPipeline& pipeline,
csmartdaltonc633abb2016-11-01 08:55:55 -070030 const GrStencilSettings&,
Greg Daniel164a9f02016-02-22 09:56:40 -050031 VkPipelineShaderStageCreateInfo* shaderStageInfo,
32 int shaderStageCount,
33 GrPrimitiveType primitiveType,
34 const GrVkRenderPass& renderPass,
jvanverth03509ea2016-03-02 13:19:47 -080035 VkPipelineLayout layout,
36 VkPipelineCache cache);
Greg Daniel164a9f02016-02-22 09:56:40 -050037
38 VkPipeline pipeline() const { return fPipeline; }
39
Chris Dalton46983b72017-06-06 12:27:16 -060040 static void SetDynamicScissorRectState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*,
Robert Phillipsb0e93a22017-08-29 08:26:54 -040041 GrSurfaceOrigin, SkIRect);
Jim Van Verth6a40abc2017-11-02 16:56:09 +000042 static void SetDynamicViewportState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*);
Chris Dalton46983b72017-06-06 12:27:16 -060043 static void SetDynamicBlendConstantState(GrVkGpu*, GrVkCommandBuffer*, GrPixelConfig,
44 const GrXferProcessor&);
egdaniel470d77a2016-03-18 12:50:27 -070045
jvanverth7ec92412016-07-06 09:24:57 -070046#ifdef SK_TRACE_VK_RESOURCES
47 void dumpInfo() const override {
48 SkDebugf("GrVkPipeline: %d (%d refs)\n", fPipeline, this->getRefCnt());
49 }
50#endif
egdaniel470d77a2016-03-18 12:50:27 -070051
egdaniel12c75632016-09-19 13:39:34 -070052protected:
Greg Daniel164a9f02016-02-22 09:56:40 -050053 GrVkPipeline(VkPipeline pipeline) : INHERITED(), fPipeline(pipeline) {}
54
Greg Daniel164a9f02016-02-22 09:56:40 -050055 VkPipeline fPipeline;
56
egdaniel12c75632016-09-19 13:39:34 -070057private:
58 void freeGPUData(const GrVkGpu* gpu) const override;
59
Greg Daniel164a9f02016-02-22 09:56:40 -050060 typedef GrVkResource INHERITED;
61};
62
63#endif