| /* |
| * 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<sk_sp<GrGpuBuffer>, 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<GrGpuBuffer> fUniformBuffer; |
| bool fUsePushConstants; |
| |
| using INHERITED = GrUniformDataManager; |
| }; |
| |
| #endif |