Hi All,
I'm attempting to get --in-process-gpu working on Windows in my Content API-based application (Windows 8.1, Chromium master revision 12bfc336 (#338390)) [1]. I expect to run into multiple issues since this code path is not tested with Chrome on Windows due to the multi-DLL design disabling use of this flag [2].
Here's my first issue:
I'm currently hitting the NOTREACHED() in SamplerTypeFromTextureTarget [3]. I believe this is because the ResourceProvider::Resource does not have a |target| due to |is_software| being true for the associated TransferableResource [4]. Should the GLRenderer::DrawContentQuadNoAA code path be triggered when |is_software| is true? How should I go about further debugging this issue?
Thanks,
Marshall
[1] For the curious, the eventual goal is to implement a custom OutputSurface that renders into a GL/D3D texture provided by the embedder. The untested theory is that using in-process-gpu will provide better performance then disabling the GPU completely and using the software code path.
[3] Call stack for NOTREACHED:
libcef.dll!logging::LogMessage::~LogMessage() Line 642 C++
libcef.dll!cc::`anonymous namespace'::SamplerTypeFromTextureTarget(unsigned int target) Line 102 C++
libcef.dll!cc::GLRenderer::DrawContentQuadNoAA(const cc::DirectRenderer::DrawingFrame * frame, const cc::ContentDrawQuadBase * quad, unsigned int resource_id, const gfx::QuadF * clip_region) Line 1879 C++
libcef.dll!cc::GLRenderer::DrawContentQuad(const cc::DirectRenderer::DrawingFrame * frame, const cc::ContentDrawQuadBase * quad, unsigned int resource_id, const gfx::QuadF * clip_region) Line 1735 C++
libcef.dll!cc::GLRenderer::DrawTileQuad(const cc::DirectRenderer::DrawingFrame * frame, const cc::TileDrawQuad * quad, const gfx::QuadF * clip_region) Line 1704 C++
libcef.dll!cc::GLRenderer::DoDrawQuad(cc::DirectRenderer::DrawingFrame * frame, const cc::DrawQuad * quad, const gfx::QuadF * clip_region) Line 559 C++
libcef.dll!cc::DirectRenderer::DrawRenderPass(cc::DirectRenderer::DrawingFrame * frame, const cc::RenderPass * render_pass) Line 477 C++
libcef.dll!cc::DirectRenderer::DrawFrame(cc::ScopedPtrVector<cc::RenderPass> * render_passes_in_draw_order, float device_scale_factor, const gfx::Rect & device_viewport_rect, const gfx::Rect & device_clip_rect, bool disable_picture_quad_image_filtering) Line 235 C++
libcef.dll!cc::Display::DrawAndSwap() Line 199 C++
libcef.dll!cc::DisplayScheduler::DrawAndSwap() Line 104 C++
libcef.dll!cc::DisplayScheduler::AttemptDrawAndSwap() Line 254 C++
libcef.dll!cc::DisplayScheduler::OnBeginFrameDeadline() Line 270 C++
[4] Call stack for ResourceProvider::Resource creation:
libcef.dll!cc::ResourceProvider::Resource::Resource(const gpu::Mailbox & bitmap_id, const gfx::Size & size, cc::ResourceProvider::Resource::Origin origin, unsigned int filter, int wrap_mode) Line 379 C++
> libcef.dll!cc::ResourceProvider::ReceiveFromChild(int child, const std::vector<cc::TransferableResource,std::allocator<cc::TransferableResource> > & resources) Line 1265 C++
libcef.dll!cc::SurfaceAggregator::ValidateAndCalculateDamageRect(cc::SurfaceId surface_id) Line 443 C++
libcef.dll!cc::SurfaceAggregator::ValidateAndCalculateDamageRect(cc::SurfaceId surface_id) Line 510 C++
libcef.dll!cc::SurfaceAggregator::Aggregate(cc::SurfaceId surface_id) Line 536 C++
libcef.dll!cc::Display::DrawAndSwap() Line 156 C++
libcef.dll!cc::DisplayScheduler::DrawAndSwap() Line 104 C++
libcef.dll!cc::DisplayScheduler::AttemptDrawAndSwap() Line 254 C++
libcef.dll!cc::DisplayScheduler::OnBeginFrameDeadline() Line 270 C++