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

Dave Airlie airlied at gmail.com
Tue Jan 31 00:38:49 UTC 2017


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



More information about the mesa-dev mailing list