xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/null/BufferNULL.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // BufferNULL.cpp:
7*8975f5c5SAndroid Build Coastguard Worker //    Implements the class methods for BufferNULL.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/null/BufferNULL.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "common/utilities.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Context.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/null/ContextNULL.h"
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker namespace rx
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker 
BufferNULL(const gl::BufferState & state,AllocationTrackerNULL * allocationTracker)21*8975f5c5SAndroid Build Coastguard Worker BufferNULL::BufferNULL(const gl::BufferState &state, AllocationTrackerNULL *allocationTracker)
22*8975f5c5SAndroid Build Coastguard Worker     : BufferImpl(state), mAllocationTracker(allocationTracker)
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker     ASSERT(mAllocationTracker != nullptr);
25*8975f5c5SAndroid Build Coastguard Worker }
26*8975f5c5SAndroid Build Coastguard Worker 
~BufferNULL()27*8975f5c5SAndroid Build Coastguard Worker BufferNULL::~BufferNULL()
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker     bool memoryReleaseResult = mAllocationTracker->updateMemoryAllocation(mData.size(), 0);
30*8975f5c5SAndroid Build Coastguard Worker     ASSERT(memoryReleaseResult);
31*8975f5c5SAndroid Build Coastguard Worker }
32*8975f5c5SAndroid Build Coastguard Worker 
setDataWithUsageFlags(const gl::Context * context,gl::BufferBinding target,GLeglClientBufferEXT clientBuffer,const void * data,size_t size,gl::BufferUsage usage,GLbitfield flags)33*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::setDataWithUsageFlags(const gl::Context *context,
34*8975f5c5SAndroid Build Coastguard Worker                                                 gl::BufferBinding target,
35*8975f5c5SAndroid Build Coastguard Worker                                                 GLeglClientBufferEXT clientBuffer,
36*8975f5c5SAndroid Build Coastguard Worker                                                 const void *data,
37*8975f5c5SAndroid Build Coastguard Worker                                                 size_t size,
38*8975f5c5SAndroid Build Coastguard Worker                                                 gl::BufferUsage usage,
39*8975f5c5SAndroid Build Coastguard Worker                                                 GLbitfield flags)
40*8975f5c5SAndroid Build Coastguard Worker {
41*8975f5c5SAndroid Build Coastguard Worker     ANGLE_CHECK_GL_ALLOC(GetImplAs<ContextNULL>(context),
42*8975f5c5SAndroid Build Coastguard Worker                          mAllocationTracker->updateMemoryAllocation(mData.size(), size));
43*8975f5c5SAndroid Build Coastguard Worker 
44*8975f5c5SAndroid Build Coastguard Worker     mData.resize(size, 0);
45*8975f5c5SAndroid Build Coastguard Worker     if (size > 0 && data != nullptr)
46*8975f5c5SAndroid Build Coastguard Worker     {
47*8975f5c5SAndroid Build Coastguard Worker         memcpy(mData.data(), data, size);
48*8975f5c5SAndroid Build Coastguard Worker     }
49*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
50*8975f5c5SAndroid Build Coastguard Worker }
51*8975f5c5SAndroid Build Coastguard Worker 
setData(const gl::Context * context,gl::BufferBinding target,const void * data,size_t size,gl::BufferUsage usage)52*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::setData(const gl::Context *context,
53*8975f5c5SAndroid Build Coastguard Worker                                   gl::BufferBinding target,
54*8975f5c5SAndroid Build Coastguard Worker                                   const void *data,
55*8975f5c5SAndroid Build Coastguard Worker                                   size_t size,
56*8975f5c5SAndroid Build Coastguard Worker                                   gl::BufferUsage usage)
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker     ANGLE_CHECK_GL_ALLOC(GetImplAs<ContextNULL>(context),
59*8975f5c5SAndroid Build Coastguard Worker                          mAllocationTracker->updateMemoryAllocation(mData.size(), size));
60*8975f5c5SAndroid Build Coastguard Worker 
61*8975f5c5SAndroid Build Coastguard Worker     mData.resize(size, 0);
62*8975f5c5SAndroid Build Coastguard Worker     if (size > 0 && data != nullptr)
63*8975f5c5SAndroid Build Coastguard Worker     {
64*8975f5c5SAndroid Build Coastguard Worker         memcpy(mData.data(), data, size);
65*8975f5c5SAndroid Build Coastguard Worker     }
66*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
67*8975f5c5SAndroid Build Coastguard Worker }
68*8975f5c5SAndroid Build Coastguard Worker 
setSubData(const gl::Context * context,gl::BufferBinding target,const void * data,size_t size,size_t offset)69*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::setSubData(const gl::Context *context,
70*8975f5c5SAndroid Build Coastguard Worker                                      gl::BufferBinding target,
71*8975f5c5SAndroid Build Coastguard Worker                                      const void *data,
72*8975f5c5SAndroid Build Coastguard Worker                                      size_t size,
73*8975f5c5SAndroid Build Coastguard Worker                                      size_t offset)
74*8975f5c5SAndroid Build Coastguard Worker {
75*8975f5c5SAndroid Build Coastguard Worker     if (size > 0)
76*8975f5c5SAndroid Build Coastguard Worker     {
77*8975f5c5SAndroid Build Coastguard Worker         memcpy(mData.data() + offset, data, size);
78*8975f5c5SAndroid Build Coastguard Worker     }
79*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
80*8975f5c5SAndroid Build Coastguard Worker }
81*8975f5c5SAndroid Build Coastguard Worker 
copySubData(const gl::Context * context,BufferImpl * source,GLintptr sourceOffset,GLintptr destOffset,GLsizeiptr size)82*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::copySubData(const gl::Context *context,
83*8975f5c5SAndroid Build Coastguard Worker                                       BufferImpl *source,
84*8975f5c5SAndroid Build Coastguard Worker                                       GLintptr sourceOffset,
85*8975f5c5SAndroid Build Coastguard Worker                                       GLintptr destOffset,
86*8975f5c5SAndroid Build Coastguard Worker                                       GLsizeiptr size)
87*8975f5c5SAndroid Build Coastguard Worker {
88*8975f5c5SAndroid Build Coastguard Worker     BufferNULL *sourceNULL = GetAs<BufferNULL>(source);
89*8975f5c5SAndroid Build Coastguard Worker     if (size > 0)
90*8975f5c5SAndroid Build Coastguard Worker     {
91*8975f5c5SAndroid Build Coastguard Worker         memcpy(mData.data() + destOffset, sourceNULL->mData.data() + sourceOffset, size);
92*8975f5c5SAndroid Build Coastguard Worker     }
93*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
94*8975f5c5SAndroid Build Coastguard Worker }
95*8975f5c5SAndroid Build Coastguard Worker 
map(const gl::Context * context,GLenum access,void ** mapPtr)96*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::map(const gl::Context *context, GLenum access, void **mapPtr)
97*8975f5c5SAndroid Build Coastguard Worker {
98*8975f5c5SAndroid Build Coastguard Worker     *mapPtr = mData.data();
99*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
100*8975f5c5SAndroid Build Coastguard Worker }
101*8975f5c5SAndroid Build Coastguard Worker 
mapRange(const gl::Context * context,size_t offset,size_t length,GLbitfield access,void ** mapPtr)102*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::mapRange(const gl::Context *context,
103*8975f5c5SAndroid Build Coastguard Worker                                    size_t offset,
104*8975f5c5SAndroid Build Coastguard Worker                                    size_t length,
105*8975f5c5SAndroid Build Coastguard Worker                                    GLbitfield access,
106*8975f5c5SAndroid Build Coastguard Worker                                    void **mapPtr)
107*8975f5c5SAndroid Build Coastguard Worker {
108*8975f5c5SAndroid Build Coastguard Worker     *mapPtr = mData.data() + offset;
109*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
110*8975f5c5SAndroid Build Coastguard Worker }
111*8975f5c5SAndroid Build Coastguard Worker 
unmap(const gl::Context * context,GLboolean * result)112*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::unmap(const gl::Context *context, GLboolean *result)
113*8975f5c5SAndroid Build Coastguard Worker {
114*8975f5c5SAndroid Build Coastguard Worker     *result = GL_TRUE;
115*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
116*8975f5c5SAndroid Build Coastguard Worker }
117*8975f5c5SAndroid Build Coastguard Worker 
getIndexRange(const gl::Context * context,gl::DrawElementsType type,size_t offset,size_t count,bool primitiveRestartEnabled,gl::IndexRange * outRange)118*8975f5c5SAndroid Build Coastguard Worker angle::Result BufferNULL::getIndexRange(const gl::Context *context,
119*8975f5c5SAndroid Build Coastguard Worker                                         gl::DrawElementsType type,
120*8975f5c5SAndroid Build Coastguard Worker                                         size_t offset,
121*8975f5c5SAndroid Build Coastguard Worker                                         size_t count,
122*8975f5c5SAndroid Build Coastguard Worker                                         bool primitiveRestartEnabled,
123*8975f5c5SAndroid Build Coastguard Worker                                         gl::IndexRange *outRange)
124*8975f5c5SAndroid Build Coastguard Worker {
125*8975f5c5SAndroid Build Coastguard Worker     *outRange = gl::ComputeIndexRange(type, mData.data() + offset, count, primitiveRestartEnabled);
126*8975f5c5SAndroid Build Coastguard Worker     return angle::Result::Continue;
127*8975f5c5SAndroid Build Coastguard Worker }
128*8975f5c5SAndroid Build Coastguard Worker 
getDataPtr()129*8975f5c5SAndroid Build Coastguard Worker uint8_t *BufferNULL::getDataPtr()
130*8975f5c5SAndroid Build Coastguard Worker {
131*8975f5c5SAndroid Build Coastguard Worker     return mData.data();
132*8975f5c5SAndroid Build Coastguard Worker }
133*8975f5c5SAndroid Build Coastguard Worker 
getDataPtr() const134*8975f5c5SAndroid Build Coastguard Worker const uint8_t *BufferNULL::getDataPtr() const
135*8975f5c5SAndroid Build Coastguard Worker {
136*8975f5c5SAndroid Build Coastguard Worker     return mData.data();
137*8975f5c5SAndroid Build Coastguard Worker }
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
140