diff options
author | Mark Mueller <MarkKMueller@gmail.com> | 2013-11-30 22:05:30 -0800 |
---|---|---|
committer | Mark Mueller <MarkKMueller@gmail.com> | 2014-01-13 09:44:31 -0800 |
commit | 9b86272922f8b8c3bd282fc764ee8bbe6b3f3c74 (patch) | |
tree | a2ea4f2c8926f3c33b908be0daaab6e1c9504934 | |
parent | 91d97de7708563e4ca1693f9063e17059ae265c2 (diff) |
Lots of code cleanup
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 71 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 28 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_state.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_surface_formats.c | 189 |
4 files changed, 147 insertions, 142 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp index 45b30aaeec..634db88d1f 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp @@ -356,24 +356,26 @@ brw_blorp_GPUcopytexsubimage(struct brw_context *brw, GLint dstX0, GLint dstY0, GLint width, GLint height) { + /* BLORP is not supported before Gen6. */ if (brw->gen < 6) { DBG("%s: Older Gen not supported.\n", __FUNCTION__); return false; } - if (!brw->has_llc || - packing->Alignment > 4 || - packing->SkipPixels > 0 || - packing->SkipRows > 0 || - (packing->RowLength != 0 && packing->RowLength != width) || - packing->LsbFirst || - packing->Invert || - dst_image->Width == 0 || - dst_image->Height == 0 || - dst_image->Depth == 0) { - return false; - } + if (!brw->has_llc || + packing->Alignment > 4 || + packing->SkipPixels > 0 || + packing->SkipRows > 0 || + (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__); + return false; + } if (0 != srcX0 || 0 != srcY0 || 0 != dstX0 || 0 != dstY0) { DBG("%s: Sub image loads not currently supported\n", __FUNCTION__); @@ -398,7 +400,7 @@ brw_blorp_GPUcopytexsubimage(struct brw_context *brw, gl_format cacheTexFormat = _mesa_choose_cached_tex_format(&brw->ctx, format, type); _mesa_debug(&brw->ctx, "%s: Cache Texture Format: %s, Target Format: %s, Internal Format: %s" - "Base Internal Format: %s\n", + " Base Internal Format: %s\n", __FUNCTION__, _mesa_get_format_name(cacheTexFormat), _mesa_get_format_name(dst_image->TexFormat), _mesa_lookup_enum_by_nr(dst_image->InternalFormat), _mesa_lookup_enum_by_nr(dst_image->_BaseFormat)); @@ -2700,33 +2702,34 @@ bool brw_blorp_blit_params::compare_source_to_target(struct brw_context *brw, GLenum baseSourceFormat, GLenum baseDestinationFormat) { + if (baseSourceFormat == baseDestinationFormat) { + return true; + } + bool testPassed = false; switch (baseSourceFormat) { case GL_RED: testPassed = (GL_R == baseDestinationFormat); break; case GL_RG: - testPassed = (GL_R == baseDestinationFormat || - GL_RG == baseDestinationFormat); + testPassed = (GL_RED == baseDestinationFormat || + GL_R == baseDestinationFormat); break; case GL_RGB: - testPassed = (GL_R == baseDestinationFormat || - GL_RG == baseDestinationFormat || - GL_RGB == baseDestinationFormat); + testPassed = (GL_RED == baseDestinationFormat || + GL_R == baseDestinationFormat || + GL_RG == baseDestinationFormat); break; case GL_RGBA: switch (baseDestinationFormat) { case GL_RED: + case GL_R: case GL_RG: - case GL_RGBA: case GL_RGB: testPassed = true; break; - default: - testPassed = false; } break; - case GL_LUMINANCE: case GL_LUMINANCE_ALPHA: switch (baseDestinationFormat) { case GL_ALPHA: @@ -2734,27 +2737,18 @@ brw_blorp_blit_params::compare_source_to_target(struct brw_context *brw, case GL_LUMINANCE: case GL_LUMINANCE_ALPHA: testPassed = true; - default: - testPassed = false; } break; - case GL_DEPTH_COMPONENT: - testPassed = (GL_DEPTH_COMPONENT == baseDestinationFormat); - break; - case GL_STENCIL_INDEX: case GL_DEPTH_STENCIL: - testPassed = (GL_DEPTH_STENCIL == baseDestinationFormat || GL_STENCIL_INDEX == baseDestinationFormat); + testPassed = GL_STENCIL_INDEX == baseDestinationFormat; break; - default: - testPassed = false; } if (!testPassed) { _mesa_debug(&brw->ctx, "%s: Target format %s doesn't match cached base: %s\n", __FUNCTION__, _mesa_lookup_enum_by_nr(baseDestinationFormat), _mesa_lookup_enum_by_nr(baseSourceFormat)); - return false; } - return true; + return testPassed; } bool @@ -2791,10 +2785,10 @@ brw_blorp_blit_params::test_formats(struct brw_context *brw, } /* blorp lies about some formats to placate the GPU. */ - blorp_process_format src_process_flags; + blorp_process_format format_process_flags; BRW_SURFACE sample_format; - translate_tex_format(brw, src_format, 0, &src_process_flags, 0, &sample_format); - if (src_process_flags & not_supported_mask) { + translate_tex_format(brw, src_format, 0, &format_process_flags, 0, &sample_format); + if (format_process_flags & 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)); @@ -2807,8 +2801,9 @@ brw_blorp_blit_params::test_formats(struct brw_context *brw, } BRW_SURFACE render_format; - translate_tex_format(brw, dst_format, 0, 0, &render_format, 0); - if (!brw_format_for_render(brw, 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)) { _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 8b9bf5863d..261657e810 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -190,23 +190,31 @@ typedef enum { scale_y = 1 << 1, scale_z = 1 << 2, scale_w = 1 << 3, - swizzle_x = 1 << 4, - swizzle_y = 1 << 5, - swizzle_z = 1 << 6, - swizzle_w = 1 << 7, + sample_swizzle_x = 1 << 4, + sample_swizzle_y = 1 << 5, + sample_swizzle_z = 1 << 6, + sample_swizzle_w = 1 << 7, sample_scale = 1 << 8, alpha_blend_render = 1 << 9, blorp_shadow_sampler = 1 << 10, + desktop_gl_sel = 1 << 11, + + render_swizzle_x = 1 << 12, + render_swizzle_y = 1 << 13, + render_swizzle_z = 1 << 14, + render_swizzle_w = 1 << 15, + scale_mask = scale_x | scale_y | scale_z | scale_w, scale_xy = scale_x | scale_y, - swizzle_mask = swizzle_x | swizzle_y | swizzle_z | swizzle_w, - swizzle_all = swizzle_mask, - swizzle_xy = swizzle_x | swizzle_y, - swizzle_xyz = swizzle_x | swizzle_y | swizzle_z, - swizzle_yzw = swizzle_y | swizzle_z | swizzle_w, - not_supported_mask = scale_mask | swizzle_mask | sample_scale | blorp_shadow_sampler + sample_swizzle_mask = sample_swizzle_x | sample_swizzle_y | sample_swizzle_z | sample_swizzle_w, + sample_swizzle_all = sample_swizzle_mask, + 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 | + sample_scale | desktop_gl_sel } blorp_process_format; #define BRW_NEW_URB_FENCE (1 << BRW_STATE_URB_FENCE) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index 5455691969..c7234360e3 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -189,6 +189,7 @@ uint32_t brw_get_surface_num_multisamples(unsigned num_samples); void brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_flags, BRW_SURFACE *render_target, BRW_SURFACE *sample_format); +bool brw_format_for_blend(struct brw_context *brw, const BRW_SURFACE brw_surface_sel); bool brw_format_for_filter(struct brw_context *brw, const BRW_SURFACE brw_surface_sel); bool brw_format_for_render(struct brw_context *brw, const BRW_SURFACE brw_surface_sel); bool brw_format_for_sampling(struct brw_context *brw, const BRW_SURFACE brw_surface_sel); diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c index 16d0dd6f2c..054dcc6ae8 100644 --- a/src/mesa/drivers/dri/i965/brw_surface_formats.c +++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c @@ -308,21 +308,27 @@ const struct surface_format_info surface_formats[] = { }; bool +brw_format_for_blend(struct brw_context *brw, const BRW_SURFACE brw_surface_sel) +{ + return BRW_SURFACE_FORMAT_NONE != brw_surface_sel && (surface_formats[brw_surface_sel].alpha_blend <= brw->gen_high); +} + +bool brw_format_for_filter(struct brw_context *brw, const BRW_SURFACE brw_surface_sel) { - return BRW_SURFACE_FORMAT_NONE > brw_surface_sel && (surface_formats[brw_surface_sel].filtering <= brw->gen_high); + return BRW_SURFACE_FORMAT_NONE != brw_surface_sel && (surface_formats[brw_surface_sel].filtering <= brw->gen_high); } bool brw_format_for_render(struct brw_context *brw, const BRW_SURFACE brw_surface_sel) { - return BRW_SURFACE_FORMAT_NONE > brw_surface_sel && (surface_formats[brw_surface_sel].render_target <= brw->gen_high); + return BRW_SURFACE_FORMAT_NONE != brw_surface_sel && (surface_formats[brw_surface_sel].render_target <= brw->gen_high); } bool brw_format_for_sampling(struct brw_context *brw, const BRW_SURFACE brw_surface_sel) { - return BRW_SURFACE_FORMAT_NONE > brw_surface_sel && (surface_formats[brw_surface_sel].sampling <= brw->gen_high); + return BRW_SURFACE_FORMAT_NONE != brw_surface_sel && (surface_formats[brw_surface_sel].sampling <= brw->gen_high); } #undef x @@ -348,7 +354,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ { [MESA_FORMAT_RGBA8888] = {BRW_SURFACE_FORMAT_NONE, /* shadow render target */ BRW_SURFACEFORMAT_R8G8B8A8_UNORM, /* shadow sample target */ - swizzle_all}, /* gl_format to brw surface processing */ + sample_swizzle_all}, /* gl_format to brw surface processing */ [MESA_FORMAT_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_UNORM, BRW_SURFACEFORMAT_R8G8B8A8_UNORM, 0}, @@ -357,10 +363,10 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_ARGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_B8G8R8A8_UNORM, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_RGBX8888] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_R8G8B8X8_UNORM, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_RGBX8888_REV] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM, BRW_SURFACEFORMAT_B8G8R8A8_UNORM, alpha_blend_render}, @@ -369,7 +375,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ alpha_blend_render}, [MESA_FORMAT_XRGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, BRW_SURFACEFORMAT_B8G8R8X8_UNORM, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_RGB888] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UNORM, sample_scale}, @@ -381,37 +387,37 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_RGB565_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B5G6R5_UNORM, - swizzle_xyz}, + sample_swizzle_xyz}, [MESA_FORMAT_ARGB4444] = {BRW_SURFACEFORMAT_B4G4R4A4_UNORM, BRW_SURFACEFORMAT_B4G4R4A4_UNORM, 0}, [MESA_FORMAT_ARGB4444_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B4G4R4A4_UNORM, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_RGBA5551] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B5G5R5A1_UNORM, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_ARGB1555] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM, BRW_SURFACEFORMAT_B5G5R5A1_UNORM, 0}, [MESA_FORMAT_ARGB1555_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B5G5R5A1_UNORM, - swizzle_yzw}, + sample_swizzle_yzw}, [MESA_FORMAT_AL44] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_UNORM, scale_x}, - [MESA_FORMAT_AL88] = {BRW_SURFACEFORMAT_R8G8_UNORM, + [MESA_FORMAT_AL88] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_L8A8_UNORM, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_AL88_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_UNORM, - swizzle_xy}, - [MESA_FORMAT_AL1616] = {BRW_SURFACEFORMAT_R16G16_UNORM, + sample_swizzle_xy}, + [MESA_FORMAT_AL1616] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_L16A16_UNORM, 0}, [MESA_FORMAT_AL1616_REV] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16_UNORM, - swizzle_xy}, + sample_swizzle_xy}, [MESA_FORMAT_RGB332] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UNORM, scale_x}, @@ -420,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, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_L8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_L8_UNORM, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_L16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_L16_UNORM, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_I8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_I8_UNORM, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_I16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_I16_UNORM, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_YCBCR_REV] = {BRW_SURFACEFORMAT_YCRCB_NORMAL, BRW_SURFACEFORMAT_YCRCB_NORMAL, 0}, @@ -447,7 +453,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_RG88] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_UNORM, - swizzle_xy}, + sample_swizzle_xy}, [MESA_FORMAT_R16] = {BRW_SURFACEFORMAT_R16_UNORM, BRW_SURFACEFORMAT_R16_UNORM, 0}, @@ -456,38 +462,38 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_RG1616] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16_UNORM, - swizzle_xy}, + sample_swizzle_xy}, [MESA_FORMAT_ARGB2101010] = {BRW_SURFACEFORMAT_B10G10R10A2_UNORM, BRW_SURFACEFORMAT_B10G10R10A2_UNORM, 0}, [MESA_FORMAT_Z24_S8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B8G8R8A8_UNORM, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_S8_Z24] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, - BRW_SURFACEFORMAT_B8G8R8A8_UNORM, + BRW_SURFACEFORMAT_I24X8_UNORM, 0}, [MESA_FORMAT_Z16] = {BRW_SURFACEFORMAT_R16_UNORM, - BRW_SURFACEFORMAT_R16_UNORM, + BRW_SURFACEFORMAT_I16_UNORM, blorp_shadow_sampler}, [MESA_FORMAT_X8_Z24] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, - BRW_SURFACEFORMAT_B8G8R8A8_UNORM, + BRW_SURFACEFORMAT_I24X8_UNORM, 0}, [MESA_FORMAT_Z24_X8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_Z32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_S8] = {BRW_SURFACEFORMAT_R8_UNORM, BRW_SURFACEFORMAT_R8_UNORM, blorp_shadow_sampler}, [MESA_FORMAT_SRGB8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB, - swizzle_xyz}, + sample_swizzle_xyz}, [MESA_FORMAT_SRGBA8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_SARGB8] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, 0}, @@ -543,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, - 0}, + blorp_shadow_sampler}, [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, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_LUMINANCE_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT, BRW_SURFACEFORMAT_L16_FLOAT, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_L32A32_FLOAT, 0}, @@ -561,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, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_INTENSITY_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT, BRW_SURFACEFORMAT_I16_FLOAT, - 0}, + blorp_shadow_sampler}, [MESA_FORMAT_R_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT, BRW_SURFACEFORMAT_R32_FLOAT, 0}, @@ -580,79 +586,79 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ [MESA_FORMAT_ALPHA_UINT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_UINT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_UINT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_INT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_INT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_ALPHA_INT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_UINT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_UINT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_UINT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_INT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_INT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_INTENSITY_INT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_UINT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_UINT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_UINT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_UINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_INT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_INT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_INT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_SINT, - blorp_shadow_sampler}, + 0}, [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_UINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_UINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_UINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32_SINT, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_R_INT8] = {BRW_SURFACEFORMAT_R8_SINT, BRW_SURFACEFORMAT_R8_SINT, @@ -739,10 +745,10 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_SIGNED_RGBX8888] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM, BRW_SURFACEFORMAT_R8G8B8A8_SNORM, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_SIGNED_RGBA8888] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM, BRW_SURFACEFORMAT_R8G8B8A8_SNORM, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_SIGNED_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM, BRW_SURFACEFORMAT_R8G8B8A8_SNORM, 0}, @@ -777,16 +783,16 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ [MESA_FORMAT_L_LATC1] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_SIGNED_L_LATC1] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_LA_LATC2] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_SIGNED_LA_LATC2] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACE_FORMAT_NONE, - swizzle_all}, + sample_swizzle_all}, [MESA_FORMAT_ETC1_RGB8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_ETC1_RGB8, @@ -824,28 +830,28 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ [MESA_FORMAT_SIGNED_A8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_L8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_AL88] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_I8] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_A16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_L16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_AL1616] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_SIGNED_I16] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16_SNORM, - blorp_shadow_sampler}, + sample_swizzle_x}, [MESA_FORMAT_RGB9_E5_FLOAT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP, @@ -855,7 +861,7 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_Z32_FLOAT] = {BRW_SURFACEFORMAT_R32_FLOAT, - BRW_SURFACEFORMAT_R32_FLOAT, + BRW_SURFACEFORMAT_I32_FLOAT, 0}, [MESA_FORMAT_Z32_FLOAT_X24S8] = {BRW_SURFACEFORMAT_R32G32_FLOAT_LD, BRW_SURFACEFORMAT_R32G32_FLOAT, @@ -870,22 +876,22 @@ 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 | swizzle_xy | scale_xy}, + alpha_blend_render | sample_swizzle_xy | scale_xy}, [MESA_FORMAT_XRGB1555_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B5G5R5X1_UNORM, alpha_blend_render}, [MESA_FORMAT_XBGR8888_SNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_SNORM, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR8888_SRGB] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR8888_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_UINT, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR8888_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R8G8B8A8_SINT, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XRGB2101010_UNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_B10G10R10X2_UNORM, alpha_blend_render}, @@ -894,25 +900,25 @@ brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_ 0}, [MESA_FORMAT_XBGR16161616_SNORM] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_SNORM, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR16161616_FLOAT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16X16_FLOAT, alpha_blend_render}, [MESA_FORMAT_XBGR16161616_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_UINT, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR16161616_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R16G16B16A16_SINT, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR32323232_FLOAT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32X32_FLOAT, alpha_blend_render}, [MESA_FORMAT_XBGR32323232_UINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32A32_UINT, - alpha_blend_render | swizzle_all}, + alpha_blend_render | sample_swizzle_all}, [MESA_FORMAT_XBGR32323232_SINT] = {BRW_SURFACE_FORMAT_NONE, BRW_SURFACEFORMAT_R32G32B32A32_SINT, - alpha_blend_render | swizzle_all} + alpha_blend_render | sample_swizzle_all} }; assert(mesa_format < MESA_PRIVATE_FORMAT_COUNT); @@ -945,20 +951,15 @@ brw_init_surface_formats(struct brw_context *brw) (brw_format_for_filter(brw, sample_surface) || is_integer) && (0 == (process_flags & not_supported_mask)); - if (BRW_SURFACE_FORMAT_NONE != render_surface) { - struct surface_format_info render_target_info = surface_formats[render_surface]; /* 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 * than that, GL in general requires alpha blending for render targets, * even though we don't support it for some formats. */ - brw->format_supported_as_render_target[format] = - brw->gen_high >= render_target_info.render_target && - (brw->gen_high >= render_target_info.alpha_blend || /* SINTs, UINTs, and YCRCB don't alpha blend. */ - is_integer); - } else { - brw->format_supported_as_render_target[format] = false; - } + 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); } /* It appears that Z16 is slower than Z24 (on Intel Ivybridge and newer |