Mesa (main): dzn: use a null-rtv to handle no-attachment
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 14 15:07:42 UTC 2022
Module: Mesa
Branch: main
Commit: b45f1e24aef19597dbca0be5717da3489a071a86
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b45f1e24aef19597dbca0be5717da3489a071a86
Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date: Mon Jun 13 17:22:09 2022 +0200
dzn: use a null-rtv to handle no-attachment
This fixes a crash in this test:
dEQP-VK.renderpass2.suballocation.simple.color_unused_omit_blend_state
Fixes: 2d0798440b4 ("dzn: Add support for dynamic rendering")
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17027>
---
src/microsoft/vulkan/dzn_cmd_buffer.c | 28 +++++++++++++++++++++++++++-
src/microsoft/vulkan/dzn_private.h | 1 +
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/microsoft/vulkan/dzn_cmd_buffer.c b/src/microsoft/vulkan/dzn_cmd_buffer.c
index 8971f0ce385..e53b593eec8 100644
--- a/src/microsoft/vulkan/dzn_cmd_buffer.c
+++ b/src/microsoft/vulkan/dzn_cmd_buffer.c
@@ -231,6 +231,7 @@ dzn_cmd_buffer_reset(struct dzn_cmd_buffer *cmdbuf)
hash_table_foreach(cmdbuf->rtvs.ht, he)
vk_free(&cmdbuf->vk.pool->alloc, he->data);
_mesa_hash_table_clear(cmdbuf->rtvs.ht, NULL);
+ cmdbuf->null_rtv.ptr = 0;
dzn_descriptor_heap_pool_reset(&cmdbuf->rtvs.pool);
hash_table_foreach(cmdbuf->dsvs.ht, he)
vk_free(&cmdbuf->vk.pool->alloc, he->data);
@@ -828,6 +829,29 @@ dzn_cmd_buffer_get_rtv(struct dzn_cmd_buffer *cmdbuf,
return rtve->handle;
}
+static D3D12_CPU_DESCRIPTOR_HANDLE
+dzn_cmd_buffer_get_null_rtv(struct dzn_cmd_buffer *cmdbuf)
+{
+ struct dzn_device *device = container_of(cmdbuf->vk.base.device, struct dzn_device, vk);
+
+ if (!cmdbuf->null_rtv.ptr) {
+ struct dzn_descriptor_heap *heap;
+ uint32_t slot;
+ dzn_descriptor_heap_pool_alloc_slots(&cmdbuf->rtvs.pool, device, 1, &heap, &slot);
+ cmdbuf->null_rtv = dzn_descriptor_heap_get_cpu_handle(heap, slot);
+
+ D3D12_RENDER_TARGET_VIEW_DESC desc = { 0 };
+ desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = 0;
+ desc.Texture2D.PlaneSlice = 0;
+
+ ID3D12Device1_CreateRenderTargetView(device->dev, NULL, &desc, cmdbuf->null_rtv);
+ }
+
+ return cmdbuf->null_rtv;
+}
+
static VkResult
dzn_cmd_buffer_alloc_internal_buf(struct dzn_cmd_buffer *cmdbuf,
uint32_t size,
@@ -3450,8 +3474,10 @@ dzn_CmdBeginRendering(VkCommandBuffer commandBuffer,
att->resolveImageLayout;
cmdbuf->state.render.attachments.colors[i].store_op = att->storeOp;
- if (!iview)
+ if (!iview) {
+ rt_handles[i] = dzn_cmd_buffer_get_null_rtv(cmdbuf);
continue;
+ }
struct dzn_image *img = container_of(iview->vk.image, struct dzn_image, vk);
rt_handles[i] = dzn_cmd_buffer_get_rtv(cmdbuf, img, &iview->rtv_desc);
diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h
index 7b84d18e95a..098f47563a6 100644
--- a/src/microsoft/vulkan/dzn_private.h
+++ b/src/microsoft/vulkan/dzn_private.h
@@ -544,6 +544,7 @@ struct dzn_cmd_buffer {
} rtvs, dsvs;
struct dzn_descriptor_heap_pool cbv_srv_uav_pool, sampler_pool;
+ D3D12_CPU_DESCRIPTOR_HANDLE null_rtv;
struct list_head internal_bufs;
More information about the mesa-commit
mailing list