blob: abd5c88f3d55d0792dfb4491c1748b4270ec1bf2 [file] [log] [blame]
Geoff Langd08f3b32016-09-23 15:56:30 -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// ContextNULL.cpp:
7// Implements the class methods for ContextNULL.
8//
9
10#include "libANGLE/renderer/null/ContextNULL.h"
11
12#include "common/debug.h"
13
Geoff Lang76cdbd52016-09-23 16:51:04 -040014#include "libANGLE/renderer/null/BufferNULL.h"
15#include "libANGLE/renderer/null/CompilerNULL.h"
16#include "libANGLE/renderer/null/DisplayNULL.h"
17#include "libANGLE/renderer/null/FenceNVNULL.h"
Geoff Lang76cdbd52016-09-23 16:51:04 -040018#include "libANGLE/renderer/null/FramebufferNULL.h"
19#include "libANGLE/renderer/null/ImageNULL.h"
20#include "libANGLE/renderer/null/PathNULL.h"
21#include "libANGLE/renderer/null/ProgramNULL.h"
Yunchao Hea336b902017-08-02 16:05:21 +080022#include "libANGLE/renderer/null/ProgramPipelineNULL.h"
Geoff Lang76cdbd52016-09-23 16:51:04 -040023#include "libANGLE/renderer/null/QueryNULL.h"
24#include "libANGLE/renderer/null/RenderbufferNULL.h"
25#include "libANGLE/renderer/null/SamplerNULL.h"
26#include "libANGLE/renderer/null/ShaderNULL.h"
Jamie Madill70b5bb02017-08-28 13:32:37 -040027#include "libANGLE/renderer/null/SyncNULL.h"
Geoff Lang76cdbd52016-09-23 16:51:04 -040028#include "libANGLE/renderer/null/TextureNULL.h"
29#include "libANGLE/renderer/null/TransformFeedbackNULL.h"
30#include "libANGLE/renderer/null/VertexArrayNULL.h"
31
Geoff Langd08f3b32016-09-23 15:56:30 -040032namespace rx
33{
34
Geoff Lang1b60d8d2017-02-10 14:56:55 -050035AllocationTrackerNULL::AllocationTrackerNULL(size_t maxTotalAllocationSize)
36 : mAllocatedBytes(0), mMaxBytes(maxTotalAllocationSize)
Geoff Langd08f3b32016-09-23 15:56:30 -040037{
Geoff Lang1b60d8d2017-02-10 14:56:55 -050038}
39
40AllocationTrackerNULL::~AllocationTrackerNULL()
41{
42 // ASSERT that all objects with the NULL renderer clean up after themselves
43 ASSERT(mAllocatedBytes == 0);
44}
45
46bool AllocationTrackerNULL::updateMemoryAllocation(size_t oldSize, size_t newSize)
47{
48 ASSERT(mAllocatedBytes >= oldSize);
49
50 size_t sizeAfterRelease = mAllocatedBytes - oldSize;
51 size_t sizeAfterReallocate = sizeAfterRelease + newSize;
52 if (sizeAfterReallocate < sizeAfterRelease || sizeAfterReallocate > mMaxBytes)
53 {
54 // Overflow or allocation would be too large
55 return false;
56 }
57
58 mAllocatedBytes = sizeAfterReallocate;
59 return true;
60}
61
62ContextNULL::ContextNULL(const gl::ContextState &state, AllocationTrackerNULL *allocationTracker)
63 : ContextImpl(state), mAllocationTracker(allocationTracker)
64{
65 ASSERT(mAllocationTracker != nullptr);
66
Jamie Madill231c7f52017-04-26 13:45:37 -040067 mExtensions = gl::Extensions();
Geoff Lang04d06462017-10-02 16:01:13 -040068 mExtensions.fence = true;
Geoff Lang111a99e2017-10-17 10:58:41 -040069 mExtensions.instancedArrays = true;
Geoff Langadaabc32017-10-02 16:23:00 -040070 mExtensions.pixelBufferObject = true;
71 mExtensions.mapBuffer = true;
72 mExtensions.mapBufferRange = true;
Geoff Lang1e031b22017-02-10 15:01:28 -050073 mExtensions.copyTexture = true;
74 mExtensions.copyCompressedTexture = true;
Geoff Lang4751aab2017-10-30 15:14:52 -040075 mExtensions.textureRectangle = true;
Geoff Lang73dcc602017-11-08 16:41:52 -050076 mExtensions.textureUsage = true;
77 mExtensions.vertexArrayObject = true;
78 mExtensions.debugMarker = true;
79 mExtensions.translatedShaderSource = true;
Geoff Lang1e031b22017-02-10 15:01:28 -050080
Geoff Langd84a00b2017-10-27 17:27:26 -040081 mExtensions.rgb8rgba8 = true;
Geoff Lang86f81162017-10-30 15:10:45 -040082 mExtensions.textureCompressionDXT1 = true;
83 mExtensions.textureCompressionDXT3 = true;
84 mExtensions.textureCompressionDXT5 = true;
85 mExtensions.textureCompressionS3TCsRGB = true;
86 mExtensions.textureCompressionASTCHDR = true;
87 mExtensions.textureCompressionASTCLDR = true;
88 mExtensions.compressedETC1RGB8Texture = true;
89 mExtensions.lossyETCDecode = true;
Geoff Langd84a00b2017-10-27 17:27:26 -040090
Geoff Lang4751aab2017-10-30 15:14:52 -040091 const gl::Version maxClientVersion(3, 1);
92 mCaps = GenerateMinimumCaps(maxClientVersion, mExtensions);
93
Jamie Madill7b62cf92017-11-02 15:20:49 -040094 InitMinimumTextureCapsMap(maxClientVersion, mExtensions, &mTextureCaps);
Geoff Langd08f3b32016-09-23 15:56:30 -040095}
96
97ContextNULL::~ContextNULL()
98{
99}
100
101gl::Error ContextNULL::initialize()
102{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400103 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400104}
105
106gl::Error ContextNULL::flush()
107{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400108 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400109}
110
111gl::Error ContextNULL::finish()
112{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400113 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400114}
115
Jamie Madillc564c072017-06-01 12:45:42 -0400116gl::Error ContextNULL::drawArrays(const gl::Context *context,
117 GLenum mode,
118 GLint first,
119 GLsizei count)
Geoff Langd08f3b32016-09-23 15:56:30 -0400120{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400121 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400122}
123
Jamie Madillc564c072017-06-01 12:45:42 -0400124gl::Error ContextNULL::drawArraysInstanced(const gl::Context *context,
125 GLenum mode,
Geoff Langd08f3b32016-09-23 15:56:30 -0400126 GLint first,
127 GLsizei count,
128 GLsizei instanceCount)
129{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400130 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400131}
132
Jamie Madillc564c072017-06-01 12:45:42 -0400133gl::Error ContextNULL::drawElements(const gl::Context *context,
134 GLenum mode,
Geoff Langd08f3b32016-09-23 15:56:30 -0400135 GLsizei count,
136 GLenum type,
Qin Jiajia1da00652017-06-20 17:16:25 +0800137 const void *indices)
Geoff Langd08f3b32016-09-23 15:56:30 -0400138{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400139 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400140}
141
Jamie Madillc564c072017-06-01 12:45:42 -0400142gl::Error ContextNULL::drawElementsInstanced(const gl::Context *context,
143 GLenum mode,
Geoff Langd08f3b32016-09-23 15:56:30 -0400144 GLsizei count,
145 GLenum type,
Jamie Madill876429b2017-04-20 15:46:24 -0400146 const void *indices,
Qin Jiajia1da00652017-06-20 17:16:25 +0800147 GLsizei instances)
Geoff Langd08f3b32016-09-23 15:56:30 -0400148{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400149 return gl::NoError();
Geoff Langd08f3b32016-09-23 15:56:30 -0400150}
151
Jamie Madillc564c072017-06-01 12:45:42 -0400152gl::Error ContextNULL::drawRangeElements(const gl::Context *context,
153 GLenum mode,
Geoff Langd08f3b32016-09-23 15:56:30 -0400154 GLuint start,
155 GLuint end,
156 GLsizei count,
157 GLenum type,
Qin Jiajia1da00652017-06-20 17:16:25 +0800158 const void *indices)
Geoff Langd08f3b32016-09-23 15:56:30 -0400159{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400160 return gl::NoError();
161}
162
Jamie Madillc564c072017-06-01 12:45:42 -0400163gl::Error ContextNULL::drawArraysIndirect(const gl::Context *context,
164 GLenum mode,
165 const void *indirect)
Jiajia Qind9671222016-11-29 16:30:31 +0800166{
167 return gl::NoError();
168}
169
Jamie Madillc564c072017-06-01 12:45:42 -0400170gl::Error ContextNULL::drawElementsIndirect(const gl::Context *context,
171 GLenum mode,
172 GLenum type,
173 const void *indirect)
Jiajia Qind9671222016-11-29 16:30:31 +0800174{
175 return gl::NoError();
176}
177
Geoff Lang76cdbd52016-09-23 16:51:04 -0400178void ContextNULL::stencilFillPath(const gl::Path *path, GLenum fillMode, GLuint mask)
179{
180}
181
182void ContextNULL::stencilStrokePath(const gl::Path *path, GLint reference, GLuint mask)
183{
184}
185
186void ContextNULL::coverFillPath(const gl::Path *path, GLenum coverMode)
187{
188}
189
190void ContextNULL::coverStrokePath(const gl::Path *path, GLenum coverMode)
191{
192}
193
194void ContextNULL::stencilThenCoverFillPath(const gl::Path *path,
195 GLenum fillMode,
196 GLuint mask,
197 GLenum coverMode)
198{
199}
200
201void ContextNULL::stencilThenCoverStrokePath(const gl::Path *path,
202 GLint reference,
203 GLuint mask,
204 GLenum coverMode)
205{
206}
207
208void ContextNULL::coverFillPathInstanced(const std::vector<gl::Path *> &paths,
209 GLenum coverMode,
210 GLenum transformType,
211 const GLfloat *transformValues)
212{
213}
214
215void ContextNULL::coverStrokePathInstanced(const std::vector<gl::Path *> &paths,
216 GLenum coverMode,
217 GLenum transformType,
218 const GLfloat *transformValues)
219{
220}
221
222void ContextNULL::stencilFillPathInstanced(const std::vector<gl::Path *> &paths,
223 GLenum fillMode,
224 GLuint mask,
225 GLenum transformType,
226 const GLfloat *transformValues)
227{
228}
229
230void ContextNULL::stencilStrokePathInstanced(const std::vector<gl::Path *> &paths,
231 GLint reference,
232 GLuint mask,
233 GLenum transformType,
234 const GLfloat *transformValues)
235{
236}
237
238void ContextNULL::stencilThenCoverFillPathInstanced(const std::vector<gl::Path *> &paths,
239 GLenum coverMode,
240 GLenum fillMode,
241 GLuint mask,
242 GLenum transformType,
243 const GLfloat *transformValues)
244{
245}
246
247void ContextNULL::stencilThenCoverStrokePathInstanced(const std::vector<gl::Path *> &paths,
248 GLenum coverMode,
249 GLint reference,
250 GLuint mask,
251 GLenum transformType,
252 const GLfloat *transformValues)
253{
254}
255
256GLenum ContextNULL::getResetStatus()
257{
258 return GL_NO_ERROR;
259}
260
261std::string ContextNULL::getVendorString() const
262{
263 return "NULL";
264}
265
266std::string ContextNULL::getRendererDescription() const
267{
268 return "NULL";
269}
270
271void ContextNULL::insertEventMarker(GLsizei length, const char *marker)
272{
273}
274
275void ContextNULL::pushGroupMarker(GLsizei length, const char *marker)
276{
277}
278
279void ContextNULL::popGroupMarker()
280{
281}
282
Jamie Madillfe548342017-06-19 11:13:24 -0400283void ContextNULL::syncState(const gl::Context *context, const gl::State::DirtyBits &dirtyBits)
Geoff Lang76cdbd52016-09-23 16:51:04 -0400284{
285}
286
287GLint ContextNULL::getGPUDisjoint()
288{
289 return 0;
290}
291
292GLint64 ContextNULL::getTimestamp()
293{
294 return 0;
295}
296
Jamie Madill4928b7c2017-06-20 12:57:39 -0400297void ContextNULL::onMakeCurrent(const gl::Context *context)
Geoff Lang76cdbd52016-09-23 16:51:04 -0400298{
299}
300
301const gl::Caps &ContextNULL::getNativeCaps() const
302{
303 return mCaps;
304}
305
306const gl::TextureCapsMap &ContextNULL::getNativeTextureCaps() const
307{
308 return mTextureCaps;
309}
310
311const gl::Extensions &ContextNULL::getNativeExtensions() const
312{
313 return mExtensions;
314}
315
316const gl::Limitations &ContextNULL::getNativeLimitations() const
317{
318 return mLimitations;
Geoff Langd08f3b32016-09-23 15:56:30 -0400319}
320
321CompilerImpl *ContextNULL::createCompiler()
322{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400323 return new CompilerNULL();
Geoff Langd08f3b32016-09-23 15:56:30 -0400324}
325
326ShaderImpl *ContextNULL::createShader(const gl::ShaderState &data)
327{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400328 return new ShaderNULL(data);
Geoff Langd08f3b32016-09-23 15:56:30 -0400329}
330
331ProgramImpl *ContextNULL::createProgram(const gl::ProgramState &data)
332{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400333 return new ProgramNULL(data);
Geoff Langd08f3b32016-09-23 15:56:30 -0400334}
335
336FramebufferImpl *ContextNULL::createFramebuffer(const gl::FramebufferState &data)
337{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400338 return new FramebufferNULL(data);
Geoff Langd08f3b32016-09-23 15:56:30 -0400339}
340
341TextureImpl *ContextNULL::createTexture(const gl::TextureState &state)
342{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400343 return new TextureNULL(state);
Geoff Langd08f3b32016-09-23 15:56:30 -0400344}
345
346RenderbufferImpl *ContextNULL::createRenderbuffer()
347{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400348 return new RenderbufferNULL();
Geoff Langd08f3b32016-09-23 15:56:30 -0400349}
350
Jamie Madill8f775602016-11-03 16:45:34 -0400351BufferImpl *ContextNULL::createBuffer(const gl::BufferState &state)
Geoff Langd08f3b32016-09-23 15:56:30 -0400352{
Geoff Lang1b60d8d2017-02-10 14:56:55 -0500353 return new BufferNULL(state, mAllocationTracker);
Geoff Langd08f3b32016-09-23 15:56:30 -0400354}
355
356VertexArrayImpl *ContextNULL::createVertexArray(const gl::VertexArrayState &data)
357{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400358 return new VertexArrayNULL(data);
Geoff Langd08f3b32016-09-23 15:56:30 -0400359}
360
361QueryImpl *ContextNULL::createQuery(GLenum type)
362{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400363 return new QueryNULL(type);
Geoff Langd08f3b32016-09-23 15:56:30 -0400364}
365
366FenceNVImpl *ContextNULL::createFenceNV()
367{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400368 return new FenceNVNULL();
Geoff Langd08f3b32016-09-23 15:56:30 -0400369}
370
Jamie Madill70b5bb02017-08-28 13:32:37 -0400371SyncImpl *ContextNULL::createSync()
Geoff Langd08f3b32016-09-23 15:56:30 -0400372{
Jamie Madill70b5bb02017-08-28 13:32:37 -0400373 return new SyncNULL();
Geoff Langd08f3b32016-09-23 15:56:30 -0400374}
375
376TransformFeedbackImpl *ContextNULL::createTransformFeedback(const gl::TransformFeedbackState &state)
377{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400378 return new TransformFeedbackNULL(state);
Geoff Langd08f3b32016-09-23 15:56:30 -0400379}
380
Jamie Madill06ef36b2017-09-09 23:32:46 -0400381SamplerImpl *ContextNULL::createSampler(const gl::SamplerState &state)
Geoff Langd08f3b32016-09-23 15:56:30 -0400382{
Jamie Madill06ef36b2017-09-09 23:32:46 -0400383 return new SamplerNULL(state);
Geoff Langd08f3b32016-09-23 15:56:30 -0400384}
385
Yunchao Hea336b902017-08-02 16:05:21 +0800386ProgramPipelineImpl *ContextNULL::createProgramPipeline(const gl::ProgramPipelineState &state)
387{
388 return new ProgramPipelineNULL(state);
389}
390
Geoff Langd08f3b32016-09-23 15:56:30 -0400391std::vector<PathImpl *> ContextNULL::createPaths(GLsizei range)
392{
Geoff Lang76cdbd52016-09-23 16:51:04 -0400393 std::vector<PathImpl *> result(range);
394 for (GLsizei idx = 0; idx < range; idx++)
395 {
396 result[idx] = new PathNULL();
397 }
398 return result;
Geoff Langd08f3b32016-09-23 15:56:30 -0400399}
400
Jamie Madillfe548342017-06-19 11:13:24 -0400401gl::Error ContextNULL::dispatchCompute(const gl::Context *context,
402 GLuint numGroupsX,
403 GLuint numGroupsY,
404 GLuint numGroupsZ)
Xinghua Cao2b396592017-03-29 15:36:04 +0800405{
406 return gl::NoError();
407}
408
Geoff Langd08f3b32016-09-23 15:56:30 -0400409} // namespace rx