Merge remote-tracking branch 'origin/master' into pipe-video
[mesa.git] / src / mesa / main / texparam.c
index 3d56dac3f91b8b9ea226cd49ca000b044d19257f..4b9dcb5d3b596178047b3bec9c81028b886bf3ab 100644 (file)
@@ -439,6 +439,20 @@ set_tex_parameteri(struct gl_context *ctx,
       }
       goto invalid_pname;
 
+   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
+      if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
+         GLenum param = params[0];
+         if (param != GL_TRUE && param != GL_FALSE) {
+            goto invalid_param;
+         }
+         if (param != texObj->Sampler.CubeMapSeamless) {
+            flush(ctx);
+            texObj->Sampler.CubeMapSeamless = param;
+         }
+         return GL_TRUE;
+      }
+      goto invalid_pname;
+
    default:
       goto invalid_pname;
    }
@@ -580,6 +594,7 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)
    case GL_TEXTURE_COMPARE_FUNC_ARB:
    case GL_DEPTH_TEXTURE_MODE_ARB:
    case GL_TEXTURE_SRGB_DECODE_EXT:
+   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
       {
          /* convert float param to int */
          GLint p[4];
@@ -629,6 +644,7 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
    case GL_TEXTURE_COMPARE_FUNC_ARB:
    case GL_DEPTH_TEXTURE_MODE_ARB:
    case GL_TEXTURE_SRGB_DECODE_EXT:
+   case GL_TEXTURE_CUBE_MAP_SEAMLESS:
       {
          /* convert float param to int */
          GLint p[4];
@@ -979,11 +995,9 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
          }
          break;
       case GL_TEXTURE_SHARED_SIZE:
-         if (ctx->VersionMajor >= 3) {
-            /* XXX return number of exponent bits for shared exponent texture
-             * formats, like GL_RGB9_E5.
-             */
-            *params = 0;
+         if (ctx->VersionMajor >= 3 ||
+             ctx->Extensions.EXT_texture_shared_exponent) {
+            *params = texFormat == MESA_FORMAT_RGB9_E5_FLOAT ? 5 : 0;
          }
          else {
             goto invalid_pname;
@@ -1237,6 +1251,14 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
          }
          break;
 
+      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
+      if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
+         *params = (GLfloat) obj->Sampler.CubeMapSeamless;
+      }
+      else {
+         error = GL_TRUE;
+      }
+
       default:
         error = GL_TRUE;
         break;
@@ -1398,6 +1420,14 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          }
          break;
 
+      case GL_TEXTURE_CUBE_MAP_SEAMLESS:
+         if (ctx->Extensions.AMD_seamless_cubemap_per_texture) {
+            *params = (GLint) obj->Sampler.CubeMapSeamless;
+         }
+         else {
+            error = GL_TRUE;
+         }
+
       default:
          ; /* silence warnings */
    }