summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mueller <MarkKMueller@gmail.com>2013-11-21 14:58:34 -0800
committerMark Mueller <MarkKMueller@gmail.com>2014-01-13 09:44:30 -0800
commite2978ead843153693d8a3ab33fce1ca8bebace5e (patch)
treedefc6acc56f1b6c9733bc71ff112466f296bc8bc
parente6ed8b3014d0e4f52319a5dc8f05fe789bc310fc (diff)
In process with cleaning up of format handling
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp.cpp21
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp.h2
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp_blit.cpp39
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp_clear.cpp3
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.h18
-rw-r--r--src/mesa/drivers/dri/i965/brw_defines.h4
-rw-r--r--src/mesa/drivers/dri/i965/brw_state.h19
-rw-r--r--src/mesa/drivers/dri/i965/brw_surface_formats.c919
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_surface_state.c34
-rw-r--r--src/mesa/drivers/dri/i965/gen7_wm_surface_state.c24
10 files changed, 713 insertions, 370 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.cpp b/src/mesa/drivers/dri/i965/brw_blorp.cpp
index c07104f8ce..0b2e81e76d 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp.cpp
@@ -83,15 +83,25 @@ brw_blorp_surface_info::set(struct brw_context *brw,
brw_blorp_mip_info::set(mt, level, layer);
this->num_samples = mt->num_samples;
this->array_spacing_lod0 = mt->array_spacing_lod0;
- this->map_stencil_as_y_tiled = false;
+ /* The miptree is a W-tiled stencil buffer. Surface states can't be set
+ * up for W tiling, so we'll need to use Y tiling and have the WM
+ * program swizzle the coordinates.
+ */
+ this->map_stencil_as_y_tiled = mt->format == MESA_FORMAT_S8;
this->msaa_layout = mt->msaa_layout;
+ gl_format linear_format = _mesa_get_srgb_format_linear(mt->format);
+ if (is_render_target) {
+ /* set up for a render target */
+ brw_format_for_mesa_format(linear_format, &this->process_format_flags, &this->brw_surfaceformat, 0);
+ } else {
+ /* set up for a sample target */
+ brw_format_for_mesa_format(linear_format, &this->process_format_flags, 0, &this->brw_surfaceformat);
+ }
+
+#if 0
switch (mt->format) {
case MESA_FORMAT_S8:
- /* The miptree is a W-tiled stencil buffer. Surface states can't be set
- * up for W tiling, so we'll need to use Y tiling and have the WM
- * program swizzle the coordinates.
- */
this->map_stencil_as_y_tiled = true;
this->brw_surfaceformat = BRW_SURFACEFORMAT_R8_UNORM;
break;
@@ -125,6 +135,7 @@ brw_blorp_surface_info::set(struct brw_context *brw,
break;
}
}
+#endif
}
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h
index be367b7559..1bc3378767 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.h
+++ b/src/mesa/drivers/dri/i965/brw_blorp.h
@@ -158,7 +158,7 @@ public:
* Format that should be used when setting up the surface state for this
* surface. Should correspond to one of the BRW_SURFACEFORMAT_* enums.
*/
- uint32_t brw_surfaceformat;
+ BRW_SURFACE brw_surfaceformat;
blorp_process_format process_format_flags;
/**
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index b2c57bba4b..0b5fe76941 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -406,9 +406,9 @@ brw_blorp_GPUcopytexsubimage(struct brw_context *brw,
/* Come up with a match to the source format for the texture cache */
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\n",
-// __FUNCTION__, _mesa_get_format_name(cacheTexFormat), _mesa_get_format_name(dst_image->TexFormat),
-// _mesa_lookup_enum_by_nr(dst_image->InternalFormat));
+ _mesa_debug(&brw->ctx, "%s: Cache Texture Format: %s, Target Format: %s, 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));
if (!brw_blorp_blit_params::test_formats(brw, cacheTexFormat, dst_image->TexFormat, dst_image->InternalFormat)) {
return false;
@@ -2284,26 +2284,25 @@ 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;
- const GLint srcFormatTranslated = translate_tex_format(brw, src_format, 0, true, &src_process_flags);
- blorp_process_format dst_process_flags;
- const GLint dstFormatTranslated = translate_tex_format(brw, dst_format, 0, true, &dst_process_flags);
- if ((src_process_flags & supported_mask) || (dst_process_flags & supported_mask)) {
- _mesa_debug(ctx, "%s: compatible brw_surface format not found for source or target "
- "texture mip tree. Source: %s Target: %s\n",
- __FUNCTION__, _mesa_get_format_name(src_format),
- _mesa_get_format_name(dst_format));
+ BRW_SURFACE sample_format;
+ translate_tex_format(brw, src_format, 0, &src_process_flags, 0, &sample_format);
+ if (src_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));
return false;
}
-
- if (!brw_format_for_render(brw, dstFormatTranslated)) {
- _mesa_debug(ctx, "%s: The translated target miptree format is not supported as a render target: %s.\n",
- __FUNCTION__, _mesa_get_format_name(dst_format));
+ if (!brw_format_for_sampling(brw, sample_format)) {
+ _mesa_debug(ctx, "%s: The translated source miptree format is not supported for sampling: %s.\n",
+ __FUNCTION__, _mesa_get_format_name(src_format));
return false;
}
- if (!brw_format_for_sampling(brw, srcFormatTranslated)) {
- _mesa_debug(ctx, "%s: The translated source miptree format is not supported for sampling: %s.\n",
- __FUNCTION__, _mesa_get_format_name(src_format));
+ BRW_SURFACE render_format;
+ translate_tex_format(brw, dst_format, 0, 0, &render_format, 0);
+ if (!brw_format_for_render(brw, render_format)) {
+ _mesa_debug(ctx, "%s: The translated target miptree format is not supported as a render target: %s.\n",
+ __FUNCTION__, _mesa_get_format_name(dst_format));
return false;
}
@@ -2409,8 +2408,8 @@ brw_blorp_blit_params::brw_blorp_blit_params(struct brw_context *brw,
_mesa_get_srgb_format_linear(src_mt->format) ==
_mesa_get_srgb_format_linear(dst_mt->format)) {
blorp_process_format process_flags;
- dst.brw_surfaceformat = brw_format_for_mesa_format(dst_mt->format, &process_flags);
- src.brw_surfaceformat = dst.brw_surfaceformat;
+ brw_format_for_mesa_format(dst_mt->format, &process_flags,
+ &dst.brw_surfaceformat, &src.brw_surfaceformat);
}
/* When doing a multisample resolve of a GL_LUMINANCE32F or GL_INTENSITY32F
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
index c55108a69f..0ebf9c6b82 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
@@ -194,7 +194,8 @@ brw_blorp_clear_params::brw_blorp_clear_params(struct brw_context *brw,
/* Override the surface format according to the context's sRGB rules. */
gl_format format = _mesa_get_render_format(ctx, irb->mt->format);
- dst.brw_surfaceformat = brw->render_target_format[format];
+ blorp_process_format process_format_flags;
+ brw_format_for_mesa_format(format, &process_format_flags, &dst.brw_surfaceformat, 0);
x0 = fb->_Xmin;
x1 = fb->_Xmax;
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index 6382fb53b8..9d1de215dd 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -41,6 +41,8 @@
#include "main/mtypes.h"
#include "brw_structs.h"
+#include "brw_defines.h"
+
#ifdef __cplusplus
extern "C" {
/* Evil hack for using libdrm in a c++ compiler. */
@@ -192,12 +194,14 @@ typedef enum {
swizzle_y = 1 << 5,
swizzle_z = 1 << 6,
swizzle_w = 1 << 7,
- type_convert = 1 << 8,
+ sample_scale = 1 << 8,
+
+ alpha_blend_render = 1 << 9,
+ internal_format_en = 1 << 10,
+ blorp_render_target = 1 << 11,
+ blorp_sample_target = 1 << 12,
- alpha_shadow = 1 << 9,
- intensity_shadow = 1 << 10,
- luminance_shadow = 1 << 11,
- x_shadow = 1 << 12,
+ x_shadow = 1 << 13,
scale_mask = scale_x | scale_y | scale_z | scale_w,
scale_xy = scale_x | scale_y,
@@ -206,7 +210,7 @@ typedef enum {
swizzle_xy = swizzle_x | swizzle_y,
swizzle_xyz = swizzle_x | swizzle_y | swizzle_z,
swizzle_yzw = swizzle_y | swizzle_z | swizzle_w,
- supported_mask = scale_mask | swizzle_mask
+ not_supported_mask = scale_mask | swizzle_mask | sample_scale
} blorp_process_format;
#define BRW_NEW_URB_FENCE (1 << BRW_STATE_URB_FENCE)
@@ -1469,7 +1473,7 @@ struct brw_context
} *state_batch_list;
int state_batch_count;
- uint32_t render_target_format[MESA_FORMAT_COUNT];
+// uint32_t render_target_format[MESA_FORMAT_COUNT];
bool format_supported_as_render_target[MESA_FORMAT_COUNT];
/* Interpolation modes, one byte per vue slot.
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 142b2db967..062d4c99de 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -29,6 +29,8 @@
* Keith Whitwell <keith@tungstengraphics.com>
*/
+#include <sys/types.h>
+
#define INTEL_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low))
/* Using the GNU statement expression extension */
#define SET_FIELD(value, field) \
@@ -487,6 +489,8 @@
#define BRW_SURFACE_FORMAT_SHIFT 18
#define BRW_SURFACE_FORMAT_MASK INTEL_MASK(26, 18)
+typedef u_int16_t BRW_SURFACE;
+
#define BRW_SURFACERETURNFORMAT_FLOAT32 0
#define BRW_SURFACERETURNFORMAT_S1 1
diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
index 28db5cf813..f5e1b5ec43 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -186,17 +186,20 @@ void gen4_init_vtable_surface_functions(struct brw_context *brw);
uint32_t brw_get_surface_tiling_bits(uint32_t tiling);
uint32_t brw_get_surface_num_multisamples(unsigned num_samples);
-uint32_t brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_flags);
-bool brw_format_for_render(struct brw_context *brw, const unsigned brw_surface_sel);
-bool brw_format_for_sampling(struct brw_context *brw, const unsigned brw_surface_sel);
+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_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);
GLuint translate_tex_target(GLenum target);
-GLuint translate_tex_format(struct brw_context *brw,
- gl_format mesa_format,
- GLenum srgb_decode,
- bool for_render,
- blorp_process_format *process_flags);
+void translate_tex_format(struct brw_context *brw,
+ gl_format mesa_format,
+ GLenum srgb_decode,
+ blorp_process_format *process_flags,
+ BRW_SURFACE *render_surface,
+ BRW_SURFACE *sample_surface);
int brw_get_texture_swizzle(const struct gl_context *ctx,
const struct gl_texture_object *t);
diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c
index ee30f73c46..8176c76f8d 100644
--- a/src/mesa/drivers/dri/i965/brw_surface_formats.c
+++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c
@@ -308,13 +308,13 @@ const struct surface_format_info surface_formats[] = {
};
bool
-brw_format_for_render(struct brw_context *brw, const unsigned brw_surface_sel)
+brw_format_for_render(struct brw_context *brw, const BRW_SURFACE brw_surface_sel)
{
return (surface_formats[brw_surface_sel].render_target <= brw->gen * 10);
}
bool
-brw_format_for_sampling(struct brw_context *brw, const unsigned brw_surface_sel)
+brw_format_for_sampling(struct brw_context *brw, const BRW_SURFACE brw_surface_sel)
{
return (surface_formats[brw_surface_sel].sampling <= brw->gen * 10);
}
@@ -323,320 +323,633 @@ brw_format_for_sampling(struct brw_context *brw, const unsigned brw_surface_sel)
#undef Y
struct format_translator {
- u_int16_t brw_format;
+ BRW_SURFACE brw_render_shadow_format;
+ BRW_SURFACE brw_sample_shadow_format;
blorp_process_format process_flags;
};
-uint32_t
-brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_flags)
+void
+brw_format_for_mesa_format(gl_format mesa_format, blorp_process_format *process_flags,
+ BRW_SURFACE *render_target, BRW_SURFACE *sample_format)
{
- /* This table is ordered according to the enum ordering in formats.h. We do
- * expect that enum to be extended without our explicit initialization
- * staying in sync, so we initialize to 0 even though
- * BRW_SURFACEFORMAT_R32G32B32A32_FLOAT happens to also be 0.
+ /* This table is ordered according to the enum ordering in formats.h. gl_formats
+ * are used to tag both source sampling and destination render targets, but
+ * the corresponding brw_surface may differ, thus storage is provided for each case,
+ * as well as flags to indicate any additional processing that may be required by
+ * blorp, and/or limitiations with some formats.
*/
static const struct format_translator table[MESA_PRIVATE_FORMAT_COUNT] =
{
- [MESA_FORMAT_RGBA8888] = {BRW_SURFACEFORMAT_R8G8B8A8_UNORM, swizzle_all},
- [MESA_FORMAT_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_UNORM, 0},
- [MESA_FORMAT_ARGB8888] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, 0},
- [MESA_FORMAT_ARGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM, swizzle_all},
- [MESA_FORMAT_RGBX8888] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM, swizzle_all},
- [MESA_FORMAT_RGBX8888_REV] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM, 0},
- [MESA_FORMAT_XRGB8888] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM, 0},
- [MESA_FORMAT_XRGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM, swizzle_all},
- [MESA_FORMAT_RGB888] = {BRW_SURFACEFORMAT_R8G8B8_UNORM, swizzle_xyz},
- [MESA_FORMAT_BGR888] = {BRW_SURFACEFORMAT_R8G8B8_UNORM, 0},
- [MESA_FORMAT_RGB565] = {BRW_SURFACEFORMAT_B5G6R5_UNORM, 0},
- [MESA_FORMAT_RGB565_REV] = {BRW_SURFACEFORMAT_B5G6R5_UNORM, swizzle_xyz},
- [MESA_FORMAT_ARGB4444] = {BRW_SURFACEFORMAT_B4G4R4A4_UNORM, 0},
- [MESA_FORMAT_ARGB4444_REV] = {BRW_SURFACEFORMAT_B4G4R4A4_UNORM, swizzle_all},
- [MESA_FORMAT_RGBA5551] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM, swizzle_all},
- [MESA_FORMAT_ARGB1555] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM, 0},
- [MESA_FORMAT_ARGB1555_REV] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM, swizzle_yzw},
- [MESA_FORMAT_AL44] = {BRW_SURFACEFORMAT_L8A8_UNORM, scale_x},
- [MESA_FORMAT_AL88] = {BRW_SURFACEFORMAT_L8A8_UNORM, 0},
- [MESA_FORMAT_AL88_REV] = {BRW_SURFACEFORMAT_L8A8_UNORM, swizzle_xy},
- [MESA_FORMAT_AL1616] = {BRW_SURFACEFORMAT_L16A16_UNORM, 0},
- [MESA_FORMAT_AL1616_REV] = {BRW_SURFACEFORMAT_L16A16_UNORM, swizzle_xy},
- [MESA_FORMAT_RGB332] = {BRW_SURFACEFORMAT_B5G6R5_UNORM, scale_x},
- [MESA_FORMAT_A8] = {BRW_SURFACEFORMAT_A8_UNORM, 0},
- [MESA_FORMAT_A16] = {BRW_SURFACEFORMAT_A16_UNORM, 0},
- [MESA_FORMAT_L8] = {BRW_SURFACEFORMAT_L8_UNORM, 0},
- [MESA_FORMAT_L16] = {BRW_SURFACEFORMAT_L16_UNORM, 0},
- [MESA_FORMAT_I8] = {BRW_SURFACEFORMAT_I8_UNORM, 0},
- [MESA_FORMAT_I16] = {BRW_SURFACEFORMAT_I16_UNORM, 0},
- [MESA_FORMAT_YCBCR_REV] = {BRW_SURFACEFORMAT_YCRCB_NORMAL, 0},
- [MESA_FORMAT_YCBCR] = {BRW_SURFACEFORMAT_YCRCB_SWAPUVY, 0},
- [MESA_FORMAT_R8] = {BRW_SURFACEFORMAT_R8_UNORM, 0},
- [MESA_FORMAT_GR88] = {BRW_SURFACEFORMAT_R8G8_UNORM, 0},
- [MESA_FORMAT_RG88] = {BRW_SURFACEFORMAT_R8G8_UNORM, swizzle_xy},
- [MESA_FORMAT_R16] = {BRW_SURFACEFORMAT_R16_UNORM, 0},
- [MESA_FORMAT_GR1616] = {BRW_SURFACEFORMAT_R16G16_UNORM, 0},
- [MESA_FORMAT_RG1616] = {BRW_SURFACEFORMAT_R16G16_UNORM, swizzle_xy},
- [MESA_FORMAT_ARGB2101010] = {BRW_SURFACEFORMAT_B10G10R10A2_UNORM, 0},
- [MESA_FORMAT_Z24_S8] = {0, swizzle_all},
- [MESA_FORMAT_S8_Z24] = {0, swizzle_all},
- [MESA_FORMAT_Z16] = {0, swizzle_all},
- [MESA_FORMAT_X8_Z24] = {0, swizzle_all},
- [MESA_FORMAT_Z24_X8] = {0, swizzle_all},
- [MESA_FORMAT_Z32] = {0, swizzle_all},
- [MESA_FORMAT_S8] = {0, swizzle_all},
-
- [MESA_FORMAT_SRGB8] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB, swizzle_xyz},
- [MESA_FORMAT_SRGBA8] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, swizzle_all},
- [MESA_FORMAT_SARGB8] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB, 0},
- [MESA_FORMAT_SL8] = {BRW_SURFACEFORMAT_L8_UNORM_SRGB, 0},
- [MESA_FORMAT_SLA8] = {BRW_SURFACEFORMAT_L8A8_UNORM_SRGB, 0},
- [MESA_FORMAT_SRGB_DXT1] = {BRW_SURFACEFORMAT_DXT1_RGB_SRGB, 0},
- [MESA_FORMAT_SRGBA_DXT1] = {BRW_SURFACEFORMAT_BC1_UNORM_SRGB, 0},
- [MESA_FORMAT_SRGBA_DXT3] = {BRW_SURFACEFORMAT_BC2_UNORM_SRGB, 0},
- [MESA_FORMAT_SRGBA_DXT5] = {BRW_SURFACEFORMAT_BC3_UNORM_SRGB, 0},
-
- [MESA_FORMAT_RGB_FXT1] = {BRW_SURFACEFORMAT_FXT1, 0},
- [MESA_FORMAT_RGBA_FXT1] = {BRW_SURFACEFORMAT_FXT1, 0},
- [MESA_FORMAT_RGB_DXT1] = {BRW_SURFACEFORMAT_DXT1_RGB, 0},
- [MESA_FORMAT_RGBA_DXT1] = {BRW_SURFACEFORMAT_BC1_UNORM, 0},
- [MESA_FORMAT_RGBA_DXT3] = {BRW_SURFACEFORMAT_BC2_UNORM, 0},
- [MESA_FORMAT_RGBA_DXT5] = {BRW_SURFACEFORMAT_BC3_UNORM, 0},
-
- [MESA_FORMAT_RGBA_FLOAT32] = {BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, 0},
- [MESA_FORMAT_RGBA_FLOAT16] = {BRW_SURFACEFORMAT_R16G16B16A16_FLOAT, 0},
- [MESA_FORMAT_RGB_FLOAT32] = {BRW_SURFACEFORMAT_R32G32B32_FLOAT, 0},
- [MESA_FORMAT_RGB_FLOAT16] = {BRW_SURFACEFORMAT_R16G16B16_FLOAT, 0},
- [MESA_FORMAT_ALPHA_FLOAT32] = {BRW_SURFACEFORMAT_A32_FLOAT, 0},
- [MESA_FORMAT_ALPHA_FLOAT16] = {BRW_SURFACEFORMAT_A16_FLOAT, 0},
- [MESA_FORMAT_LUMINANCE_FLOAT32] = {BRW_SURFACEFORMAT_L32_FLOAT, 0},
- [MESA_FORMAT_LUMINANCE_FLOAT16] = {BRW_SURFACEFORMAT_L16_FLOAT, 0},
- [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = {BRW_SURFACEFORMAT_L32A32_FLOAT, 0},
- [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = {BRW_SURFACEFORMAT_L16A16_FLOAT, 0},
- [MESA_FORMAT_INTENSITY_FLOAT32] = {BRW_SURFACEFORMAT_I32_FLOAT, 0},
- [MESA_FORMAT_INTENSITY_FLOAT16] = {BRW_SURFACEFORMAT_I16_FLOAT, 0},
- [MESA_FORMAT_R_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT, 0},
- [MESA_FORMAT_R_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT, 0},
- [MESA_FORMAT_RG_FLOAT32] = {BRW_SURFACEFORMAT_R32G32_FLOAT, 0},
- [MESA_FORMAT_RG_FLOAT16] = {BRW_SURFACEFORMAT_R16G16_FLOAT, 0},
-
- [MESA_FORMAT_ALPHA_UINT8] = {BRW_SURFACEFORMAT_R8_UINT, type_convert | alpha_shadow},
- [MESA_FORMAT_ALPHA_UINT16] = {BRW_SURFACEFORMAT_R16_UINT, type_convert | alpha_shadow},
- [MESA_FORMAT_ALPHA_UINT32] = {BRW_SURFACEFORMAT_R32_UINT, type_convert | alpha_shadow},
- [MESA_FORMAT_ALPHA_INT8] = {BRW_SURFACEFORMAT_R8_SINT, type_convert | alpha_shadow},
- [MESA_FORMAT_ALPHA_INT16] = {BRW_SURFACEFORMAT_R16_SINT, type_convert | alpha_shadow},
- [MESA_FORMAT_ALPHA_INT32] = {BRW_SURFACEFORMAT_R32_SINT, type_convert | alpha_shadow},
-
- [MESA_FORMAT_INTENSITY_UINT8] = {BRW_SURFACEFORMAT_R8_UINT, type_convert | intensity_shadow},
- [MESA_FORMAT_INTENSITY_UINT16] = {BRW_SURFACEFORMAT_R16_UINT, type_convert | intensity_shadow},
- [MESA_FORMAT_INTENSITY_UINT32] = {BRW_SURFACEFORMAT_R32_UINT, type_convert | intensity_shadow},
- [MESA_FORMAT_INTENSITY_INT8] = {BRW_SURFACEFORMAT_R8_SINT, type_convert | intensity_shadow},
- [MESA_FORMAT_INTENSITY_INT16] = {BRW_SURFACEFORMAT_R16_SINT, type_convert | intensity_shadow},
- [MESA_FORMAT_INTENSITY_INT32] = {BRW_SURFACEFORMAT_R32_SINT, type_convert | intensity_shadow},
-
- [MESA_FORMAT_LUMINANCE_UINT8] = {BRW_SURFACEFORMAT_R8_UINT, type_convert | luminance_shadow},
- [MESA_FORMAT_LUMINANCE_UINT16] = {BRW_SURFACEFORMAT_R16_UINT, type_convert | luminance_shadow},
- [MESA_FORMAT_LUMINANCE_UINT32] = {BRW_SURFACEFORMAT_R32_UINT, type_convert | luminance_shadow},
- [MESA_FORMAT_LUMINANCE_INT8] = {BRW_SURFACEFORMAT_R8_SINT, type_convert | luminance_shadow},
- [MESA_FORMAT_LUMINANCE_INT16] = {BRW_SURFACEFORMAT_R16_SINT, type_convert | luminance_shadow},
- [MESA_FORMAT_LUMINANCE_INT32] = {BRW_SURFACEFORMAT_R32_SINT, type_convert | luminance_shadow},
-
- [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = {BRW_SURFACEFORMAT_R8_UINT, type_convert | luminance_shadow | alpha_shadow},
- [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = {BRW_SURFACEFORMAT_R16_UINT, type_convert | luminance_shadow | alpha_shadow},
- [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = {BRW_SURFACEFORMAT_R32_UINT, type_convert | luminance_shadow | alpha_shadow},
- [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = {BRW_SURFACEFORMAT_R8_SINT, type_convert | luminance_shadow | alpha_shadow},
- [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = {BRW_SURFACEFORMAT_R16_SINT, type_convert | luminance_shadow | alpha_shadow},
- [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = {BRW_SURFACEFORMAT_R32_SINT, type_convert | luminance_shadow | alpha_shadow},
-
- [MESA_FORMAT_R_INT8] = {BRW_SURFACEFORMAT_R8_SINT, type_convert},
- [MESA_FORMAT_RG_INT8] = {BRW_SURFACEFORMAT_R8G8_SINT, type_convert},
- [MESA_FORMAT_RGB_INT8] = {BRW_SURFACEFORMAT_R8G8B8_SINT, type_convert},
- [MESA_FORMAT_RGBA_INT8] = {BRW_SURFACEFORMAT_R8G8B8A8_SINT, type_convert},
- [MESA_FORMAT_R_INT16] = {BRW_SURFACEFORMAT_R16_SINT, type_convert},
- [MESA_FORMAT_RG_INT16] = {BRW_SURFACEFORMAT_R16G16_SINT, type_convert},
- [MESA_FORMAT_RGB_INT16] = {BRW_SURFACEFORMAT_R16G16B16_SINT, type_convert},
- [MESA_FORMAT_RGBA_INT16] = {BRW_SURFACEFORMAT_R16G16B16A16_SINT, type_convert},
- [MESA_FORMAT_R_INT32] = {BRW_SURFACEFORMAT_R32_SINT, type_convert},
- [MESA_FORMAT_RG_INT32] = {BRW_SURFACEFORMAT_R32G32_SINT, type_convert},
- [MESA_FORMAT_RGB_INT32] = {BRW_SURFACEFORMAT_R32G32B32_SINT, type_convert},
- [MESA_FORMAT_RGBA_INT32] = {BRW_SURFACEFORMAT_R32G32B32A32_SINT, type_convert},
-
- [MESA_FORMAT_R_UINT8] = {BRW_SURFACEFORMAT_R8_UINT, type_convert},
- [MESA_FORMAT_RG_UINT8] = {BRW_SURFACEFORMAT_R8G8_UINT, type_convert},
- [MESA_FORMAT_RGB_UINT8] = {BRW_SURFACEFORMAT_R8G8B8_UINT, type_convert},
- [MESA_FORMAT_RGBA_UINT8] = {BRW_SURFACEFORMAT_R8G8B8A8_UINT, type_convert},
- [MESA_FORMAT_R_UINT16] = {BRW_SURFACEFORMAT_R16_UINT, type_convert},
- [MESA_FORMAT_RG_UINT16] = {BRW_SURFACEFORMAT_R16G16_UINT, type_convert},
- [MESA_FORMAT_RGB_UINT16] = {BRW_SURFACEFORMAT_R16G16B16_UINT, type_convert},
- [MESA_FORMAT_RGBA_UINT16] = {BRW_SURFACEFORMAT_R16G16B16A16_UINT, type_convert},
- [MESA_FORMAT_R_UINT32] = {BRW_SURFACEFORMAT_R32_UINT, type_convert},
- [MESA_FORMAT_RG_UINT32] = {BRW_SURFACEFORMAT_R32G32_UINT, type_convert},
- [MESA_FORMAT_RGB_UINT32] = {BRW_SURFACEFORMAT_R32G32B32_UINT, type_convert},
- [MESA_FORMAT_RGBA_UINT32] = {BRW_SURFACEFORMAT_R32G32B32A32_UINT, type_convert},
-
- [MESA_FORMAT_DUDV8] = {BRW_SURFACEFORMAT_R8G8_SNORM, 0},
- [MESA_FORMAT_SIGNED_R8] = {BRW_SURFACEFORMAT_R8_SNORM, 0},
- [MESA_FORMAT_SIGNED_RG88_REV] = {BRW_SURFACEFORMAT_R8G8_SNORM, 0},
- [MESA_FORMAT_SIGNED_RGBX8888] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_RGBA8888] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM, 0},
- [MESA_FORMAT_SIGNED_R16] = {BRW_SURFACEFORMAT_R16_SNORM, 0},
- [MESA_FORMAT_SIGNED_GR1616] = {BRW_SURFACEFORMAT_R16G16_SNORM, 0},
- [MESA_FORMAT_SIGNED_RGB_16] = {BRW_SURFACEFORMAT_R16G16B16_SNORM, 0},
- [MESA_FORMAT_SIGNED_RGBA_16] = {BRW_SURFACEFORMAT_R16G16B16A16_SNORM, 0},
- [MESA_FORMAT_RGBA_16] = {BRW_SURFACEFORMAT_R16G16B16A16_UNORM, 0},
-
- [MESA_FORMAT_RED_RGTC1] = {BRW_SURFACEFORMAT_BC4_UNORM, 0},
- [MESA_FORMAT_SIGNED_RED_RGTC1] = {BRW_SURFACEFORMAT_BC4_SNORM, 0},
- [MESA_FORMAT_RG_RGTC2] = {BRW_SURFACEFORMAT_BC5_UNORM, 0},
- [MESA_FORMAT_SIGNED_RG_RGTC2] = {BRW_SURFACEFORMAT_BC5_SNORM, 0},
-
- [MESA_FORMAT_L_LATC1] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_L_LATC1] = {0, swizzle_all},
- [MESA_FORMAT_LA_LATC2] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_LA_LATC2] = {0, swizzle_all},
-
- [MESA_FORMAT_ETC1_RGB8] = {BRW_SURFACEFORMAT_ETC1_RGB8, 0},
- [MESA_FORMAT_ETC2_RGB8] = {BRW_SURFACEFORMAT_ETC2_RGB8, 0},
- [MESA_FORMAT_ETC2_SRGB8] = {BRW_SURFACEFORMAT_ETC2_SRGB8, 0},
- [MESA_FORMAT_ETC2_RGBA8_EAC] = {BRW_SURFACEFORMAT_ETC2_EAC_RGBA8, 0},
- [MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = {BRW_SURFACEFORMAT_ETC2_EAC_SRGB8_A8, 0},
- [MESA_FORMAT_ETC2_R11_EAC] = {BRW_SURFACEFORMAT_EAC_R11, 0},
- [MESA_FORMAT_ETC2_RG11_EAC] = {BRW_SURFACEFORMAT_EAC_RG11, 0},
- [MESA_FORMAT_ETC2_SIGNED_R11_EAC] = {BRW_SURFACEFORMAT_EAC_SIGNED_R11, 0},
- [MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = {BRW_SURFACEFORMAT_EAC_SIGNED_RG11, 0},
- [MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] = {BRW_SURFACEFORMAT_ETC2_RGB8_PTA, 0},
- [MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] = {BRW_SURFACEFORMAT_ETC2_SRGB8_PTA, 0},
-
- [MESA_FORMAT_SIGNED_A8] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_L8] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_AL88] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_I8] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_A16] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_L16] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_AL1616] = {0, swizzle_all},
- [MESA_FORMAT_SIGNED_I16] = {0, swizzle_all},
-
- [MESA_FORMAT_RGB9_E5_FLOAT] = {BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP, 0},
- [MESA_FORMAT_R11_G11_B10_FLOAT] = {BRW_SURFACEFORMAT_R11G11B10_FLOAT, 0},
-
- [MESA_FORMAT_Z32_FLOAT] = {0, swizzle_all},
- [MESA_FORMAT_Z32_FLOAT_X24S8] = {0, swizzle_all},
-
- [MESA_FORMAT_ARGB2101010_UINT] = {BRW_SURFACEFORMAT_B10G10R10A2_UINT, type_convert},
- [MESA_FORMAT_ABGR2101010_UINT] = {BRW_SURFACEFORMAT_R10G10B10A2_UINT, type_convert},
-
- [MESA_FORMAT_XRGB4444_UNORM] = {BRW_SURFACEFORMAT_R8G8_UNORM, swizzle_xy | scale_xy},
- [MESA_FORMAT_XRGB1555_UNORM] = {BRW_SURFACEFORMAT_B5G5R5X1_UNORM, 0},
- [MESA_FORMAT_XBGR8888_SNORM] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR8888_SRGB] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB, swizzle_all},
- [MESA_FORMAT_XBGR8888_UINT] = {BRW_SURFACEFORMAT_R8G8B8A8_UINT, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR8888_SINT] = {BRW_SURFACEFORMAT_R8G8B8A8_SINT, swizzle_all | x_shadow},
- [MESA_FORMAT_XRGB2101010_UNORM] = {BRW_SURFACEFORMAT_B10G10R10X2_UNORM, 0},
- [MESA_FORMAT_XBGR16161616_UNORM] = {BRW_SURFACEFORMAT_R16G16B16X16_UNORM, 0},
- [MESA_FORMAT_XBGR16161616_SNORM] = {BRW_SURFACEFORMAT_R16G16B16A16_SNORM, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR16161616_FLOAT] = {BRW_SURFACEFORMAT_R16G16B16X16_FLOAT, 0},
- [MESA_FORMAT_XBGR16161616_UINT] = {BRW_SURFACEFORMAT_R16G16B16A16_UINT, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR16161616_SINT] = {BRW_SURFACEFORMAT_R16G16B16A16_SINT, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR32323232_FLOAT] = {BRW_SURFACEFORMAT_R32G32B32X32_FLOAT, 0},
- [MESA_FORMAT_XBGR32323232_UINT] = {BRW_SURFACEFORMAT_R32G32B32A32_UINT, swizzle_all | x_shadow},
- [MESA_FORMAT_XBGR32323232_SINT] = {BRW_SURFACEFORMAT_R32G32B32A32_SINT, swizzle_all | x_shadow}
+ [MESA_FORMAT_RGBA8888] = {BRW_SURFACEFORMAT_R8G8B8A8_UNORM, /* shadow render target */
+ BRW_SURFACEFORMAT_R8G8B8A8_UNORM, /* shadow sample target */
+ swizzle_all}, /* gl_format to brw surface processing */
+ [MESA_FORMAT_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_UNORM,
+ BRW_SURFACEFORMAT_R8G8B8A8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_ARGB8888] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_ARGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ swizzle_all},
+ [MESA_FORMAT_RGBX8888] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ alpha_blend_render | swizzle_all},
+ [MESA_FORMAT_RGBX8888_REV] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ internal_format_en | alpha_blend_render | blorp_sample_target},
+ [MESA_FORMAT_XRGB8888] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ internal_format_en | alpha_blend_render | blorp_sample_target},
+ [MESA_FORMAT_XRGB8888_REV] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ alpha_blend_render | swizzle_all},
+ [MESA_FORMAT_RGB888] = {BRW_SURFACEFORMAT_R8_UNORM,
+ 0,
+ sample_scale | swizzle_xyz},
+ [MESA_FORMAT_BGR888] = {BRW_SURFACEFORMAT_R8_UNORM,
+ 0,
+ sample_scale},
+ [MESA_FORMAT_RGB565] = {BRW_SURFACEFORMAT_B5G6R5_UNORM,
+ BRW_SURFACEFORMAT_B5G6R5_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_RGB565_REV] = {BRW_SURFACEFORMAT_B5G6R5_UNORM,
+ BRW_SURFACEFORMAT_B5G6R5_UNORM,
+ swizzle_xyz},
+ [MESA_FORMAT_ARGB4444] = {BRW_SURFACEFORMAT_B4G4R4A4_UNORM,
+ BRW_SURFACEFORMAT_B4G4R4A4_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_ARGB4444_REV] = {BRW_SURFACEFORMAT_B4G4R4A4_UNORM,
+ BRW_SURFACEFORMAT_B4G4R4A4_UNORM,
+ swizzle_all},
+ [MESA_FORMAT_RGBA5551] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ swizzle_all},
+ [MESA_FORMAT_ARGB1555] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_ARGB1555_REV] = {BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ BRW_SURFACEFORMAT_B5G5R5A1_UNORM,
+ swizzle_yzw},
+ [MESA_FORMAT_AL44] = {BRW_SURFACEFORMAT_A8_UNORM,
+ BRW_SURFACEFORMAT_R8G8_UNORM,
+ scale_x},
+ [MESA_FORMAT_AL88] = {BRW_SURFACEFORMAT_L8A8_UNORM,
+ BRW_SURFACEFORMAT_R8G8_UNORM,
+ internal_format_en},
+ [MESA_FORMAT_AL88_REV] = {BRW_SURFACEFORMAT_L8A8_UNORM,
+ BRW_SURFACEFORMAT_R8G8_UNORM,
+ swizzle_xy},
+ [MESA_FORMAT_AL1616] = {BRW_SURFACEFORMAT_L16A16_UNORM,
+ BRW_SURFACEFORMAT_R16G16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_AL1616_REV] = {BRW_SURFACEFORMAT_L16A16_UNORM,
+ BRW_SURFACEFORMAT_R16G16_UNORM,
+ swizzle_xy},
+ [MESA_FORMAT_RGB332] = {BRW_SURFACEFORMAT_R8_UNORM,
+ BRW_SURFACEFORMAT_B5G6R5_UNORM,
+ scale_x},
+ [MESA_FORMAT_A8] = {BRW_SURFACEFORMAT_A8_UNORM,
+ BRW_SURFACEFORMAT_A8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_A16] = {BRW_SURFACEFORMAT_A16_UNORM,
+ BRW_SURFACEFORMAT_R16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_L8] = {BRW_SURFACEFORMAT_L8_UNORM,
+ BRW_SURFACEFORMAT_R8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_L16] = {BRW_SURFACEFORMAT_L16_UNORM,
+ BRW_SURFACEFORMAT_R16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_I8] = {BRW_SURFACEFORMAT_I8_UNORM,
+ BRW_SURFACEFORMAT_R8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_I16] = {BRW_SURFACEFORMAT_I16_UNORM,
+ BRW_SURFACEFORMAT_R16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_YCBCR_REV] = {BRW_SURFACEFORMAT_YCRCB_NORMAL,
+ BRW_SURFACEFORMAT_YCRCB_NORMAL,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_YCBCR] = {BRW_SURFACEFORMAT_YCRCB_SWAPUVY,
+ BRW_SURFACEFORMAT_YCRCB_SWAPUVY,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_R8] = {BRW_SURFACEFORMAT_R8_UNORM,
+ BRW_SURFACEFORMAT_R8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_GR88] = {BRW_SURFACEFORMAT_R8G8_UNORM,
+ BRW_SURFACEFORMAT_R8G8_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_RG88] = {BRW_SURFACEFORMAT_R8G8_UNORM,
+ BRW_SURFACEFORMAT_R8G8_UNORM,
+ swizzle_xy},
+ [MESA_FORMAT_R16] = {BRW_SURFACEFORMAT_R16_UNORM,
+ BRW_SURFACEFORMAT_R16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_GR1616] = {BRW_SURFACEFORMAT_R16G16_UNORM,
+ BRW_SURFACEFORMAT_R16G16_UNORM,
+ internal_format_en | blorp_render_target | blorp_sample_target},
+ [MESA_FORMAT_RG1616] = {BRW_SURFACEFORMAT_R16G16_UNORM,
+ BRW_SURFACEFORMAT_R16G16_UNORM,
+ swizzle_xy},
+ [MESA_FORMAT_ARGB2101010] = {BRW_SURFACEFORMAT_B10G10R10A2_UNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_Z24_S8] = {BRW_SURFACEFORMAT_I24X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ swizzle_all},
+ [MESA_FORMAT_S8_Z24] = {BRW_SURFACEFORMAT_I24X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ internal_format_en},
+ [MESA_FORMAT_Z16] = {BRW_SURFACEFORMAT_I16_UNORM,
+ BRW_SURFACEFORMAT_R16_UNORM,
+ 0},
+ [MESA_FORMAT_X8_Z24] = {BRW_SURFACEFORMAT_I24X8_UNORM,
+ BRW_SURFACEFORMAT_B8G8R8A8_UNORM,
+ internal_format_en},
+ [MESA_FORMAT_Z24_X8] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_Z32] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_S8] = {BRW_SURFACEFORMAT_R8_UNORM,
+ BRW_SURFACEFORMAT_R8_UNORM,
+ 0},
+
+ [MESA_FORMAT_SRGB8] = {BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB,
+ 0,
+ swizzle_xyz},
+ [MESA_FORMAT_SRGBA8] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SARGB8] = {BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SL8] = {BRW_SURFACEFORMAT_L8_UNORM_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SLA8] = {BRW_SURFACEFORMAT_L8A8_UNORM_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SRGB_DXT1] = {BRW_SURFACEFORMAT_DXT1_RGB_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SRGBA_DXT1] = {BRW_SURFACEFORMAT_BC1_UNORM_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SRGBA_DXT3] = {BRW_SURFACEFORMAT_BC2_UNORM_SRGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SRGBA_DXT5] = {BRW_SURFACEFORMAT_BC3_UNORM_SRGB,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_RGB_FXT1] = {BRW_SURFACEFORMAT_FXT1,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_FXT1] = {BRW_SURFACEFORMAT_FXT1,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_DXT1] = {BRW_SURFACEFORMAT_DXT1_RGB,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_DXT1] = {BRW_SURFACEFORMAT_BC1_UNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_DXT3] = {BRW_SURFACEFORMAT_BC2_UNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_DXT5] = {BRW_SURFACEFORMAT_BC3_UNORM,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_RGBA_FLOAT32] = {BRW_SURFACEFORMAT_R32G32B32A32_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_FLOAT16] = {BRW_SURFACEFORMAT_R16G16B16A16_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_FLOAT32] = {BRW_SURFACEFORMAT_R32G32B32_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_FLOAT16] = {BRW_SURFACEFORMAT_R16G16B16_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ALPHA_FLOAT32] = {BRW_SURFACEFORMAT_A32_FLOAT,
+ BRW_SURFACEFORMAT_R32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_ALPHA_FLOAT16] = {BRW_SURFACEFORMAT_A16_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_LUMINANCE_FLOAT32] = {BRW_SURFACEFORMAT_L32_FLOAT,
+ BRW_SURFACEFORMAT_R32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_LUMINANCE_FLOAT16] = {BRW_SURFACEFORMAT_L16_FLOAT,
+ BRW_SURFACEFORMAT_R16_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = {BRW_SURFACEFORMAT_L32A32_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = {BRW_SURFACEFORMAT_L16A16_FLOAT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_INTENSITY_FLOAT32] = {BRW_SURFACEFORMAT_I32_FLOAT,
+ BRW_SURFACEFORMAT_R32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_INTENSITY_FLOAT16] = {BRW_SURFACEFORMAT_I16_FLOAT,
+ BRW_SURFACEFORMAT_R16_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_R_FLOAT32] = {BRW_SURFACEFORMAT_R32_FLOAT,
+ BRW_SURFACEFORMAT_R32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_R_FLOAT16] = {BRW_SURFACEFORMAT_R16_FLOAT,
+ BRW_SURFACEFORMAT_R16_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_RG_FLOAT32] = {BRW_SURFACEFORMAT_R32G32_FLOAT_LD,
+ BRW_SURFACEFORMAT_R32G32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_RG_FLOAT16] = {BRW_SURFACEFORMAT_R16G16_FLOAT,
+ BRW_SURFACEFORMAT_R16G16_FLOAT,
+ internal_format_en},
+
+ [MESA_FORMAT_ALPHA_UINT8] = {BRW_SURFACEFORMAT_R8_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_ALPHA_UINT16] = {BRW_SURFACEFORMAT_R16_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_ALPHA_UINT32] = {BRW_SURFACEFORMAT_R32_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_ALPHA_INT8] = {BRW_SURFACEFORMAT_R8_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_ALPHA_INT16] = {BRW_SURFACEFORMAT_R16_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_ALPHA_INT32] = {BRW_SURFACEFORMAT_R32_SINT,
+ 0,
+ 0},
+
+ [MESA_FORMAT_INTENSITY_UINT8] = {BRW_SURFACEFORMAT_R8_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_INTENSITY_UINT16] = {BRW_SURFACEFORMAT_R16_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_INTENSITY_UINT32] = {BRW_SURFACEFORMAT_R32_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_INTENSITY_INT8] = {BRW_SURFACEFORMAT_R8_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_INTENSITY_INT16] = {BRW_SURFACEFORMAT_R16_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_INTENSITY_INT32] = {BRW_SURFACEFORMAT_R32_SINT,
+ 0,
+ 0},
+
+ [MESA_FORMAT_LUMINANCE_UINT8] = {BRW_SURFACEFORMAT_R8_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_LUMINANCE_UINT16] = {BRW_SURFACEFORMAT_R16_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_LUMINANCE_UINT32] = {BRW_SURFACEFORMAT_R32_UINT,
+ 0,
+ 0},
+ [MESA_FORMAT_LUMINANCE_INT8] = {BRW_SURFACEFORMAT_R8_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_LUMINANCE_INT16] = {BRW_SURFACEFORMAT_R16_SINT,
+ 0,
+ 0},
+ [MESA_FORMAT_LUMINANCE_INT32] = {BRW_SURFACEFORMAT_R32_SINT,
+ 0,
+ 0},
+
+ [MESA_FORMAT_LUMINANCE_ALPHA_UINT8] = {BRW_SURFACEFORMAT_R8_UINT,
+ 0,
+ 0 | 0},
+ [MESA_FORMAT_LUMINANCE_ALPHA_UINT16] = {BRW_SURFACEFORMAT_R16_UINT,
+ 0,
+ 0 | 0},
+ [MESA_FORMAT_LUMINANCE_ALPHA_UINT32] = {BRW_SURFACEFORMAT_R32_UINT,
+ 0,
+ 0 | 0},
+ [MESA_FORMAT_LUMINANCE_ALPHA_INT8] = {BRW_SURFACEFORMAT_R8_SINT,
+ 0,
+ 0 | 0},
+ [MESA_FORMAT_LUMINANCE_ALPHA_INT16] = {BRW_SURFACEFORMAT_R16_SINT,
+ 0,
+ 0 | 0},
+ [MESA_FORMAT_LUMINANCE_ALPHA_INT32] = {BRW_SURFACEFORMAT_R32_SINT,
+ 0,
+ 0 | 0},
+
+ [MESA_FORMAT_R_INT8] = {BRW_SURFACEFORMAT_R8_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_INT8] = {BRW_SURFACEFORMAT_R8G8_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_INT8] = {BRW_SURFACEFORMAT_R8G8B8_SINT,
+ 0,
+ sample_scale},
+ [MESA_FORMAT_RGBA_INT8] = {BRW_SURFACEFORMAT_R8G8B8A8_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_R_INT16] = {BRW_SURFACEFORMAT_R16_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_INT16] = {BRW_SURFACEFORMAT_R16G16_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_INT16] = {BRW_SURFACEFORMAT_R16G16B16_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_INT16] = {BRW_SURFACEFORMAT_R16G16B16A16_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_R_INT32] = {BRW_SURFACEFORMAT_R32_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_INT32] = {BRW_SURFACEFORMAT_R32G32_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_INT32] = {BRW_SURFACEFORMAT_R32G32B32_SINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_INT32] = {BRW_SURFACEFORMAT_R32G32B32A32_SINT, /* A-blend not supported */
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_R_UINT8] = {BRW_SURFACEFORMAT_R8_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_UINT8] = {BRW_SURFACEFORMAT_R8G8_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_UINT8] = {BRW_SURFACEFORMAT_R8G8B8_UINT,
+ 0,
+ sample_scale},
+ [MESA_FORMAT_RGBA_UINT8] = {BRW_SURFACEFORMAT_R8G8B8A8_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_R_UINT16] = {BRW_SURFACEFORMAT_R16_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_UINT16] = {BRW_SURFACEFORMAT_R16G16_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_UINT16] = {BRW_SURFACEFORMAT_R16G16B16_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_UINT16] = {BRW_SURFACEFORMAT_R16G16B16A16_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_R_UINT32] = {BRW_SURFACEFORMAT_R32_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_UINT32] = {BRW_SURFACEFORMAT_R32G32_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGB_UINT32] = {BRW_SURFACEFORMAT_R32G32B32_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_UINT32] = {BRW_SURFACEFORMAT_R32G32B32A32_UINT, /* A-blend not supported */
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_DUDV8] = {BRW_SURFACEFORMAT_R8G8_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_R8] = {BRW_SURFACEFORMAT_R8_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RG88_REV] = {BRW_SURFACEFORMAT_R8G8_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RGBX8888] = {0,
+ 0,
+ alpha_blend_render | swizzle_all},
+ [MESA_FORMAT_SIGNED_RGBA8888] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_RGBA8888_REV] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_R16] = {BRW_SURFACEFORMAT_R16_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_GR1616] = {BRW_SURFACEFORMAT_R16G16_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RGB_16] = {BRW_SURFACEFORMAT_R16G16B16_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RGBA_16] = {BRW_SURFACEFORMAT_R16G16B16A16_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RGBA_16] = {BRW_SURFACEFORMAT_R16G16B16A16_UNORM,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_RED_RGTC1] = {BRW_SURFACEFORMAT_BC4_UNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RED_RGTC1] = {BRW_SURFACEFORMAT_BC4_SNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_RG_RGTC2] = {BRW_SURFACEFORMAT_BC5_UNORM,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_SIGNED_RG_RGTC2] = {BRW_SURFACEFORMAT_BC5_SNORM,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_L_LATC1] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_L_LATC1] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_LA_LATC2] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_LA_LATC2] = {0,
+ 0,
+ swizzle_all},
+
+ [MESA_FORMAT_ETC1_RGB8] = {BRW_SURFACEFORMAT_ETC1_RGB8,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_RGB8] = {BRW_SURFACEFORMAT_ETC2_RGB8,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_SRGB8] = {BRW_SURFACEFORMAT_ETC2_SRGB8,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_RGBA8_EAC] = {BRW_SURFACEFORMAT_ETC2_EAC_RGBA8,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC] = {BRW_SURFACEFORMAT_ETC2_EAC_SRGB8_A8,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_R11_EAC] = {BRW_SURFACEFORMAT_EAC_R11,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_RG11_EAC] = {BRW_SURFACEFORMAT_EAC_RG11,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_SIGNED_R11_EAC] = {BRW_SURFACEFORMAT_EAC_SIGNED_R11,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_SIGNED_RG11_EAC] = {BRW_SURFACEFORMAT_EAC_SIGNED_RG11,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1] = {BRW_SURFACEFORMAT_ETC2_RGB8_PTA,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1] = {BRW_SURFACEFORMAT_ETC2_SRGB8_PTA,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_SIGNED_A8] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_L8] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_AL88] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_I8] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_A16] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_L16] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_AL1616] = {0,
+ 0,
+ swizzle_all},
+ [MESA_FORMAT_SIGNED_I16] = {0,
+ 0,
+ swizzle_all},
+
+ [MESA_FORMAT_RGB9_E5_FLOAT] = {BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_R11_G11_B10_FLOAT] = {BRW_SURFACEFORMAT_R11G11B10_FLOAT,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_Z32_FLOAT] = {BRW_SURFACEFORMAT_I32_FLOAT,
+ BRW_SURFACEFORMAT_R32_FLOAT,
+ internal_format_en},
+ [MESA_FORMAT_Z32_FLOAT_X24S8] = {BRW_SURFACEFORMAT_R32G32_FLOAT_LD,
+ BRW_SURFACEFORMAT_R32G32_FLOAT,
+ internal_format_en},
+
+ [MESA_FORMAT_ARGB2101010_UINT] = {BRW_SURFACEFORMAT_B10G10R10A2_UINT,
+ 0,
+ internal_format_en},
+ [MESA_FORMAT_ABGR2101010_UINT] = {BRW_SURFACEFORMAT_R10G10B10A2_UINT,
+ 0,
+ internal_format_en},
+
+ [MESA_FORMAT_XRGB4444_UNORM] = {BRW_SURFACEFORMAT_R8G8_UNORM,
+ 0,
+ alpha_blend_render | swizzle_xy | scale_xy},
+ [MESA_FORMAT_XRGB1555_UNORM] = {BRW_SURFACEFORMAT_B5G5R5X1_UNORM,
+ 0,
+ alpha_blend_render | internal_format_en},
+ [MESA_FORMAT_XBGR8888_SNORM] = {BRW_SURFACEFORMAT_R8G8B8A8_SNORM,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR8888_SRGB] = {BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB,
+ 0,
+ alpha_blend_render | swizzle_all},
+ [MESA_FORMAT_XBGR8888_UINT] = {BRW_SURFACEFORMAT_R8G8B8A8_UINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR8888_SINT] = {BRW_SURFACEFORMAT_R8G8B8A8_SINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XRGB2101010_UNORM] = {BRW_SURFACEFORMAT_B10G10R10X2_UNORM,
+ 0,
+ alpha_blend_render | internal_format_en},
+ [MESA_FORMAT_XBGR16161616_UNORM] = {BRW_SURFACEFORMAT_R16G16B16X16_UNORM,
+ 0,
+ alpha_blend_render | internal_format_en},
+ [MESA_FORMAT_XBGR16161616_SNORM] = {BRW_SURFACEFORMAT_R16G16B16A16_SNORM,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR16161616_FLOAT] = {BRW_SURFACEFORMAT_R16G16B16X16_FLOAT,
+ 0,
+ alpha_blend_render | internal_format_en},
+ [MESA_FORMAT_XBGR16161616_UINT] = {BRW_SURFACEFORMAT_R16G16B16A16_UINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR16161616_SINT] = {BRW_SURFACEFORMAT_R16G16B16A16_SINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR32323232_FLOAT] = {BRW_SURFACEFORMAT_R32G32B32X32_FLOAT,
+ 0,
+ alpha_blend_render | internal_format_en},
+ [MESA_FORMAT_XBGR32323232_UINT] = {BRW_SURFACEFORMAT_R32G32B32A32_UINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow},
+ [MESA_FORMAT_XBGR32323232_SINT] = {BRW_SURFACEFORMAT_R32G32B32A32_SINT,
+ 0,
+ alpha_blend_render | swizzle_all | x_shadow}
};
assert(mesa_format < MESA_PRIVATE_FORMAT_COUNT);
- *process_flags = table[mesa_format].process_flags;
- return table[mesa_format].brw_format;
+ if (process_flags) {
+ *process_flags = table[mesa_format].process_flags;
+ }
+ if (render_target) {
+ *render_target = table[mesa_format].brw_render_shadow_format;
+ }
+ if (sample_format) {
+ *sample_format = table[mesa_format].brw_sample_shadow_format;
+ }
}
void
brw_init_surface_formats(struct brw_context *brw)
{
struct gl_context *ctx = &brw->ctx;
- int gen;
- gl_format format;
memset(&ctx->TextureFormatSupported, 0, sizeof(ctx->TextureFormatSupported));
- gen = brw->gen * 10;
- if (brw->is_g4x || brw->is_haswell)
- gen += 5;
-
- for (format = MESA_FORMAT_NONE + 1; format < MESA_FORMAT_COUNT; format++) {
- uint32_t texture, render;
- const struct surface_format_info *rinfo, *tinfo;
- bool is_integer = _mesa_is_format_integer_color(format);
+ const int gen = (brw->gen * 10) + (brw->is_g4x ? 5 : 0);
+ for (gl_format format = MESA_FORMAT_NONE + 1; format < MESA_FORMAT_COUNT; format++) {
+ BRW_SURFACE sample_surface, render_surface;
blorp_process_format process_flags;
- render = texture = brw_format_for_mesa_format(format, &process_flags);
- tinfo = &surface_formats[texture];
+ brw_format_for_mesa_format(format, &process_flags, &render_surface, &sample_surface);
- /* The value of BRW_SURFACEFORMAT_R32G32B32A32_FLOAT is 0, so don't skip
- * it.
- */
- if (texture == 0 && format != MESA_FORMAT_RGBA_FLOAT32)
- continue;
-
- process_flags &= supported_mask;
- if (gen >= tinfo->sampling && (gen >= tinfo->filtering || is_integer) && 0 == process_flags)
- ctx->TextureFormatSupported[format] = true;
-
- /* Re-map some render target formats to make them supported when they
- * wouldn't be using their format for texturing.
- */
- switch (render) {
- /* For these formats, we just need to read/write the first
- * channel into R, which is to say that we just treat them as
- * GL_RED.
- */
- case BRW_SURFACEFORMAT_I32_FLOAT:
- case BRW_SURFACEFORMAT_L32_FLOAT:
- render = BRW_SURFACEFORMAT_R32_FLOAT;
- break;
- case BRW_SURFACEFORMAT_I16_FLOAT:
- case BRW_SURFACEFORMAT_L16_FLOAT:
- render = BRW_SURFACEFORMAT_R16_FLOAT;
- break;
- case BRW_SURFACEFORMAT_B8G8R8X8_UNORM:
- /* XRGB is handled as ARGB because the chips in this family
- * cannot render to XRGB targets. This means that we have to
- * mask writes to alpha (ala glColorMask) and reconfigure the
- * alpha blending hardware to use GL_ONE (or GL_ZERO) for
- * cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is
- * used.
- */
- render = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
- break;
- }
-
- rinfo = &surface_formats[render];
+ ctx->TextureFormatSupported[format] = 0 != (process_flags & internal_format_en);
+ 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.
*/
- if (gen >= rinfo->render_target &&
- (gen >= rinfo->alpha_blend || is_integer)) {
- brw->render_target_format[format] = render;
- brw->format_supported_as_render_target[format] = true;
- }
+ const bool is_integer = _mesa_is_format_integer_color(format);
+ brw->format_supported_as_render_target[format] =
+ gen >= render_target_info.render_target &&
+ (gen >= render_target_info.alpha_blend || /* SINTs, UINTs, and YCRCB don't alpha blend. */
+ is_integer);
}
- /* We will check this table for FBO completeness, but the surface format
- * table above only covered color rendering.
- */
- brw->format_supported_as_render_target[MESA_FORMAT_S8_Z24] = true;
- brw->format_supported_as_render_target[MESA_FORMAT_X8_Z24] = true;
- brw->format_supported_as_render_target[MESA_FORMAT_S8] = true;
- brw->format_supported_as_render_target[MESA_FORMAT_Z16] = true;
- brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT] = true;
- brw->format_supported_as_render_target[MESA_FORMAT_Z32_FLOAT_X24S8] = true;
-
- /* We remap depth formats to a supported texturing format in
- * translate_tex_format().
- */
- ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = true;
- ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = true;
- ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT] = true;
- ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8] = true;
-
/* It appears that Z16 is slower than Z24 (on Intel Ivybridge and newer
* hardware at least), so there's no real reason to prefer it unless you're
* under memory (not memory bandwidth) pressure. Our speculation is that
@@ -705,36 +1018,19 @@ brw_render_target_supported(struct brw_context *brw,
return brw->format_supported_as_render_target[format];
}
-GLuint
+void
translate_tex_format(struct brw_context *brw,
gl_format mesa_format,
GLenum srgb_decode,
- bool for_render,
- blorp_process_format *process_flags)
+ blorp_process_format *process_flags,
+ BRW_SURFACE *render_surface,
+ BRW_SURFACE *sample_surface)
{
if (srgb_decode == GL_SKIP_DECODE_EXT)
mesa_format = _mesa_get_srgb_format_linear(mesa_format);
- switch( mesa_format ) {
-
- case MESA_FORMAT_S8:
- return BRW_SURFACEFORMAT_R8_UNORM;
-
- case MESA_FORMAT_Z16:
- return BRW_SURFACEFORMAT_R16_UNORM;
-
- case MESA_FORMAT_S8_Z24:
- case MESA_FORMAT_X8_Z24:
- return BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS;
-
- case MESA_FORMAT_Z32_FLOAT:
- return BRW_SURFACEFORMAT_R32_FLOAT;
-
- case MESA_FORMAT_Z32_FLOAT_X24S8:
- return BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS;
-
- case MESA_FORMAT_SRGB_DXT1:
- if (brw->gen == 4 && !brw->is_g4x) {
+ if (mesa_format == MESA_FORMAT_SRGB_DXT1 &&
+ (brw->gen == 4 && !brw->is_g4x)) {
/* Work around missing SRGB DXT1 support on original gen4 by just
* skipping SRGB decode. It's not worth not supporting sRGB in
* general to prevent this.
@@ -744,9 +1040,8 @@ translate_tex_format(struct brw_context *brw,
mesa_format = MESA_FORMAT_RGB_DXT1;
}
- default:
- return brw_format_for_mesa_format(mesa_format, process_flags);
- }
+ brw_format_for_mesa_format(mesa_format, process_flags,
+ render_surface, sample_surface);
}
/** Can HiZ be enabled on a depthbuffer of the given format? */
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 0b5174f42b..89de307fc3 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -239,7 +239,8 @@ brw_update_buffer_texture_surface(struct gl_context *ctx,
drm_intel_bo *bo = NULL;
gl_format format = tObj->_BufferObjectFormat;
blorp_process_format process_flags;
- uint32_t brw_format = brw_format_for_mesa_format(format, &process_flags);
+ BRW_SURFACE brw_format;
+ brw_format_for_mesa_format(format, &process_flags, 0, &brw_format);
int texel_size = _mesa_get_format_bytes(format);
if (intel_obj) {
@@ -286,14 +287,26 @@ brw_update_texture_surface(struct gl_context *ctx,
(void) for_gather; /* no w/a to apply for this gen */
blorp_process_format process_flags;
+ BRW_SURFACE brw_surface;
+ BRW_SURFACE *dst_format;
+ BRW_SURFACE *src_format;
+
+ if (for_gather) {
+ dst_format = 0;
+ src_format = &brw_surface;
+ } else {
+ dst_format = &brw_surface;
+ src_format = 0;
+ }
+ translate_tex_format(brw,
+ mt->format,
+ sampler->sRGBDecode,
+ &process_flags, dst_format, src_format);
+
surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT |
BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT |
BRW_SURFACE_CUBEFACE_ENABLES |
- (translate_tex_format(brw,
- mt->format,
- sampler->sRGBDecode,
- false, &process_flags) <<
- BRW_SURFACE_FORMAT_SHIFT));
+ (brw_surface << BRW_SURFACE_FORMAT_SHIFT));
surf[1] = intelObj->mt->region->bo->offset + intelObj->mt->offset; /* reloc */
@@ -597,7 +610,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
struct intel_region *region;
uint32_t *surf;
uint32_t tile_x, tile_y;
- uint32_t format = 0;
+
/* _NEW_BUFFERS */
gl_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
uint32_t surf_index =
@@ -627,8 +640,11 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32,
&brw->wm.base.surf_offset[surf_index]);
- format = brw->render_target_format[rb_format];
- if (unlikely(!brw->format_supported_as_render_target[rb_format])) {
+ blorp_process_format process_format_flags;
+ BRW_SURFACE format;
+ brw_format_for_mesa_format(format, &process_format_flags, &format, 0);
+
+ if (unlikely(!brw_format_for_render(brw, rb_format))) {
_mesa_problem(ctx, "%s: renderbuffer format %s unsupported\n",
__FUNCTION__, _mesa_get_format_name(rb_format));
}
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 ac57f7f066..4cd294d15e 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
@@ -290,12 +290,22 @@ gen7_update_texture_surface(struct gl_context *ctx,
memset(surf, 0, 8 * 4);
blorp_process_format process_flags;
- uint32_t tex_format = translate_tex_format(brw,
- mt->format,
- sampler->sRGBDecode);
+ BRW_SURFACE tex_format;
+ BRW_SURFACE *dst_format;
+ BRW_SURFACE *src_format;
- if (for_gather && tex_format == BRW_SURFACEFORMAT_R32G32_FLOAT)
- tex_format = BRW_SURFACEFORMAT_R32G32_FLOAT_LD;
+ if (for_gather) {
+ dst_format = 0;
+ src_format = &tex_format;
+ } else {
+ dst_format = &tex_format;
+ src_format = 0;
+ }
+
+ translate_tex_format(brw,
+ mt->format,
+ sampler->sRGBDecode,
+ &process_flags, dst_format, src_format);
surf[0] = translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT |
tex_format << BRW_SURFACE_FORMAT_SHIFT |
@@ -440,7 +450,6 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
struct gl_context *ctx = &brw->ctx;
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
struct intel_region *region = irb->mt->region;
- uint32_t format;
/* _NEW_BUFFERS */
gl_format rb_format = _mesa_get_render_format(ctx, intel_rb_format(irb));
uint32_t surftype;
@@ -464,7 +473,8 @@ gen7_update_renderbuffer_surface(struct brw_context *brw,
assert(irb->mt->msaa_layout != INTEL_MSAA_LAYOUT_IMS);
assert(brw_render_target_supported(brw, rb));
- format = brw->render_target_format[rb_format];
+ BRW_SURFACE format;
+ brw_format_for_mesa_format(rb_format, 0, &format, 0);
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));