summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2021-02-02 19:59:12 -0500
committerDylan Baker <dylan.c.baker@intel.com>2021-02-23 09:46:59 -0800
commit392e0e54037b2a52b3d206d4af66a0d072ba639f (patch)
tree9aca30ab0dbfde0fe5efdaa1a5c0e7704f0caf80
parentd26b43c2e1a98853b3987ef102532de2f83a3aad (diff)
radv: null bo list pointer for null descriptors on update
failing to unset any existing pointers here leads to stale bo entries in the list and then the kernel rejecting the cmdbuf with ENOENT Fixes: 126d5adb11e ("radv: Use host memory pool for non-freeable descriptors.") Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8840> (cherry picked from commit 2f534c2e2ee97b89c43f155c0e2f9efe5a3dffac)
-rw-r--r--.pick_status.json2
-rw-r--r--src/amd/vulkan/radv_descriptor_set.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 35d36f79097..d847609200b 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -8968,7 +8968,7 @@
"description": "radv: null bo list pointer for null descriptors on update",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "126d5adb11e18a329e197db8f117b47bba30eeed"
},
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index 7a1994ce19d..6ec341cbe17 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -883,6 +883,8 @@ static void write_texel_buffer_descriptor(struct radv_device *device,
if (!buffer_view) {
memset(dst, 0, 4 * 4);
+ if (!cmd_buffer)
+ *buffer_list = NULL;
return;
}
@@ -904,6 +906,8 @@ static void write_buffer_descriptor(struct radv_device *device,
if (!buffer) {
memset(dst, 0, 4 * 4);
+ if (!cmd_buffer)
+ *buffer_list = NULL;
return;
}
@@ -968,6 +972,7 @@ static void write_dynamic_buffer_descriptor(struct radv_device *device,
if (!buffer) {
range->va = 0;
+ *buffer_list = NULL;
return;
}
@@ -1003,6 +1008,8 @@ write_image_descriptor(struct radv_device *device,
if (!iview) {
memset(dst, 0, size);
+ if (!cmd_buffer)
+ *buffer_list = NULL;
return;
}