Index: gpu/command_buffer/service/texture_manager.cc |
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc |
index 1f3fbc8bdd137eebf9f802530b2923197d1ae762..90b7d2a236bac599bb4ba8c2f967485f6de5963c 100644 |
--- a/gpu/command_buffer/service/texture_manager.cc |
+++ b/gpu/command_buffer/service/texture_manager.cc |
@@ -29,14 +29,21 @@ struct TextureSignature { |
GLint level_; |
GLenum min_filter_; |
GLenum mag_filter_; |
+ GLenum wrap_r_; |
GLenum wrap_s_; |
GLenum wrap_t_; |
GLenum usage_; |
GLenum internal_format_; |
+ GLenum compare_func_; |
+ GLenum compare_mode_; |
GLsizei width_; |
GLsizei height_; |
GLsizei depth_; |
+ GLfloat max_lod_; |
+ GLfloat min_lod_; |
+ GLint base_level_; |
GLint border_; |
+ GLint max_level_; |
GLenum format_; |
GLenum type_; |
bool has_image_; |
@@ -52,14 +59,21 @@ struct TextureSignature { |
GLint level, |
GLenum min_filter, |
GLenum mag_filter, |
+ GLenum wrap_r, |
GLenum wrap_s, |
GLenum wrap_t, |
GLenum usage, |
GLenum internal_format, |
+ GLenum compare_func, |
+ GLenum compare_mode, |
GLsizei width, |
GLsizei height, |
GLsizei depth, |
+ GLfloat max_lod, |
+ GLfloat min_lod, |
+ GLint base_level, |
GLint border, |
+ GLint max_level, |
GLenum format, |
GLenum type, |
bool has_image, |
@@ -71,14 +85,21 @@ struct TextureSignature { |
level_ = level; |
min_filter_ = min_filter; |
mag_filter_ = mag_filter; |
+ wrap_r_ = wrap_r; |
wrap_s_ = wrap_s; |
wrap_t_ = wrap_t; |
usage_ = usage; |
internal_format_ = internal_format; |
+ compare_func_ = compare_func; |
+ compare_mode_ = compare_mode; |
width_ = width; |
height_ = height; |
depth_ = depth; |
+ max_lod_ = max_lod; |
+ min_lod_ = min_lod; |
+ base_level_ = base_level; |
border_ = border; |
+ max_level_ = max_level; |
format_ = format; |
type_ = type; |
has_image_ = has_image; |
@@ -133,10 +154,17 @@ Texture::Texture(GLuint service_id) |
target_(0), |
min_filter_(GL_NEAREST_MIPMAP_LINEAR), |
mag_filter_(GL_LINEAR), |
+ wrap_r_(GL_REPEAT), |
wrap_s_(GL_REPEAT), |
wrap_t_(GL_REPEAT), |
usage_(GL_NONE), |
pool_(GL_TEXTURE_POOL_UNMANAGED_CHROMIUM), |
+ compare_func_(GL_LEQUAL), |
+ compare_mode_(GL_NONE), |
+ max_lod_(1000.0f), |
+ min_lod_(-1000.0f), |
+ base_level_(0), |
+ max_level_(1000), |
max_level_set_(-1), |
texture_complete_(false), |
texture_mips_dirty_(false), |
@@ -305,14 +333,21 @@ void Texture::AddToSignature( |
level, |
min_filter_, |
mag_filter_, |
+ wrap_r_, |
wrap_s_, |
wrap_t_, |
usage_, |
info.internal_format, |
+ compare_func_, |
+ compare_mode_, |
info.width, |
info.height, |
info.depth, |
+ max_lod_, |
+ min_lod_, |
+ base_level_, |
info.border, |
+ max_level_, |
info.format, |
info.type, |
info.image.get() != NULL, |
@@ -745,6 +780,12 @@ GLenum Texture::SetParameteri( |
pool_ = param; |
GetMemTracker()->TrackMemAlloc(estimated_size()); |
break; |
+ case GL_TEXTURE_WRAP_R: |
+ if (!feature_info->validators()->texture_wrap_mode.IsValid(param)) { |
+ return GL_INVALID_ENUM; |
+ } |
+ wrap_r_ = param; |
+ break; |
case GL_TEXTURE_WRAP_S: |
if (!feature_info->validators()->texture_wrap_mode.IsValid(param)) { |
return GL_INVALID_ENUM; |
@@ -757,6 +798,30 @@ GLenum Texture::SetParameteri( |
} |
wrap_t_ = param; |
break; |
+ case GL_TEXTURE_COMPARE_FUNC: |
+ if (!feature_info->validators()->texture_compare_func.IsValid(param)) { |
+ return GL_INVALID_ENUM; |
+ } |
+ compare_func_ = param; |
+ break; |
+ case GL_TEXTURE_COMPARE_MODE: |
+ if (!feature_info->validators()->texture_compare_mode.IsValid(param)) { |
+ return GL_INVALID_ENUM; |
+ } |
+ compare_mode_ = param; |
+ break; |
+ case GL_TEXTURE_BASE_LEVEL: |
+ if (param < 0) { |
+ return GL_INVALID_VALUE; |
+ } |
+ base_level_ = param; |
+ break; |
+ case GL_TEXTURE_MAX_LEVEL: |
+ if (param < 0) { |
+ return GL_INVALID_VALUE; |
+ } |
+ max_level_ = param; |
+ break; |
case GL_TEXTURE_MAX_ANISOTROPY_EXT: |
if (param < 1) { |
return GL_INVALID_VALUE; |
@@ -791,6 +856,12 @@ GLenum Texture::SetParameterf( |
GLint iparam = static_cast<GLint>(param); |
return SetParameteri(feature_info, pname, iparam); |
} |
+ case GL_TEXTURE_MIN_LOD: |
+ min_lod_ = param; |
+ break; |
+ case GL_TEXTURE_MAX_LOD: |
+ max_lod_ = param; |
+ break; |
case GL_TEXTURE_MAX_ANISOTROPY_EXT: |
if (param < 1.f) { |
return GL_INVALID_VALUE; |