summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer')
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py18
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc38
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_autogen.h4
-rw-r--r--gpu/command_buffer/service/texture_manager.cc11
-rw-r--r--gpu/command_buffer/service/texture_manager.h6
5 files changed, 69 insertions, 8 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index e9828ce..924cd3c 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -1778,12 +1778,20 @@ _FUNCTION_INFO = {
'client_test': False,
},
'GetString': {
- 'type': 'Custom',
- 'client_test': False,
- 'cmd_args': 'GLenumStringType name, uint32 bucket_id',
+ 'type': 'Custom',
+ 'client_test': False,
+ 'cmd_args': 'GLenumStringType name, uint32 bucket_id',
+ },
+ 'GetTexParameterfv': {
+ 'type': 'GETn',
+ 'decoder_func': 'DoGetTexParameterfv',
+ 'result': ['SizedResult<GLfloat>']
+ },
+ 'GetTexParameteriv': {
+ 'type': 'GETn',
+ 'decoder_func': 'DoGetTexParameteriv',
+ 'result': ['SizedResult<GLint>']
},
- 'GetTexParameterfv': {'type': 'GETn', 'result': ['SizedResult<GLfloat>']},
- 'GetTexParameteriv': {'type': 'GETn', 'result': ['SizedResult<GLint>']},
'GetTranslatedShaderSourceANGLE': {
'type': 'STRn',
'get_len_func': 'DoGetShaderiv',
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 394479d..8555617 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1265,6 +1265,11 @@ class GLES2DecoderImpl : public GLES2Decoder,
// Wrapper for glGetShaderiv
void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params);
+ // Wrappers for glGetTexParameter.
+ void DoGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+ void DoGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+ void InitTextureMaxAnisotropyIfNeeded(GLenum target, GLenum pname);
+
// Wrappers for glGetVertexAttrib.
void DoGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
void DoGetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
@@ -6863,6 +6868,39 @@ void GLES2DecoderImpl::GetVertexAttribHelper(
}
}
+void GLES2DecoderImpl::DoGetTexParameterfv(
+ GLenum target, GLenum pname, GLfloat* params) {
+ InitTextureMaxAnisotropyIfNeeded(target, pname);
+ glGetTexParameterfv(target, pname, params);
+}
+
+void GLES2DecoderImpl::DoGetTexParameteriv(
+ GLenum target, GLenum pname, GLint* params) {
+ InitTextureMaxAnisotropyIfNeeded(target, pname);
+ glGetTexParameteriv(target, pname, params);
+}
+
+void GLES2DecoderImpl::InitTextureMaxAnisotropyIfNeeded(
+ GLenum target, GLenum pname) {
+ if (!workarounds().init_texture_max_anisotropy)
+ return;
+ if (pname != GL_TEXTURE_MAX_ANISOTROPY_EXT ||
+ !validators_->texture_parameter.IsValid(pname)) {
+ return;
+ }
+
+ TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
+ &state_, target);
+ if (!texture_ref) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION,
+ "glGetTexParamter{fi}v", "unknown texture for target");
+ return;
+ }
+ Texture* texture = texture_ref->texture();
+ texture->InitTextureMaxAnisotropyIfNeeded(target);
+}
+
void GLES2DecoderImpl::DoGetVertexAttribfv(
GLuint index, GLenum pname, GLfloat* params) {
VertexAttrib* attrib = state_.vertex_attrib_manager->GetVertexAttrib(index);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index d29abe9..f950b12 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -1223,7 +1223,7 @@ error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
if (result->size != 0) {
return error::kInvalidArguments;
}
- glGetTexParameterfv(target, pname, params);
+ DoGetTexParameterfv(target, pname, params);
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
result->SetNumResults(num_values);
@@ -1259,7 +1259,7 @@ error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
if (result->size != 0) {
return error::kInvalidArguments;
}
- glGetTexParameteriv(target, pname, params);
+ DoGetTexParameteriv(target, pname, params);
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
result->SetNumResults(num_values);
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index 38516e7..e090e0b 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -119,7 +119,8 @@ Texture::Texture(GLuint service_id)
immutable_(false),
has_images_(false),
estimated_size_(0),
- can_render_condition_(CAN_RENDER_ALWAYS) {
+ can_render_condition_(CAN_RENDER_ALWAYS),
+ texture_max_anisotropy_initialized_(false) {
}
Texture::~Texture() {
@@ -755,6 +756,14 @@ bool Texture::IsLevelCleared(GLenum target, GLint level) const {
return info.cleared;
}
+void Texture::InitTextureMaxAnisotropyIfNeeded(GLenum target) {
+ if (texture_max_anisotropy_initialized_)
+ return;
+ texture_max_anisotropy_initialized_ = true;
+ GLfloat params[] = { 1.0f };
+ glTexParameterfv(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, params);
+}
+
bool Texture::ClearLevel(
GLES2Decoder* decoder, GLenum target, GLint level) {
DCHECK(decoder);
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index c44bef3..2682e46 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -159,6 +159,9 @@ class GPU_EXPORT Texture {
return estimated_size() > 0;
}
+ // Initialize TEXTURE_MAX_ANISOTROPY to 1 if we haven't done so yet.
+ void InitTextureMaxAnisotropyIfNeeded(GLenum target);
+
private:
friend class MailboxManager;
friend class MailboxManagerTest;
@@ -379,6 +382,9 @@ class GPU_EXPORT Texture {
// Cache of the computed CanRenderCondition flag.
CanRenderCondition can_render_condition_;
+ // Whether we have initialized TEXTURE_MAX_ANISOTROPY to 1.
+ bool texture_max_anisotropy_initialized_;
+
DISALLOW_COPY_AND_ASSIGN(Texture);
};