diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-12-27 16:52:19 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-12-27 16:52:19 +0000 |
| commit | 3452eb6fe6c1a7f4994652e898d839d4e3fda7a3 (patch) | |
| tree | 6437cdd0548f9fa03fb2cfd36a5c4bd43a79cedb /Graphics/GraphicsEngineD3D11 | |
| parent | Fixed shader version when compiling glsl in Vulkan on Mac (diff) | |
| download | DiligentCore-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.cpp | 69 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineD3D11/src/Texture2D_D3D11.cpp | 67 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineD3D11/src/Texture3D_D3D11.cpp | 66 |
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); |
