aboutsummaryrefslogtreecommitdiff
path: root/shared/OpenglCodecCommon
diff options
context:
space:
mode:
authorLingfeng Yang <lfy@google.com>2017-01-18 11:42:04 -0800
committerLingfeng Yang <lfy@google.com>2017-01-24 18:44:32 +0000
commitd3ae106098bc2338151971247dd182e7b88a5b0e (patch)
treecfc0f6e48ec52d008667d794cf8812c100165f0f /shared/OpenglCodecCommon
parent423129ede1e0069a52f96c0cae4b4eace34420ab (diff)
downloadgoldfish-opengl-d3ae106098bc2338151971247dd182e7b88a5b0e.tar.gz
[WIP] ES 3.1 guestside changes
Change-Id: Ie4619ee6e161274383b9f6b0d2922344da20f62f
Diffstat (limited to 'shared/OpenglCodecCommon')
-rw-r--r--shared/OpenglCodecCommon/FixedBuffer.h2
-rw-r--r--shared/OpenglCodecCommon/GLClientState.cpp38
-rw-r--r--shared/OpenglCodecCommon/GLClientState.h20
-rwxr-xr-xshared/OpenglCodecCommon/GLSharedGroup.cpp7
-rw-r--r--shared/OpenglCodecCommon/glUtils.cpp33
5 files changed, 90 insertions, 10 deletions
diff --git a/shared/OpenglCodecCommon/FixedBuffer.h b/shared/OpenglCodecCommon/FixedBuffer.h
index 70263964..9a908de1 100644
--- a/shared/OpenglCodecCommon/FixedBuffer.h
+++ b/shared/OpenglCodecCommon/FixedBuffer.h
@@ -16,6 +16,8 @@
#ifndef _FIXED_BUFFER_H
#define _FIXED_BUFFER_H
+#include <cutils/log.h>
+
class FixedBuffer {
public:
FixedBuffer(size_t initialSize = 0) {
diff --git a/shared/OpenglCodecCommon/GLClientState.cpp b/shared/OpenglCodecCommon/GLClientState.cpp
index 0cd2e8dd..6e9c8f67 100644
--- a/shared/OpenglCodecCommon/GLClientState.cpp
+++ b/shared/OpenglCodecCommon/GLClientState.cpp
@@ -75,6 +75,7 @@ void GLClientState::init() {
m_activeTexture = 0;
m_currentProgram = 0;
+ m_currentShaderProgram = 0;
m_pixelStore.unpack_alignment = 4;
m_pixelStore.pack_alignment = 4;
@@ -215,6 +216,12 @@ void GLClientState::addVertexArrayObject(GLuint name) {
attribState[i].size = 4; // 4 is the default size
attribState[i].type = GL_FLOAT; // GL_FLOAT is the default type
}
+
+ VertexAttribBindingVector& bindingState =
+ m_vaoMap.find(name)->second.bindingState;
+ for (int i = 0; i < bindingState.size(); i++) {
+ bindingState[i].effectiveStride = 16;
+ }
}
void GLClientState::removeVertexArrayObject(GLuint name) {
@@ -306,6 +313,31 @@ int GLClientState::getLocation(GLenum loc)
return retval;
}
+static void sClearIndexedBufferBinding(GLuint id, std::vector<GLClientState::BufferBinding>& bindings) {
+ for (size_t i = 0; i < bindings.size(); i++) {
+ if (bindings[i].buffer == id) {
+ bindings[i].offset = 0;
+ bindings[i].stride = 0;
+ bindings[i].effectiveStride = 16;
+ bindings[i].size = 0;
+ bindings[i].buffer = 0;
+ bindings[i].divisor = 0;
+ }
+ }
+}
+
+void GLClientState::addBuffer(GLuint id) {
+ mBufferIds.insert(id);
+}
+
+void GLClientState::removeBuffer(GLuint id) {
+ mBufferIds.erase(id);
+}
+
+bool GLClientState::bufferIdExists(GLuint id) const {
+ return mBufferIds.find(id) != mBufferIds.end();
+}
+
void GLClientState::unBindBuffer(GLuint id) {
if (m_arrayBuffer == id) m_arrayBuffer = 0;
if (m_currVaoState.iboId() == id) m_currVaoState.iboId() = 0;
@@ -329,6 +361,12 @@ void GLClientState::unBindBuffer(GLuint id) {
m_drawIndirectBuffer = 0;
if (m_shaderStorageBuffer == id)
m_shaderStorageBuffer = 0;
+
+ sClearIndexedBufferBinding(id, m_indexedTransformFeedbackBuffers);
+ sClearIndexedBufferBinding(id, m_indexedUniformBuffers);
+ sClearIndexedBufferBinding(id, m_indexedAtomicCounterBuffers);
+ sClearIndexedBufferBinding(id, m_indexedShaderStorageBuffers);
+ sClearIndexedBufferBinding(id, m_currVaoState.bufferBindings());
}
int GLClientState::bindBuffer(GLenum target, GLuint id)
diff --git a/shared/OpenglCodecCommon/GLClientState.h b/shared/OpenglCodecCommon/GLClientState.h
index 4b249478..e41cf440 100644
--- a/shared/OpenglCodecCommon/GLClientState.h
+++ b/shared/OpenglCodecCommon/GLClientState.h
@@ -196,6 +196,10 @@ public:
const PixelStoreState *pixelStoreState() { return &m_pixelStore; }
int setPixelStore(GLenum param, GLint value);
GLuint currentVertexArrayObject() const { return m_currVaoState.vaoId(); }
+ const VertexAttribBindingVector& currentVertexBufferBindings() const {
+ return m_currVaoState.bufferBindings_const();
+ }
+
GLuint currentArrayVbo() { return m_arrayBuffer; }
GLuint currentIndexVbo() { return m_currVaoState.iboId(); }
void enable(int location, int state);
@@ -221,6 +225,9 @@ public:
m_maxVertexAttribsDirty = false;
}
+ void addBuffer(GLuint id);
+ void removeBuffer(GLuint id);
+ bool bufferIdExists(GLuint id) const;
void unBindBuffer(GLuint id);
int bindBuffer(GLenum target, GLuint id);
@@ -234,7 +241,9 @@ public:
size_t clearBufferNumElts(GLenum buffer) const;
void setCurrentProgram(GLint program) { m_currentProgram = program; }
+ void setCurrentShaderProgram(GLint program) { m_currentShaderProgram = program; }
GLint currentProgram() const { return m_currentProgram; }
+ GLint currentShaderProgram() const { return m_currentShaderProgram; }
struct UniformBlockInfoKey {
GLuint program;
@@ -416,6 +425,8 @@ private:
bool m_initialized;
PixelStoreState m_pixelStore;
+ std::set<GLuint> mBufferIds;
+
// GL_ARRAY_BUFFER_BINDING is separate from VAO state
GLuint m_arrayBuffer;
VAOStateMap m_vaoMap;
@@ -455,6 +466,7 @@ private:
int m_nLocations;
int m_activeTexture;
GLint m_currentProgram;
+ GLint m_currentShaderProgram;
ProgramPipelineMap m_programPipelines;
enum TextureTarget {
@@ -554,6 +566,14 @@ public:
m_currVaoState.bufferBindings_const()[vertexAttrib.bindingindex];
switch(param) {
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+ case GL_VERTEX_ATTRIB_BINDING:
+ *ptr = (T)vertexAttrib.bindingindex;
+ break;
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+ case GL_VERTEX_ATTRIB_RELATIVE_OFFSET:
+ *ptr = (T)vertexAttrib.reloffset;
+ break;
case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
*ptr = (T)(vertexAttribBufferBinding.buffer);
break;
diff --git a/shared/OpenglCodecCommon/GLSharedGroup.cpp b/shared/OpenglCodecCommon/GLSharedGroup.cpp
index beaf1e26..9da011a2 100755
--- a/shared/OpenglCodecCommon/GLSharedGroup.cpp
+++ b/shared/OpenglCodecCommon/GLSharedGroup.cpp
@@ -584,6 +584,7 @@ uint32_t GLSharedGroup::addNewShaderProgramData() {
android::AutoMutex _lock(m_lock);
ShaderProgramData* data = new ShaderProgramData;
uint32_t currId = m_shaderProgramId;
+ ALOGD("%s: new data %p id %u", __FUNCTION__, data, currId);
m_shaderPrograms.add(currId, data);
m_shaderProgramId++;
return currId;
@@ -596,12 +597,14 @@ void GLSharedGroup::associateGLShaderProgram(GLuint shaderProgramName, uint32_t
ShaderProgramData* GLSharedGroup::getShaderProgramDataById(uint32_t id) {
android::AutoMutex _lock(m_lock);
- return m_shaderPrograms.editValueAt(id);
+ ShaderProgramData* res = m_shaderPrograms.valueFor(id);
+ ALOGD("%s: id=%u res=%p", __FUNCTION__, id, res);
+ return res;
}
ShaderProgramData* GLSharedGroup::getShaderProgramData(GLuint shaderProgramName) {
android::AutoMutex _lock(m_lock);
- return m_shaderPrograms.editValueAt(m_shaderProgramIdMap[shaderProgramName]);
+ return m_shaderPrograms.valueFor(m_shaderProgramIdMap[shaderProgramName]);
}
void GLSharedGroup::deleteShaderProgramDataById(uint32_t id) {
diff --git a/shared/OpenglCodecCommon/glUtils.cpp b/shared/OpenglCodecCommon/glUtils.cpp
index 8342095b..7e5e4a2b 100644
--- a/shared/OpenglCodecCommon/glUtils.cpp
+++ b/shared/OpenglCodecCommon/glUtils.cpp
@@ -34,6 +34,8 @@ size_t glSizeof(GLenum type)
case GL_HALF_FLOAT_OES:
retval = 2;
break;
+ case GL_IMAGE_2D:
+ case GL_IMAGE_3D:
case GL_UNSIGNED_INT:
case GL_INT:
case GL_FLOAT:
@@ -84,6 +86,7 @@ size_t glSizeof(GLenum type)
retval = 4 * 12;
break;
case GL_SAMPLER_2D:
+ case GL_SAMPLER_3D:
case GL_SAMPLER_CUBE:
retval = 4;
break;
@@ -105,7 +108,8 @@ size_t glSizeof(GLenum type)
retval = 4 + 4;
break;
default:
- ERR("**** ERROR unknown type 0x%x (%s,%d)\n", type, __FUNCTION__,__LINE__);
+ ALOGE("**** ERROR unknown type 0x%x (%s,%d)\n", type, __FUNCTION__,__LINE__);
+ retval = 4;
}
return retval;
@@ -295,16 +299,9 @@ size_t glUtilsParamSize(GLenum param)
case GL_BLEND_SRC_ALPHA_OES:
case GL_MAX_LIGHTS:
case GL_SHADER_TYPE:
- case GL_DELETE_STATUS:
case GL_COMPILE_STATUS:
- case GL_INFO_LOG_LENGTH:
case GL_SHADER_SOURCE_LENGTH:
case GL_CURRENT_PROGRAM:
- case GL_LINK_STATUS:
- case GL_VALIDATE_STATUS:
- case GL_ATTACHED_SHADERS:
- case GL_ACTIVE_UNIFORMS:
- case GL_ACTIVE_ATTRIBUTES:
case GL_SUBPIXEL_BITS:
case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
case GL_NUM_SHADER_BINARY_FORMATS:
@@ -333,6 +330,25 @@ size_t glUtilsParamSize(GLenum param)
case GL_CURRENT_QUERY:
case GL_QUERY_RESULT:
case GL_QUERY_RESULT_AVAILABLE:
+ case GL_READ_BUFFER:
+
+ case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
+ case GL_ACTIVE_ATTRIBUTES:
+ case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
+ case GL_ACTIVE_UNIFORM_BLOCKS:
+ case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
+ case GL_ACTIVE_UNIFORMS:
+ case GL_ACTIVE_UNIFORM_MAX_LENGTH:
+ case GL_ATTACHED_SHADERS:
+ case GL_DELETE_STATUS:
+ case GL_INFO_LOG_LENGTH:
+ case GL_LINK_STATUS:
+ case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ case GL_PROGRAM_SEPARABLE:
+ case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
+ case GL_TRANSFORM_FEEDBACK_VARYINGS:
+ case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
+ case GL_VALIDATE_STATUS:
s = 1;
break;
case GL_ALIASED_LINE_WIDTH_RANGE:
@@ -347,6 +363,7 @@ size_t glUtilsParamSize(GLenum param)
case GL_SPOT_DIRECTION:
case GL_POINT_DISTANCE_ATTENUATION:
case GL_CURRENT_NORMAL:
+ case GL_COMPUTE_WORK_GROUP_SIZE:
s = 3;
break;
case GL_CURRENT_VERTEX_ATTRIB: