D3D11: print CreateShaderResourceView1 params upon failure.
This is to help investigate why CreateShaderResourceView1 fails some
time.
Bug: 440120139
Change-Id: I8b1e332ddca8c970d5206493eeb4a67a6512dd84
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/260475
Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/d3d11/TextureD3D11.cpp b/src/dawn/native/d3d11/TextureD3D11.cpp
index 6885a96..ef5fafc 100644
--- a/src/dawn/native/d3d11/TextureD3D11.cpp
+++ b/src/dawn/native/d3d11/TextureD3D11.cpp
@@ -1223,10 +1223,12 @@
}
ComPtr<ID3D11ShaderResourceView1> srv;
- DAWN_TRY(CheckHRESULT(ToBackend(GetDevice())
- ->GetD3D11Device3()
- ->CreateShaderResourceView1(GetD3D11Resource(), &srvDesc, &srv),
- "CreateShaderResourceView1"));
+ DAWN_TRY_CONTEXT(
+ CheckHRESULT(ToBackend(GetDevice())
+ ->GetD3D11Device3()
+ ->CreateShaderResourceView1(GetD3D11Resource(), &srvDesc, &srv),
+ "CreateShaderResourceView1"),
+ "%s", SRVCreationStr(GetD3D11Resource(), srvDesc));
return std::move(srv);
}
diff --git a/src/dawn/native/d3d11/UtilsD3D11.cpp b/src/dawn/native/d3d11/UtilsD3D11.cpp
index ba185b7..d3e99c7 100644
--- a/src/dawn/native/d3d11/UtilsD3D11.cpp
+++ b/src/dawn/native/d3d11/UtilsD3D11.cpp
@@ -27,6 +27,8 @@
#include "dawn/native/d3d11/UtilsD3D11.h"
+#include <sstream>
+
#include "dawn/common/Assert.h"
#include "dawn/native/Format.h"
#include "dawn/native/d3d/D3DError.h"
@@ -34,6 +36,75 @@
namespace dawn::native::d3d11 {
+std::string SRVCreationStr(ID3D11Resource* resource,
+ const D3D11_SHADER_RESOURCE_VIEW_DESC1& srvDesc) {
+ std::ostringstream ss;
+ ss << "CreateShaderResourceView1, " << resource;
+ ss << ", Format: " << srvDesc.Format;
+ ss << ", ViewDimension: " << srvDesc.ViewDimension;
+
+ switch (srvDesc.ViewDimension) {
+ case D3D11_SRV_DIMENSION_BUFFER:
+ ss << ", Buffer.FirstElement: " << srvDesc.Buffer.FirstElement;
+ ss << ", Buffer.NumElements: " << srvDesc.Buffer.NumElements;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE1D:
+ ss << ", Texture1D.MipLevels: " << srvDesc.Texture1D.MipLevels;
+ ss << ", Texture1D.MostDetailedMip: " << srvDesc.Texture1D.MostDetailedMip;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:
+ ss << ", Texture1DArray.ArraySize: " << srvDesc.Texture1DArray.ArraySize;
+ ss << ", Texture1DArray.FirstArraySlice: " << srvDesc.Texture1DArray.FirstArraySlice;
+ ss << ", Texture1DArray.MipLevels: " << srvDesc.Texture1DArray.MipLevels;
+ ss << ", Texture1DArray.MostDetailedMip: " << srvDesc.Texture1DArray.MostDetailedMip;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE2D:
+ ss << ", Texture2D.MipLevels: " << srvDesc.Texture2D.MipLevels;
+ ss << ", Texture2D.MostDetailedMip: " << srvDesc.Texture2D.MostDetailedMip;
+ ss << ", Texture2D.PlaneSlice: " << srvDesc.Texture2D.PlaneSlice;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:
+ ss << ", Texture2DArray.ArraySize: " << srvDesc.Texture2DArray.ArraySize;
+ ss << ", Texture2DArray.FirstArraySlice: " << srvDesc.Texture2DArray.FirstArraySlice;
+ ss << ", Texture2DArray.MipLevels: " << srvDesc.Texture2DArray.MipLevels;
+ ss << ", Texture2DArray.MostDetailedMip: " << srvDesc.Texture2DArray.MostDetailedMip;
+ ss << ", Texture2DArray.PlaneSlice: " << srvDesc.Texture2DArray.PlaneSlice;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE2DMS:
+ // This structure is empty.
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:
+ ss << ", Texture2DMSArray.ArraySize: " << srvDesc.Texture2DMSArray.ArraySize;
+ ss << ", Texture2DMSArray.FirstArraySlice: "
+ << srvDesc.Texture2DMSArray.FirstArraySlice;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURE3D:
+ ss << ", Texture3D.MipLevels: " << srvDesc.Texture3D.MipLevels;
+ ss << ", Texture3D.MostDetailedMip: " << srvDesc.Texture3D.MostDetailedMip;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURECUBE:
+ ss << ", TextureCube.MipLevels: " << srvDesc.TextureCube.MipLevels;
+ ss << ", TextureCube.MostDetailedMip: " << srvDesc.TextureCube.MostDetailedMip;
+ break;
+ case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:
+ ss << ", TextureCubeArray.First2DArrayFace: "
+ << srvDesc.TextureCubeArray.First2DArrayFace;
+ ss << ", TextureCubeArray.NumCubes: " << srvDesc.TextureCubeArray.NumCubes;
+ ss << ", TextureCubeArray.MipLevels: " << srvDesc.TextureCubeArray.MipLevels;
+ ss << ", TextureCubeArray.MostDetailedMip: "
+ << srvDesc.TextureCubeArray.MostDetailedMip;
+ break;
+ case D3D11_SRV_DIMENSION_BUFFEREX:
+ ss << ", BufferEx.FirstElement: " << srvDesc.BufferEx.FirstElement;
+ ss << ", BufferEx.NumElements: " << srvDesc.BufferEx.NumElements;
+ ss << ", BufferEx.Flags: " << srvDesc.BufferEx.Flags;
+ break;
+ default:
+ break;
+ }
+ return ss.str();
+}
+
D3D11_COMPARISON_FUNC ToD3D11ComparisonFunc(wgpu::CompareFunction func) {
switch (func) {
case wgpu::CompareFunction::Never:
diff --git a/src/dawn/native/d3d11/UtilsD3D11.h b/src/dawn/native/d3d11/UtilsD3D11.h
index 07acfc5..f53c2d8 100644
--- a/src/dawn/native/d3d11/UtilsD3D11.h
+++ b/src/dawn/native/d3d11/UtilsD3D11.h
@@ -41,6 +41,8 @@
D3D11_COMPARISON_FUNC ToD3D11ComparisonFunc(wgpu::CompareFunction func);
void SetDebugName(Device* device, ID3D11DeviceChild* object, const char* prefix, std::string label);
bool IsDebugLayerEnabled(const ComPtr<ID3D11Device>& d3d11Device);
+std::string SRVCreationStr(ID3D11Resource* resource,
+ const D3D11_SHADER_RESOURCE_VIEW_DESC1& srvDesc);
} // namespace dawn::native::d3d11