forked from enlightenment/efl
Evas GL: Fix direct_mem_opt and direct_override
Summary: Remove surface buffer create/allocate in pbuffer_surface_create. In evgl_make_current, we should use direct_mem_opt, direct_override values set in EVGL_Surface struct, not the global value set by env variables. @fix
This commit is contained in:
parent
ea5788d247
commit
63e057bff9
|
@ -1854,13 +1854,6 @@ evgl_pbuffer_surface_create(void *eng_data, Evas_GL_Config *cfg,
|
||||||
sfc->pbuffer.color_fmt = cfg->color_format;
|
sfc->pbuffer.color_fmt = cfg->color_format;
|
||||||
sfc->pbuffer.is_pbuffer = EINA_TRUE;
|
sfc->pbuffer.is_pbuffer = EINA_TRUE;
|
||||||
|
|
||||||
// Set the context current with resource context/surface
|
|
||||||
if (!_internal_resource_make_current(eng_data, NULL))
|
|
||||||
{
|
|
||||||
ERR("Error doing an internal resource make current");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the surface is defined as RGB or RGBA, then create an FBO
|
// If the surface is defined as RGB or RGBA, then create an FBO
|
||||||
if (sfc->pbuffer.color_fmt != EVAS_GL_NO_FBO)
|
if (sfc->pbuffer.color_fmt != EVAS_GL_NO_FBO)
|
||||||
{
|
{
|
||||||
|
@ -1871,30 +1864,8 @@ evgl_pbuffer_surface_create(void *eng_data, Evas_GL_Config *cfg,
|
||||||
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_CONFIG);
|
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_CONFIG);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create internal buffers
|
|
||||||
if (!_surface_buffers_create(sfc))
|
|
||||||
{
|
|
||||||
ERR("Unable Create Specificed Surfaces.");
|
|
||||||
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_ALLOC);
|
|
||||||
goto error;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Allocate resources for fallback unless the flag is on
|
|
||||||
// Note: we don't care about sfc->direct_mem_opt, as DR makes no sense with PBuffer.
|
|
||||||
if (!evgl_engine->direct_mem_opt)
|
|
||||||
{
|
|
||||||
if (!_surface_buffers_allocate(eng_data, sfc, sfc->w, sfc->h, 0))
|
|
||||||
{
|
|
||||||
ERR("Unable Create Allocate Memory for Surface.");
|
|
||||||
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_ALLOC);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not calling make_current
|
|
||||||
|
|
||||||
pbuffer = evgl_engine->funcs->pbuffer_surface_create
|
pbuffer = evgl_engine->funcs->pbuffer_surface_create
|
||||||
(eng_data, sfc, attrib_list);
|
(eng_data, sfc, attrib_list);
|
||||||
|
|
||||||
|
@ -1906,13 +1877,6 @@ evgl_pbuffer_surface_create(void *eng_data, Evas_GL_Config *cfg,
|
||||||
|
|
||||||
sfc->pbuffer.native_surface = pbuffer;
|
sfc->pbuffer.native_surface = pbuffer;
|
||||||
|
|
||||||
if (dbg) DBG("Calling make_current(NULL, NULL)");
|
|
||||||
if (!evgl_engine->funcs->make_current(eng_data, NULL, NULL, 0))
|
|
||||||
{
|
|
||||||
ERR("Error doing make_current(NULL, NULL).");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keep track of all the created surfaces
|
// Keep track of all the created surfaces
|
||||||
LKL(evgl_engine->resource_lock);
|
LKL(evgl_engine->resource_lock);
|
||||||
evgl_engine->surfaces = eina_list_prepend(evgl_engine->surfaces, sfc);
|
evgl_engine->surfaces = eina_list_prepend(evgl_engine->surfaces, sfc);
|
||||||
|
@ -2301,7 +2265,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
|
||||||
|
|
||||||
// Allocate or free resources depending on what mode (direct of fbo) it's
|
// Allocate or free resources depending on what mode (direct of fbo) it's
|
||||||
// running only if the env var EVAS_GL_DIRECT_MEM_OPT is set.
|
// running only if the env var EVAS_GL_DIRECT_MEM_OPT is set.
|
||||||
if (evgl_engine->direct_mem_opt)
|
if (sfc->direct_mem_opt)
|
||||||
{
|
{
|
||||||
if (_evgl_direct_renderable(rsc, sfc))
|
if (_evgl_direct_renderable(rsc, sfc))
|
||||||
{
|
{
|
||||||
|
@ -2321,7 +2285,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (evgl_engine->direct_override)
|
if (sfc->direct_override)
|
||||||
{
|
{
|
||||||
DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
|
DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
|
||||||
}
|
}
|
||||||
|
@ -2336,7 +2300,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
|
||||||
ERR("Unable Create Specificed Surfaces. Unsupported format!");
|
ERR("Unable Create Specificed Surfaces. Unsupported format!");
|
||||||
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_ALLOC);
|
evas_gl_common_error_set(eng_data, EVAS_GL_BAD_ALLOC);
|
||||||
return 0;
|
return 0;
|
||||||
};
|
}
|
||||||
sfc->buffers_allocated = 1;
|
sfc->buffers_allocated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2393,7 +2357,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
|
||||||
glViewport(ctx->viewport_coord[0], ctx->viewport_coord[1], ctx->viewport_coord[2], ctx->viewport_coord[3]);
|
glViewport(ctx->viewport_coord[0], ctx->viewport_coord[1], ctx->viewport_coord[2], ctx->viewport_coord[3]);
|
||||||
if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
|
if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->current_fbo = 0;
|
ctx->current_fbo = 0;
|
||||||
rsc->direct.rendered = 0;
|
rsc->direct.rendered = 0;
|
||||||
|
@ -2478,7 +2442,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
|
||||||
if ((rsc->current_ctx != ctx) || (ctx->current_sfc != sfc) || (rsc->direct.rendered))
|
if ((rsc->current_ctx != ctx) || (ctx->current_sfc != sfc) || (rsc->direct.rendered))
|
||||||
{
|
{
|
||||||
sfc->current_ctx = ctx;
|
sfc->current_ctx = ctx;
|
||||||
if ((evgl_engine->direct_mem_opt) && (evgl_engine->direct_override))
|
if ((sfc->direct_mem_opt) && (sfc->direct_override))
|
||||||
{
|
{
|
||||||
DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
|
DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue