diff options
author | Lingfeng Yang <lfy@google.com> | 2017-01-18 11:42:04 -0800 |
---|---|---|
committer | Lingfeng Yang <lfy@google.com> | 2017-01-24 18:44:32 +0000 |
commit | d3ae106098bc2338151971247dd182e7b88a5b0e (patch) | |
tree | cfc0f6e48ec52d008667d794cf8812c100165f0f /shared/OpenglCodecCommon | |
parent | 423129ede1e0069a52f96c0cae4b4eace34420ab (diff) | |
download | goldfish-opengl-d3ae106098bc2338151971247dd182e7b88a5b0e.tar.gz |
[WIP] ES 3.1 guestside changes
Change-Id: Ie4619ee6e161274383b9f6b0d2922344da20f62f
Diffstat (limited to 'shared/OpenglCodecCommon')
-rw-r--r-- | shared/OpenglCodecCommon/FixedBuffer.h | 2 | ||||
-rw-r--r-- | shared/OpenglCodecCommon/GLClientState.cpp | 38 | ||||
-rw-r--r-- | shared/OpenglCodecCommon/GLClientState.h | 20 | ||||
-rwxr-xr-x | shared/OpenglCodecCommon/GLSharedGroup.cpp | 7 | ||||
-rw-r--r-- | shared/OpenglCodecCommon/glUtils.cpp | 33 |
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: |