mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
panfrost: Fix clean_pixel_write_enable forced check for AFBC
Clean tiles must actually be written back for AFBC buffers (color, z/s) when either one of the effective tile size dimension is smaller than the superblock dimension. This commit fixes the current check which compares the effective tile size to the superblock size. Fixes:762a0f4133("panfrost: Add the concept of render block") Signed-off-by: Loïc Molinari <loic.molinari@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38422> (cherry picked from commit098b69a05c)
This commit is contained in:
parent
db6cbb8410
commit
51ed940bb8
10 changed files with 55 additions and 18 deletions
|
|
@ -204,7 +204,7 @@
|
|||
"description": "panfrost: Fix clean_pixel_write_enable forced check for AFBC",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "762a0f413369ecbbeb94810b133e66963b69208b",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ dEQP-VK.wsi.wayland.swapchain.create.image_extent,Crash
|
|||
|
||||
dEQP-VK.wsi.wayland.swapchain.simulate_oom.image_extent,Crash
|
||||
|
||||
angle-KHR-GLES3.framebuffer_blit.scissor_blit,Fail
|
||||
angle-KHR-GLES3.packed_depth_stencil.verify_read_pixels.depth24_stencil8,Fail
|
||||
angle-KHR-GLES3.packed_depth_stencil.verify_read_pixels.depth32f_stencil8,Fail
|
||||
angle-KHR-GLES31.core.shader_atomic_counters.advanced-usage-multi-stage,Fail
|
||||
|
|
|
|||
|
|
@ -1723,7 +1723,8 @@
|
|||
<field name="MSAA" size="2" start="0:8" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="8:0" type="address"/>
|
||||
|
|
@ -1749,7 +1750,8 @@
|
|||
<field name="MSAA" size="2" start="0:24" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="12:0" type="address"/>
|
||||
|
|
@ -1849,6 +1851,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="YUV Transform" size="1" start="2:0" type="bool"/>
|
||||
<field name="Split block" size="1" start="2:1" type="bool"/>
|
||||
|
|
|
|||
|
|
@ -2010,7 +2010,8 @@
|
|||
<field name="MSAA" size="2" start="0:8" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="8:0" type="address"/>
|
||||
|
|
@ -2037,7 +2038,8 @@
|
|||
<field name="MSAA" size="2" start="0:24" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="12:0" type="address"/>
|
||||
|
|
@ -2137,6 +2139,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="YUV Transform" size="1" start="2:0" type="bool"/>
|
||||
<field name="Split block" size="1" start="2:1" type="bool"/>
|
||||
|
|
|
|||
|
|
@ -2316,7 +2316,8 @@
|
|||
<field name="MSAA" size="2" start="0:8" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="8:0" type="address"/>
|
||||
|
|
@ -2343,7 +2344,8 @@
|
|||
<field name="MSAA" size="2" start="0:24" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="12:0" type="address"/>
|
||||
|
|
@ -2443,6 +2445,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="YUV Transform" size="1" start="2:0" type="bool"/>
|
||||
<field name="Split block" size="1" start="2:1" type="bool"/>
|
||||
|
|
|
|||
|
|
@ -1009,6 +1009,8 @@
|
|||
<field name="Block Format" size="2" start="3:4" type="Block Format"/>
|
||||
<field name="MSAA" size="2" start="3:6" default="Single" type="MSAA"/>
|
||||
<field name="Big Endian" size="1" start="3:8" type="bool"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="3:10" type="bool"/>
|
||||
<field name="Header" size="64" start="4:0" type="address"/>
|
||||
<field name="Header Row Stride" size="13" start="6:0" type="uint"/>
|
||||
|
|
@ -1121,6 +1123,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="Header" size="64" start="4:0" type="address"/>
|
||||
<field name="Row Stride" size="13" start="6:0" type="uint"/>
|
||||
|
|
|
|||
|
|
@ -1101,6 +1101,8 @@
|
|||
<field name="Write Format" size="4" start="3:0" type="ZS Format"/>
|
||||
<field name="Block Format" size="4" start="3:4" type="Block Format"/>
|
||||
<field name="MSAA" size="2" start="3:8" default="Single" type="MSAA"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="3:10" type="bool"/>
|
||||
<field name="Header" size="64" start="4:0" type="address"/>
|
||||
<field name="Header Row Stride" size="13" start="6:0" type="uint"/>
|
||||
|
|
@ -1203,6 +1205,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="Header" size="64" start="4:0" type="address"/>
|
||||
<field name="Row Stride" size="13" start="6:0" type="uint"/>
|
||||
|
|
|
|||
|
|
@ -1147,7 +1147,8 @@
|
|||
<field name="MSAA" size="2" start="0:8" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="8:0" type="address"/>
|
||||
|
|
@ -1173,7 +1174,8 @@
|
|||
<field name="MSAA" size="2" start="0:24" default="Single" type="MSAA"/>
|
||||
|
||||
<field name="Reverse Issue Order" size="1" start="0:30" type="bool"/>
|
||||
<!-- Note: Must be set if AFBC is enabled and effective_tile_size is not 16x16 -->
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="0:31" type="bool"/>
|
||||
|
||||
<field name="Header" size="64" start="12:0" type="address"/>
|
||||
|
|
@ -1270,6 +1272,8 @@
|
|||
<field name="sRGB" size="1" start="1:14" type="bool"/>
|
||||
<field name="Dithering Enable" size="1" start="1:15" type="bool"/>
|
||||
<field name="Swizzle" size="12" start="1:16" type="Component Swizzle"/>
|
||||
<!-- Must be set if either one of the effective tile size dimension is
|
||||
smaller than the AFBC superblock dimension. -->
|
||||
<field name="Clean Pixel Write Enable" size="1" start="1:31" type="bool"/>
|
||||
<field name="YUV Transform" size="1" start="2:0" type="bool"/>
|
||||
<field name="Split block" size="1" start="2:1" type="bool"/>
|
||||
|
|
|
|||
|
|
@ -940,9 +940,9 @@ pan_fix_frame_shader_mode(enum mali_pre_post_frame_shader_mode mode,
|
|||
return mode;
|
||||
}
|
||||
|
||||
/* Regardless of clean_tile_write_enable, the hardware writes clean tiles if
|
||||
* the effective tile size differs from the superblock size of any enabled AFBC
|
||||
* render target. Check this condition. */
|
||||
/* Clean tiles must be written back for AFBC buffers (color, z/s) when either
|
||||
* one of the effective tile size dimension is smaller than the superblock
|
||||
* dimension. */
|
||||
|
||||
static bool
|
||||
pan_force_clean_write_on(const struct pan_image *image, unsigned tile_size)
|
||||
|
|
@ -953,13 +953,15 @@ pan_force_clean_write_on(const struct pan_image *image, unsigned tile_size)
|
|||
if (!drm_is_afbc(image->props.modifier))
|
||||
return false;
|
||||
|
||||
struct pan_image_block_size renderblk_sz =
|
||||
pan_afbc_renderblock_size(image->props.modifier);
|
||||
|
||||
assert(renderblk_sz.width >= 16 && renderblk_sz.height >= 16);
|
||||
assert(tile_size <= pan_max_effective_tile_size(PAN_ARCH));
|
||||
|
||||
return tile_size != renderblk_sz.width * renderblk_sz.height;
|
||||
struct pan_image_block_size tileblk_sz =
|
||||
pan_effective_tile_block_size(tile_size);
|
||||
struct pan_image_block_size superblk_sz =
|
||||
pan_afbc_superblock_size(image->props.modifier);
|
||||
|
||||
return tileblk_sz.width < superblk_sz.width ||
|
||||
tileblk_sz.height < superblk_sz.height;
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
|
|
@ -247,6 +247,18 @@ pan_sample_pattern(unsigned samples)
|
|||
}
|
||||
}
|
||||
|
||||
static inline struct pan_image_block_size
|
||||
pan_effective_tile_block_size(unsigned tile_size)
|
||||
{
|
||||
/* Tile is either a square or a rect whose width is twice the height. */
|
||||
unsigned shift_h = util_logbase2(tile_size);
|
||||
unsigned shift_w = shift_h + 1;
|
||||
unsigned h = 1 << (shift_h >> 1);
|
||||
unsigned w = 1 << (shift_w >> 1);
|
||||
|
||||
return (struct pan_image_block_size){w, h};
|
||||
}
|
||||
|
||||
void GENX(pan_select_tile_size)(struct pan_fb_info *fb);
|
||||
|
||||
void GENX(pan_emit_tls)(const struct pan_tls_info *info,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue