mesa/965: add support for GL_EXT_framebuffer_sRGB (v2)
This adds i965 support for GL_EXT_framebuffer_sRGB, it introduces a new constant to say that the driver can support sRGB enabled FBOs since enabling the extension doesn't mean the driver can actually support sRGB. Also adds the suggested state flush in the core code suggested by Brian. fix the ARB_fbo color encoding. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
5c3f1cdbbe
commit
88ffa9ce5b
|
@ -446,7 +446,10 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
|
|||
case MESA_FORMAT_SARGB8:
|
||||
/* without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB
|
||||
surfaces to the blend/update as sRGB */
|
||||
surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
|
||||
if (ctx->Color.sRGBEnabled)
|
||||
surf.ss0.surface_format = brw_format_for_mesa_format[irb->Base.Format];
|
||||
else
|
||||
surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
|
||||
break;
|
||||
default:
|
||||
surf.ss0.surface_format = brw_format_for_mesa_format[irb->Base.Format];
|
||||
|
|
|
@ -807,6 +807,7 @@ intelInitContext(struct intel_context *intel,
|
|||
|
||||
meta_init_metaops(ctx, &intel->meta);
|
||||
if (intel->gen >= 4) {
|
||||
ctx->Const.sRGBCapable = GL_TRUE;
|
||||
if (MAX_WIDTH > 8192)
|
||||
ctx->Const.MaxRenderbufferSize = 8192;
|
||||
} else {
|
||||
|
|
|
@ -175,6 +175,7 @@ static const struct dri_extension brw_extensions[] = {
|
|||
{ "GL_ARB_texture_non_power_of_two", NULL },
|
||||
{ "GL_ARB_texture_rg", NULL },
|
||||
{ "GL_EXT_draw_buffers2", GL_EXT_draw_buffers2_functions },
|
||||
{ "GL_EXT_framebuffer_sRGB", NULL },
|
||||
{ "GL_EXT_shadow_funcs", NULL },
|
||||
{ "GL_EXT_stencil_two_side", GL_EXT_stencil_two_side_functions },
|
||||
{ "GL_EXT_texture_sRGB", NULL },
|
||||
|
|
|
@ -970,9 +970,10 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
|
|||
|
||||
/* GL3.0 - GL_framebuffer_sRGB */
|
||||
case GL_FRAMEBUFFER_SRGB_EXT:
|
||||
CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
|
||||
ctx->Color.sRGBEnabled = state;
|
||||
break;
|
||||
CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
|
||||
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
|
||||
ctx->Color.sRGBEnabled = state;
|
||||
break;
|
||||
|
||||
default:
|
||||
goto invalid_enum_error;
|
||||
|
|
|
@ -2157,7 +2157,7 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
|
|||
"glGetFramebufferAttachmentParameterivEXT(pname)");
|
||||
}
|
||||
else {
|
||||
if (ctx->Extensions.EXT_framebuffer_sRGB) {
|
||||
if (ctx->Extensions.EXT_framebuffer_sRGB && ctx->Const.sRGBCapable) {
|
||||
*params = _mesa_get_format_color_encoding(att->Renderbuffer->Format);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -553,6 +553,8 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
|
|||
+ fb->Visual.greenBits + fb->Visual.blueBits;
|
||||
fb->Visual.floatMode = GL_FALSE;
|
||||
fb->Visual.samples = rb->NumSamples;
|
||||
if (_mesa_get_format_color_encoding(fmt) == GL_SRGB)
|
||||
fb->Visual.sRGBCapable = ctx->Const.sRGBCapable;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2710,6 +2710,9 @@ struct gl_constants
|
|||
|
||||
/** GL_EXT_gpu_shader4 */
|
||||
GLint MinProgramTexelOffset, MaxProgramTexelOffset;
|
||||
|
||||
/* GL_EXT_framebuffer_sRGB */
|
||||
GLboolean sRGBCapable; /* can enable sRGB blend/update on FBOs */
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue