From 11b7fc8914fd2c735730b51788e22d4bb199d3e7 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 17 Jul 2019 11:45:39 +0200 Subject: [PATCH] [d3d11] Catch invalid ClearUnorderedAccessViewFloat calls This method cannot be called on integer UAVs. --- src/d3d11/d3d11_context.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 412bc5002..464881e0b 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -838,6 +838,16 @@ namespace dxvk { if (!uav) return; + auto imgView = uav->GetImageView(); + auto bufView = uav->GetBufferView(); + + const DxvkFormatInfo* info = nullptr; + if (imgView != nullptr) info = imgView->formatInfo(); + if (bufView != nullptr) info = bufView->formatInfo(); + + if (!info || info->flags.any(DxvkFormatFlag::SampledSInt, DxvkFormatFlag::SampledUInt)) + return; + VkClearValue clearValue; clearValue.color.float32[0] = Values[0]; clearValue.color.float32[1] = Values[1]; @@ -847,7 +857,7 @@ namespace dxvk { if (uav->GetResourceType() == D3D11_RESOURCE_DIMENSION_BUFFER) { EmitCs([ cClearValue = clearValue, - cDstView = uav->GetBufferView() + cDstView = std::move(bufView) ] (DxvkContext* ctx) { ctx->clearBufferView( cDstView, 0, @@ -857,7 +867,7 @@ namespace dxvk { } else { EmitCs([ cClearValue = clearValue, - cDstView = uav->GetImageView() + cDstView = std::move(imgView) ] (DxvkContext* ctx) { ctx->clearImageView(cDstView, VkOffset3D { 0, 0, 0 },