// // Copyright 2016 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Context11: // D3D11-specific functionality associated with a GL Context. // #ifndef LIBANGLE_RENDERER_D3D_D3D11_CONTEXT11_H_ #define LIBANGLE_RENDERER_D3D_D3D11_CONTEXT11_H_ #include "libANGLE/renderer/ContextImpl.h" namespace rx { class Renderer11; class Context11 : public ContextImpl { public: Context11(const gl::ContextState &state, Renderer11 *renderer); ~Context11() override; gl::Error initialize() override; // Shader creation CompilerImpl *createCompiler() override; ShaderImpl *createShader(const gl::ShaderState &data) override; ProgramImpl *createProgram(const gl::ProgramState &data) override; // Framebuffer creation FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override; // Texture creation TextureImpl *createTexture(const gl::TextureState &state) override; // Renderbuffer creation RenderbufferImpl *createRenderbuffer() override; // Buffer creation BufferImpl *createBuffer(const gl::BufferState &state) override; // Vertex Array creation VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override; // Query and Fence creation QueryImpl *createQuery(GLenum type) override; FenceNVImpl *createFenceNV() override; SyncImpl *createSync() override; // Transform Feedback creation TransformFeedbackImpl *createTransformFeedback( const gl::TransformFeedbackState &state) override; // Sampler object creation SamplerImpl *createSampler(const gl::SamplerState &state) override; // Program Pipeline object creation ProgramPipelineImpl *createProgramPipeline(const gl::ProgramPipelineState &data) override; // Path object creation. std::vector createPaths(GLsizei) override; // Flush and finish. gl::Error flush(const gl::Context *context) override; gl::Error finish(const gl::Context *context) override; // Drawing methods. gl::Error drawArrays(const gl::Context *context, GLenum mode, GLint first, GLsizei count) override; gl::Error drawArraysInstanced(const gl::Context *context, GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override; gl::Error drawElements(const gl::Context *context, GLenum mode, GLsizei count, GLenum type, const void *indices) override; gl::Error drawElementsInstanced(const gl::Context *context, GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instances) override; gl::Error drawRangeElements(const gl::Context *context, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) override; gl::Error drawArraysIndirect(const gl::Context *context, GLenum mode, const void *indirect) override; gl::Error drawElementsIndirect(const gl::Context *context, GLenum mode, GLenum type, const void *indirect) override; // Device loss GLenum getResetStatus() override; // Vendor and description strings. std::string getVendorString() const override; std::string getRendererDescription() const override; // EXT_debug_marker void insertEventMarker(GLsizei length, const char *marker) override; void pushGroupMarker(GLsizei length, const char *marker) override; void popGroupMarker() override; // KHR_debug void pushDebugGroup(GLenum source, GLuint id, GLsizei length, const char *message) override; void popDebugGroup() override; // State sync with dirty bits. void syncState(const gl::Context *context, const gl::State::DirtyBits &dirtyBits) override; // Disjoint timer queries GLint getGPUDisjoint() override; GLint64 getTimestamp() override; // Context switching void onMakeCurrent(const gl::Context *context) override; // Caps queries const gl::Caps &getNativeCaps() const override; const gl::TextureCapsMap &getNativeTextureCaps() const override; const gl::Extensions &getNativeExtensions() const override; const gl::Limitations &getNativeLimitations() const override; Renderer11 *getRenderer() const { return mRenderer; } gl::Error dispatchCompute(const gl::Context *context, GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ) override; gl::Error triggerDrawCallProgramRecompilation(const gl::Context *context, GLenum drawMode); private: gl::Error prepareForDrawCall(const gl::Context *context, GLenum drawMode); Renderer11 *mRenderer; }; } // namespace rx #endif // LIBANGLE_RENDERER_D3D_D3D11_CONTEXT11_H_