Skip to content

Adding a pixel shader to Atlas engine explodes #13899

@zadjii-msft

Description

@zadjii-msft

On main + Dev Build, so useAtlas:true by default.

            {
                "background": "#011424",
                "colorScheme": "Campbell Powershell",
                "commandline": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -nologo",
                "font":
                {
                    "face": "Cascadia Code",
                    "weight": "light"
                },
                "hidden": false,
                "name": "PowerShell",
                "opacity": 50,
                "unfocusedAppearance":
                {
                    "background": "#162029",
                    "experimental.pixelShaderPath": "C:\\Users\\migrie\\dev\\public\\terminal\\samples\\PixelShaders\\Grayscale.hlsl",
                },
                "useAcrylic": true,
            },

(modify path as necessary)

stack
     Microsoft.Terminal.Control.dll!std::_Iterator_base12::_Orphan_me_unlocked_v3() Line 1204    C++
     Microsoft.Terminal.Control.dll!std::_Iterator_base12::_Orphan_me_locked_v3() Line 1217    C++
     Microsoft.Terminal.Control.dll!std::_Iterator_base12::~_Iterator_base12() Line 1125    C++
     Microsoft.Terminal.Control.dll!std::_List_unchecked_const_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>,std::_Iterator_base12>::~_List_unchecked_const_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>,std::_Iterator_base12>()    C++
     Microsoft.Terminal.Control.dll!std::_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>::~_List_const_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>()    C++
     Microsoft.Terminal.Control.dll!std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>::~_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>()    C++
     Microsoft.Terminal.Control.dll!std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>::`scalar deleting destructor'(unsigned int)    C++
     Microsoft.Terminal.Control.dll!std::_Destroy_in_place<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>>(std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>> & _Obj) Line 302    C++
     Microsoft.Terminal.Control.dll!std::destroy_n<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>> *,unsigned __int64>(std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>> * _First, const unsigned __int64 _Count_raw) Line 578    C++
>    Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8>::destroy() Line 321    C++
     Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8>::operator=(Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8> && other) Line 230    C++
     [External Code]    
     Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::_createResources() Line 543    C++
     Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::GetSwapChainHandle() Line 309    C++
     Microsoft.Terminal.Control.dll!winrt::Microsoft::Terminal::Control::implementation::ControlCore::SwapChainHandle() Line 1570    C++
     Microsoft.Terminal.Control.dll!winrt::impl::produce<winrt::Microsoft::Terminal::Control::implementation::ControlCore,winrt::Microsoft::Terminal::Control::IControlCore>::get_SwapChainHandle(unsigned __int64 * value) Line 2031    C++
     Microsoft.Terminal.Control.dll!winrt::impl::consume_Microsoft_Terminal_Control_IControlCore<winrt::Microsoft::Terminal::Control::IControlCore>::SwapChainHandle() Line 122    C++
     Microsoft.Terminal.Control.dll!winrt::Microsoft::Terminal::Control::implementation::TermControl::RenderEngineSwapChainChanged(winrt::Windows::Foundation::IInspectable __coro_heap_ellision, winrt::Windows::Foundation::IInspectable __coro_frame_ptr) Line 745    C++

I saw another that looked like:

Details
 	ucrtbased.dll!00007ffc27cf024e()	Unknown
 	Microsoft.Terminal.Control.dll!operator delete(void * block) Line 38	C++
>	Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8>::deallocate(std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>> * data) Line 315	C++
 	Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8>::destroy() Line 321	C++
 	Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8>::operator=(Microsoft::Console::Render::AtlasEngine::Buffer<std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<Microsoft::Console::Render::AtlasEngine::AtlasKey,Microsoft::Console::Render::AtlasEngine::AtlasValue>>>>,8> && other) Line 230	C++
 	[External Code]	
 	Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::_createResources() Line 543	C++
 	Microsoft.Terminal.Control.dll!Microsoft::Console::Render::AtlasEngine::GetSwapChainHandle() Line 309	C++
 	Microsoft.Terminal.Control.dll!winrt::Microsoft::Terminal::Control::implementation::ControlCore::SwapChainHandle() Line 1570	C++
 	Microsoft.Terminal.Control.dll!winrt::impl::produce<winrt::Microsoft::Terminal::Control::implementation::ControlCore,winrt::Microsoft::Terminal::Control::IControlCore>::get_SwapChainHandle(unsigned __int64 * value) Line 2031	C++
 	Microsoft.Terminal.Control.dll!winrt::impl::consume_Microsoft_Terminal_Control_IControlCore<winrt::Microsoft::Terminal::Control::IControlCore>::SwapChainHandle() Line 122	C++
 	Microsoft.Terminal.Control.dll!winrt::Microsoft::Terminal::Control::implementation::TermControl::RenderEngineSwapChainChanged(winrt::Windows::Foundation::IInspectable __coro_heap_ellision, winrt::Windows::Foundation::IInspectable __coro_frame_ptr) Line 745	C++
 	[External Code]	
 	Microsoft.Terminal.Control.dll!wil::details::dispatcher_handler::Complete() Line 88	C++

looks like we're calling Buffer::operator=(), calling destroy() on this, and this was null, cause all the members of _r were null...

Metadata

Metadata

Assignees

Labels

Area-AtlasEngineIssue-BugIt either shouldn't be doing this or needs an investigation.Needs-Tag-FixDoesn't match tag requirementsProduct-TerminalThe new Windows Terminal.Severity-BlockingWe won't ship a release like this! No-siree.Severity-CrashCrashes are real bad news.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions