[Mesa-dev] [PATCH 1/2] mesa: Make a Mesa core function for sRGB render encoding handling.
Kenneth Graunke
kenneth at whitecape.org
Sun Apr 28 00:42:37 PDT 2013
On 04/18/2013 02:25 PM, Eric Anholt wrote:
> ---
> src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 27 +++++--------------
> src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 29 ++++++---------------
> src/mesa/main/blend.c | 8 ++++++
> src/mesa/main/blend.h | 4 +++
> 4 files changed, 27 insertions(+), 41 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> index a74b2c7..a331c0c 100644
> --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
> @@ -31,6 +31,7 @@
>
>
> #include "main/context.h"
> +#include "main/blend.h"
> #include "main/mtypes.h"
> #include "main/samplerobj.h"
> #include "program/prog_parameter.h"
> @@ -1216,7 +1217,8 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
> uint32_t *surf;
> uint32_t tile_x, tile_y;
> uint32_t format = 0;
> - gl_format rb_format = intel_rb_format(irb);
> + /* _NEW_BUFFERS */
> + gl_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
>
> if (irb->tex_image && !brw->has_surface_tile_offset) {
> intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y);
> @@ -1238,25 +1240,10 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
> surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
> 6 * 4, 32, &brw->wm.surf_offset[unit]);
>
> - switch (rb_format) {
> - case MESA_FORMAT_SARGB8:
> - /* _NEW_BUFFERS
> - *
> - * Without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB surfaces to the
> - * blend/update as sRGB.
> - */
> - if (ctx->Color.sRGBEnabled)
> - format = brw_format_for_mesa_format(rb_format);
> - else
> - format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
> - break;
> - default:
> - format = brw->render_target_format[rb_format];
> - if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
> - _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n",
> - __FUNCTION__, _mesa_get_format_name(rb_format));
> - }
> - break;
> + format = brw->render_target_format[rb_format];
> + if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
> + _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n",
> + __FUNCTION__, _mesa_get_format_name(rb_format));
> }
>
> surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT |
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> index 2c12be3..3ce7678 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> @@ -21,6 +21,7 @@
> * IN THE SOFTWARE.
> */
> #include "main/mtypes.h"
> +#include "main/blend.h"
> #include "main/samplerobj.h"
> #include "program/prog_parameter.h"
>
> @@ -525,7 +526,8 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
> struct intel_region *region = irb->mt->region;
> uint32_t tile_x, tile_y;
> uint32_t format;
> - gl_format rb_format = intel_rb_format(irb);
> + /* _NEW_BUFFERS */
> + gl_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
>
> uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE,
> 8 * 4, 32, &brw->wm.surf_offset[unit]);
> @@ -534,26 +536,11 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
> /* Render targets can't use IMS layout */
> assert(irb->mt->msaa_layout != INTEL_MSAA_LAYOUT_IMS);
>
> - switch (rb_format) {
> - case MESA_FORMAT_SARGB8:
> - /* _NEW_BUFFERS
> - *
> - * Without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB surfaces to the
> - * blend/update as sRGB.
> - */
> - if (ctx->Color.sRGBEnabled)
> - format = brw_format_for_mesa_format(rb_format);
> - else
> - format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
> - break;
> - default:
> - assert(brw_render_target_supported(intel, rb));
> - format = brw->render_target_format[rb_format];
> - if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
> - _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n",
> - __FUNCTION__, _mesa_get_format_name(rb_format));
> - }
> - break;
> + assert(brw_render_target_supported(intel, rb));
> + format = brw->render_target_format[rb_format];
> + if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
> + _mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n",
> + __FUNCTION__, _mesa_get_format_name(rb_format));
> }
>
> surf[0] = BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT |
> diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
> index 09a1c9a..882fd61 100644
> --- a/src/mesa/main/blend.c
> +++ b/src/mesa/main/blend.c
> @@ -856,6 +856,14 @@ _mesa_update_clamp_vertex_color(struct gl_context *ctx)
> ctx->Light._ClampVertexColor = _mesa_get_clamp_vertex_color(ctx);
> }
It's not immediately obvious from the name that this has anything to do
with sRGB. Perhaps adding a Doxygen comment here or in the .h file
would be helpful?
> +gl_format
> +_mesa_get_render_format(struct gl_context *ctx, gl_format format)
> +{
> + if (ctx->Color.sRGBEnabled)
> + return format;
> + else
> + return _mesa_get_srgb_format_linear(format);
> +}
This is much more succinct and likely to not break.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
More information about the mesa-dev
mailing list