summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineD3D11
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-12-27 16:52:19 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-12-27 16:52:19 +0000
commit3452eb6fe6c1a7f4994652e898d839d4e3fda7a3 (patch)
tree6437cdd0548f9fa03fb2cfd36a5c4bd43a79cedb /Graphics/GraphicsEngineD3D11
parentFixed shader version when compiling glsl in Vulkan on Mac (diff)
downloadDiligentCore-3452eb6fe6c1a7f4994652e898d839d4e3fda7a3.tar.gz
DiligentCore-3452eb6fe6c1a7f4994652e898d839d4e3fda7a3.zip
Fix for memory access violation when reading debug name from d3d11 textures
Diffstat (limited to 'Graphics/GraphicsEngineD3D11')
-rw-r--r--Graphics/GraphicsEngineD3D11/src/Texture1D_D3D11.cpp69
-rw-r--r--Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp67
-rw-r--r--Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp66
3 files changed, 117 insertions, 85 deletions
diff --git a/Graphics/GraphicsEngineD3D11/src/Texture1D_D3D11.cpp b/Graphics/GraphicsEngineD3D11/src/Texture1D_D3D11.cpp
index e7a2d679..1a1da97f 100644
--- a/Graphics/GraphicsEngineD3D11/src/Texture1D_D3D11.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/Texture1D_D3D11.cpp
@@ -70,38 +70,49 @@ Texture1D_D3D11 :: Texture1D_D3D11(IReferenceCounters* pRefCounters,
}
}
-static TextureDesc TexDescFromD3D11Texture1D(ID3D11Texture1D *pd3d11Texture)
+namespace
{
- D3D11_TEXTURE1D_DESC D3D11TexDesc;
- pd3d11Texture->GetDesc(&D3D11TexDesc);
-
- TextureDesc TexDesc;
- UINT DataSize = 0;
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
- std::vector<char> ObjectName;
- if (DataSize > 0)
+class TexDescFromD3D11Texture1D
+{
+public:
+ TextureDesc operator() (ID3D11Texture1D* pd3d11Texture)
{
- ObjectName.resize(DataSize+1); // Null terminator is not reported in DataSize
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
- TexDesc.Name = ObjectName.data();
+ D3D11_TEXTURE1D_DESC D3D11TexDesc;
+ pd3d11Texture->GetDesc(&D3D11TexDesc);
+
+ TextureDesc TexDesc;
+
+ UINT DataSize = 0;
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
+ if (DataSize > 0)
+ {
+ ObjectName.resize(DataSize+1); // Null terminator is not reported in DataSize
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
+ TexDesc.Name = ObjectName.data();
+ }
+ else
+ TexDesc.Name = "Texture1D_D3D11 from native d3d11 texture";
+
+ TexDesc.Type = D3D11TexDesc.ArraySize > 1 ? RESOURCE_DIM_TEX_1D_ARRAY : RESOURCE_DIM_TEX_1D;
+ TexDesc.Width = Uint32{D3D11TexDesc.Width};
+ TexDesc.Height = 1;
+ TexDesc.ArraySize = Uint32{D3D11TexDesc.ArraySize};
+ TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
+ TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
+ TexDesc.SampleCount = 1;
+ TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
+ TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
+ TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
+ TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
+
+ return TexDesc;
}
- else
- TexDesc.Name = "Texture1D_D3D11 from native d3d11 texture";
-
- TexDesc.Type = D3D11TexDesc.ArraySize > 1 ? RESOURCE_DIM_TEX_1D_ARRAY : RESOURCE_DIM_TEX_1D;
- TexDesc.Width = Uint32{D3D11TexDesc.Width};
- TexDesc.Height = 1;
- TexDesc.ArraySize = Uint32{D3D11TexDesc.ArraySize};
- TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
- TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
- TexDesc.SampleCount = 1;
- TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
- TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
- TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
- TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
-
- return TexDesc;
+
+private:
+ std::vector<char> ObjectName;
+};
+
}
Texture1D_D3D11 :: Texture1D_D3D11(IReferenceCounters* pRefCounters,
@@ -109,7 +120,7 @@ Texture1D_D3D11 :: Texture1D_D3D11(IReferenceCounters* pRefCounters,
RenderDeviceD3D11Impl* pDeviceD3D11,
RESOURCE_STATE InitialState,
ID3D11Texture1D* pd3d11Texture) :
- TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture1D(pd3d11Texture), TextureData())
+ TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture1D{}(pd3d11Texture), TextureData{})
{
m_pd3d11Texture = pd3d11Texture;
SetState(InitialState);
diff --git a/Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp b/Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp
index 91d264a7..c3e43bc3 100644
--- a/Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp
@@ -75,37 +75,48 @@ Texture2D_D3D11 :: Texture2D_D3D11(IReferenceCounters* pRefCounters,
}
}
-static TextureDesc TexDescFromD3D11Texture2D(ID3D11Texture2D *pd3d11Texture)
+namespace
{
- D3D11_TEXTURE2D_DESC D3D11TexDesc;
- pd3d11Texture->GetDesc(&D3D11TexDesc);
- TextureDesc TexDesc;
- UINT DataSize = 0;
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
- std::vector<char> ObjectName;
- if (DataSize > 0)
+class TexDescFromD3D11Texture2D
+{
+public:
+ TextureDesc operator ()(ID3D11Texture2D* pd3d11Texture)
{
- ObjectName.resize(DataSize+1); // Null terminator is not reported in DataSize
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
- TexDesc.Name = ObjectName.data();
+ D3D11_TEXTURE2D_DESC D3D11TexDesc;
+ pd3d11Texture->GetDesc(&D3D11TexDesc);
+
+ TextureDesc TexDesc;
+ UINT DataSize = 0;
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
+ if (DataSize > 0)
+ {
+ ObjectName.resize(DataSize+1); // Null terminator is not reported in DataSize
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
+ TexDesc.Name = ObjectName.data();
+ }
+ else
+ TexDesc.Name = "Texture2D_D3D11 from native d3d11 texture";
+
+ TexDesc.Type = D3D11TexDesc.ArraySize > 1 ? RESOURCE_DIM_TEX_2D_ARRAY : RESOURCE_DIM_TEX_2D;
+ TexDesc.Width = Uint32{D3D11TexDesc.Width};
+ TexDesc.Height = Uint32{D3D11TexDesc.Height};
+ TexDesc.ArraySize = Uint32{D3D11TexDesc.ArraySize};
+ TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
+ TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
+ TexDesc.SampleCount = Uint32{D3D11TexDesc.SampleDesc.Count};
+ TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
+ TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
+ TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
+ TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
+
+ return TexDesc;
}
- else
- TexDesc.Name = "Texture2D_D3D11 from native d3d11 texture";
-
- TexDesc.Type = D3D11TexDesc.ArraySize > 1 ? RESOURCE_DIM_TEX_2D_ARRAY : RESOURCE_DIM_TEX_2D;
- TexDesc.Width = Uint32{D3D11TexDesc.Width};
- TexDesc.Height = Uint32{D3D11TexDesc.Height};
- TexDesc.ArraySize = Uint32{D3D11TexDesc.ArraySize};
- TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
- TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
- TexDesc.SampleCount = Uint32{ D3D11TexDesc.SampleDesc.Count };
- TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
- TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
- TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
- TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
-
- return TexDesc;
+
+private:
+ std::vector<char> ObjectName;
+};
+
}
Texture2D_D3D11 :: Texture2D_D3D11(IReferenceCounters* pRefCounters,
@@ -113,7 +124,7 @@ Texture2D_D3D11 :: Texture2D_D3D11(IReferenceCounters* pRefCounters,
RenderDeviceD3D11Impl* pDeviceD3D11,
RESOURCE_STATE InitialState,
ID3D11Texture2D* pd3d11Texture) :
- TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture2D(pd3d11Texture), TextureData())
+ TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture2D{}(pd3d11Texture), TextureData{})
{
m_pd3d11Texture = pd3d11Texture;
SetState(InitialState);
diff --git a/Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp b/Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp
index 3a6e9051..591be330 100644
--- a/Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp
@@ -71,37 +71,47 @@ Texture3D_D3D11 :: Texture3D_D3D11(IReferenceCounters* pRefCounters,
}
}
-static TextureDesc TexDescFromD3D11Texture3D(ID3D11Texture3D* pd3d11Texture)
+namespace
{
- D3D11_TEXTURE3D_DESC D3D11TexDesc;
- pd3d11Texture->GetDesc(&D3D11TexDesc);
- TextureDesc TexDesc;
- UINT DataSize = 0;
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
- std::vector<char> ObjectName;
- if (DataSize > 0)
+class TexDescFromD3D11Texture3D
+{
+public:
+ TextureDesc operator() (ID3D11Texture3D* pd3d11Texture)
{
- ObjectName.resize(DataSize+1); // Null terminator is not reported in
- pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
- TexDesc.Name = ObjectName.data();
+ D3D11_TEXTURE3D_DESC D3D11TexDesc;
+ pd3d11Texture->GetDesc(&D3D11TexDesc);
+
+ TextureDesc TexDesc;
+ UINT DataSize = 0;
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, nullptr);
+ if (DataSize > 0)
+ {
+ ObjectName.resize(DataSize+1); // Null terminator is not reported in
+ pd3d11Texture->GetPrivateData(WKPDID_D3DDebugObjectName, &DataSize, ObjectName.data());
+ TexDesc.Name = ObjectName.data();
+ }
+ else
+ TexDesc.Name = "Texture3D_D3D11 from native d3d11 texture";
+
+ TexDesc.Type = RESOURCE_DIM_TEX_3D;
+ TexDesc.Width = Uint32{D3D11TexDesc.Width};
+ TexDesc.Height = Uint32{D3D11TexDesc.Height};
+ TexDesc.Depth = Uint32{D3D11TexDesc.Depth};
+ TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
+ TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
+ TexDesc.SampleCount = 1;
+ TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
+ TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
+ TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
+ TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
+
+ return TexDesc;
}
- else
- TexDesc.Name = "Texture3D_D3D11 from native d3d11 texture";
-
- TexDesc.Type = RESOURCE_DIM_TEX_3D;
- TexDesc.Width = Uint32{D3D11TexDesc.Width};
- TexDesc.Height = Uint32{D3D11TexDesc.Height};
- TexDesc.Depth = Uint32{D3D11TexDesc.Depth};
- TexDesc.Format = DXGI_FormatToTexFormat(D3D11TexDesc.Format);
- TexDesc.MipLevels = Uint32{D3D11TexDesc.MipLevels};
- TexDesc.SampleCount = 1;
- TexDesc.Usage = D3D11UsageToUsage(D3D11TexDesc.Usage);
- TexDesc.BindFlags = D3D11BindFlagsToBindFlags(D3D11TexDesc.BindFlags);
- TexDesc.CPUAccessFlags = D3D11CPUAccessFlagsToCPUAccessFlags(D3D11TexDesc.CPUAccessFlags);
- TexDesc.MiscFlags = D3D11MiscFlagsToMiscTextureFlags(D3D11TexDesc.MiscFlags);
-
- return TexDesc;
+private:
+ std::vector<char> ObjectName;
+};
+
}
Texture3D_D3D11 :: Texture3D_D3D11(IReferenceCounters* pRefCounters,
@@ -109,7 +119,7 @@ Texture3D_D3D11 :: Texture3D_D3D11(IReferenceCounters* pRefCounters,
RenderDeviceD3D11Impl* pDeviceD3D11,
RESOURCE_STATE InitialState,
ID3D11Texture3D* pd3d11Texture) :
- TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture3D(pd3d11Texture), TextureData())
+ TextureBaseD3D11(pRefCounters, TexViewObjAllocator, pDeviceD3D11, TexDescFromD3D11Texture3D{}(pd3d11Texture), TextureData{})
{
m_pd3d11Texture = pd3d11Texture;
SetState(InitialState);