[Mesa-dev] [PATCH] radv/geom: check if esgs and gsvs ring exists before filling geom rings

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Jan 31 00:42:25 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Tue, Jan 31, 2017, at 01:38, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> There are some corner cases where you end up with an esgs ring, but no
> gsvs ring, test for both before dereferencing.
> 
> Fixes:
> dEQP-VK.geometry.emit.points_emit_0_end_0
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/vulkan/radv_device.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index a12c56c..33e2206 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -1058,11 +1058,14 @@ fill_geom_rings(struct radv_queue *queue,
>  		uint32_t gsvs_ring_size,
>  		struct radeon_winsys_bo *gsvs_ring_bo)
>  {
> -       uint64_t esgs_va, gsvs_va;
> -       esgs_va = queue->device->ws->buffer_get_va(esgs_ring_bo);
> -       gsvs_va = queue->device->ws->buffer_get_va(gsvs_ring_bo);
> +       uint64_t esgs_va = 0, gsvs_va = 0;
>  	uint32_t *desc = &map[4];
>  
> +       if (esgs_ring_bo)
> +               esgs_va = queue->device->ws->buffer_get_va(esgs_ring_bo);
> +       if (gsvs_ring_bo)
> +               gsvs_va = queue->device->ws->buffer_get_va(gsvs_ring_bo);
> +
>  	/* stride 0, num records - size, add tid, swizzle, elsize4,
>  	   index stride 64 */
>  	desc[0] = esgs_va;
> -- 
> 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