1 //
2 // Copyright 2016 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 // Context9:
7 //   D3D9-specific functionality associated with a GL Context.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_D3D_D3D9_CONTEXT9_H_
11 #define LIBANGLE_RENDERER_D3D_D3D9_CONTEXT9_H_
12 
13 #include "libANGLE/renderer/ContextImpl.h"
14 
15 namespace rx
16 {
17 class Renderer9;
18 
19 class Context9 : public ContextImpl
20 {
21   public:
22     Context9(const gl::ContextState &state, Renderer9 *renderer);
23     ~Context9() override;
24 
25     gl::Error initialize() override;
26 
27     // Shader creation
28     CompilerImpl *createCompiler() override;
29     ShaderImpl *createShader(const gl::ShaderState &data) override;
30     ProgramImpl *createProgram(const gl::ProgramState &data) override;
31 
32     // Framebuffer creation
33     FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override;
34 
35     // Texture creation
36     TextureImpl *createTexture(const gl::TextureState &state) override;
37 
38     // Renderbuffer creation
39     RenderbufferImpl *createRenderbuffer() override;
40 
41     // Buffer creation
42     BufferImpl *createBuffer(const gl::BufferState &state) override;
43 
44     // Vertex Array creation
45     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
46 
47     // Query and Fence creation
48     QueryImpl *createQuery(GLenum type) override;
49     FenceNVImpl *createFenceNV() override;
50     SyncImpl *createSync() override;
51 
52     // Transform Feedback creation
53     TransformFeedbackImpl *createTransformFeedback(
54         const gl::TransformFeedbackState &state) override;
55 
56     // Sampler object creation
57     SamplerImpl *createSampler(const gl::SamplerState &state) override;
58 
59     // Program Pipeline object creation
60     ProgramPipelineImpl *createProgramPipeline(const gl::ProgramPipelineState &data) override;
61 
62     // Path object creation
63     std::vector<PathImpl *> createPaths(GLsizei) override;
64 
65     // Flush and finish.
66     gl::Error flush(const gl::Context *context) override;
67     gl::Error finish(const gl::Context *context) override;
68 
69     // Drawing methods.
70     gl::Error drawArrays(const gl::Context *context,
71                          GLenum mode,
72                          GLint first,
73                          GLsizei count) override;
74     gl::Error drawArraysInstanced(const gl::Context *context,
75                                   GLenum mode,
76                                   GLint first,
77                                   GLsizei count,
78                                   GLsizei instanceCount) override;
79 
80     gl::Error drawElements(const gl::Context *context,
81                            GLenum mode,
82                            GLsizei count,
83                            GLenum type,
84                            const void *indices) override;
85     gl::Error drawElementsInstanced(const gl::Context *context,
86                                     GLenum mode,
87                                     GLsizei count,
88                                     GLenum type,
89                                     const void *indices,
90                                     GLsizei instances) override;
91     gl::Error drawRangeElements(const gl::Context *context,
92                                 GLenum mode,
93                                 GLuint start,
94                                 GLuint end,
95                                 GLsizei count,
96                                 GLenum type,
97                                 const void *indices) override;
98     gl::Error drawArraysIndirect(const gl::Context *context,
99                                  GLenum mode,
100                                  const void *indirect) override;
101     gl::Error drawElementsIndirect(const gl::Context *context,
102                                    GLenum mode,
103                                    GLenum type,
104                                    const void *indirect) override;
105 
106     // Device loss
107     GLenum getResetStatus() override;
108 
109     // Vendor and description strings.
110     std::string getVendorString() const override;
111     std::string getRendererDescription() const override;
112 
113     // EXT_debug_marker
114     void insertEventMarker(GLsizei length, const char *marker) override;
115     void pushGroupMarker(GLsizei length, const char *marker) override;
116     void popGroupMarker() override;
117 
118     // KHR_debug
119     void pushDebugGroup(GLenum source, GLuint id, GLsizei length, const char *message) override;
120     void popDebugGroup() override;
121 
122     // State sync with dirty bits.
123     void syncState(const gl::Context *context, const gl::State::DirtyBits &dirtyBits) override;
124 
125     // Disjoint timer queries
126     GLint getGPUDisjoint() override;
127     GLint64 getTimestamp() override;
128 
129     // Context switching
130     void onMakeCurrent(const gl::Context *context) override;
131 
132     // Caps queries
133     const gl::Caps &getNativeCaps() const override;
134     const gl::TextureCapsMap &getNativeTextureCaps() const override;
135     const gl::Extensions &getNativeExtensions() const override;
136     const gl::Limitations &getNativeLimitations() const override;
137 
138     gl::Error dispatchCompute(const gl::Context *context,
139                               GLuint numGroupsX,
140                               GLuint numGroupsY,
141                               GLuint numGroupsZ) override;
142 
getRenderer()143     Renderer9 *getRenderer() const { return mRenderer; }
144 
145   private:
146     Renderer9 *mRenderer;
147 };
148 
149 }  // namespace rx
150 
151 #endif  // LIBANGLE_RENDERER_D3D_D3D9_CONTEXT9_H_
152