summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/etnaviv/etnaviv_screen.c
diff options
context:
space:
mode:
authorJonathan Marek <jonathan@marek.ca>2019-10-20 02:21:43 -0400
committerJonathan Marek <jonathan@marek.ca>2019-12-13 09:09:08 -0500
commitb7730c54a9243405f87eadfdfc72562e821c27fb (patch)
tree26cabee4e44cbb7dc3cec1095f4d4b74517e507b /src/gallium/drivers/etnaviv/etnaviv_screen.c
parent39349e629a8428e01fff2a83e3067518cdec0d82 (diff)
etnaviv: sRGB render target support
Note: no srgb render target support before HALTI3 Signed-off-by: Jonathan Marek <jonathan@marek.ca> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Diffstat (limited to 'src/gallium/drivers/etnaviv/etnaviv_screen.c')
-rw-r--r--src/gallium/drivers/etnaviv/etnaviv_screen.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 1f515ade6fd..823042a1f25 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -413,6 +413,28 @@ gpu_supports_texture_format(struct etna_screen *screen, uint32_t fmt,
}
static bool
+gpu_supports_render_format(struct etna_screen *screen, enum pipe_format format,
+ unsigned sample_count)
+{
+ if (translate_pe_format(format) == ETNA_NO_MATCH)
+ return false;
+
+ /* Validate MSAA; number of samples must be allowed, and render target
+ * must have MSAA'able format. */
+ if (sample_count > 1) {
+ if (!translate_samples_to_xyscale(sample_count, NULL, NULL))
+ return false;
+ if (translate_ts_format(format) == ETNA_NO_MATCH)
+ return false;
+ }
+
+ if (util_format_is_srgb(format))
+ return VIV_FEATURE(screen, chipMinorFeatures5, HALTI3);
+
+ return true;
+}
+
+static bool
etna_screen_is_format_supported(struct pipe_screen *pscreen,
enum pipe_format format,
enum pipe_texture_target target,
@@ -430,19 +452,8 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen,
return false;
if (usage & PIPE_BIND_RENDER_TARGET) {
- /* if render target, must be RS-supported format */
- if (translate_pe_format(format) != ETNA_NO_MATCH) {
- /* Validate MSAA; number of samples must be allowed, and render target
- * must have MSAA'able format. */
- if (sample_count > 1) {
- if (translate_samples_to_xyscale(sample_count, NULL, NULL) &&
- translate_ts_format(format) != ETNA_NO_MATCH) {
- allowed |= PIPE_BIND_RENDER_TARGET;
- }
- } else {
- allowed |= PIPE_BIND_RENDER_TARGET;
- }
- }
+ if (gpu_supports_render_format(screen, format, sample_count))
+ allowed |= PIPE_BIND_RENDER_TARGET;
}
if (usage & PIPE_BIND_DEPTH_STENCIL) {