blob: d3489aa7e7b7db97ca0f9305b602da1a6f37b61d [file] [log] [blame]
Jamie Madill9e54b5a2016-05-25 12:57:39 -04001//
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.cpp:
7// Implements the class methods for ContextVk.
8//
9
10#include "libANGLE/renderer/vulkan/ContextVk.h"
11
12#include "common/debug.h"
Jamie Madillacccc6c2016-05-03 17:22:10 -040013#include "libANGLE/renderer/vulkan/BufferVk.h"
14#include "libANGLE/renderer/vulkan/CompilerVk.h"
15#include "libANGLE/renderer/vulkan/ContextVk.h"
16#include "libANGLE/renderer/vulkan/DeviceVk.h"
17#include "libANGLE/renderer/vulkan/FenceNVVk.h"
18#include "libANGLE/renderer/vulkan/FenceSyncVk.h"
19#include "libANGLE/renderer/vulkan/FramebufferVk.h"
20#include "libANGLE/renderer/vulkan/ImageVk.h"
21#include "libANGLE/renderer/vulkan/ProgramVk.h"
22#include "libANGLE/renderer/vulkan/QueryVk.h"
23#include "libANGLE/renderer/vulkan/RenderbufferVk.h"
24#include "libANGLE/renderer/vulkan/RendererVk.h"
25#include "libANGLE/renderer/vulkan/SamplerVk.h"
26#include "libANGLE/renderer/vulkan/ShaderVk.h"
27#include "libANGLE/renderer/vulkan/TextureVk.h"
28#include "libANGLE/renderer/vulkan/TransformFeedbackVk.h"
29#include "libANGLE/renderer/vulkan/VertexArrayVk.h"
Jamie Madill9e54b5a2016-05-25 12:57:39 -040030
31namespace rx
32{
33
Jamie Madillacccc6c2016-05-03 17:22:10 -040034ContextVk::ContextVk(const gl::ContextState &state, RendererVk *renderer)
35 : ContextImpl(state), mRenderer(renderer)
Jamie Madill9e54b5a2016-05-25 12:57:39 -040036{
37}
38
39ContextVk::~ContextVk()
40{
41}
42
43gl::Error ContextVk::initialize()
44{
Jamie Madille09bd5d2016-11-29 16:20:35 -050045 return gl::NoError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -040046}
47
48gl::Error ContextVk::flush()
49{
50 UNIMPLEMENTED();
51 return gl::Error(GL_INVALID_OPERATION);
52}
53
54gl::Error ContextVk::finish()
55{
56 UNIMPLEMENTED();
57 return gl::Error(GL_INVALID_OPERATION);
58}
59
60gl::Error ContextVk::drawArrays(GLenum mode, GLint first, GLsizei count)
61{
62 UNIMPLEMENTED();
63 return gl::Error(GL_INVALID_OPERATION);
64}
65
66gl::Error ContextVk::drawArraysInstanced(GLenum mode,
67 GLint first,
68 GLsizei count,
69 GLsizei instanceCount)
70{
71 UNIMPLEMENTED();
72 return gl::Error(GL_INVALID_OPERATION);
73}
74
75gl::Error ContextVk::drawElements(GLenum mode,
76 GLsizei count,
77 GLenum type,
78 const GLvoid *indices,
79 const gl::IndexRange &indexRange)
80{
81 UNIMPLEMENTED();
82 return gl::Error(GL_INVALID_OPERATION);
83}
84
85gl::Error ContextVk::drawElementsInstanced(GLenum mode,
86 GLsizei count,
87 GLenum type,
88 const GLvoid *indices,
89 GLsizei instances,
90 const gl::IndexRange &indexRange)
91{
92 UNIMPLEMENTED();
93 return gl::Error(GL_INVALID_OPERATION);
94}
95
96gl::Error ContextVk::drawRangeElements(GLenum mode,
97 GLuint start,
98 GLuint end,
99 GLsizei count,
100 GLenum type,
101 const GLvoid *indices,
102 const gl::IndexRange &indexRange)
103{
Jamie Madill7b57b9d2017-01-13 09:33:38 -0500104 return gl::NoError();
105}
106
107VkDevice ContextVk::getDevice() const
108{
109 return mRenderer->getDevice();
110}
111
112vk::CommandBuffer *ContextVk::getCommandBuffer()
113{
114 return mRenderer->getCommandBuffer();
115}
116
117vk::Error ContextVk::submitCommands(const vk::CommandBuffer &commandBuffer)
118{
119 // TODO(jmadill): Command queuing.
120 ANGLE_TRY(mRenderer->submitAndFinishCommandBuffer(commandBuffer));
121 return vk::NoError();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400122}
123
Jiajia Qind9671222016-11-29 16:30:31 +0800124gl::Error ContextVk::drawArraysIndirect(GLenum mode, const GLvoid *indirect)
125{
126 UNIMPLEMENTED();
127 return gl::InternalError() << "DrawArraysIndirect hasn't been implemented for vulkan backend.";
128}
129
130gl::Error ContextVk::drawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect)
131{
132 UNIMPLEMENTED();
133 return gl::InternalError()
134 << "DrawElementsIndirect hasn't been implemented for vulkan backend.";
135}
136
Corentin Wallez87fbe1c2016-08-03 14:41:42 -0400137GLenum ContextVk::getResetStatus()
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400138{
139 UNIMPLEMENTED();
Corentin Wallez87fbe1c2016-08-03 14:41:42 -0400140 return GL_NO_ERROR;
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400141}
142
143std::string ContextVk::getVendorString() const
144{
145 UNIMPLEMENTED();
146 return std::string();
147}
148
149std::string ContextVk::getRendererDescription() const
150{
Jamie Madille09bd5d2016-11-29 16:20:35 -0500151 return mRenderer->getRendererDescription();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400152}
153
154void ContextVk::insertEventMarker(GLsizei length, const char *marker)
155{
156 UNIMPLEMENTED();
157}
158
159void ContextVk::pushGroupMarker(GLsizei length, const char *marker)
160{
161 UNIMPLEMENTED();
162}
163
164void ContextVk::popGroupMarker()
165{
166 UNIMPLEMENTED();
167}
168
Jamie Madill7b57b9d2017-01-13 09:33:38 -0500169void ContextVk::syncState(const gl::State & /*state*/, const gl::State::DirtyBits & /*dirtyBits*/)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400170{
Jamie Madill7b57b9d2017-01-13 09:33:38 -0500171 // TODO(jmadill): Vulkan dirty bits.
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400172}
173
174GLint ContextVk::getGPUDisjoint()
175{
176 UNIMPLEMENTED();
177 return GLint();
178}
179
180GLint64 ContextVk::getTimestamp()
181{
182 UNIMPLEMENTED();
183 return GLint64();
184}
185
Jamie Madille09bd5d2016-11-29 16:20:35 -0500186void ContextVk::onMakeCurrent(const gl::ContextState & /*data*/)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400187{
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400188}
189
190const gl::Caps &ContextVk::getNativeCaps() const
191{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400192 return mRenderer->getNativeCaps();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400193}
194
195const gl::TextureCapsMap &ContextVk::getNativeTextureCaps() const
196{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400197 return mRenderer->getNativeTextureCaps();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400198}
199
200const gl::Extensions &ContextVk::getNativeExtensions() const
201{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400202 return mRenderer->getNativeExtensions();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400203}
204
205const gl::Limitations &ContextVk::getNativeLimitations() const
206{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400207 return mRenderer->getNativeLimitations();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400208}
209
210CompilerImpl *ContextVk::createCompiler()
211{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400212 return new CompilerVk();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400213}
214
Jamie Madillacccc6c2016-05-03 17:22:10 -0400215ShaderImpl *ContextVk::createShader(const gl::ShaderState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400216{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400217 return new ShaderVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400218}
219
Jamie Madillacccc6c2016-05-03 17:22:10 -0400220ProgramImpl *ContextVk::createProgram(const gl::ProgramState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400221{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400222 return new ProgramVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400223}
224
Jamie Madillacccc6c2016-05-03 17:22:10 -0400225FramebufferImpl *ContextVk::createFramebuffer(const gl::FramebufferState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400226{
Jamie Madill7b57b9d2017-01-13 09:33:38 -0500227 return FramebufferVk::CreateUserFBO(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400228}
229
230TextureImpl *ContextVk::createTexture(const gl::TextureState &state)
231{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400232 return new TextureVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400233}
234
235RenderbufferImpl *ContextVk::createRenderbuffer()
236{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400237 return new RenderbufferVk();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400238}
239
Jamie Madill8f775602016-11-03 16:45:34 -0400240BufferImpl *ContextVk::createBuffer(const gl::BufferState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400241{
Jamie Madill8f775602016-11-03 16:45:34 -0400242 return new BufferVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400243}
244
Jamie Madillacccc6c2016-05-03 17:22:10 -0400245VertexArrayImpl *ContextVk::createVertexArray(const gl::VertexArrayState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400246{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400247 return new VertexArrayVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400248}
249
250QueryImpl *ContextVk::createQuery(GLenum type)
251{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400252 return new QueryVk(type);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400253}
254
255FenceNVImpl *ContextVk::createFenceNV()
256{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400257 return new FenceNVVk();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400258}
259
260FenceSyncImpl *ContextVk::createFenceSync()
261{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400262 return new FenceSyncVk();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400263}
264
Geoff Lang73bd2182016-07-15 13:01:24 -0400265TransformFeedbackImpl *ContextVk::createTransformFeedback(const gl::TransformFeedbackState &state)
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400266{
Geoff Lang73bd2182016-07-15 13:01:24 -0400267 return new TransformFeedbackVk(state);
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400268}
269
270SamplerImpl *ContextVk::createSampler()
271{
Jamie Madillacccc6c2016-05-03 17:22:10 -0400272 return new SamplerVk();
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400273}
274
Sami Väisänene45e53b2016-05-25 10:36:04 +0300275std::vector<PathImpl *> ContextVk::createPaths(GLsizei)
276{
277 return std::vector<PathImpl *>();
278}
279
Jamie Madill9e54b5a2016-05-25 12:57:39 -0400280} // namespace rx