blob: b77d5ffe3f05efa7ebb6804dae98bc836ad79357 [file] [log] [blame]
Stephen White79b81c92019-07-31 15:56:26 -04001/*
2 * Copyright 2019 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 GrDawnProgramDataManager_DEFINED
9#define GrDawnProgramDataManager_DEFINED
10
Stephen Whiteb7eaedc2019-08-21 09:48:05 -040011#include "src/gpu/dawn/GrDawnRingBuffer.h"
Stephen White79b81c92019-07-31 15:56:26 -040012#include "src/gpu/dawn/GrDawnUniformHandler.h"
13#include "src/gpu/glsl/GrGLSLProgramDataManager.h"
14#include "dawn/dawncpp.h"
15
16#include "src/core/SkAutoMalloc.h"
17
18class GrDawnGpu;
19class GrDawnUniformBuffer;
20
21class GrDawnProgramDataManager : public GrGLSLProgramDataManager {
22public:
23 typedef GrDawnUniformHandler::UniformInfoArray UniformInfoArray;
24
25 GrDawnProgramDataManager(const UniformInfoArray&,
26 uint32_t geometryUniformSize,
27 uint32_t fragmentUniformSize);
28
29 void set1i(UniformHandle, int32_t) const override;
30 void set1iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
31 void set2i(UniformHandle, int32_t, int32_t) const override;
32 void set2iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
33 void set3i(UniformHandle, int32_t, int32_t, int32_t) const override;
34 void set3iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
35 void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const override;
36 void set4iv(UniformHandle, int arrayCount, const int32_t v[]) const override;
37
38 void set1f(UniformHandle, float v0) const override;
39 void set1fv(UniformHandle, int arrayCount, const float v[]) const override;
40 void set2f(UniformHandle, float, float) const override;
41 void set2fv(UniformHandle, int arrayCount, const float v[]) const override;
42 void set3f(UniformHandle, float, float, float) const override;
43 void set3fv(UniformHandle, int arrayCount, const float v[]) const override;
44 void set4f(UniformHandle, float, float, float, float) const override;
45 void set4fv(UniformHandle, int arrayCount, const float v[]) const override;
46 // matrices are column-major, the first two upload a single matrix, the latter two upload
47 // arrayCount matrices into a uniform array.
48 void setMatrix2f(UniformHandle, const float matrix[]) const override;
49 void setMatrix3f(UniformHandle, const float matrix[]) const override;
50 void setMatrix4f(UniformHandle, const float matrix[]) const override;
51 void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const override;
52 void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const override;
53 void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const override;
54
55 // for nvpr only
56 void setPathFragmentInputTransform(VaryingHandle u, int components,
57 const SkMatrix& matrix) const override {
58 SK_ABORT("Only supported in NVPR, which is not in Dawn");
59 }
60
Stephen White7fba36b2019-09-10 13:05:22 -040061 void uploadUniformBuffers(GrDawnGpu* gpu,
62 GrDawnRingBuffer::Slice geometryBuffer,
Stephen Whiteb7eaedc2019-08-21 09:48:05 -040063 GrDawnRingBuffer::Slice fragmentBuffer) const;
Stephen White79b81c92019-07-31 15:56:26 -040064
Stephen Whiteb7eaedc2019-08-21 09:48:05 -040065 uint32_t geometryUniformSize() const { return fGeometryUniformSize; }
66 uint32_t fragmentUniformSize() const { return fFragmentUniformSize; }
Stephen White79b81c92019-07-31 15:56:26 -040067private:
68 struct Uniform {
69 uint32_t fBinding;
70 uint32_t fOffset;
71 SkDEBUGCODE(
72 GrSLType fType;
73 int fArrayCount;
74 );
75 };
76
77 template<int N> inline void setMatrices(UniformHandle, int arrayCount,
78 const float matrices[]) const;
79
80 void* getBufferPtrAndMarkDirty(const Uniform& uni) const;
81
82 uint32_t fGeometryUniformSize;
83 uint32_t fFragmentUniformSize;
84
85 SkTArray<Uniform, true> fUniforms;
86
87 mutable SkAutoMalloc fGeometryUniformData;
88 mutable SkAutoMalloc fFragmentUniformData;
89 mutable bool fGeometryUniformsDirty;
90 mutable bool fFragmentUniformsDirty;
91};
92
93#endif