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 // ContextVk.h:
7 //    Defines the class interface for ContextVk, implementing ContextImpl.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_VULKAN_CONTEXTVK_H_
11 #define LIBANGLE_RENDERER_VULKAN_CONTEXTVK_H_
12 
13 #include "libANGLE/renderer/ContextImpl.h"
14 
15 namespace rx
16 {
17 class RendererVk;
18 
19 class ContextVk : public ContextImpl
20 {
21   public:
22     ContextVk(const gl::ContextState &state, RendererVk *renderer);
23     ~ContextVk() override;
24 
25     gl::Error initialize() override;
26 
27     // Flush and finish.
28     gl::Error flush() override;
29     gl::Error finish() override;
30 
31     // Drawing methods.
32     gl::Error drawArrays(GLenum mode, GLint first, GLsizei count) override;
33     gl::Error drawArraysInstanced(GLenum mode,
34                                   GLint first,
35                                   GLsizei count,
36                                   GLsizei instanceCount) override;
37 
38     gl::Error drawElements(GLenum mode,
39                            GLsizei count,
40                            GLenum type,
41                            const GLvoid *indices,
42                            const gl::IndexRange &indexRange) override;
43     gl::Error drawElementsInstanced(GLenum mode,
44                                     GLsizei count,
45                                     GLenum type,
46                                     const GLvoid *indices,
47                                     GLsizei instances,
48                                     const gl::IndexRange &indexRange) override;
49     gl::Error drawRangeElements(GLenum mode,
50                                 GLuint start,
51                                 GLuint end,
52                                 GLsizei count,
53                                 GLenum type,
54                                 const GLvoid *indices,
55                                 const gl::IndexRange &indexRange) override;
56 
57     // Device loss
58     GLenum getResetStatus() override;
59 
60     // Vendor and description strings.
61     std::string getVendorString() const override;
62     std::string getRendererDescription() const override;
63 
64     // Debug markers.
65     void insertEventMarker(GLsizei length, const char *marker) override;
66     void pushGroupMarker(GLsizei length, const char *marker) override;
67     void popGroupMarker() override;
68 
69     // State sync with dirty bits.
70     void syncState(const gl::State &state, const gl::State::DirtyBits &dirtyBits) override;
71 
72     // Disjoint timer queries
73     GLint getGPUDisjoint() override;
74     GLint64 getTimestamp() override;
75 
76     // Context switching
77     void onMakeCurrent(const gl::ContextState &data) override;
78 
79     // Native capabilities, unmodified by gl::Context.
80     const gl::Caps &getNativeCaps() const override;
81     const gl::TextureCapsMap &getNativeTextureCaps() const override;
82     const gl::Extensions &getNativeExtensions() const override;
83     const gl::Limitations &getNativeLimitations() const override;
84 
85     // Shader creation
86     CompilerImpl *createCompiler() override;
87     ShaderImpl *createShader(const gl::ShaderState &state) override;
88     ProgramImpl *createProgram(const gl::ProgramState &state) override;
89 
90     // Framebuffer creation
91     FramebufferImpl *createFramebuffer(const gl::FramebufferState &state) override;
92 
93     // Texture creation
94     TextureImpl *createTexture(const gl::TextureState &state) override;
95 
96     // Renderbuffer creation
97     RenderbufferImpl *createRenderbuffer() override;
98 
99     // Buffer creation
100     BufferImpl *createBuffer(const gl::BufferState &state) override;
101 
102     // Vertex Array creation
103     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &state) override;
104 
105     // Query and Fence creation
106     QueryImpl *createQuery(GLenum type) override;
107     FenceNVImpl *createFenceNV() override;
108     FenceSyncImpl *createFenceSync() override;
109 
110     // Transform Feedback creation
111     TransformFeedbackImpl *createTransformFeedback(
112         const gl::TransformFeedbackState &state) override;
113 
114     // Sampler object creation
115     SamplerImpl *createSampler() override;
116 
117     // Path object creation
118     std::vector<PathImpl *> createPaths(GLsizei) override;
119 
120   private:
121     RendererVk *mRenderer;
122 };
123 
124 }  // namespace rx
125 
126 #endif  // LIBANGLE_RENDERER_VULKAN_CONTEXTVK_H_
127