swr: Report format max_samples=1 to maintain support for "fake" msaa.
authorCherniak, Bruce <bruce.cherniak@intel.com>
Fri, 25 Aug 2017 19:59:13 +0000 (14:59 -0500)
committerGeorge Kyriazis <george.kyriazis@intel.com>
Fri, 1 Sep 2017 16:23:16 +0000 (11:23 -0500)
Accompanying patch "st/mesa: only try to create 1x msaa surfaces for
'fake' msaa" requires driver to report max_samples=1 to enable "fake"
msaa. Previously, 0 and 1 were treated equivalently in st_init_extensions()
and either could enable "fake" msaa.

This patch raises the swr default msaa_max_count from 0 to 1, so that
swr_is_format_supported will report max_samples=1.

Real msaa can still be enabled by exporting SWR_MSAA_MAX_COUNT with a
pow2 value between 2 and 16.

This patch is necessary to prevent an OpenSWR regression resulting from
the st/mesa patch.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102038
Acked-by: Brian Paul <brianp@vmware.com>
Reviewed-By: George Kyriazis <george.kyriazis@intel.com>
src/gallium/drivers/swr/swr_screen.cpp

index 3287bc6feeb073ab19acb5e86b00e37b5fcdcba3..cc8d9955b8eb686115a5be37922c505a647c9806 100644 (file)
@@ -255,13 +255,13 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
       return 1;
 
    /* MSAA support
-    * If user has explicitly set max_sample_count = 0 (via SWR_MSAA_MAX_COUNT)
-    * then disable all MSAA support and go back to old caps. */
+    * If user has explicitly set max_sample_count = 1 (via SWR_MSAA_MAX_COUNT)
+    * then disable all MSAA support and go back to old (FAKE_SW_MSAA) caps. */
    case PIPE_CAP_TEXTURE_MULTISAMPLE:
    case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:
-      return swr_screen(screen)->msaa_max_count ? 1 : 0;
+      return (swr_screen(screen)->msaa_max_count > 1) ? 1 : 0;
    case PIPE_CAP_FAKE_SW_MSAA:
-      return swr_screen(screen)->msaa_max_count ? 0 : 1;
+      return (swr_screen(screen)->msaa_max_count > 1) ? 0 : 1;
 
       /* unsupported features */
    case PIPE_CAP_ANISOTROPIC_FILTER:
@@ -1079,22 +1079,22 @@ swr_validate_env_options(struct swr_screen *screen)
       screen->client_copy_limit = client_copy_limit;
 
    /* XXX msaa under development, disable by default for now */
-   screen->msaa_max_count = 0; /* was SWR_MAX_NUM_MULTISAMPLES; */
+   screen->msaa_max_count = 1; /* was SWR_MAX_NUM_MULTISAMPLES; */
 
    /* validate env override values, within range and power of 2 */
-   int msaa_max_count = debug_get_num_option("SWR_MSAA_MAX_COUNT", 0);
-   if (msaa_max_count) {
-      if ((msaa_max_count < 0) || (msaa_max_count > SWR_MAX_NUM_MULTISAMPLES)
+   int msaa_max_count = debug_get_num_option("SWR_MSAA_MAX_COUNT", 1);
+   if (msaa_max_count != 1) {
+      if ((msaa_max_count < 1) || (msaa_max_count > SWR_MAX_NUM_MULTISAMPLES)
             || !util_is_power_of_two(msaa_max_count)) {
          fprintf(stderr, "SWR_MSAA_MAX_COUNT invalid: %d\n", msaa_max_count);
          fprintf(stderr, "must be power of 2 between 1 and %d" \
-                         " (or 0 to disable msaa)\n",
+                         " (or 1 to disable msaa)\n",
                SWR_MAX_NUM_MULTISAMPLES);
-         msaa_max_count = 0;
+         msaa_max_count = 1;
       }
 
       fprintf(stderr, "SWR_MSAA_MAX_COUNT: %d\n", msaa_max_count);
-      if (!msaa_max_count)
+      if (msaa_max_count == 1)
          fprintf(stderr, "(msaa disabled)\n");
 
       screen->msaa_max_count = msaa_max_count;