Commit 7afae31e authored by Antoine Labour's avatar Antoine Labour Committed by Commit Bot

Correctly handle some invalid enums in TexParameterf

GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES is a "get"-only enum, so even though
it may be accepted by the texture_paramter validator (which has both
"set" and "get" enums, as they are mostly the same), we need to handle
it in Texture::SetParameter* and return GL_INVALID_ENUM.
Some enums (e.g. GL_TEXTURE_SRGB_DECODE_EXT) were only handled in

Texture::SetParameteri, so rework this a bit so that SetParameterf
always delegates everything (including error cases) to SetParameteri,
except for float params (which are only a handful), to avoid most of the
duplication.

Bug: 877754
Change-Id: I15c52f81e62544f90a15b914113c5c4816530cdb
Reviewed-on: https://chromium-review.googlesource.com/c/1343357Reviewed-by: default avatarZhenyao Mo <zmo@chromium.org>
Commit-Queue: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609492}
parent 3774d66c
...@@ -1384,9 +1384,9 @@ GLenum Texture::SetParameteri( ...@@ -1384,9 +1384,9 @@ GLenum Texture::SetParameteri(
switch (pname) { switch (pname) {
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
{ case GL_TEXTURE_MAX_ANISOTROPY_EXT: {
GLfloat fparam = static_cast<GLfloat>(param); GLfloat fparam = static_cast<GLfloat>(param);
return SetParameterf(feature_info, pname, fparam); return SetParameterf(feature_info, pname, fparam);
} }
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
if (!feature_info->validators()->texture_min_filter_mode.IsValid(param)) { if (!feature_info->validators()->texture_min_filter_mode.IsValid(param)) {
...@@ -1442,11 +1442,6 @@ GLenum Texture::SetParameteri( ...@@ -1442,11 +1442,6 @@ GLenum Texture::SetParameteri(
} }
UpdateMaxLevel(param); UpdateMaxLevel(param);
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (param < 1) {
return GL_INVALID_VALUE;
}
break;
case GL_TEXTURE_USAGE_ANGLE: case GL_TEXTURE_USAGE_ANGLE:
if (!feature_info->validators()->texture_usage.IsValid(param)) { if (!feature_info->validators()->texture_usage.IsValid(param)) {
return GL_INVALID_ENUM; return GL_INVALID_ENUM;
...@@ -1484,6 +1479,7 @@ GLenum Texture::SetParameteri( ...@@ -1484,6 +1479,7 @@ GLenum Texture::SetParameteri(
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT: case GL_TEXTURE_IMMUTABLE_FORMAT:
case GL_TEXTURE_IMMUTABLE_LEVELS: case GL_TEXTURE_IMMUTABLE_LEVELS:
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
return GL_INVALID_ENUM; return GL_INVALID_ENUM;
default: default:
NOTREACHED(); NOTREACHED();
...@@ -1497,24 +1493,9 @@ GLenum Texture::SetParameteri( ...@@ -1497,24 +1493,9 @@ GLenum Texture::SetParameteri(
GLenum Texture::SetParameterf( GLenum Texture::SetParameterf(
const FeatureInfo* feature_info, GLenum pname, GLfloat param) { const FeatureInfo* feature_info, GLenum pname, GLfloat param) {
// Only handle float parameters here. Handle everything else, including error
// cases, in SetParameteri.
switch (pname) { switch (pname) {
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_MAG_FILTER:
case GL_TEXTURE_WRAP_R:
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
case GL_TEXTURE_COMPARE_FUNC:
case GL_TEXTURE_COMPARE_MODE:
case GL_TEXTURE_BASE_LEVEL:
case GL_TEXTURE_MAX_LEVEL:
case GL_TEXTURE_USAGE_ANGLE:
case GL_TEXTURE_SWIZZLE_R:
case GL_TEXTURE_SWIZZLE_G:
case GL_TEXTURE_SWIZZLE_B:
case GL_TEXTURE_SWIZZLE_A: {
GLint iparam = static_cast<GLint>(std::round(param));
return SetParameteri(feature_info, pname, iparam);
}
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
sampler_state_.min_lod = param; sampler_state_.min_lod = param;
break; break;
...@@ -1526,12 +1507,10 @@ GLenum Texture::SetParameterf( ...@@ -1526,12 +1507,10 @@ GLenum Texture::SetParameterf(
return GL_INVALID_VALUE; return GL_INVALID_VALUE;
} }
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT: default: {
case GL_TEXTURE_IMMUTABLE_LEVELS: GLint iparam = static_cast<GLint>(std::round(param));
return GL_INVALID_ENUM; return SetParameteri(feature_info, pname, iparam);
default: }
NOTREACHED();
return GL_INVALID_ENUM;
} }
return GL_NO_ERROR; return GL_NO_ERROR;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment