[Mesa-dev] [PATCH] radv: fix stencil regression since new addrlib import
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Thu Apr 13 07:19:30 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
On Thu, Apr 13, 2017 at 6:37 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> The addrlib import meant we'd return after we attempted
> to setup the no stencil bits for an S8_UINT, now we break
> and use the stencil level info when creating stencil DB
> info.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/radv_device.c | 8 ++++++++
> src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c | 2 +-
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 74cad71..2853315 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -2733,6 +2733,7 @@ radv_initialise_ds_surface(struct radv_device *device,
> unsigned format;
> uint64_t va, s_offs, z_offs;
> const struct radeon_surf_level *level_info = &iview->image->surface.level[level];
> + bool stencil_only = false;
> memset(ds, 0, sizeof(*ds));
> switch (iview->vk_format) {
> case VK_FORMAT_D24_UNORM_S8_UINT:
> @@ -2751,6 +2752,10 @@ radv_initialise_ds_surface(struct radv_device *device,
> S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1);
> ds->offset_scale = 1.0f;
> break;
> + case VK_FORMAT_S8_UINT:
> + stencil_only = true;
> + level_info = &iview->image->surface.stencil_level[level];
> + break;
> default:
> break;
> }
> @@ -2785,6 +2790,9 @@ radv_initialise_ds_surface(struct radv_device *device,
> unsigned stencil_tile_mode = info->si_tile_mode_array[stencil_index];
> unsigned macro_mode = info->cik_macrotile_mode_array[macro_index];
>
> + if (stencil_only)
> + tile_mode = stencil_tile_mode;
> +
> ds->db_depth_info |=
> S_02803C_ARRAY_MODE(G_009910_ARRAY_MODE(tile_mode)) |
> S_02803C_PIPE_CONFIG(G_009910_PIPE_CONFIG(tile_mode)) |
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> index 0433952..511f464 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c
> @@ -486,7 +486,7 @@ static int radv_amdgpu_winsys_surface_init(struct radeon_winsys *_ws,
> r = radv_compute_level(ws->addrlib, surf, false, level, type, compressed,
> &AddrSurfInfoIn, &AddrSurfInfoOut, &AddrDccIn, &AddrDccOut);
> if (r)
> - return r;
> + break;
>
> if (level == 0) {
> surf->bo_alignment = AddrSurfInfoOut.baseAlign;
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list