15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/ozone/platform/dri/gbm_buffer_base.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <gbm.h> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/ozone/platform/dri/dri_wrapper.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace ui { 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Pixel configuration for the current buffer format. 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// TODO(dnicoara) These will need to change once we query the hardware for 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// supported configurations. 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const uint8_t kColorDepth = 24; 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const uint8_t kPixelDepth = 32; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GbmBufferBase::GbmBufferBase(DriWrapper* dri, gbm_bo* bo, bool scanout) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : dri_(dri), bo_(bo), framebuffer_(0) { 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (scanout && !dri_->AddFramebuffer(gbm_bo_get_width(bo), 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gbm_bo_get_height(bo), 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kColorDepth, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kPixelDepth, 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gbm_bo_get_stride(bo), 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gbm_bo_get_handle(bo).u32, 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &framebuffer_)) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LOG(ERROR) << "Failed to register buffer"; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GbmBufferBase::~GbmBufferBase() { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (framebuffer_) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dri_->RemoveFramebuffer(framebuffer_); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)uint32_t GbmBufferBase::GetFramebufferId() const { 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return framebuffer_; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)uint32_t GbmBufferBase::GetHandle() const { 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gbm_bo_get_handle(bo_).u32; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gfx::Size GbmBufferBase::GetSize() const { 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gfx::Size(gbm_bo_get_width(bo_), gbm_bo_get_height(bo_)); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace ui 54