st/mesa: simplify get_texture_format_swizzle
authorMarek Olšák <marek.olsak@amd.com>
Sun, 11 Jun 2017 23:04:34 +0000 (01:04 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 21 Jun 2017 23:51:02 +0000 (01:51 +0200)
- Don't check GL_NONE (that was only for buffers).
- Don't use util_format_is_depth_or_stencil.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/state_tracker/st_sampler_view.c

index f0cf9cb929aa5115490f000963a972edcbf5e7d9..e8a46a722440f6190f8b0cd0e61d66d5e879522f 100644 (file)
@@ -281,31 +281,28 @@ get_texture_format_swizzle(const struct st_context *st,
                            const struct st_texture_object *stObj,
                            unsigned glsl_version)
 {
-   GLenum baseFormat = _mesa_texture_base_format(&stObj->base);
+   GLenum baseFormat = _mesa_base_tex_image(&stObj->base)->_BaseFormat;
    unsigned tex_swizzle;
-
-   if (baseFormat != GL_NONE) {
-      GLenum depth_mode = stObj->base.DepthMode;
-      /* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures
-       * with depth component data specified with a sized internal format.
-       */
-      if (_mesa_is_gles3(st->ctx) &&
-          util_format_is_depth_or_stencil(stObj->pt->format)) {
-         const struct gl_texture_image *firstImage =
-            _mesa_base_tex_image(&stObj->base);
-         if (firstImage->InternalFormat != GL_DEPTH_COMPONENT &&
-             firstImage->InternalFormat != GL_DEPTH_STENCIL &&
-             firstImage->InternalFormat != GL_STENCIL_INDEX)
-            depth_mode = GL_RED;
-      }
-      tex_swizzle = compute_texture_format_swizzle(baseFormat,
-                                                   depth_mode,
-                                                   stObj->pt->format,
-                                                   glsl_version);
-   }
-   else {
-      tex_swizzle = SWIZZLE_XYZW;
+   GLenum depth_mode = stObj->base.DepthMode;
+
+   /* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures
+    * with depth component data specified with a sized internal format.
+    */
+   if (_mesa_is_gles3(st->ctx) &&
+       (baseFormat == GL_DEPTH_COMPONENT ||
+        baseFormat == GL_DEPTH_STENCIL ||
+        baseFormat == GL_STENCIL_INDEX)) {
+      const struct gl_texture_image *firstImage =
+         _mesa_base_tex_image(&stObj->base);
+      if (firstImage->InternalFormat != GL_DEPTH_COMPONENT &&
+          firstImage->InternalFormat != GL_DEPTH_STENCIL &&
+          firstImage->InternalFormat != GL_STENCIL_INDEX)
+         depth_mode = GL_RED;
    }
+   tex_swizzle = compute_texture_format_swizzle(baseFormat,
+                                                depth_mode,
+                                                stObj->pt->format,
+                                                glsl_version);
 
    /* Combine the texture format swizzle with user's swizzle */
    return swizzle_swizzle(stObj->base._Swizzle, tex_swizzle);