blob: 88c3d5f9150037209a29455a5b63ce8439d4dcb1 [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
11#include "GrTypes.h"
12
13#include "GrVkResource.h"
14
jvanverthe50f3e72016-03-28 07:03:06 -070015#include "vk/GrVkDefines.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050016
Greg Daniel164a9f02016-02-22 09:56:40 -050017class GrPipeline;
18class GrPrimitiveProcessor;
Chris Dalton46983b72017-06-06 12:27:16 -060019class GrRenderTarget;
20class GrXferProcessor;
csmartdaltonc633abb2016-11-01 08:55:55 -070021class GrStencilSettings;
egdaniel470d77a2016-03-18 12:50:27 -070022class GrVkCommandBuffer;
Greg Daniel164a9f02016-02-22 09:56:40 -050023class GrVkGpu;
24class GrVkRenderPass;
Chris Dalton46983b72017-06-06 12:27:16 -060025struct SkIRect;
Greg Daniel164a9f02016-02-22 09:56:40 -050026
27class GrVkPipeline : public GrVkResource {
28public:
halcanary9d524f22016-03-29 09:03:52 -070029 static GrVkPipeline* Create(GrVkGpu* gpu,
Greg Daniel164a9f02016-02-22 09:56:40 -050030 const GrPipeline& pipeline,
csmartdaltonc633abb2016-11-01 08:55:55 -070031 const GrStencilSettings&,
Greg Daniel164a9f02016-02-22 09:56:40 -050032 const GrPrimitiveProcessor& primProc,
33 VkPipelineShaderStageCreateInfo* shaderStageInfo,
34 int shaderStageCount,
35 GrPrimitiveType primitiveType,
36 const GrVkRenderPass& renderPass,
jvanverth03509ea2016-03-02 13:19:47 -080037 VkPipelineLayout layout,
38 VkPipelineCache cache);
Greg Daniel164a9f02016-02-22 09:56:40 -050039
40 VkPipeline pipeline() const { return fPipeline; }
41
Chris Dalton46983b72017-06-06 12:27:16 -060042 static void SetDynamicScissorRectState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*,
Robert Phillipsb0e93a22017-08-29 08:26:54 -040043 GrSurfaceOrigin, SkIRect);
Chris Dalton46983b72017-06-06 12:27:16 -060044 static void SetDynamicViewportState(GrVkGpu*, GrVkCommandBuffer*, const GrRenderTarget*);
45 static void SetDynamicBlendConstantState(GrVkGpu*, GrVkCommandBuffer*, GrPixelConfig,
46 const GrXferProcessor&);
egdaniel470d77a2016-03-18 12:50:27 -070047
jvanverth7ec92412016-07-06 09:24:57 -070048#ifdef SK_TRACE_VK_RESOURCES
49 void dumpInfo() const override {
50 SkDebugf("GrVkPipeline: %d (%d refs)\n", fPipeline, this->getRefCnt());
51 }
52#endif
egdaniel470d77a2016-03-18 12:50:27 -070053
egdaniel12c75632016-09-19 13:39:34 -070054protected:
Greg Daniel164a9f02016-02-22 09:56:40 -050055 GrVkPipeline(VkPipeline pipeline) : INHERITED(), fPipeline(pipeline) {}
56
Greg Daniel164a9f02016-02-22 09:56:40 -050057 VkPipeline fPipeline;
58
egdaniel12c75632016-09-19 13:39:34 -070059private:
60 void freeGPUData(const GrVkGpu* gpu) const override;
61
Greg Daniel164a9f02016-02-22 09:56:40 -050062 typedef GrVkResource INHERITED;
63};
64
65#endif