GrVkPipelineStateDataManager.h 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. #ifndef GrVkPipelineStateDataManager_DEFINED
  8. #define GrVkPipelineStateDataManager_DEFINED
  9. #include "src/gpu/glsl/GrGLSLProgramDataManager.h"
  10. #include "include/gpu/vk/GrVkTypes.h"
  11. #include "src/core/SkAutoMalloc.h"
  12. #include "src/gpu/vk/GrVkUniformHandler.h"
  13. class GrVkGpu;
  14. class GrVkUniformBuffer;
  15. class GrVkPipelineStateDataManager : public GrGLSLProgramDataManager {
  16. public:
  17. typedef GrVkUniformHandler::UniformInfoArray UniformInfoArray;
  18. GrVkPipelineStateDataManager(const UniformInfoArray&,
  19. uint32_t geometryUniformSize,
  20. uint32_t fragmentUniformSize);
  21. void set1i(UniformHandle, int32_t) const override;
  22. void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
  23. void set1f(UniformHandle, float v0) const override;
  24. void set1fv(UniformHandle, int arrayCount, const float v[]) const override;
  25. void set2i(UniformHandle, int32_t, int32_t) const override;
  26. void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
  27. void set2f(UniformHandle, float, float) const override;
  28. void set2fv(UniformHandle, int arrayCount, const float v[]) const override;
  29. void set3i(UniformHandle, int32_t, int32_t, int32_t) const override;
  30. void set3iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
  31. void set3f(UniformHandle, float, float, float) const override;
  32. void set3fv(UniformHandle, int arrayCount, const float v[]) const override;
  33. void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const override;
  34. void set4iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
  35. void set4f(UniformHandle, float, float, float, float) const override;
  36. void set4fv(UniformHandle, int arrayCount, const float v[]) const override;
  37. // matrices are column-major, the first two upload a single matrix, the latter two upload
  38. // arrayCount matrices into a uniform array.
  39. void setMatrix2f(UniformHandle, const float matrix[]) const override;
  40. void setMatrix3f(UniformHandle, const float matrix[]) const override;
  41. void setMatrix4f(UniformHandle, const float matrix[]) const override;
  42. void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override;
  43. void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const override;
  44. void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const override;
  45. // for nvpr only
  46. void setPathFragmentInputTransform(VaryingHandle u, int components,
  47. const SkMatrix& matrix) const override {
  48. SK_ABORT("Only supported in NVPR, which is not in vulkan");
  49. }
  50. // Returns true if either the geometry or fragment buffers needed to generate a new underlying
  51. // VkBuffer object in order upload data. If true is returned, this is a signal to the caller
  52. // that they will need to update the descriptor set that is using these buffers.
  53. bool uploadUniformBuffers(GrVkGpu* gpu,
  54. GrVkUniformBuffer* geometryBuffer,
  55. GrVkUniformBuffer* fragmentBuffer) const;
  56. private:
  57. struct Uniform {
  58. uint32_t fBinding;
  59. uint32_t fOffset;
  60. SkDEBUGCODE(
  61. GrSLType fType;
  62. int fArrayCount;
  63. );
  64. };
  65. template<int N> inline void setMatrices(UniformHandle, int arrayCount,
  66. const float matrices[]) const;
  67. void* getBufferPtrAndMarkDirty(const Uniform& uni) const;
  68. uint32_t fGeometryUniformSize;
  69. uint32_t fFragmentUniformSize;
  70. SkTArray<Uniform, true> fUniforms;
  71. mutable SkAutoMalloc fGeometryUniformData;
  72. mutable SkAutoMalloc fFragmentUniformData;
  73. mutable bool fGeometryUniformsDirty;
  74. mutable bool fFragmentUniformsDirty;
  75. };
  76. #endif