1 /* 2 * Copyright 2018 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 GrMtlPipelineStateDataManager_DEFINED 9 #define GrMtlPipelineStateDataManager_DEFINED 10 11 #include "src/core/SkAutoMalloc.h" 12 #include "src/gpu/GrUniformDataManager.h" 13 #include "src/gpu/mtl/GrMtlUniformHandler.h" 14 15 #import <Metal/Metal.h> 16 17 class GrMtlBuffer; 18 class GrMtlGpu; 19 class GrMtlRenderCommandEncoder; 20 21 class GrMtlPipelineStateDataManager : public GrUniformDataManager { 22 public: 23 typedef GrMtlUniformHandler::UniformInfoArray UniformInfoArray; 24 25 GrMtlPipelineStateDataManager(const UniformInfoArray&, 26 uint32_t uniformSize); 27 28 void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override; 29 void set1fv(UniformHandle, int arrayCount, const float v[]) const override; 30 void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override; 31 void set2fv(UniformHandle, int arrayCount, const float v[]) const override; 32 // matrices are column-major, the first one uploads a single matrix, the latter uploads 33 // arrayCount matrices into a uniform array. 34 void setMatrix2f(UniformHandle, const float matrix[]) const override; 35 void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override; 36 37 void uploadAndBindUniformBuffers(GrMtlGpu* gpu, 38 GrMtlRenderCommandEncoder* renderCmdEncoder) const; 39 void resetDirtyBits(); 40 41 private: 42 typedef GrUniformDataManager INHERITED; 43 }; 44 45 #endif 46