Merge "Make sure RGB_565 config is available to emulator"

This commit is contained in:
David Turner
2011-07-03 05:24:47 -07:00
committed by Android Code Review
4 changed files with 93 additions and 0 deletions

View File

@@ -105,6 +105,44 @@ EglConfig::EglConfig(EGLint red_size,
m_nativeFormat(conf.m_nativeFormat) {};
EglConfig::EglConfig(const EglConfig& conf,
EGLint config_id,
EGLint red_size,
EGLint green_size,
EGLint blue_size,
EGLint alpha_size):
m_buffer_size(red_size + green_size + blue_size + alpha_size),
m_red_size(red_size),
m_green_size(green_size),
m_blue_size(blue_size),
m_alpha_size(alpha_size),
m_bind_to_tex_rgb(conf.m_bind_to_tex_rgb),
m_bind_to_tex_rgba(conf.m_bind_to_tex_rgba),
m_caveat(conf.m_caveat),
m_config_id(config_id),
m_frame_buffer_level(conf.m_frame_buffer_level),
m_depth_size(conf.m_depth_size),
m_max_pbuffer_width(conf.m_max_pbuffer_width),
m_max_pbuffer_height(conf.m_max_pbuffer_height),
m_max_pbuffer_size(conf.m_max_pbuffer_size),
m_max_swap_interval(conf.m_max_swap_interval),
m_min_swap_interval(conf.m_min_swap_interval),
m_native_renderable(conf.m_native_renderable),
m_renderable_type(conf.m_renderable_type),
m_native_visual_id(conf.m_native_visual_id),
m_native_visual_type(conf.m_native_visual_type),
m_sample_buffers_num(conf.m_sample_buffers_num),
m_samples_per_pixel(conf.m_samples_per_pixel),
m_stencil_size(conf.m_stencil_size),
m_surface_type(conf.m_surface_type),
m_transparent_type(conf.m_transparent_type),
m_trans_red_val(conf.m_trans_red_val),
m_trans_green_val(conf.m_trans_green_val),
m_trans_blue_val(conf.m_trans_blue_val),
m_conformant(conf.m_conformant),
m_nativeFormat(conf.m_nativeFormat) {};
bool EglConfig::getConfAttrib(EGLint attrib,EGLint* val) const {
switch(attrib) {

View File

@@ -60,6 +60,12 @@ public:
EglConfig(const EglConfig& conf);
EglConfig(const EglConfig& conf,
EGLint config_id,
EGLint red_size,
EGLint green_size,
EGLint blue_size,
EGLint alpha_size);
private:

View File

@@ -67,9 +67,52 @@ static bool compareEglConfigsPtrs(EglConfig* first,EglConfig* second) {
return *first < *second ;
}
void EglDisplay::addMissingConfigs(void)
{
m_configs.sort(compareEglConfigsPtrs);
EGLConfig match;
EGLNativePixelFormatType tmpfrmt = PIXEL_FORMAT_INITIALIZER;
EglConfig dummy(5, 6, 5, 0, // RGB_565
EGL_DONT_CARE,EGL_DONT_CARE,
16, // Depth
EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,
EGL_DONT_CARE, EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,EGL_DONT_CARE,tmpfrmt);
if(!doChooseConfigs(dummy, &match, 1))
{
return;
}
const EglConfig* config = (EglConfig*)match;
int bSize;
config->getConfAttrib(EGL_BUFFER_SIZE,&bSize);
if(bSize == 16)
{
return;
}
int max_config_id = 0;
for(ConfigsList::iterator it = m_configs.begin(); it != m_configs.end() ;it++) {
EGLint id;
(*it)->getConfAttrib(EGL_CONFIG_ID, &id);
if(id > max_config_id)
max_config_id = id;
}
EglConfig* newConfig = new EglConfig(*config,max_config_id+1,5,6,5,0);
m_configs.push_back(newConfig);
}
void EglDisplay::initConfigurations(int renderableType) {
if(m_configInitialized) return;
EglOS::queryConfigs(m_dpy,renderableType,m_configs);
addMissingConfigs();
m_configs.sort(compareEglConfigsPtrs);
}
@@ -181,6 +224,10 @@ int EglDisplay::getConfigs(EGLConfig* configs,int config_size) {
int EglDisplay::chooseConfigs(const EglConfig& dummy,EGLConfig* configs,int config_size) {
android::Mutex::Autolock mutex(m_lock);
return doChooseConfigs(dummy, configs, config_size);
}
int EglDisplay::doChooseConfigs(const EglConfig& dummy,EGLConfig* configs,int config_size) {
int added = 0;
for(ConfigsList::iterator it = m_configs.begin(); it != m_configs.end() && (added < config_size || !configs);it++) {

View File

@@ -67,6 +67,8 @@ public:
bool destroyImageKHR(EGLImageKHR img);
private:
int doChooseConfigs(const EglConfig& dummy,EGLConfig* configs,int config_size);
void addMissingConfigs(void);
void initConfigurations(int renderableType);
EGLNativeDisplayType m_dpy;