diff options
author | Marek Olšák <[email protected]> | 2018-05-23 22:56:25 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-07-31 18:28:41 -0400 |
commit | 7d36c866d27f60685ae471264c2059c5b52e0e48 (patch) | |
tree | 1819677ad8a1c44c0652b0361634ec16b1153272 /src/gallium/drivers/radeonsi/si_state.c | |
parent | 20dd75a9268a1adf0a8b47267ba2c5acc55cb207 (diff) |
radeonsi: report supported EQAA combinations from is_format_supported
Framebuffer without attachments now supports 16 samples.
Tested-by: Dieter Nützel <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index a1b00cb979a..fc1ec83931f 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -2143,6 +2143,9 @@ static boolean si_is_format_supported(struct pipe_screen *screen, return false; } + if (MAX2(1, sample_count) < MAX2(1, storage_sample_count)) + return false; + if (sample_count > 1) { if (!screen->get_param(screen, PIPE_CAP_TEXTURE_MULTISAMPLE)) return false; @@ -2150,25 +2153,26 @@ static boolean si_is_format_supported(struct pipe_screen *screen, if (usage & PIPE_BIND_SHADER_IMAGE) return false; - if (sample_count != storage_sample_count) + /* Only power-of-two sample counts are supported. */ + if (!util_is_power_of_two_or_zero(sample_count) || + !util_is_power_of_two_or_zero(storage_sample_count)) return false; - switch (sample_count) { - case 2: - case 4: - case 8: - break; - case 16: - /* Allow resource_copy_region with nr_samples == 16. */ - if (sscreen->eqaa_force_coverage_samples == 16 && - !util_format_is_depth_or_stencil(format)) - return true; - if (format == PIPE_FORMAT_NONE) - return true; - else + /* MSAA support without framebuffer attachments. */ + if (format == PIPE_FORMAT_NONE && sample_count <= 16) + return true; + + if (!sscreen->info.has_eqaa_surface_allocator || + util_format_is_depth_or_stencil(format)) { + /* Color without EQAA or depth/stencil. */ + if (sample_count > 8 || + sample_count != storage_sample_count) + return false; + } else { + /* Color with EQAA. */ + if (sample_count > 16 || + storage_sample_count > 8) return false; - default: - return false; } } |