~ubuntu-branches/ubuntu/vivid/mir/vivid

« back to all changes in this revision

Viewing changes to src/platform/graphics/android/hwc_layerlist.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release
  • Date: 2014-02-04 14:49:07 UTC
  • mto: This revision was merged to the branch mainline in revision 61.
  • Revision ID: package-import@ubuntu.com-20140204144907-o3ruhix0ey26lchl
Tags: upstream-0.1.4+14.04.20140204
ImportĀ upstreamĀ versionĀ 0.1.4+14.04.20140204

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
namespace mga=mir::graphics::android;
27
27
namespace geom=mir::geometry;
28
28
 
29
 
mga::HWCLayer& mga::HWCLayer::operator=(HWCLayer const& layer)
30
 
{
31
 
    memcpy(this, &layer, sizeof(HWCLayer));
32
 
    this->visibleRegionScreen = {1, &this->visible_rect};
33
 
    return *this;
34
 
}
35
 
 
36
 
mga::HWCLayer::HWCLayer(HWCLayer const& layer)
37
 
{
38
 
    memcpy(this, &layer, sizeof(HWCLayer));
39
 
    this->visibleRegionScreen = {1, &this->visible_rect};
40
 
}
41
 
 
42
 
mga::HWCLayer::HWCLayer(int type, buffer_handle_t buffer_handle, int width, int height, int layer_flags)
43
 
{
44
 
    compositionType = type;
45
 
    hints = 0;
46
 
    flags = layer_flags;
47
 
    transform = 0;
48
 
    blending = HWC_BLENDING_NONE;
49
 
    //TODO: acquireFenceFd should be buffer.fence()
50
 
    acquireFenceFd = -1;
51
 
    releaseFenceFd = -1;
52
 
 
53
 
    visible_rect.top = 0;
54
 
    visible_rect.left = 0;
55
 
    visible_rect.bottom = height;
56
 
    visible_rect.right = width;
57
 
    sourceCrop = visible_rect;
58
 
    displayFrame = visible_rect;
59
 
    visibleRegionScreen.numRects=1;
60
 
    visibleRegionScreen.rects= &visible_rect;
61
 
    handle = buffer_handle;
62
 
 
63
 
    memset(&reserved, 0, sizeof(reserved));
64
 
}
65
 
 
66
 
mga::FramebufferLayer::FramebufferLayer()
67
 
    : HWCLayer(HWC_FRAMEBUFFER_TARGET, nullptr, 0, 0, 0)
68
 
{
69
 
}
70
 
 
71
 
mga::FramebufferLayer::FramebufferLayer(mg::NativeBuffer const& buffer)
72
 
    : HWCLayer(HWC_FRAMEBUFFER_TARGET, buffer.handle(),
73
 
               buffer.anwb()->width, buffer.anwb()->height, 0)
74
 
{
75
 
}
76
 
 
77
 
mga::CompositionLayer::CompositionLayer(int layer_flags)
78
 
    : HWCLayer(HWC_FRAMEBUFFER, nullptr, 0, 0, layer_flags)
79
 
{
80
 
}
81
 
 
82
 
mga::CompositionLayer::CompositionLayer(mg::NativeBuffer const& buffer, int layer_flags)
83
 
    : HWCLayer(HWC_FRAMEBUFFER, buffer.handle(),
84
 
               buffer.anwb()->width, buffer.anwb()->height, layer_flags)
85
 
{
86
 
}
87
 
 
88
29
mga::LayerList::LayerList(std::initializer_list<HWCLayer> const& layer_list)
89
30
{
90
31
    auto struct_size = sizeof(hwc_display_contents_1_t) + sizeof(hwc_layer_1_t)*(layer_list.size());
109
50
 
110
51
void mga::LayerList::set_fb_target(std::shared_ptr<NativeBuffer> const& native_buffer)
111
52
{
112
 
    auto fb_position = hwc_representation->numHwLayers - 1;
113
 
 
114
 
    if (hwc_representation->hwLayers[fb_position].compositionType == HWC_FRAMEBUFFER_TARGET)
 
53
    if (hwc_representation->numHwLayers == 2)
115
54
    {
116
 
        hwc_representation->hwLayers[fb_position] = mga::FramebufferLayer(*native_buffer);
117
 
        hwc_representation->hwLayers[fb_position].acquireFenceFd = native_buffer->copy_fence();
 
55
        if (hwc_representation->hwLayers[0].flags == HWC_SKIP_LAYER)
 
56
        {
 
57
            hwc_representation->hwLayers[0] = mga::ForceGLLayer(*native_buffer);
 
58
        }
 
59
 
 
60
        if (hwc_representation->hwLayers[1].compositionType == HWC_FRAMEBUFFER_TARGET)
 
61
        {
 
62
            hwc_representation->hwLayers[1] = mga::FramebufferLayer(*native_buffer);
 
63
            hwc_representation->hwLayers[1].acquireFenceFd = native_buffer->copy_fence();
 
64
        }
118
65
    }
119
66
}
120
67