• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The Dawn Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef DAWNNATIVE_PROGRAMMABLEENCODER_H_
16 #define DAWNNATIVE_PROGRAMMABLEENCODER_H_
17 
18 #include "dawn_native/CommandEncoder.h"
19 #include "dawn_native/Error.h"
20 #include "dawn_native/Forward.h"
21 #include "dawn_native/IntegerTypes.h"
22 #include "dawn_native/ObjectBase.h"
23 
24 #include "dawn_native/dawn_platform.h"
25 
26 namespace dawn_native {
27 
28     class DeviceBase;
29 
30     // Base class for shared functionality between programmable encoders.
31     class ProgrammableEncoder : public ApiObjectBase {
32       public:
33         ProgrammableEncoder(DeviceBase* device,
34                             const char* label,
35                             EncodingContext* encodingContext);
36 
37         void APIInsertDebugMarker(const char* groupLabel);
38         void APIPopDebugGroup();
39         void APIPushDebugGroup(const char* groupLabel);
40 
41       protected:
42         bool IsValidationEnabled() const;
43         MaybeError ValidateProgrammableEncoderEnd() const;
44 
45         // Compute and render passes do different things on SetBindGroup. These are helper functions
46         // for the logic they have in common.
47         MaybeError ValidateSetBindGroup(BindGroupIndex index,
48                                         BindGroupBase* group,
49                                         uint32_t dynamicOffsetCountIn,
50                                         const uint32_t* dynamicOffsetsIn) const;
51         void RecordSetBindGroup(CommandAllocator* allocator,
52                                 BindGroupIndex index,
53                                 BindGroupBase* group,
54                                 uint32_t dynamicOffsetCount,
55                                 const uint32_t* dynamicOffsets) const;
56 
57         // Construct an "error" programmable pass encoder.
58         ProgrammableEncoder(DeviceBase* device,
59                             EncodingContext* encodingContext,
60                             ErrorTag errorTag);
61 
62         EncodingContext* mEncodingContext = nullptr;
63 
64         uint64_t mDebugGroupStackSize = 0;
65 
66       private:
67         const bool mValidationEnabled;
68     };
69 
70 }  // namespace dawn_native
71 
72 #endif  // DAWNNATIVE_PROGRAMMABLEENCODER_H_
73