radv: fix number of PS samples with VK_AMD_mixed_attachment_samples
From the Vulkan spec: "If the VK_AMD_mixed_attachment_samples extension is enabled and the subpass uses color attachments, the samples value used to create each color attachment is used instead of rasterizationSamples." Found by inspection, though I don't think this extension is widely used. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19907>
This commit is contained in:

committed by
Marge Bot

parent
9eccb54dbf
commit
4301f1d892
@@ -900,19 +900,6 @@ radv_pipeline_depth_samples(const struct vk_graphics_pipeline_state *state)
|
||||
return state->ms ? state->ms->rasterization_samples : 1;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
radv_pipeline_get_ps_iter_samples(const struct vk_graphics_pipeline_state *state)
|
||||
{
|
||||
uint32_t ps_iter_samples = 1;
|
||||
uint32_t num_samples = radv_pipeline_color_samples(state);
|
||||
|
||||
if (state->ms && state->ms->sample_shading_enable) {
|
||||
ps_iter_samples = ceilf(state->ms->min_sample_shading * num_samples);
|
||||
ps_iter_samples = util_next_power_of_two(ps_iter_samples);
|
||||
}
|
||||
return ps_iter_samples;
|
||||
}
|
||||
|
||||
static bool
|
||||
radv_is_depth_write_enabled(const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
@@ -1101,10 +1088,19 @@ radv_pipeline_init_multisample_state(struct radv_graphics_pipeline *pipeline,
|
||||
*
|
||||
* Otherwise, sample shading is considered disabled."
|
||||
*/
|
||||
if (pipeline->base.shaders[MESA_SHADER_FRAGMENT]->info.ps.uses_sample_shading ||
|
||||
(state->ms && state->ms->sample_shading_enable)) {
|
||||
uint32_t color_samples = radv_pipeline_color_samples(state);
|
||||
float min_sample_shading;
|
||||
|
||||
if (pipeline->base.shaders[MESA_SHADER_FRAGMENT]->info.ps.uses_sample_shading) {
|
||||
ps_iter_samples = ms->num_samples;
|
||||
min_sample_shading = 1.0f;
|
||||
} else {
|
||||
ps_iter_samples = radv_pipeline_get_ps_iter_samples(state);
|
||||
min_sample_shading = state->ms->min_sample_shading;
|
||||
}
|
||||
|
||||
ps_iter_samples = ceilf(min_sample_shading * color_samples);
|
||||
ps_iter_samples = util_next_power_of_two(ps_iter_samples);
|
||||
}
|
||||
|
||||
if (state->rs->rasterization_order_amd == VK_RASTERIZATION_ORDER_RELAXED_AMD) {
|
||||
|
Reference in New Issue
Block a user