panfrost: Support linear depth textures
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Fri, 8 Mar 2019 23:41:12 +0000 (23:41 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 12 Mar 2019 02:37:41 +0000 (02:37 +0000)
This combination has not yet been seen "in the wild" in traces, but to
support linear depth FBOs, ~bruteforce reveals this bit pattern is
necessary. It's not yet clear why the meanings of 0x1 and 0x2 are
essentially flipped (tiled vs linear for colour, linear vs some sort of
tiled for depth).

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
src/gallium/drivers/panfrost/pan_context.c

index 4c02fbbe1250cad2e12394445218a3aefc5a7370..9d89a8978aec6fa8d4471d830ebbe7df5e900dc1 100644 (file)
@@ -2266,17 +2266,19 @@ panfrost_create_sampler_view(
 
         enum mali_format format = panfrost_find_format(desc);
 
+        bool is_depth = desc->format == PIPE_FORMAT_Z32_UNORM;
+
         unsigned usage2_layout = 0x10;
 
         switch (prsrc->bo->layout) {
                 case PAN_AFBC:
-                        usage2_layout |= 0xc;
+                        usage2_layout |= 0x8 | 0x4;
                         break;
                 case PAN_TILED:
                         usage2_layout |= 0x1;
                         break;
                 case PAN_LINEAR:
-                        usage2_layout |= 0x2;
+                        usage2_layout |= is_depth ? 0x1 : 0x2;
                         break;
                 default:
                         assert(0);