1 /* 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 GrVkProgramDataManager_DEFINED 9 #define GrVkProgramDataManager_DEFINED 10 11 #include "glsl/GrGLSLProgramDataManager.h" 12 13 #include "vk/GrVkUniformHandler.h" 14 15 class GrVkGpu; 16 class GrVkUniformBuffer; 17 18 class GrVkProgramDataManager : public GrGLSLProgramDataManager { 19 public: 20 typedef GrVkUniformHandler::UniformInfoArray UniformInfoArray; 21 22 GrVkProgramDataManager(const UniformInfoArray&, 23 uint32_t vertexUniformSize, 24 uint32_t fragmentUniformSize); 25 26 void set1f(UniformHandle, float v0) const override; 27 void set1fv(UniformHandle, int arrayCount, const float v[]) const override; 28 void set2f(UniformHandle, float, float) const override; 29 void set2fv(UniformHandle, int arrayCount, const float v[]) const override; 30 void set3f(UniformHandle, float, float, float) const override; 31 void set3fv(UniformHandle, int arrayCount, const float v[]) const override; 32 void set4f(UniformHandle, float, float, float, float) const override; 33 void set4fv(UniformHandle, int arrayCount, const float v[]) const override; 34 // matrices are column-major, the first two upload a single matrix, the latter two upload 35 // arrayCount matrices into a uniform array. 36 void setMatrix3f(UniformHandle, const float matrix[]) const override; 37 void setMatrix4f(UniformHandle, const float matrix[]) const override; 38 void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const override; 39 void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const override; 40 41 // for nvpr only setPathFragmentInputTransform(VaryingHandle u,int components,const SkMatrix & matrix)42 void setPathFragmentInputTransform(VaryingHandle u, int components, 43 const SkMatrix& matrix) const override { 44 SkFAIL("Only supported in NVPR, which is not in vulkan"); 45 } 46 47 void uploadUniformBuffers(const GrVkGpu* gpu, 48 GrVkUniformBuffer* vertexBuffer, 49 GrVkUniformBuffer* fragmentBuffer) const; 50 private: 51 struct Uniform { 52 uint32_t fBinding; 53 uint32_t fOffset; 54 SkDEBUGCODE( 55 GrSLType fType; 56 int fArrayCount; 57 uint32_t fSetNumber; 58 ); 59 }; 60 61 uint32_t fVertexUniformSize; 62 uint32_t fFragmentUniformSize; 63 64 SkTArray<Uniform, true> fUniforms; 65 66 mutable SkAutoMalloc fVertexUniformData; 67 mutable SkAutoMalloc fFragmentUniformData; 68 }; 69 70 #endif