diff options
author | Mark Mueller <MarkKMueller@gmail.com> | 2013-12-01 10:34:57 -0800 |
---|---|---|
committer | Mark Mueller <MarkKMueller@gmail.com> | 2014-01-13 09:44:31 -0800 |
commit | 26491ee58a60d23f05ee9ed0d991e49f959c758a (patch) | |
tree | 5bbe8a6ec77868df17111440d3f5c476313aa901 | |
parent | 9b86272922f8b8c3bd282fc764ee8bbe6b3f3c74 (diff) |
blorp blit can't support widths less then 16 pixels. Fixes for
unsupported render targets
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 11 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_surface_formats.c | 65 |
3 files changed, 44 insertions, 37 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp index 634db88d1f..6ad0063000 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp @@ -363,6 +363,12 @@ brw_blorp_GPUcopytexsubimage(struct brw_context *brw, return false; } + if ( + dst_image->Width < 16) { + _mesa_debug(&brw->ctx, "%s: Blorp Path requires a minimum 16 wide texture.\n", __FUNCTION__); + return false; + } + if (!brw->has_llc || packing->Alignment > 4 || packing->SkipPixels > 0 || @@ -370,7 +376,6 @@ brw_blorp_GPUcopytexsubimage(struct brw_context *brw, (packing->RowLength != 0 && packing->RowLength != width) || packing->LsbFirst || packing->Invert || - dst_image->Width == 0 || dst_image->Height == 0 || dst_image->Depth == 0) { _mesa_debug(&brw->ctx, "%s: unsupported parameter\n", __FUNCTION__); @@ -2788,7 +2793,7 @@ brw_blorp_blit_params::test_formats(struct brw_context *brw, blorp_process_format format_process_flags; BRW_SURFACE sample_format; translate_tex_format(brw, src_format, 0, &format_process_flags, 0, &sample_format); - if (format_process_flags & not_supported_mask) { + if (format_process_flags & sample_not_supported_mask) { _mesa_debug(ctx, "%s: compatible brw_surface format not found for source " "texture mip tree. Source: %s\n", __FUNCTION__, _mesa_get_format_name(src_format)); @@ -2803,7 +2808,7 @@ brw_blorp_blit_params::test_formats(struct brw_context *brw, BRW_SURFACE render_format; translate_tex_format(brw, dst_format, 0, &format_process_flags, &render_format, 0); if (!brw_format_for_render(brw, render_format) || - (format_process_flags & blorp_shadow_sampler)) { + (format_process_flags & render_not_supported_mask)) { _mesa_debug(ctx, "%s: The translated target miptree format is not supported as a render target: %s: 0x%x.\n", __FUNCTION__, _mesa_get_format_name(dst_format), render_format); return false; diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 261657e810..b950acf7f0 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -197,7 +197,7 @@ typedef enum { sample_scale = 1 << 8, alpha_blend_render = 1 << 9, - blorp_shadow_sampler = 1 << 10, + blorp_shadow_shader = 1 << 10, desktop_gl_sel = 1 << 11, render_swizzle_x = 1 << 12, @@ -213,7 +213,8 @@ typedef enum { sample_swizzle_xy = sample_swizzle_x | sample_swizzle_y, sample_swizzle_xyz = sample_swizzle_x | sample_swizzle_y | sample_swizzle_z, sample_swizzle_yzw = sample_swizzle_y | sample_swizzle_z | sample_swizzle_w, - not_supported_mask = scale_mask | sample_swizzle_mask | + render_not_supported_mask = alpha_blend_render | blorp_shadow_shader, + sample_not_supported_mask = scale_mask | sample_swizzle_mask | sample_scale | desktop_gl_sel } blorp_process_format; diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c index 054dcc6ae8..0e6c8c5a61 100644 --- a/src/mesa/drivers/dri/i965/brw_surface_formats.c +++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c @@ -367,8 +367,8 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ [MESA_FORMAT_RGBX8888] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_R8G8B8X8_UNORM, alpha_blend_render | sample_swizzle_all}, - [MESA_FORMAT_RGBX8888_REV] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM, - BRW_SURFACEFORMAT_B8G8R8A8_UNORM, + [MESA_FORMAT_RGBX8888_REV] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, + BRW_SURFACEFORMAT_B8G8R8X8_UNORM, alpha_blend_render}, [MESA_FORMAT_XRGB8888] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_B8G8R8X8_UNORM, @@ -408,7 +408,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ scale_x}, [MESA_FORMAT_AL88] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_L8A8_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_AL88_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_UNORM, sample_swizzle_xy}, @@ -426,19 +426,19 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_A16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_A16_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_L8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_L8_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_L16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_L16_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_I8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_I8_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_I16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_I16_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_YCBCR_REV] = {BRW_SURFACEFORMAT_YCRCB_NORMAL, BRW_SURFACEFORMAT_YCRCB_NORMAL, 0}, @@ -474,7 +474,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_Z16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_I16_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_X8_Z24] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_I24X8_UNORM, 0}, @@ -486,7 +486,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ sample_swizzle_all}, [MESA_FORMAT_S8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_R8_UNORM, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_SRGB8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB, @@ -549,16 +549,16 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_ALPHA_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT, BRW_SURFACEFORMAT_A32_FLOAT, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_ALPHA_FLOAT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_A16_FLOAT, 0}, [MESA_FORMAT_LUMINANCE_FLOAT32] = {BRW_SURFACEFORMAT_L32_FLOAT, BRW_SURFACEFORMAT_R32_FLOAT, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_LUMINANCE_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT, BRW_SURFACEFORMAT_L16_FLOAT, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_L32A32_FLOAT, 0}, @@ -567,10 +567,10 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_INTENSITY_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT, BRW_SURFACEFORMAT_I32_FLOAT, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_INTENSITY_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT, BRW_SURFACEFORMAT_I16_FLOAT, - blorp_shadow_sampler}, + blorp_shadow_shader}, [MESA_FORMAT_R_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT, BRW_SURFACEFORMAT_R32_FLOAT, 0}, @@ -582,7 +582,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_RG_FLOAT16] = {BRW_SURFACEFORMAT_R16G16_FLOAT, BRW_SURFACEFORMAT_R16G16_FLOAT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_UINT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UINT, @@ -876,49 +876,49 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ [MESA_FORMAT_XRGB4444_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_UNORM, - alpha_blend_render | sample_swizzle_xy | scale_xy}, + sample_swizzle_xy | scale_xy}, [MESA_FORMAT_XRGB1555_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B5G5R5X1_UNORM, - alpha_blend_render}, + 0}, [MESA_FORMAT_XBGR8888_SNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_SNORM, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR8888_SRGB] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR8888_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_UINT, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR8888_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_SINT, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XRGB2101010_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B10G10R10X2_UNORM, - alpha_blend_render}, + 0}, [MESA_FORMAT_XBGR16161616_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16X16_UNORM, 0}, [MESA_FORMAT_XBGR16161616_SNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_SNORM, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR16161616_FLOAT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT, - alpha_blend_render}, + 0}, [MESA_FORMAT_XBGR16161616_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_UINT, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR16161616_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_SINT, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR32323232_FLOAT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT, - alpha_blend_render}, + 0}, [MESA_FORMAT_XBGR32323232_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32A32_UINT, - alpha_blend_render | sample_swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_XBGR32323232_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32A32_SINT, - alpha_blend_render | sample_swizzle_all} + sample_swizzle_all} }; assert(mesa_format < MESA_PRIVATE_FORMAT_COUNT); @@ -949,7 +949,7 @@ brw_init_surface_formats(struct brw_context *brw) ctx->TextureFormatSupported[format] = brw_format_for_sampling(brw, sample_surface) && (brw_format_for_filter(brw, sample_surface) || is_integer) && - (0 == (process_flags & not_supported_mask)); + (0 == (process_flags & sample_not_supported_mask)); /* Note that GL_EXT_texture_integer says that blending doesn't occur for * integer, so we don't need hardware support for blending on it. Other @@ -959,7 +959,8 @@ brw_init_surface_formats(struct brw_context *brw) brw->format_supported_as_render_target[format] = brw_format_for_render(brw, render_surface) && (brw_format_for_blend(brw, render_surface) || /* SINTs, UINTs, and YCRCB don't alpha blend. */ - is_integer); + is_integer) && + 0 == (process_flags & render_not_supported_mask); } /* It appears that Z16 is slower than Z24 (on Intel Ivybridge and newer |