freedreno/a3xx: output RGBA16_FLOAT from fs for certain outputs

Fixes R11G11B10F rendering, and is required for SRGB format support.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
Ilia Mirkin 2014-12-02 01:00:47 -05:00
parent 3674c76edf
commit 39a7c049d3
3 changed files with 17 additions and 1 deletions

View file

@ -316,6 +316,19 @@ fd3_gmem_restore_format(enum pipe_format format)
}
}
enum a3xx_color_fmt
fd3_fs_output_format(enum pipe_format format)
{
if (util_format_is_srgb(format))
return RB_R16G16B16A16_FLOAT;
switch (format) {
case PIPE_FORMAT_R11G11B10_FLOAT:
return RB_R16G16B16A16_FLOAT;
default:
return fd3_pipe2color(format);
}
}
static inline enum a3xx_tex_swiz
tex_swiz(unsigned swiz)
{

View file

@ -35,6 +35,7 @@ enum a3xx_tex_fmt fd3_pipe2tex(enum pipe_format format);
enum a3xx_tex_fetchsize fd3_pipe2fetchsize(enum pipe_format format);
enum a3xx_color_fmt fd3_pipe2color(enum pipe_format format);
enum pipe_format fd3_gmem_restore_format(enum pipe_format format);
enum a3xx_color_fmt fd3_fs_output_format(enum pipe_format format);
enum a3xx_color_swap fd3_pipe2swap(enum pipe_format format);
uint32_t fd3_tex_swiz(enum pipe_format format, unsigned swizzle_r,

View file

@ -101,7 +101,9 @@ emit_mrt(struct fd_ringbuffer *ring, unsigned nr_bufs,
}
OUT_PKT0(ring, REG_A3XX_SP_FS_IMAGE_OUTPUT_REG(i), 1);
OUT_RING(ring, A3XX_SP_FS_IMAGE_OUTPUT_REG_MRTFORMAT(format));
OUT_RING(ring, COND((i < nr_bufs) && bufs[i],
A3XX_SP_FS_IMAGE_OUTPUT_REG_MRTFORMAT(
fd3_fs_output_format(bufs[i]->format))));
}
}