auto resource_provider = std::make_unique<viz::DisplayResourceProviderGL>(
output_surface_->context_provider(), false /* enable_shared_images */);
- resource_provider_ = std::move(resource_provider);
- child_id_ = resource_provider_->CreateChild(
+ child_id_ = resource_provider->CreateChild(
base::BindRepeating(&EvasGLDelegatedFrameHost::UnrefResources,
weak_ptr_factory_.GetWeakPtr()),
viz::SurfaceId());
renderer_ = std::make_unique<viz::GLRenderer>(
&settings_, &debug_settings_, output_surface_.get(),
resource_provider.get(), nullptr, nullptr);
+ resource_provider_ = std::move(resource_provider);
renderer_->Initialize();
renderer_->SetVisible(true);
is_initialized_ = true;
}
+void EvasGLDelegatedFrameHost::CreateAggregatedRenderPassList(
+ const viz::CompositorRenderPassList& source_pass_list) {
+ render_pass_list_.clear();
+ for (const auto& source : source_pass_list) {
+ size_t sqs_size = source->shared_quad_state_list.size();
+ size_t dq_size = source->quad_list.size();
+ auto copy_pass =
+ std::make_unique<viz::AggregatedRenderPass>(sqs_size, dq_size);
+ copy_pass->SetAll(
+ render_pass_id_generator_.GenerateNextId(), source->output_rect,
+ source->damage_rect, source->transform_to_root_target, source->filters,
+ source->backdrop_filters, source->backdrop_filter_bounds,
+ gfx::ContentColorUsage::kSRGB, source->has_transparent_background,
+ source->cache_render_pass, source->has_damage_from_contributing_content,
+ source->generate_mipmap);
+
+ if (source->shared_quad_state_list.empty()) {
+ DCHECK(source->quad_list.empty());
+ render_pass_list_.push_back(std::move(copy_pass));
+ continue;
+ }
+
+ viz::SharedQuadStateList::ConstIterator sqs_iter =
+ source->shared_quad_state_list.begin();
+ viz::SharedQuadState* copy_shared_quad_state =
+ copy_pass->CreateAndAppendSharedQuadState();
+ *copy_shared_quad_state = **sqs_iter;
+ for (auto* quad : source->quad_list) {
+ while (quad->shared_quad_state != *sqs_iter) {
+ ++sqs_iter;
+ DCHECK(sqs_iter != source->shared_quad_state_list.end());
+ copy_shared_quad_state = copy_pass->CreateAndAppendSharedQuadState();
+ *copy_shared_quad_state = **sqs_iter;
+ }
+ DCHECK(quad->shared_quad_state == *sqs_iter);
+
+ copy_pass->CopyFromAndAppendDrawQuad(quad);
+ }
+ render_pass_list_.push_back(std::move(copy_pass));
+ }
+}
+
void EvasGLDelegatedFrameHost::SwapDelegatedFrame(
const viz::LocalSurfaceId& local_surface_id,
viz::CompositorFrame frame) {
size_t reserve_size = frame.resource_list.size();
resources_in_frame.reserve(reserve_size);
for (const auto& pass : frame.render_pass_list) {
- for (const auto& quad : pass->quad_list) {
+ for (auto* quad : pass->quad_list) {
for (viz::ResourceId& resource_id : quad->resources) {
auto it = resource_map.find(resource_id);
if (it == resource_map.end()) {
// [TODO] it does not need to invoke evas_object_image_pixels_dirty_set()
// when |invalid_frame| is true.
if (!invalid_frame)
- render_pass_list_ = std::move(frame.render_pass_list);
+ CreateAggregatedRenderPassList(std::move(frame.render_pass_list));
ClearRenderPasses(resources_in_frame);
display::DeviceDisplayInfoEfl display_info;
- viz::CompositorRenderPassList render_pass_list;
+ viz::AggregatedRenderPassList render_pass_list;
for (const auto& source : render_pass_list_)
render_pass_list.push_back(source->DeepCopy());
gfx::Size device_viewport_size = gfx::Size(bounds.width(), bounds.height());
- viz::CompositorRenderPass* root_render_pass = render_pass_list.back().get();
+ viz::AggregatedRenderPass* root_render_pass = render_pass_list.back().get();
root_render_pass->output_rect.set_width(bounds.width());
root_render_pass->output_rect.set_height(bounds.height());
}
TransformRootRenderPass(root_render_pass, bounds, rotation);
}
-#if !defined(EWK_BRINGUP) // FIXME: m94 bringup
+
renderer_->DecideRenderPassAllocationsForFrame(render_pass_list);
// Draw frame by compositing render passes.
renderer_->DrawFrame(&render_pass_list, display_info.GetDIPScale(),
- device_viewport_size, gfx::DisplayColorSpaces());
-#endif
+ device_viewport_size, gfx::DisplayColorSpaces(),
+ viz::SurfaceDamageRectList());
}
void EvasGLDelegatedFrameHost::UnrefResources(
}
void EvasGLDelegatedFrameHost::TransformRootRenderPass(
- viz::CompositorRenderPass* root_render_pass,
+ viz::AggregatedRenderPass* root_render_pass,
const gfx::Rect& bounds,
int rotation) {
double scale_x, scale_y, m01, m10, translate_x, translate_y, new_scale_x,
new_scale_y, new_m01, new_m10, new_translate_x, new_translate_y;
- for (const auto& shared_quad_state :
+ for (const auto* shared_quad_state :
root_render_pass->shared_quad_state_list) {
// Rotate model by matrix transformation
skia::Matrix44 matrix =
#include "base/memory/weak_ptr.h"
#include "components/viz/common/display/renderer_settings.h"
+#include "components/viz/common/quads/aggregated_render_pass.h"
#include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/service/display/direct_renderer.h"
#include "content/common/content_export.h"
void RenderDelegatedFrame(const gfx::Rect& bounds);
private:
+ void CreateAggregatedRenderPassList(
+ const viz::CompositorRenderPassList& source_pass_list);
void UnrefResources(std::vector<viz::ReturnedResource> resources);
bool ShouldTransformRootRenderPass(int rotation);
- void TransformRootRenderPass(viz::CompositorRenderPass* root_render_pass,
+ void TransformRootRenderPass(viz::AggregatedRenderPass* root_render_pass,
const gfx::Rect& bounds,
int rotation);
void ClearRenderPasses(
viz::DebugRendererSettings debug_settings_;
std::unique_ptr<viz::DisplayResourceProvider> resource_provider_;
int child_id_;
- viz::CompositorRenderPassList render_pass_list_;
+ viz::AggregatedRenderPassId::Generator render_pass_id_generator_;
+ viz::AggregatedRenderPassList render_pass_list_;
viz::ResourceIdSet resources_in_frame_;
std::vector<viz::ReturnedResource> returned_resources_;
std::unique_ptr<viz::DirectRenderer> renderer_;