android-2.1_r1 snapshot
This commit is contained in:
parent
81cd37b750
commit
44311757be
@ -42,8 +42,10 @@
|
||||
|
||||
#if defined(COPYBIT_MSM7K)
|
||||
#define MAX_SCALE_FACTOR (4)
|
||||
#define MAX_DIMENSION (4096)
|
||||
#elif defined(COPYBIT_QSD8K)
|
||||
#define MAX_SCALE_FACTOR (8)
|
||||
#define MAX_DIMENSION (2048)
|
||||
#else
|
||||
#error "Unsupported MDP version"
|
||||
#endif
|
||||
@ -366,6 +368,12 @@ static int stretch_copybit(
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (src->w > MAX_DIMENSION || src->h > MAX_DIMENSION)
|
||||
return -EINVAL;
|
||||
|
||||
if (dst->w > MAX_DIMENSION || dst->h > MAX_DIMENSION)
|
||||
return -EINVAL;
|
||||
|
||||
const uint32_t maxCount = sizeof(list.req)/sizeof(list.req[0]);
|
||||
const struct copybit_rect_t bounds = { 0, 0, dst->w, dst->h };
|
||||
struct copybit_rect_t clip;
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include <cutils/ashmem.h>
|
||||
#include <cutils/log.h>
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include <hardware/hardware.h>
|
||||
#include <hardware/gralloc.h>
|
||||
@ -59,7 +60,8 @@ struct fb_context_t {
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
msm_copy_buffer(buffer_handle_t handle, int fd, int width, int height,
|
||||
msm_copy_buffer(buffer_handle_t handle, int fd,
|
||||
int width, int height, int format,
|
||||
int x, int y, int w, int h);
|
||||
|
||||
static int fb_setSwapInterval(struct framebuffer_device_t* dev,
|
||||
@ -120,9 +122,6 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
|
||||
m->currentBuffer = buffer;
|
||||
|
||||
} else {
|
||||
// If we can't do the page_flip, just copy the buffer to the front
|
||||
// FIXME: use copybit HAL instead of memcpy
|
||||
|
||||
void* fb_vaddr;
|
||||
void* buffer_vaddr;
|
||||
|
||||
@ -138,8 +137,9 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
|
||||
|
||||
//memcpy(fb_vaddr, buffer_vaddr, m->finfo.line_length * m->info.yres);
|
||||
|
||||
msm_copy_buffer(m->framebuffer, m->framebuffer->fd,
|
||||
m->info.xres, m->info.yres,
|
||||
msm_copy_buffer(
|
||||
m->framebuffer, m->framebuffer->fd,
|
||||
m->info.xres, m->info.yres, m->fbFormat,
|
||||
m->info.xoffset, m->info.yoffset,
|
||||
m->info.width, m->info.height);
|
||||
|
||||
@ -152,7 +152,7 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
|
||||
|
||||
static int fb_compositionComplete(struct framebuffer_device_t* dev)
|
||||
{
|
||||
// STOPSHIP: Properly implement composition complete callback
|
||||
// TODO: Properly implement composition complete callback
|
||||
glFinish();
|
||||
|
||||
return 0;
|
||||
@ -199,19 +199,35 @@ int mapFrameBufferLocked(struct private_module_t* module)
|
||||
info.yoffset = 0;
|
||||
info.activate = FB_ACTIVATE_NOW;
|
||||
|
||||
/* Interpretation of offset for color fields: All offsets are from the right,
|
||||
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
|
||||
* can use the offset as right argument to <<). A pixel afterwards is a bit
|
||||
* stream and is written to video memory as that unmodified. This implies
|
||||
* big-endian byte order if bits_per_pixel is greater than 8.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Explicitly request 5/6/5
|
||||
* Explicitly request RGBA_8888
|
||||
*/
|
||||
info.bits_per_pixel = 16;
|
||||
info.red.offset = 11;
|
||||
info.red.length = 5;
|
||||
info.green.offset = 5;
|
||||
info.green.length = 6;
|
||||
info.blue.offset = 0;
|
||||
info.blue.length = 5;
|
||||
info.bits_per_pixel = 32;
|
||||
info.red.offset = 24;
|
||||
info.red.length = 8;
|
||||
info.green.offset = 16;
|
||||
info.green.length = 8;
|
||||
info.blue.offset = 8;
|
||||
info.blue.length = 8;
|
||||
info.transp.offset = 0;
|
||||
info.transp.length = 0;
|
||||
|
||||
/* Note: the GL driver does not have a r=8 g=8 b=8 a=0 config, so if we do
|
||||
* not use the MDP for composition (i.e. hw composition == 0), ask for
|
||||
* RGBA instead of RGBX. */
|
||||
char property[PROPERTY_VALUE_MAX];
|
||||
if (property_get("debug.sf.hw", property, NULL) > 0 && atoi(property) == 0)
|
||||
module->fbFormat = HAL_PIXEL_FORMAT_RGBX_8888;
|
||||
else
|
||||
module->fbFormat = HAL_PIXEL_FORMAT_RGBA_8888;
|
||||
|
||||
/*
|
||||
* Request NUM_BUFFERS screens (at lest 2 for page flipping)
|
||||
*/
|
||||
@ -322,7 +338,6 @@ int mapFrameBufferLocked(struct private_module_t* module)
|
||||
return -errno;
|
||||
}
|
||||
module->framebuffer->base = intptr_t(vaddr);
|
||||
module->framebuffer->phys = intptr_t(finfo.smem_start);
|
||||
memset(vaddr, 0, fbSize);
|
||||
return 0;
|
||||
}
|
||||
@ -378,7 +393,7 @@ int fb_device_open(hw_module_t const* module, const char* name,
|
||||
const_cast<uint32_t&>(dev->device.width) = m->info.xres;
|
||||
const_cast<uint32_t&>(dev->device.height) = m->info.yres;
|
||||
const_cast<int&>(dev->device.stride) = stride;
|
||||
const_cast<int&>(dev->device.format) = HAL_PIXEL_FORMAT_RGB_565;
|
||||
const_cast<int&>(dev->device.format) = m->fbFormat;
|
||||
const_cast<float&>(dev->device.xdpi) = m->xdpi;
|
||||
const_cast<float&>(dev->device.ydpi) = m->ydpi;
|
||||
const_cast<float&>(dev->device.fps) = m->fps;
|
||||
@ -400,7 +415,8 @@ int fb_device_open(hw_module_t const* module, const char* name,
|
||||
/* Copy a pmem buffer to the framebuffer */
|
||||
|
||||
static void
|
||||
msm_copy_buffer(buffer_handle_t handle, int fd, int width, int height,
|
||||
msm_copy_buffer(buffer_handle_t handle, int fd,
|
||||
int width, int height, int format,
|
||||
int x, int y, int w, int h)
|
||||
{
|
||||
struct {
|
||||
@ -425,7 +441,7 @@ msm_copy_buffer(buffer_handle_t handle, int fd, int width, int height,
|
||||
blit.req.dst.height = height;
|
||||
blit.req.dst.offset = 0;
|
||||
blit.req.dst.memory_id = fd;
|
||||
blit.req.dst.format = MDP_RGB_565;
|
||||
blit.req.dst.format = format;
|
||||
|
||||
blit.req.src_rect.x = blit.req.dst_rect.x = x;
|
||||
blit.req.src_rect.y = blit.req.dst_rect.y = y;
|
||||
|
@ -104,6 +104,7 @@ struct private_module_t HAL_MODULE_INFO_SYM = {
|
||||
perform: gralloc_perform,
|
||||
},
|
||||
framebuffer: 0,
|
||||
fbFormat: 0,
|
||||
flags: 0,
|
||||
numBuffers: 0,
|
||||
bufferMask: 0,
|
||||
@ -111,7 +112,6 @@ struct private_module_t HAL_MODULE_INFO_SYM = {
|
||||
currentBuffer: 0,
|
||||
pmem_master: -1,
|
||||
pmem_master_base: 0,
|
||||
master_phys: 0
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -165,7 +165,6 @@ static int gralloc_alloc_framebuffer_locked(alloc_device_t* dev,
|
||||
|
||||
hnd->base = vaddr;
|
||||
hnd->offset = vaddr - intptr_t(m->framebuffer->base);
|
||||
hnd->phys = intptr_t(m->framebuffer->phys) + hnd->offset;
|
||||
*pHandle = hnd;
|
||||
|
||||
return 0;
|
||||
@ -205,15 +204,6 @@ static int init_pmem_area_locked(private_module_t* m)
|
||||
base = 0;
|
||||
close(master_fd);
|
||||
master_fd = -1;
|
||||
} else {
|
||||
// FIXME: get physical address, eventually this will have to go away
|
||||
pmem_region region;
|
||||
err = ioctl(master_fd, PMEM_GET_PHYS, ®ion);
|
||||
if (err < 0) {
|
||||
LOGE("PMEM_GET_PHYS failed (%s)", strerror(-errno));
|
||||
} else {
|
||||
m->master_phys = (unsigned long)region.offset;
|
||||
}
|
||||
}
|
||||
m->pmem_master = master_fd;
|
||||
m->pmem_master_base = base;
|
||||
@ -289,9 +279,16 @@ try_ashmem:
|
||||
err = -ENOMEM;
|
||||
} else {
|
||||
struct pmem_region sub = { offset, size };
|
||||
|
||||
int openFlags = O_RDWR | O_SYNC;
|
||||
uint32_t uread = usage & GRALLOC_USAGE_SW_READ_MASK;
|
||||
uint32_t uwrite = usage & GRALLOC_USAGE_SW_WRITE_MASK;
|
||||
if (uread == GRALLOC_USAGE_SW_READ_OFTEN ||
|
||||
uwrite == GRALLOC_USAGE_SW_WRITE_OFTEN) {
|
||||
openFlags &= ~O_SYNC;
|
||||
}
|
||||
|
||||
// now create the "sub-heap"
|
||||
fd = open("/dev/pmem", O_RDWR, 0);
|
||||
fd = open("/dev/pmem", openFlags, 0);
|
||||
err = fd < 0 ? fd : 0;
|
||||
|
||||
// and connect to it
|
||||
@ -307,8 +304,11 @@ try_ashmem:
|
||||
close(fd);
|
||||
sAllocator.deallocate(offset);
|
||||
fd = -1;
|
||||
} else {
|
||||
memset((char*)base + offset, 0, size);
|
||||
// clean and invalidate the new allocation
|
||||
cacheflush(intptr_t(base) + offset, size, 0);
|
||||
}
|
||||
memset((char*)base + offset, 0, size);
|
||||
//LOGD_IF(!err, "allocating pmem size=%d, offset=%d", size, offset);
|
||||
}
|
||||
} else {
|
||||
@ -328,11 +328,6 @@ try_ashmem:
|
||||
hnd->offset = offset;
|
||||
hnd->base = int(base)+offset;
|
||||
hnd->lockState = lockState;
|
||||
if (flags & private_handle_t::PRIV_FLAGS_USES_PMEM) {
|
||||
private_module_t* m = reinterpret_cast<private_module_t*>(
|
||||
dev->common.module);
|
||||
hnd->phys = m->master_phys + offset;
|
||||
}
|
||||
*pHandle = hnd;
|
||||
}
|
||||
|
||||
@ -391,6 +386,9 @@ static int gralloc_alloc(alloc_device_t* dev,
|
||||
size = alignedw * alignedh * bpp;
|
||||
}
|
||||
|
||||
if ((ssize_t)size <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
int err;
|
||||
if (usage & GRALLOC_USAGE_HW_FB) {
|
||||
err = gralloc_alloc_framebuffer(dev, size, usage, pHandle);
|
||||
|
@ -38,6 +38,7 @@ struct private_module_t {
|
||||
gralloc_module_t base;
|
||||
|
||||
struct private_handle_t* framebuffer;
|
||||
uint32_t fbFormat;
|
||||
uint32_t flags;
|
||||
uint32_t numBuffers;
|
||||
uint32_t bufferMask;
|
||||
@ -45,7 +46,6 @@ struct private_module_t {
|
||||
buffer_handle_t currentBuffer;
|
||||
int pmem_master;
|
||||
void* pmem_master_base;
|
||||
unsigned long master_phys;
|
||||
|
||||
struct fb_var_screeninfo info;
|
||||
struct fb_fix_screeninfo finfo;
|
||||
@ -92,7 +92,7 @@ struct private_handle_t {
|
||||
int base;
|
||||
int lockState;
|
||||
int writeOwner;
|
||||
int phys; // The physical address of that chunk of memory. If using ashmem, set to 0 They don't care
|
||||
int gpuaddr; // The gpu address mapped into the mmu. If using ashmem, set to 0 They don't care
|
||||
int pid;
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -102,7 +102,7 @@ struct private_handle_t {
|
||||
|
||||
private_handle_t(int fd, int size, int flags) :
|
||||
fd(fd), magic(sMagic), flags(flags), size(size), offset(0), gpu_fd(-1),
|
||||
base(0), lockState(0), writeOwner(0), phys(0), pid(getpid())
|
||||
base(0), lockState(0), writeOwner(0), gpuaddr(0), pid(getpid())
|
||||
{
|
||||
version = sizeof(native_handle);
|
||||
numInts = sNumInts;
|
||||
|
Loading…
x
Reference in New Issue
Block a user