/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrVkPipelineStateDataManager_DEFINED #define GrVkPipelineStateDataManager_DEFINED #include "src/gpu/GrUniformDataManager.h" #include "include/gpu/vk/GrVkTypes.h" #include "src/gpu/vk/GrVkUniformHandler.h" class GrGpuBuffer; class GrVkCommandBuffer; class GrVkGpu; class GrVkPipelineStateDataManager : public GrUniformDataManager { public: typedef GrVkUniformHandler::UniformInfoArray UniformInfoArray; GrVkPipelineStateDataManager(const UniformInfoArray&, uint32_t uniformSize, bool usePushConstants); // Returns the uniform buffer that holds all the uniform data. If there are no uniforms it // returns nullptr. If there was an error in creating or uploading the uniforms the value of the // returned bool will be false and the buffer will be nullptr. Otherwise the bool will be true. std::pair, bool> uploadUniforms(GrVkGpu* gpu, VkPipelineLayout, GrVkCommandBuffer* commandBuffer); void releaseData(); // TODO: we might need more of these once std430 size/alignment issues are worked out void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override; void set1fv(UniformHandle, int arrayCount, const float v[]) const override; void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override; void set2fv(UniformHandle, int arrayCount, const float v[]) const override; void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override; private: sk_sp fUniformBuffer; bool fUsePushConstants; using INHERITED = GrUniformDataManager; }; #endif