use create_dumb.size as size of buffer
According to `man drm-memory` , "The size field contains the absolute size in bytes of the buffer. This can normally also be computed with (height * pitch + width) * bpp / 4". Which suggests that we should use the .size field to allocate buffer. Test: th Test: go to recovery, make sure contents are properly displayed. BYPASS_INCLUSIVE_LANGUAGE_REASON=commit message referenced "man", which is a linux command for lookup manual pages. Change-Id: I512be6b7d493ef1783f2b7f746e279bc1dfe65f2
This commit is contained in:
parent
9df2d8e6bd
commit
90f783f3ca
1 changed files with 12 additions and 2 deletions
|
@ -105,6 +105,8 @@ std::unique_ptr<GRSurfaceDrm> GRSurfaceDrm::Create(int drm_fd, int width, int he
|
|||
perror("Failed to DRM_IOCTL_MODE_CREATE_DUMB");
|
||||
return nullptr;
|
||||
}
|
||||
printf("Allocating buffer with resolution %d x %d pitch: %d bpp: %d, size: %llu\n", width, height,
|
||||
create_dumb.pitch, create_dumb.bpp, create_dumb.size);
|
||||
|
||||
// Cannot use std::make_unique to access non-public ctor.
|
||||
auto surface = std::unique_ptr<GRSurfaceDrm>(new GRSurfaceDrm(
|
||||
|
@ -128,13 +130,14 @@ std::unique_ptr<GRSurfaceDrm> GRSurfaceDrm::Create(int drm_fd, int width, int he
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
auto mmapped = mmap(nullptr, surface->height * surface->row_bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED, drm_fd, map_dumb.offset);
|
||||
auto mmapped =
|
||||
mmap(nullptr, create_dumb.size, PROT_READ | PROT_WRITE, MAP_SHARED, drm_fd, map_dumb.offset);
|
||||
if (mmapped == MAP_FAILED) {
|
||||
perror("Failed to mmap()");
|
||||
return nullptr;
|
||||
}
|
||||
surface->mmapped_buffer_ = static_cast<uint8_t*>(mmapped);
|
||||
printf("Framebuffer of size %llu allocated @ %p\n", create_dumb.size, surface->mmapped_buffer_);
|
||||
return surface;
|
||||
}
|
||||
|
||||
|
@ -260,9 +263,16 @@ drmModeConnector* MinuiBackendDrm::FindMainMonitor(int fd, drmModeRes* resources
|
|||
/* If we still didn't find a connector, give up and return. */
|
||||
if (!main_monitor_connector) return nullptr;
|
||||
|
||||
for (int modes = 0; modes < main_monitor_connector->count_modes; modes++) {
|
||||
printf("Display Mode %d resolution: %d x %d @ %d FPS\n", modes,
|
||||
main_monitor_connector->modes[modes].hdisplay,
|
||||
main_monitor_connector->modes[modes].vdisplay,
|
||||
main_monitor_connector->modes[modes].vrefresh);
|
||||
}
|
||||
*mode_index = 0;
|
||||
for (int modes = 0; modes < main_monitor_connector->count_modes; modes++) {
|
||||
if (main_monitor_connector->modes[modes].type & DRM_MODE_TYPE_PREFERRED) {
|
||||
printf("Choosing display mode #%d\n", modes);
|
||||
*mode_index = modes;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue