summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mueller <MarkKMueller@gmail.com>2013-12-01 10:34:57 -0800
committerMark Mueller <MarkKMueller@gmail.com>2014-01-13 09:44:31 -0800
commit26491ee58a60d23f05ee9ed0d991e49f959c758a (patch)
tree5bbe8a6ec77868df17111440d3f5c476313aa901
parent9b86272922f8b8c3bd282fc764ee8bbe6b3f3c74 (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.cpp11
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.h5
-rw-r--r--src/mesa/drivers/dri/i965/brw_surface_formats.c65
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