Update how we send draws to gpu backend to reduce state setting.
The main change here is that we pull primitive type off of the vertices, we set the gpu state on gpu once per pipeline/prim proc draw batch, and we create the ProgramDescriptor only for the Cache/ProgramBuilder.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1806983002
Review URL: https://codereview.chromium.org/1806983002
diff --git a/src/gpu/vk/GrVkProgramBuilder.h b/src/gpu/vk/GrVkProgramBuilder.h
index 83a7adf..65fe546 100644
--- a/src/gpu/vk/GrVkProgramBuilder.h
+++ b/src/gpu/vk/GrVkProgramBuilder.h
@@ -20,6 +20,7 @@
class GrVkGpu;
class GrVkRenderPass;
class GrVkProgram;
+class GrVkProgramDesc;
class GrVkProgramBuilder : public GrGLSLProgramBuilder {
public:
@@ -31,8 +32,10 @@
* @return true if generation was successful.
*/
static GrVkProgram* CreateProgram(GrVkGpu*,
- const DrawArgs&,
+ const GrPipeline&,
+ const GrPrimitiveProcessor&,
GrPrimitiveType,
+ const GrVkProgramDesc&,
const GrVkRenderPass& renderPass);
const GrCaps* caps() const override;
@@ -43,11 +46,12 @@
void finalizeFragmentOutputColor(GrGLSLShaderVar& outputColor) override;
private:
- GrVkProgramBuilder(GrVkGpu*, const DrawArgs&);
+ GrVkProgramBuilder(GrVkGpu*,
+ const GrPipeline&,
+ const GrPrimitiveProcessor&,
+ const GrVkProgramDesc&);
- GrVkProgram* finalize(const DrawArgs& args,
- GrPrimitiveType primitiveType,
- const GrVkRenderPass& renderPass);
+ GrVkProgram* finalize(GrPrimitiveType primitiveType, const GrVkRenderPass& renderPass);
static bool CreateVkShaderModule(const GrVkGpu* gpu,
VkShaderStageFlagBits stage,
@@ -63,8 +67,6 @@
GrVkVaryingHandler fVaryingHandler;
GrVkUniformHandler fUniformHandler;
- SkTArray<UniformHandle> fSamplerUniforms;
-
typedef GrGLSLProgramBuilder INHERITED;
};