Skip to content

Commit aa52141

Browse files
vsivaAndroid (Google) Code Review
authored andcommitted
Merge "gltrace: Send vertex attribute data after glDraw() call."
2 parents 6a1d388 + 1c5387e commit aa52141

File tree

7 files changed

+418
-51
lines changed

7 files changed

+418
-51
lines changed

opengl/libs/GLES_trace/dev.make

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ genproto: gltrace.proto
66
aprotoc --cpp_out=src --java_out=java gltrace.proto
77
mv src/gltrace.pb.cc src/gltrace.pb.cpp
88

9-
# NOTE: $OUT should be defined in the shell by doing a "lunch <config>"
10-
# push updated files to device
11-
push:
12-
adb push $(OUT)/system/lib/libGLESv2.so /system/lib/
13-
adb push $(OUT)/system/lib/libGLESv1_CM.so /system/lib/
14-
adb push $(OUT)/system/lib/libGLES_trace.so /system/lib/
15-
adb push $(OUT)/system/lib/libEGL.so /system/lib/
9+
sync:
10+
adb root
11+
adb remount
12+
adb shell stop
13+
adb sync
14+
adb shell start

opengl/libs/GLES_trace/gltrace.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ message GLMessage {
510510
eglGetSystemTimeNV = 2045;
511511

512512
invalid = 3000;
513-
frameBufferContents = 3001;
513+
glVertexAttribPointerData = 3001;
514514
}
515515

516516
// A GL call's return data and arguments are formatted into this DataType

opengl/libs/GLES_trace/src/gltrace.pb.cpp

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

opengl/libs/GLES_trace/src/gltrace.pb.h

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

opengl/libs/GLES_trace/src/gltrace_context.cpp

Lines changed: 75 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,14 @@ GLTraceContext *GLTraceState::getTraceContext(EGLContext c) {
129129
return mPerContextState[c];
130130
}
131131

132-
GLTraceContext::GLTraceContext(int id, GLTraceState *state, BufferedOutputStream *stream) {
133-
mId = id;
134-
mState = state;
135-
132+
GLTraceContext::GLTraceContext(int id, GLTraceState *state, BufferedOutputStream *stream) :
133+
mId(id),
134+
mState(state),
135+
mBufferedOutputStream(stream),
136+
mElementArrayBuffers(DefaultKeyedVector<GLuint, ElementArrayBuffer*>(NULL))
137+
{
136138
fbcontents = fbcompressed = NULL;
137139
fbcontentsSize = 0;
138-
mBufferedOutputStream = stream;
139140
}
140141

141142
int GLTraceContext::getId() {
@@ -208,5 +209,74 @@ void GLTraceContext::traceGLMessage(GLMessage *msg) {
208209
}
209210
}
210211

212+
void GLTraceContext::bindBuffer(GLuint bufferId, GLvoid *data, GLsizeiptr size) {
213+
// free previously bound buffer if any
214+
ElementArrayBuffer *oldBuffer = mElementArrayBuffers.valueFor(bufferId);
215+
if (oldBuffer != NULL) {
216+
delete oldBuffer;
217+
}
218+
219+
mElementArrayBuffers.add(bufferId, new ElementArrayBuffer(data, size));
220+
}
221+
222+
void GLTraceContext::getBuffer(GLuint bufferId, GLvoid **data, GLsizeiptr *size) {
223+
ElementArrayBuffer *buffer = mElementArrayBuffers.valueFor(bufferId);
224+
if (buffer == NULL) {
225+
*data = NULL;
226+
*size = 0;
227+
} else {
228+
*data = buffer->getBuffer();
229+
*size = buffer->getSize();
230+
}
231+
}
232+
233+
void GLTraceContext::updateBufferSubData(GLuint bufferId, GLintptr offset, GLvoid *data,
234+
GLsizeiptr size) {
235+
ElementArrayBuffer *buffer = mElementArrayBuffers.valueFor(bufferId);
236+
if (buffer != NULL) {
237+
buffer->updateSubBuffer(offset, data, size);
238+
}
239+
}
240+
241+
void GLTraceContext::deleteBuffer(GLuint bufferId) {
242+
ElementArrayBuffer *buffer = mElementArrayBuffers.valueFor(bufferId);
243+
if (buffer != NULL) {
244+
delete buffer;
245+
mElementArrayBuffers.removeItem(bufferId);
246+
}
247+
}
248+
249+
ElementArrayBuffer::ElementArrayBuffer(GLvoid *buf, GLsizeiptr size) {
250+
mBuf = malloc(size);
251+
mSize = size;
252+
253+
if (buf != NULL) {
254+
memcpy(mBuf, buf, size);
255+
}
256+
}
257+
258+
ElementArrayBuffer::~ElementArrayBuffer() {
259+
if (mBuf != NULL) {
260+
free(mBuf);
261+
mSize = 0;
262+
}
263+
264+
mBuf = NULL;
265+
}
266+
267+
void ElementArrayBuffer::updateSubBuffer(GLintptr offset, const GLvoid* data, GLsizeiptr size) {
268+
if (offset + size <= mSize) {
269+
memcpy((char*)mBuf + offset, data, size);
270+
}
271+
}
272+
273+
GLvoid *ElementArrayBuffer::getBuffer() {
274+
return mBuf;
275+
}
276+
277+
GLsizeiptr ElementArrayBuffer::getSize() {
278+
return mSize;
279+
}
280+
211281
}; // namespace gltrace
212282
}; // namespace android

opengl/libs/GLES_trace/src/gltrace_context.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <map>
2121
#include <pthread.h>
22+
#include <utils/KeyedVector.h>
2223

2324
#include "hooks.h"
2425
#include "gltrace_transport.h"
@@ -32,6 +33,20 @@ enum FBBinding {CURRENTLY_BOUND_FB, FB0};
3233

3334
class GLTraceState;
3435

36+
class ElementArrayBuffer {
37+
GLvoid *mBuf;
38+
GLsizeiptr mSize;
39+
40+
public:
41+
ElementArrayBuffer():mBuf(NULL), mSize(0) {}
42+
ElementArrayBuffer(GLvoid *buf, GLsizeiptr size);
43+
~ElementArrayBuffer();
44+
45+
void updateSubBuffer(GLintptr offset, const GLvoid* data, GLsizeiptr size);
46+
GLvoid *getBuffer();
47+
GLsizeiptr getSize();
48+
};
49+
3550
/** GL Trace Context info associated with each EGLContext */
3651
class GLTraceContext {
3752
int mId; /* unique context id */
@@ -43,6 +58,9 @@ class GLTraceContext {
4358

4459
BufferedOutputStream *mBufferedOutputStream; /* stream where trace info is sent */
4560

61+
/* list of element array buffers in use. */
62+
DefaultKeyedVector<GLuint, ElementArrayBuffer*> mElementArrayBuffers;
63+
4664
void resizeFBMemory(unsigned minSize);
4765
public:
4866
gl_hooks_t *hooks;
@@ -53,6 +71,13 @@ class GLTraceContext {
5371
void getCompressedFB(void **fb, unsigned *fbsize,
5472
unsigned *fbwidth, unsigned *fbheight,
5573
FBBinding fbToRead);
74+
75+
// Methods to work with element array buffers
76+
void bindBuffer(GLuint bufferId, GLvoid *data, GLsizeiptr size);
77+
void getBuffer(GLuint bufferId, GLvoid **data, GLsizeiptr *size);
78+
void updateBufferSubData(GLuint bufferId, GLintptr offset, GLvoid *data, GLsizeiptr size);
79+
void deleteBuffer(GLuint bufferId);
80+
5681
void traceGLMessage(GLMessage *msg);
5782
};
5883

0 commit comments

Comments
 (0)