• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // Fence11.h: Defines the rx::FenceNV11 and rx::Sync11 classes which implement rx::FenceNVImpl
8 // and rx::SyncImpl.
9 
10 #ifndef LIBANGLE_RENDERER_D3D_D3D11_FENCE11_H_
11 #define LIBANGLE_RENDERER_D3D_D3D11_FENCE11_H_
12 
13 #include "libANGLE/renderer/FenceNVImpl.h"
14 #include "libANGLE/renderer/SyncImpl.h"
15 
16 namespace rx
17 {
18 class Renderer11;
19 
20 class FenceNV11 : public FenceNVImpl
21 {
22   public:
23     explicit FenceNV11(Renderer11 *renderer);
24     ~FenceNV11() override;
25 
onDestroy(const gl::Context * context)26     void onDestroy(const gl::Context *context) override {}
27     angle::Result set(const gl::Context *context, GLenum condition) override;
28     angle::Result test(const gl::Context *context, GLboolean *outFinished) override;
29     angle::Result finish(const gl::Context *context) override;
30 
31   private:
32     template <class T>
33     friend angle::Result FenceSetHelper(const gl::Context *context, T *fence);
34     template <class T>
35     friend angle::Result FenceTestHelper(const gl::Context *context,
36                                          T *fence,
37                                          bool flushCommandBuffer,
38                                          GLboolean *outFinished);
39 
40     Renderer11 *mRenderer;
41     ID3D11Query *mQuery;
42 };
43 
44 class Sync11 : public SyncImpl
45 {
46   public:
47     explicit Sync11(Renderer11 *renderer);
48     ~Sync11() override;
49 
50     angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override;
51     angle::Result clientWait(const gl::Context *context,
52                              GLbitfield flags,
53                              GLuint64 timeout,
54                              GLenum *outResult) override;
55     angle::Result serverWait(const gl::Context *context,
56                              GLbitfield flags,
57                              GLuint64 timeout) override;
58     angle::Result getStatus(const gl::Context *context, GLint *outResult) override;
59 
60   private:
61     template <class T>
62     friend angle::Result FenceSetHelper(const gl::Context *context, T *fence);
63     template <class T>
64     friend angle::Result FenceTestHelper(const gl::Context *context,
65                                          T *fence,
66                                          bool flushCommandBuffer,
67                                          GLboolean *outFinished);
68 
69     Renderer11 *mRenderer;
70     ID3D11Query *mQuery;
71     LONGLONG mCounterFrequency;
72 };
73 
74 }  // namespace rx
75 
76 #endif  // LIBANGLE_RENDERER_D3D_D3D11_FENCE11_H_
77