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