diff --git a/src/intel/ci/anv-tgl-fails.txt b/src/intel/ci/anv-tgl-fails.txt index 1da7b9123cd..1cfb087c289 100644 --- a/src/intel/ci/anv-tgl-fails.txt +++ b/src/intel/ci/anv-tgl-fails.txt @@ -1,13 +1,712 @@ # Until we bump CTS to Vulkan 1.3 dEQP-VK.info.device_properties,Fail +# Fixed by VK-GL-CTS change-id I34f5dd2cbccae2a695cbe05a22908ba544b0a6a6 +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_17_1.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_min_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_average_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_max_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_min_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_none_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_none_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_none_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_min_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_none_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint.compatibility_depth_zero_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_average_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_min_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_min_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d24_unorm_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_min_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_average_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_max_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_min_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_none_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_none_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_none_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_min_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_none_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint.compatibility_depth_zero_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_average_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_max_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_min_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_min_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_none_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_min_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_none_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_max_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_min_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_none_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_unused_resolve_testing_depth,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_32_32.samples_2.d32_sfloat_s8_uint_separate_layouts.compatibility_depth_zero_stencil_zero_unused_resolve_testing_stencil,Crash +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_49_13.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_16.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_2.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_4.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_average_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_max_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_min_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_none_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d24_unorm_s8_uint_separate_layouts.depth_zero_stencil_none_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_average_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_max_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_max_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_min_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_none_stencil_zero_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_min_unused_resolve_testing_stencil,Fail +dEQP-VK.renderpass2.depth_stencil_resolve.image_2d_8_32.samples_8.d32_sfloat_s8_uint_separate_layouts.depth_zero_stencil_zero_unused_resolve_testing_stencil,Fail + +# Fixed by VK-GL-CTS change-id Ia23c96f92d86283bc4094899f9473e2b35cf8490 +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a2b10g10r10_uint_pack32.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_sint_pack32.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_sint_pack32.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_sint_pack32.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_sint_pack32.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.a8b8g8r8_uint_pack32.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a2b10g10r10_uint_pack32.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a2b10g10r10_uint_pack32.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a2b10g10r10_uint_pack32.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a2b10g10r10_uint_pack32.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_sint_pack32.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_uint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.a8b8g8r8_uint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16b16a16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16g16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32b32a32_uint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32g32_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8b8a8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a2b10g10r10_uint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a2b10g10r10_uint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.a8b8g8r8_sint_pack32.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16b16a16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16g16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32b32a32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32g32_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r32_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8b8a8_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16b16a16_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16g16_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32b32a32_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_uint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32g32_uint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r32_uint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8b8a8_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_2,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_3,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_4,Crash +dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_4_resolve_level_2,Crash + # 1.2.8.0 uprev: dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sfloat.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sfloat.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sfloat.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_4_resolve_level_4,Fail @@ -17,41 +716,20 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unor dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_sint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_uint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.samples_8_resolve_level_2,Fail @@ -59,41 +737,20 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.sa dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sfloat.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sfloat.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_uint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_uint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_unorm.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_sint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_snorm.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_snorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_snorm.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_sint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_uint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_unorm.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_unorm.samples_4_resolve_level_2,Fail @@ -101,22 +758,11 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_unorm.sa dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_unorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sfloat.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sfloat.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_2_resolve_level_4,Fail @@ -128,30 +774,14 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r5g6b5_unorm_pack16. dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r5g6b5_unorm_pack16.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r5g6b5_unorm_pack16.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r5g6b5_unorm_pack16.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_uint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_unorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_unorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_unorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_unorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_unorm.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_4_resolve_level_2,Fail @@ -160,8 +790,6 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_4_r dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_snorm.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_2_resolve_level_4,Fail @@ -169,14 +797,9 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_2_r dEQP-VK.pipeline.extended_dynamic_state.before_draw.stencil_state_face_front_gt_dec_clamp_clear_0_ref_1_depthfail,Fail # https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3482 -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_sint.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_snorm.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_uint.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_unorm.samples_2_resolve_level_4,Fail @@ -184,27 +807,16 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r16_unorm.s dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r5g6b5_unorm_pack16.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_sint.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_snorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_snorm.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_uint.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_3.r8g8_unorm.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sfloat.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_sint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_snorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_snorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r16_snorm.samples_2_resolve_level_4,Fail @@ -216,11 +828,6 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r5g6b5_unor dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_snorm.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8_uint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_uint.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_unorm.samples_2_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_unorm.samples_2_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.layers_6.r8g8_unorm.samples_2_resolve_level_4,Fail @@ -230,29 +837,14 @@ dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sfloat.samples_2 dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sfloat.samples_2_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_sfloat.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_snorm.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_4_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_uint.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_8_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_8_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r16_unorm.samples_8_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r5g6b5_unorm_pack16.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_sint.samples_8_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_uint.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_4_resolve_level_4,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8_unorm.samples_8_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_2,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_3,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_2_resolve_level_4,Fail -dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_sint.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_4_resolve_level_2,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_4_resolve_level_3,Fail dEQP-VK.dynamic_rendering.suballocation.multisample_resolve.r8g8_snorm.samples_4_resolve_level_4,Fail diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index ebd1edc20ce..9f6029657e3 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -1210,22 +1210,17 @@ clear_color_attachment(struct anv_cmd_buffer *cmd_buffer, const VkClearAttachment *attachment, uint32_t rectCount, const VkClearRect *pRects) { - const struct anv_subpass *subpass = cmd_buffer->state.subpass; - const uint32_t color_att = attachment->colorAttachment; - assert(color_att < subpass->color_count); - const uint32_t att_idx = subpass->color_attachments[color_att].attachment; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + const uint32_t att_idx = attachment->colorAttachment; + assert(att_idx < gfx->color_att_count); + const struct anv_attachment *att = &gfx->color_att[att_idx]; - if (att_idx == VK_ATTACHMENT_UNUSED) + if (att->vk_format == VK_FORMAT_UNDEFINED) return; - struct anv_render_pass_attachment *pass_att = - &cmd_buffer->state.pass->attachments[att_idx]; - struct anv_attachment_state *att_state = - &cmd_buffer->state.attachments[att_idx]; - uint32_t binding_table; VkResult result = - binding_table_for_surface_state(cmd_buffer, att_state->color.state, + binding_table_for_surface_state(cmd_buffer, att->surface_state.state, &binding_table); if (result != VK_SUCCESS) return; @@ -1234,13 +1229,14 @@ clear_color_attachment(struct anv_cmd_buffer *cmd_buffer, vk_to_isl_color(attachment->clearValue.color); /* If multiview is enabled we ignore baseArrayLayer and layerCount */ - if (subpass->view_mask) { - u_foreach_bit(view_idx, subpass->view_mask) { + if (gfx->view_mask) { + u_foreach_bit(view_idx, gfx->view_mask) { for (uint32_t r = 0; r < rectCount; ++r) { const VkOffset2D offset = pRects[r].rect.offset; const VkExtent2D extent = pRects[r].rect.extent; blorp_clear_attachments(batch, binding_table, - ISL_FORMAT_UNSUPPORTED, pass_att->samples, + ISL_FORMAT_UNSUPPORTED, + gfx->samples, view_idx, 1, offset.x, offset.y, offset.x + extent.width, @@ -1256,7 +1252,8 @@ clear_color_attachment(struct anv_cmd_buffer *cmd_buffer, const VkExtent2D extent = pRects[r].rect.extent; assert(pRects[r].layerCount != VK_REMAINING_ARRAY_LAYERS); blorp_clear_attachments(batch, binding_table, - ISL_FORMAT_UNSUPPORTED, pass_att->samples, + ISL_FORMAT_UNSUPPORTED, + gfx->samples, pRects[r].baseArrayLayer, pRects[r].layerCount, offset.x, offset.y, @@ -1272,22 +1269,20 @@ clear_depth_stencil_attachment(struct anv_cmd_buffer *cmd_buffer, uint32_t rectCount, const VkClearRect *pRects) { static const union isl_color_value color_value = { .u32 = { 0, } }; - const struct anv_subpass *subpass = cmd_buffer->state.subpass; - if (!subpass->depth_stencil_attachment) + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + const struct anv_attachment *d_att = &gfx->depth_att; + const struct anv_attachment *s_att = &gfx->stencil_att; + if (d_att->vk_format == VK_FORMAT_UNDEFINED && + s_att->vk_format == VK_FORMAT_UNDEFINED) return; - const uint32_t att_idx = subpass->depth_stencil_attachment->attachment; - assert(att_idx != VK_ATTACHMENT_UNUSED); - struct anv_render_pass_attachment *pass_att = - &cmd_buffer->state.pass->attachments[att_idx]; - bool clear_depth = attachment->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT; bool clear_stencil = attachment->aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT; enum isl_format depth_format = ISL_FORMAT_UNSUPPORTED; - if (clear_depth) { + if (d_att->vk_format != VK_FORMAT_UNDEFINED) { depth_format = anv_get_isl_format(&cmd_buffer->device->info, - pass_att->format, + d_att->vk_format, VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_TILING_OPTIMAL); } @@ -1295,20 +1290,21 @@ clear_depth_stencil_attachment(struct anv_cmd_buffer *cmd_buffer, uint32_t binding_table; VkResult result = binding_table_for_surface_state(cmd_buffer, - cmd_buffer->state.null_surface_state, + gfx->null_surface_state, &binding_table); if (result != VK_SUCCESS) return; /* If multiview is enabled we ignore baseArrayLayer and layerCount */ - if (subpass->view_mask) { - u_foreach_bit(view_idx, subpass->view_mask) { + if (gfx->view_mask) { + u_foreach_bit(view_idx, gfx->view_mask) { for (uint32_t r = 0; r < rectCount; ++r) { const VkOffset2D offset = pRects[r].rect.offset; const VkExtent2D extent = pRects[r].rect.extent; VkClearDepthStencilValue value = attachment->clearValue.depthStencil; blorp_clear_attachments(batch, binding_table, - depth_format, pass_att->samples, + depth_format, + gfx->samples, view_idx, 1, offset.x, offset.y, offset.x + extent.width, @@ -1327,7 +1323,8 @@ clear_depth_stencil_attachment(struct anv_cmd_buffer *cmd_buffer, VkClearDepthStencilValue value = attachment->clearValue.depthStencil; assert(pRects[r].layerCount != VK_REMAINING_ARRAY_LAYERS); blorp_clear_attachments(batch, binding_table, - depth_format, pass_att->samples, + depth_format, + gfx->samples, pRects[r].baseArrayLayer, pRects[r].layerCount, offset.x, offset.y, diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 06820418c1f..bc33816156e 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -250,8 +250,6 @@ anv_cmd_state_finish(struct anv_cmd_buffer *cmd_buffer) anv_cmd_pipeline_state_finish(cmd_buffer, &state->gfx.base); anv_cmd_pipeline_state_finish(cmd_buffer, &state->compute.base); - - vk_free(&cmd_buffer->vk.pool->alloc, state->attachments); } static void @@ -1367,64 +1365,6 @@ void anv_CmdPushConstants( cmd_buffer->state.push_constants_dirty |= stageFlags; } -/** - * Return NULL if the current subpass has no color attachment. - */ -const struct anv_image_view * -anv_cmd_buffer_get_first_color_view(const struct anv_cmd_buffer *cmd_buffer) -{ - const struct anv_subpass *subpass = cmd_buffer->state.subpass; - - if (subpass->color_count == 0) - return NULL; - - const struct anv_image_view *iview = - cmd_buffer->state.attachments[subpass->color_attachments[0].attachment].image_view; - - assert(iview->vk.aspects & VK_IMAGE_ASPECT_COLOR_BIT); - - return iview; -} - -/** - * Return NULL if the current subpass has no depthstencil attachment. - */ -const struct anv_image_view * -anv_cmd_buffer_get_depth_stencil_view(const struct anv_cmd_buffer *cmd_buffer) -{ - const struct anv_subpass *subpass = cmd_buffer->state.subpass; - - if (subpass->depth_stencil_attachment == NULL) - return NULL; - - const struct anv_image_view *iview = - cmd_buffer->state.attachments[subpass->depth_stencil_attachment->attachment].image_view; - - assert(iview->vk.aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | - VK_IMAGE_ASPECT_STENCIL_BIT)); - - return iview; -} - -/** - * Return NULL if the current subpass has no fragment shading rate attachment. - */ -const struct anv_image_view * -anv_cmd_buffer_get_fsr_view(const struct anv_cmd_buffer *cmd_buffer) -{ - const struct anv_subpass *subpass = cmd_buffer->state.subpass; - - if (subpass->fsr_attachment == NULL) - return NULL; - - const struct anv_image_view *iview = - cmd_buffer->state.attachments[subpass->fsr_attachment->attachment].image_view; - - assert(iview->image->vk.usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR); - - return iview; -} - static struct anv_descriptor_set * anv_cmd_buffer_push_descriptor_set(struct anv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point, diff --git a/src/intel/vulkan/anv_measure.c b/src/intel/vulkan/anv_measure.c index 4114c4add8a..2b2e9b672f8 100644 --- a/src/intel/vulkan/anv_measure.c +++ b/src/intel/vulkan/anv_measure.c @@ -144,17 +144,17 @@ anv_measure_start_snapshot(struct anv_cmd_buffer *cmd_buffer, if (measure->base.frame == 0) measure->base.frame = device_frame; - uintptr_t framebuffer = (uintptr_t)cmd_buffer->state.framebuffer; - - if (!measure->base.framebuffer && - cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) - /* secondary command buffer inherited the framebuffer from the primary */ - measure->base.framebuffer = framebuffer; - - /* verify framebuffer has been properly tracked */ - assert(type == INTEL_SNAPSHOT_END || - framebuffer == measure->base.framebuffer || - framebuffer == 0 ); /* compute has no framebuffer */ +// uintptr_t framebuffer = (uintptr_t)cmd_buffer->state.framebuffer; +// +// if (!measure->base.framebuffer && +// cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) +// /* secondary command buffer inherited the framebuffer from the primary */ +// measure->base.framebuffer = framebuffer; +// +// /* verify framebuffer has been properly tracked */ +// assert(type == INTEL_SNAPSHOT_END || +// framebuffer == measure->base.framebuffer || +// framebuffer == 0 ); /* compute has no framebuffer */ unsigned index = measure->base.index++; @@ -173,7 +173,7 @@ anv_measure_start_snapshot(struct anv_cmd_buffer *cmd_buffer, snapshot->count = (unsigned) count; snapshot->event_count = measure->base.event_count; snapshot->event_name = event_name; - snapshot->framebuffer = framebuffer; +// snapshot->framebuffer = framebuffer; if (type == INTEL_SNAPSHOT_COMPUTE && cmd_buffer->state.compute.pipeline) { snapshot->cs = (uintptr_t) cmd_buffer->state.compute.pipeline->cs; @@ -328,7 +328,7 @@ anv_measure_reset(struct anv_cmd_buffer *cmd_buffer) assert(cmd_buffer->device != NULL); measure->base.index = 0; - measure->base.framebuffer = 0; +// measure->base.framebuffer = 0; measure->base.frame = 0; measure->base.event_count = 0; list_inithead(&measure->base.link); @@ -470,9 +470,9 @@ _anv_measure_beginrenderpass(struct anv_cmd_buffer *cmd_buffer) if (measure == NULL) return; - if (measure->base.framebuffer == (uintptr_t) cmd_buffer->state.framebuffer) - /* no change */ - return; +// if (measure->base.framebuffer == (uintptr_t) cmd_buffer->state.framebuffer) +// /* no change */ +// return; bool filtering = (config->flags & (INTEL_MEASURE_RENDERPASS | INTEL_MEASURE_SHADER)); @@ -483,7 +483,7 @@ _anv_measure_beginrenderpass(struct anv_cmd_buffer *cmd_buffer) measure->base.event_count = 0; } - measure->base.framebuffer = (uintptr_t) cmd_buffer->state.framebuffer; +// measure->base.framebuffer = (uintptr_t) cmd_buffer->state.framebuffer; } void diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c deleted file mode 100644 index a3853fc0400..00000000000 --- a/src/intel/vulkan/anv_pass.c +++ /dev/null @@ -1,696 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "anv_private.h" - -#include "vk_format.h" -#include "vk_util.h" - -static void -anv_render_pass_add_subpass_dep(struct anv_device *device, - struct anv_render_pass *pass, - const VkSubpassDependency2KHR *dep) -{ - /* From the Vulkan 1.2.195 spec: - * - * "If an instance of VkMemoryBarrier2 is included in the pNext chain, - * srcStageMask, dstStageMask, srcAccessMask, and dstAccessMask - * parameters are ignored. The synchronization and access scopes instead - * are defined by the parameters of VkMemoryBarrier2." - */ - const VkMemoryBarrier2KHR *barrier = - vk_find_struct_const(dep->pNext, MEMORY_BARRIER_2_KHR); - VkAccessFlags2KHR src_access_mask = - barrier ? barrier->srcAccessMask : dep->srcAccessMask; - VkAccessFlags2KHR dst_access_mask = - barrier ? barrier->dstAccessMask : dep->dstAccessMask; - - if (dep->dstSubpass == VK_SUBPASS_EXTERNAL) { - pass->subpass_flushes[pass->subpass_count] |= - anv_pipe_invalidate_bits_for_access_flags(device, dst_access_mask); - } else { - assert(dep->dstSubpass < pass->subpass_count); - pass->subpass_flushes[dep->dstSubpass] |= - anv_pipe_invalidate_bits_for_access_flags(device, dst_access_mask); - } - - if (dep->srcSubpass == VK_SUBPASS_EXTERNAL) { - pass->subpass_flushes[0] |= - anv_pipe_flush_bits_for_access_flags(device, src_access_mask); - } else { - assert(dep->srcSubpass < pass->subpass_count); - pass->subpass_flushes[dep->srcSubpass + 1] |= - anv_pipe_flush_bits_for_access_flags(device, src_access_mask); - } -} - -/* Do a second "compile" step on a render pass */ -static void -anv_render_pass_compile(struct anv_render_pass *pass) -{ - /* The CreateRenderPass code zeros the entire render pass and also uses a - * designated initializer for filling these out. There's no need for us to - * do it again. - * - * for (uint32_t i = 0; i < pass->attachment_count; i++) { - * pass->attachments[i].usage = 0; - * pass->attachments[i].first_subpass_layout = VK_IMAGE_LAYOUT_UNDEFINED; - * } - */ - - VkImageUsageFlags all_usage = 0; - for (uint32_t i = 0; i < pass->subpass_count; i++) { - struct anv_subpass *subpass = &pass->subpasses[i]; - - /* We don't allow depth_stencil_attachment to be non-NULL and be - * VK_ATTACHMENT_UNUSED. This way something can just check for NULL - * and be guaranteed that they have a valid attachment. - */ - if (subpass->depth_stencil_attachment && - subpass->depth_stencil_attachment->attachment == VK_ATTACHMENT_UNUSED) - subpass->depth_stencil_attachment = NULL; - - if (subpass->ds_resolve_attachment && - subpass->ds_resolve_attachment->attachment == VK_ATTACHMENT_UNUSED) - subpass->ds_resolve_attachment = NULL; - - for (uint32_t j = 0; j < subpass->attachment_count; j++) { - struct anv_subpass_attachment *subpass_att = &subpass->attachments[j]; - if (subpass_att->attachment == VK_ATTACHMENT_UNUSED) - continue; - - struct anv_render_pass_attachment *pass_att = - &pass->attachments[subpass_att->attachment]; - - pass_att->usage |= subpass_att->usage; - pass_att->last_subpass_idx = i; - - all_usage |= subpass_att->usage; - - /* first_subpass_layout only applies to color and depth. - * See genX(cmd_buffer_setup_attachments) - */ - if (vk_format_aspects(pass_att->format) != VK_IMAGE_ASPECT_STENCIL_BIT && - pass_att->first_subpass_layout == VK_IMAGE_LAYOUT_UNDEFINED) { - pass_att->first_subpass_layout = subpass_att->layout; - assert(pass_att->first_subpass_layout != VK_IMAGE_LAYOUT_UNDEFINED); - } - - if (subpass_att->usage == VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT && - subpass->depth_stencil_attachment && - subpass_att->attachment == subpass->depth_stencil_attachment->attachment) - subpass->has_ds_self_dep = true; - } - - /* We have to handle resolve attachments specially */ - subpass->has_color_resolve = false; - if (subpass->resolve_attachments) { - for (uint32_t j = 0; j < subpass->color_count; j++) { - struct anv_subpass_attachment *color_att = - &subpass->color_attachments[j]; - struct anv_subpass_attachment *resolve_att = - &subpass->resolve_attachments[j]; - if (resolve_att->attachment == VK_ATTACHMENT_UNUSED) - continue; - - subpass->has_color_resolve = true; - - assert(color_att->attachment < pass->attachment_count); - struct anv_render_pass_attachment *color_pass_att = - &pass->attachments[color_att->attachment]; - - assert(resolve_att->usage == VK_IMAGE_USAGE_TRANSFER_DST_BIT); - assert(color_att->usage == VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); - color_pass_att->usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - } - } - - if (subpass->ds_resolve_attachment) { - struct anv_subpass_attachment *ds_att = - subpass->depth_stencil_attachment; - UNUSED struct anv_subpass_attachment *resolve_att = - subpass->ds_resolve_attachment; - - assert(ds_att->attachment < pass->attachment_count); - struct anv_render_pass_attachment *ds_pass_att = - &pass->attachments[ds_att->attachment]; - - assert(resolve_att->usage == VK_IMAGE_USAGE_TRANSFER_DST_BIT); - assert(ds_att->usage == VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT); - ds_pass_att->usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; - } - - for (uint32_t j = 0; j < subpass->attachment_count; j++) - assert(__builtin_popcount(subpass->attachments[j].usage) == 1); - } - - /* From the Vulkan 1.0.39 spec: - * - * If there is no subpass dependency from VK_SUBPASS_EXTERNAL to the - * first subpass that uses an attachment, then an implicit subpass - * dependency exists from VK_SUBPASS_EXTERNAL to the first subpass it is - * used in. The subpass dependency operates as if defined with the - * following parameters: - * - * VkSubpassDependency implicitDependency = { - * .srcSubpass = VK_SUBPASS_EXTERNAL; - * .dstSubpass = firstSubpass; // First subpass attachment is used in - * .srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - * .dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; - * .srcAccessMask = 0; - * .dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | - * VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | - * VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | - * VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | - * VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - * .dependencyFlags = 0; - * }; - * - * Similarly, if there is no subpass dependency from the last subpass - * that uses an attachment to VK_SUBPASS_EXTERNAL, then an implicit - * subpass dependency exists from the last subpass it is used in to - * VK_SUBPASS_EXTERNAL. The subpass dependency operates as if defined - * with the following parameters: - * - * VkSubpassDependency implicitDependency = { - * .srcSubpass = lastSubpass; // Last subpass attachment is used in - * .dstSubpass = VK_SUBPASS_EXTERNAL; - * .srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; - * .dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; - * .srcAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | - * VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | - * VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | - * VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | - * VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - * .dstAccessMask = 0; - * .dependencyFlags = 0; - * }; - * - * We could implement this by walking over all of the attachments and - * subpasses and checking to see if any of them don't have an external - * dependency. Or, we could just be lazy and add a couple extra flushes. - * We choose to be lazy. - * - * From the documentation for vkCmdNextSubpass: - * - * "Moving to the next subpass automatically performs any multisample - * resolve operations in the subpass being ended. End-of-subpass - * multisample resolves are treated as color attachment writes for the - * purposes of synchronization. This applies to resolve operations for - * both color and depth/stencil attachments. That is, they are - * considered to execute in the - * VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT pipeline stage and - * their writes are synchronized with - * VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT." - * - * Therefore, the above flags concerning color attachments also apply to - * color and depth/stencil resolve attachments. - */ - if (all_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) { - pass->subpass_flushes[0] |= - ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT; - } - if (all_usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_DST_BIT)) { - pass->subpass_flushes[pass->subpass_count] |= - ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT; - } - if (all_usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) { - pass->subpass_flushes[pass->subpass_count] |= - ANV_PIPE_DEPTH_CACHE_FLUSH_BIT; - } -} - -static unsigned -num_subpass_attachments2(const VkSubpassDescription2KHR *desc) -{ - const VkSubpassDescriptionDepthStencilResolveKHR *ds_resolve = - vk_find_struct_const(desc->pNext, - SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR); - const VkFragmentShadingRateAttachmentInfoKHR *fsr_attachment = - vk_find_struct_const(desc->pNext, - FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); - - return desc->inputAttachmentCount + - desc->colorAttachmentCount + - (desc->pResolveAttachments ? desc->colorAttachmentCount : 0) + - (desc->pDepthStencilAttachment != NULL) + - (ds_resolve && ds_resolve->pDepthStencilResolveAttachment) + - (fsr_attachment != NULL && fsr_attachment->pFragmentShadingRateAttachment); -} - -VkResult anv_CreateRenderPass2( - VkDevice _device, - const VkRenderPassCreateInfo2KHR* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkRenderPass* pRenderPass) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR); - - VK_MULTIALLOC(ma); - VK_MULTIALLOC_DECL(&ma, struct anv_render_pass, pass, 1); - VK_MULTIALLOC_DECL(&ma, struct anv_subpass, subpasses, - pCreateInfo->subpassCount); - VK_MULTIALLOC_DECL(&ma, struct anv_render_pass_attachment, attachments, - pCreateInfo->attachmentCount); - VK_MULTIALLOC_DECL(&ma, enum anv_pipe_bits, subpass_flushes, - pCreateInfo->subpassCount + 1); - - uint32_t subpass_attachment_count = 0; - for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) { - subpass_attachment_count += - num_subpass_attachments2(&pCreateInfo->pSubpasses[i]); - } - VK_MULTIALLOC_DECL(&ma, struct anv_subpass_attachment, subpass_attachments, - subpass_attachment_count); - - if (!vk_object_multizalloc(&device->vk, &ma, pAllocator, - VK_OBJECT_TYPE_RENDER_PASS)) - return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - - /* Clear the subpasses along with the parent pass. This required because - * each array member of anv_subpass must be a valid pointer if not NULL. - */ - pass->attachment_count = pCreateInfo->attachmentCount; - pass->subpass_count = pCreateInfo->subpassCount; - pass->attachments = attachments; - pass->subpass_flushes = subpass_flushes; - - for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++) { - pass->attachments[i] = (struct anv_render_pass_attachment) { - .format = pCreateInfo->pAttachments[i].format, - .samples = pCreateInfo->pAttachments[i].samples, - .load_op = pCreateInfo->pAttachments[i].loadOp, - .store_op = pCreateInfo->pAttachments[i].storeOp, - .stencil_load_op = pCreateInfo->pAttachments[i].stencilLoadOp, - .initial_layout = pCreateInfo->pAttachments[i].initialLayout, - .final_layout = pCreateInfo->pAttachments[i].finalLayout, - - .stencil_initial_layout = vk_att_desc_stencil_layout(&pCreateInfo->pAttachments[i], - false), - .stencil_final_layout = vk_att_desc_stencil_layout(&pCreateInfo->pAttachments[i], - true), - }; - } - - for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) { - const VkSubpassDescription2KHR *desc = &pCreateInfo->pSubpasses[i]; - struct anv_subpass *subpass = &pass->subpasses[i]; - - subpass->input_count = desc->inputAttachmentCount; - subpass->color_count = desc->colorAttachmentCount; - subpass->attachment_count = num_subpass_attachments2(desc); - subpass->attachments = subpass_attachments; - subpass->view_mask = desc->viewMask; - - if (desc->inputAttachmentCount > 0) { - subpass->input_attachments = subpass_attachments; - subpass_attachments += desc->inputAttachmentCount; - - for (uint32_t j = 0; j < desc->inputAttachmentCount; j++) { - subpass->input_attachments[j] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, - .attachment = desc->pInputAttachments[j].attachment, - .layout = desc->pInputAttachments[j].layout, - .stencil_layout = vk_att_ref_stencil_layout(&desc->pInputAttachments[j], - pCreateInfo->pAttachments), - }; - } - } - - if (desc->colorAttachmentCount > 0) { - subpass->color_attachments = subpass_attachments; - subpass_attachments += desc->colorAttachmentCount; - - for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) { - subpass->color_attachments[j] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .attachment = desc->pColorAttachments[j].attachment, - .layout = desc->pColorAttachments[j].layout, - }; - } - } - - if (desc->pResolveAttachments) { - subpass->resolve_attachments = subpass_attachments; - subpass_attachments += desc->colorAttachmentCount; - - for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) { - subpass->resolve_attachments[j] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - .attachment = desc->pResolveAttachments[j].attachment, - .layout = desc->pResolveAttachments[j].layout, - }; - } - } - - if (desc->pDepthStencilAttachment) { - subpass->depth_stencil_attachment = subpass_attachments++; - - *subpass->depth_stencil_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - .attachment = desc->pDepthStencilAttachment->attachment, - .layout = desc->pDepthStencilAttachment->layout, - .stencil_layout = vk_att_ref_stencil_layout(desc->pDepthStencilAttachment, - pCreateInfo->pAttachments), - }; - } - - const VkSubpassDescriptionDepthStencilResolveKHR *ds_resolve = - vk_find_struct_const(desc->pNext, - SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR); - - if (ds_resolve && ds_resolve->pDepthStencilResolveAttachment) { - subpass->ds_resolve_attachment = subpass_attachments++; - - *subpass->ds_resolve_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - .attachment = ds_resolve->pDepthStencilResolveAttachment->attachment, - .layout = ds_resolve->pDepthStencilResolveAttachment->layout, - .stencil_layout = vk_att_ref_stencil_layout(ds_resolve->pDepthStencilResolveAttachment, - pCreateInfo->pAttachments), - }; - subpass->depth_resolve_mode = ds_resolve->depthResolveMode; - subpass->stencil_resolve_mode = ds_resolve->stencilResolveMode; - } - - const VkFragmentShadingRateAttachmentInfoKHR *fsr_attachment = - vk_find_struct_const(desc->pNext, - FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); - - if (fsr_attachment && fsr_attachment->pFragmentShadingRateAttachment) { - subpass->fsr_attachment = subpass_attachments++; - - *subpass->fsr_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - .attachment = fsr_attachment->pFragmentShadingRateAttachment->attachment, - .layout = fsr_attachment->pFragmentShadingRateAttachment->layout, - }; - subpass->fsr_extent = fsr_attachment->shadingRateAttachmentTexelSize; - } - - } - - for (uint32_t i = 0; i < pCreateInfo->dependencyCount; i++) { - anv_render_pass_add_subpass_dep(device, pass, - &pCreateInfo->pDependencies[i]); - } - - vk_foreach_struct(ext, pCreateInfo->pNext) { - switch (ext->sType) { - default: - anv_debug_ignored_stype(ext->sType); - } - } - - anv_render_pass_compile(pass); - - *pRenderPass = anv_render_pass_to_handle(pass); - - return VK_SUCCESS; -} - -void anv_DestroyRenderPass( - VkDevice _device, - VkRenderPass _pass, - const VkAllocationCallbacks* pAllocator) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_render_pass, pass, _pass); - - if (!pass) - return; - - vk_object_free(&device->vk, pAllocator, pass); -} - -void anv_GetRenderAreaGranularity( - VkDevice device, - VkRenderPass renderPass, - VkExtent2D* pGranularity) -{ - ANV_FROM_HANDLE(anv_render_pass, pass, renderPass); - - /* This granularity satisfies HiZ fast clear alignment requirements - * for all sample counts. - */ - for (unsigned i = 0; i < pass->subpass_count; ++i) { - if (pass->subpasses[i].depth_stencil_attachment) { - *pGranularity = (VkExtent2D) { .width = 8, .height = 4 }; - return; - } - } - - *pGranularity = (VkExtent2D) { 1, 1 }; -} - -void -anv_dynamic_pass_init(struct anv_dynamic_render_pass *dyn_render_pass, - const struct anv_dynamic_pass_create_info *info) -{ - uint32_t att_count; - - att_count = info->colorAttachmentCount; - if ((info->depthAttachmentFormat != VK_FORMAT_UNDEFINED) || - (info->stencilAttachmentFormat != VK_FORMAT_UNDEFINED)) - att_count++; - - struct anv_render_pass *pass = &dyn_render_pass->pass; - pass->attachment_count = att_count; - pass->subpass_count = 1; - pass->attachments = dyn_render_pass->rp_attachments; - - struct anv_subpass *subpass = &dyn_render_pass->subpass; - subpass->attachment_count = att_count; - subpass->attachments = dyn_render_pass->sp_attachments; - if (info->colorAttachmentCount > 0) { - subpass->color_count = info->colorAttachmentCount; - subpass->color_attachments = dyn_render_pass->sp_attachments; - } - subpass->view_mask = info->viewMask; - - uint32_t att; - for (att = 0; att < info->colorAttachmentCount; att++) { - if (info->pColorAttachmentFormats[att] == VK_FORMAT_UNDEFINED) { - subpass->attachments[att].attachment = VK_ATTACHMENT_UNUSED; - continue; - } - pass->attachments[att].format = info->pColorAttachmentFormats[att]; - pass->attachments[att].samples = info->rasterizationSamples; - subpass->attachments[att].attachment = att; - subpass->attachments[att].usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - } - - if ((info->depthAttachmentFormat != VK_FORMAT_UNDEFINED) || - (info->stencilAttachmentFormat != VK_FORMAT_UNDEFINED)) { - pass->attachments[att].format = (info->depthAttachmentFormat != VK_FORMAT_UNDEFINED) ? info->depthAttachmentFormat : info->stencilAttachmentFormat; - pass->attachments[att].samples = info->rasterizationSamples; - subpass->attachments[att].attachment = att; - subpass->attachments[att].usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; - subpass->depth_stencil_attachment = &subpass->attachments[att]; - - att++; - } -} - -void -anv_dynamic_pass_init_full(struct anv_dynamic_render_pass *dyn_render_pass, - const VkRenderingInfoKHR *info) -{ - uint32_t att_count; - uint32_t color_count = 0, ds_count = 0, fsr_count = 0; - uint32_t ds_idx, fsr_idx; - bool has_color_resolve, has_ds_resolve; - - struct anv_render_pass *pass = &dyn_render_pass->pass; - struct anv_subpass *subpass = &dyn_render_pass->subpass; - - /* We set some of the fields conditionally below, like - * subpass->ds_resolve_attachment. But the value of this field is used to - * trigger depth/stencil resolve, so clear things to make sure we don't - * leave stale values. - */ - - dyn_render_pass->suspending = info->flags & VK_RENDERING_SUSPENDING_BIT_KHR; - dyn_render_pass->resuming = info->flags & VK_RENDERING_RESUMING_BIT_KHR; - - /* Get the total attachment count by counting color, depth & fragment - * shading rate views. - */ - color_count = info->colorAttachmentCount; - if ((info->pDepthAttachment && info->pDepthAttachment->imageView) || - (info->pStencilAttachment && info->pStencilAttachment->imageView)) - ds_count = 1; - - has_color_resolve = false; - has_ds_resolve = false; - for (uint32_t i = 0; i < info->colorAttachmentCount; i++) { - if (info->pColorAttachments[i].resolveMode != VK_RESOLVE_MODE_NONE) { - has_color_resolve = true; - break; - } - } - if (has_color_resolve) - color_count *= 2; - - has_ds_resolve = - ((info->pDepthAttachment && - info->pDepthAttachment->imageView != VK_NULL_HANDLE && - info->pDepthAttachment->resolveMode != VK_RESOLVE_MODE_NONE) || - (info->pStencilAttachment && - info->pStencilAttachment->imageView != VK_NULL_HANDLE && - info->pStencilAttachment->resolveMode != VK_RESOLVE_MODE_NONE)); - if (has_ds_resolve) - ds_count *= 2; - - const VkRenderingFragmentShadingRateAttachmentInfoKHR *fsr_attachment = - vk_find_struct_const(info->pNext, - RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); - if (fsr_attachment && fsr_attachment->imageView != VK_NULL_HANDLE) - fsr_count = 1; - - att_count = color_count + ds_count + fsr_count; - ds_idx = color_count; - fsr_idx = color_count + ds_count; - - /* Setup pass & subpass */ - *pass = (struct anv_render_pass) { - .subpass_count = 1, - .attachments = dyn_render_pass->rp_attachments, - .attachment_count = att_count, - }; - - struct anv_subpass_attachment *subpass_attachments = - dyn_render_pass->sp_attachments; - - *subpass = (struct anv_subpass) { - .attachment_count = att_count, - .attachments = subpass_attachments, - .color_count = info->colorAttachmentCount, - .color_attachments = subpass_attachments, - .has_color_resolve = has_color_resolve, - .resolve_attachments = subpass_attachments + info->colorAttachmentCount, - .view_mask = info->viewMask, - }; - - for (uint32_t att = 0; att < info->colorAttachmentCount; att++) { - if (info->pColorAttachments[att].imageView != VK_NULL_HANDLE) { - ANV_FROM_HANDLE(anv_image_view, iview, info->pColorAttachments[att].imageView); - - pass->attachments[att] = (struct anv_render_pass_attachment) { - .format = iview->vk.format, - .samples = iview->vk.image->samples, - .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - }; - subpass->color_attachments[att] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .attachment = att, - }; - } else { - subpass->color_attachments[att] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .attachment = VK_ATTACHMENT_UNUSED, - }; - } - - if (has_color_resolve) { - if (info->pColorAttachments[att].resolveMode != VK_RESOLVE_MODE_NONE) { - subpass->resolve_attachments[att] = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - .attachment = info->colorAttachmentCount + att, - }; - } else { - subpass->resolve_attachments[att] = (struct anv_subpass_attachment) { - .attachment = VK_ATTACHMENT_UNUSED, - }; - } - } - } - - if (ds_count) { - /* Easier to reference for the stuff both have in common. */ - const VkRenderingAttachmentInfoKHR *d_att = info->pDepthAttachment; - if (d_att != NULL && d_att->imageView == VK_NULL_HANDLE) - d_att = NULL; - - const VkRenderingAttachmentInfoKHR *s_att = info->pStencilAttachment; - if (s_att != NULL && s_att->imageView == VK_NULL_HANDLE) - s_att = NULL; - - const VkRenderingAttachmentInfoKHR *d_or_s_att = d_att ? d_att : s_att; - - VkResolveModeFlagBits depth_resolve_mode = VK_RESOLVE_MODE_NONE; - VkResolveModeFlagBits stencil_resolve_mode = VK_RESOLVE_MODE_NONE; - - ANV_FROM_HANDLE(anv_image_view, iview, d_or_s_att->imageView); - - pass->attachments[ds_idx] = (struct anv_render_pass_attachment) { - .format = iview->vk.format, - .samples = iview->vk.image->samples, - .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - }; - - subpass->depth_stencil_attachment = &subpass_attachments[ds_idx]; - *subpass->depth_stencil_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - .attachment = ds_idx, - }; - - if (d_att && d_att->imageView) - depth_resolve_mode = d_att->resolveMode; - if (s_att && s_att->imageView) - stencil_resolve_mode = s_att->resolveMode; - - if (has_ds_resolve) { - uint32_t ds_res_idx = ds_idx + 1; - - subpass->ds_resolve_attachment = &subpass_attachments[ds_res_idx]; - *subpass->ds_resolve_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - .attachment = ds_res_idx, - }; - - subpass->depth_resolve_mode = depth_resolve_mode; - subpass->stencil_resolve_mode = stencil_resolve_mode; - } - } - - if (fsr_count) { - ANV_FROM_HANDLE(anv_image_view, iview, fsr_attachment->imageView); - - pass->attachments[fsr_idx] = (struct anv_render_pass_attachment) { - .format = iview->vk.format, - .samples = iview->vk.image->samples, - .usage = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - }; - - subpass->fsr_attachment = &subpass_attachments[fsr_idx]; - *subpass->fsr_attachment = (struct anv_subpass_attachment) { - .usage = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, - .attachment = fsr_idx, - }; - subpass->fsr_extent = fsr_attachment->shadingRateAttachmentTexelSize; - } -} diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index da35d780270..3915872bc46 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -38,6 +38,7 @@ #include "anv_nir.h" #include "nir/nir_xfb_info.h" #include "spirv/nir_spirv.h" +#include "vk_render_pass.h" #include "vk_util.h" /* Needed for SWIZZLE macros */ diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 9038c2a180c..8714baf4f65 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -370,6 +370,26 @@ vk_to_isl_color(VkClearColorValue color) }; } +static inline union isl_color_value +vk_to_isl_color_with_format(VkClearColorValue color, enum isl_format format) +{ + const struct isl_format_layout *fmtl = isl_format_get_layout(format); + union isl_color_value isl_color = { .u32 = {0, } }; + +#define COPY_COLOR_CHANNEL(c, i) \ + if (fmtl->channels.c.bits) \ + isl_color.u32[i] = color.uint32[i] + + COPY_COLOR_CHANNEL(r, 0); + COPY_COLOR_CHANNEL(g, 1); + COPY_COLOR_CHANNEL(b, 2); + COPY_COLOR_CHANNEL(a, 3); + +#undef COPY_COLOR_CHANNEL + + return isl_color; +} + static inline void *anv_unpack_ptr(uintptr_t ptr, int bits, int *flags) { uintptr_t mask = (1ull << bits) - 1; @@ -2774,29 +2794,16 @@ struct anv_surface_state { struct anv_address clear_address; }; -/** - * Attachment state when recording a renderpass instance. - * - * The clear value is valid only if there exists a pending clear. - */ -struct anv_attachment_state { - enum isl_aux_usage aux_usage; - struct anv_surface_state color; +struct anv_attachment { + VkFormat vk_format; + const struct anv_image_view *iview; + VkImageLayout layout; + enum isl_aux_usage aux_usage; + struct anv_surface_state surface_state; - VkImageLayout current_layout; - VkImageLayout current_stencil_layout; - VkImageAspectFlags pending_clear_aspects; - bool fast_clear; - VkClearValue clear_value; - - /* When multiview is active, attachments with a renderpass clear - * operation have their respective layers cleared on the first - * subpass that uses them, and only in that subpass. We keep track - * of this using a bitfield to indicate which layers of an attachment - * have not been cleared yet when multiview is active. - */ - uint32_t pending_clear_views; - struct anv_image_view * image_view; + VkResolveModeFlagBits resolve_mode; + const struct anv_image_view *resolve_iview; + VkImageLayout resolve_layout; }; /** State tracking for vertex buffer flushes @@ -2881,6 +2888,18 @@ struct anv_cmd_graphics_state { struct anv_graphics_pipeline *pipeline; + VkRenderingFlags rendering_flags; + VkRect2D render_area; + uint32_t layer_count; + uint32_t samples; + uint32_t view_mask; + uint32_t color_att_count; + struct anv_state att_states; + struct anv_attachment color_att[MAX_RTS]; + struct anv_attachment depth_att; + struct anv_attachment stencil_att; + struct anv_state null_surface_state; + anv_cmd_dirty_mask_t dirty; uint32_t vb_dirty; @@ -2940,96 +2959,6 @@ struct anv_cmd_ray_tracing_state { } scratch; }; -struct anv_subpass_attachment { - VkImageUsageFlagBits usage; - uint32_t attachment; - VkImageLayout layout; - - /* Used only with attachment containing stencil data. */ - VkImageLayout stencil_layout; -}; - -struct anv_subpass { - uint32_t attachment_count; - - /** - * A pointer to all attachment references used in this subpass. - * Only valid if ::attachment_count > 0. - */ - struct anv_subpass_attachment * attachments; - uint32_t input_count; - struct anv_subpass_attachment * input_attachments; - uint32_t color_count; - struct anv_subpass_attachment * color_attachments; - struct anv_subpass_attachment * resolve_attachments; - - struct anv_subpass_attachment * depth_stencil_attachment; - struct anv_subpass_attachment * ds_resolve_attachment; - VkResolveModeFlagBitsKHR depth_resolve_mode; - VkResolveModeFlagBitsKHR stencil_resolve_mode; - - struct anv_subpass_attachment * fsr_attachment; - VkExtent2D fsr_extent; - - uint32_t view_mask; - - /** Subpass has a depth/stencil self-dependency */ - bool has_ds_self_dep; - - /** Subpass has at least one color resolve attachment */ - bool has_color_resolve; -}; - -struct anv_render_pass_attachment { - /* TODO: Consider using VkAttachmentDescription instead of storing each of - * its members individually. - */ - VkFormat format; - uint32_t samples; - VkImageUsageFlags usage; - VkAttachmentLoadOp load_op; - VkAttachmentStoreOp store_op; - VkAttachmentLoadOp stencil_load_op; - VkImageLayout initial_layout; - VkImageLayout final_layout; - VkImageLayout first_subpass_layout; - - VkImageLayout stencil_initial_layout; - VkImageLayout stencil_final_layout; - - /* The subpass id in which the attachment will be used last. */ - uint32_t last_subpass_idx; -}; - -struct anv_render_pass { - struct vk_object_base base; - - uint32_t attachment_count; - uint32_t subpass_count; - /* An array of subpass_count+1 flushes, one per subpass boundary */ - enum anv_pipe_bits * subpass_flushes; - struct anv_render_pass_attachment * attachments; - struct anv_subpass subpasses[0]; -}; - -/* RTs * 2 (for resolve attachments) - * depth/sencil * 2 - * fragment shading rate * 1 - */ -#define MAX_DYN_RENDER_ATTACHMENTS (MAX_RTS * 2 + 2 * 2 + 1) - -/* And this, kids, is what we call a nasty hack. */ -struct anv_dynamic_render_pass { - struct anv_render_pass pass; - struct anv_subpass subpass; - struct vk_framebuffer framebuffer; - struct anv_render_pass_attachment rp_attachments[MAX_DYN_RENDER_ATTACHMENTS]; - struct anv_subpass_attachment sp_attachments[MAX_DYN_RENDER_ATTACHMENTS]; - - bool suspending; - bool resuming; -}; - /** State required while building cmd buffer */ struct anv_cmd_state { /* PIPELINE_SELECT.PipelineSelection */ @@ -3045,10 +2974,6 @@ struct anv_cmd_state { VkShaderStageFlags descriptors_dirty; VkShaderStageFlags push_constants_dirty; - struct vk_framebuffer * framebuffer; - struct anv_render_pass * pass; - struct anv_subpass * subpass; - VkRect2D render_area; uint32_t restart_index; struct anv_vertex_binding vertex_bindings[MAX_VBS]; bool xfb_enabled; @@ -3089,27 +3014,6 @@ struct anv_cmd_state { */ unsigned current_hash_scale; - /** - * Array length is anv_cmd_state::pass::attachment_count. Array content is - * valid only when recording a render pass instance. - */ - struct anv_attachment_state * attachments; - - /** - * Surface states for color render targets. These are stored in a single - * flat array. For depth-stencil attachments, the surface state is simply - * left blank. - */ - struct anv_state attachment_states; - - /** - * A null surface state of the right size to match the framebuffer. This - * is one of the states in attachment_states. - */ - struct anv_state null_surface_state; - - struct anv_dynamic_render_pass dynamic_render_pass; - /** * A buffer used for spill/fill of ray queries. */ @@ -3273,11 +3177,6 @@ void gfx8_cmd_buffer_emit_depth_viewport(struct anv_cmd_buffer *cmd_buffer, bool depth_clamp_enable); void gfx7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer); -void anv_cmd_buffer_setup_attachments(struct anv_cmd_buffer *cmd_buffer, - struct anv_render_pass *pass, - struct vk_framebuffer *framebuffer, - const VkClearValue *clear_values); - void anv_cmd_buffer_emit_state_base_address(struct anv_cmd_buffer *cmd_buffer); struct anv_state @@ -3285,15 +3184,6 @@ anv_cmd_buffer_gfx_push_constants(struct anv_cmd_buffer *cmd_buffer); struct anv_state anv_cmd_buffer_cs_push_constants(struct anv_cmd_buffer *cmd_buffer); -const struct anv_image_view * -anv_cmd_buffer_get_first_color_view(const struct anv_cmd_buffer *cmd_buffer); - -const struct anv_image_view * -anv_cmd_buffer_get_depth_stencil_view(const struct anv_cmd_buffer *cmd_buffer); - -const struct anv_image_view * -anv_cmd_buffer_get_fsr_view(const struct anv_cmd_buffer *cmd_buffer); - VkResult anv_cmd_buffer_alloc_blorp_binding_table(struct anv_cmd_buffer *cmd_buffer, uint32_t num_entries, @@ -3551,8 +3441,6 @@ struct anv_graphics_pipeline { struct { uint32_t wm_depth_stencil[4]; } gfx9; - - struct anv_dynamic_render_pass dynamic_render_pass; }; struct anv_compute_pipeline { @@ -4429,26 +4317,6 @@ void anv_fill_buffer_surface_state(struct anv_device *device, struct anv_address address, uint32_t range, uint32_t stride); -static inline void -anv_clear_color_from_att_state(union isl_color_value *clear_color, - const struct anv_attachment_state *att_state, - const struct anv_image_view *iview) -{ - const struct isl_format_layout *view_fmtl = - isl_format_get_layout(iview->planes[0].isl.format); - -#define COPY_CLEAR_COLOR_CHANNEL(c, i) \ - if (view_fmtl->channels.c.bits) \ - clear_color->u32[i] = att_state->clear_value.color.uint32[i] - - COPY_CLEAR_COLOR_CHANNEL(r, 0); - COPY_CLEAR_COLOR_CHANNEL(g, 1); - COPY_CLEAR_COLOR_CHANNEL(b, 2); - COPY_CLEAR_COLOR_CHANNEL(a, 3); - -#undef COPY_CLEAR_COLOR_CHANNEL -} - /* Haswell border color is a bit of a disaster. Float and unorm formats use a * straightforward 32-bit float color in the first 64 bytes. Instead of using @@ -4505,12 +4373,6 @@ struct anv_sampler { struct anv_state custom_border_color; }; -static inline unsigned -anv_subpass_view_count(const struct anv_subpass *subpass) -{ - return MAX2(1, util_bitcount(subpass->view_mask)); -} - #define ANV_PIPELINE_STATISTICS_MASK 0x000007ff struct anv_query_pool { @@ -4534,22 +4396,6 @@ struct anv_query_pool { struct intel_perf_query_info **pass_query; }; -struct anv_dynamic_pass_create_info { - uint32_t viewMask; - uint32_t colorAttachmentCount; - const VkFormat* pColorAttachmentFormats; - VkFormat depthAttachmentFormat; - VkFormat stencilAttachmentFormat; - VkSampleCountFlagBits rasterizationSamples; -}; - -void -anv_dynamic_pass_init(struct anv_dynamic_render_pass *dyn_render_pass, - const struct anv_dynamic_pass_create_info *info); -void -anv_dynamic_pass_init_full(struct anv_dynamic_render_pass *dyn_render_pass, - const VkRenderingInfoKHR *info); - static inline uint32_t khr_perf_query_preamble_offset(const struct anv_query_pool *pool, uint32_t pass) { @@ -4602,21 +4448,6 @@ anv_add_pending_pipe_bits(struct anv_cmd_buffer* cmd_buffer, } } -static inline uint32_t -anv_get_subpass_id(const struct anv_cmd_state * const cmd_state) -{ - /* This function must be called from within a subpass. */ - assert(cmd_state->pass && cmd_state->subpass); - - const uint32_t subpass_id = cmd_state->subpass - cmd_state->pass->subpasses; - - /* The id of this subpass shouldn't exceed the number of subpasses in this - * render pass minus 1. - */ - assert(subpass_id < cmd_state->pass->subpass_count); - return subpass_id; -} - struct anv_performance_configuration_intel { struct vk_object_base base; @@ -4734,8 +4565,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(anv_pipeline_layout, base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_query_pool, base, VkQueryPool, VK_OBJECT_TYPE_QUERY_POOL) -VK_DEFINE_NONDISP_HANDLE_CASTS(anv_render_pass, base, VkRenderPass, - VK_OBJECT_TYPE_RENDER_PASS) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_sampler, base, VkSampler, VK_OBJECT_TYPE_SAMPLER) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_ycbcr_conversion, base, diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 1b821fb560a..4d8e5058a6d 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -451,7 +451,7 @@ anv_can_fast_clear_color_view(struct anv_device * device, static bool anv_can_hiz_clear_ds_view(struct anv_device *device, - struct anv_image_view *iview, + const struct anv_image_view *iview, VkImageLayout layout, VkImageAspectFlags clear_aspects, float depth_clear_value, @@ -1543,188 +1543,74 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, "after transition RT"); } -static VkResult -cmd_buffer_alloc_state_attachments(struct anv_cmd_buffer *cmd_buffer, - uint32_t attachment_count) +static MUST_CHECK VkResult +anv_cmd_buffer_init_attachments(struct anv_cmd_buffer *cmd_buffer, + uint32_t color_att_count, + uint32_t color_att_valid) { - struct anv_cmd_state *state = &cmd_buffer->state; - - vk_free(&cmd_buffer->vk.pool->alloc, state->attachments); - - if (attachment_count > 0) { - state->attachments = vk_zalloc(&cmd_buffer->vk.pool->alloc, - attachment_count * - sizeof(state->attachments[0]), - 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (state->attachments == NULL) { - /* Propagate VK_ERROR_OUT_OF_HOST_MEMORY to vkEndCommandBuffer */ - return anv_batch_set_error(&cmd_buffer->batch, - VK_ERROR_OUT_OF_HOST_MEMORY); - } - } else { - state->attachments = NULL; - } - - return VK_SUCCESS; -} - -static VkResult -genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer, - const struct anv_render_pass *pass, - const struct vk_framebuffer *framebuffer, - const VkRenderPassBeginInfo *begin) -{ - struct anv_cmd_state *state = &cmd_buffer->state; - VkResult result; - - result = cmd_buffer_alloc_state_attachments(cmd_buffer, - pass->attachment_count); - if (result != VK_SUCCESS) - return result; - - const VkRenderPassAttachmentBeginInfoKHR *attach_begin = - vk_find_struct_const(begin, RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR); - if (begin && !attach_begin) - assert(pass->attachment_count == framebuffer->attachment_count); - - for (uint32_t i = 0; i < pass->attachment_count; ++i) { - if (attach_begin && attach_begin->attachmentCount != 0) { - assert(attach_begin->attachmentCount == pass->attachment_count); - ANV_FROM_HANDLE(anv_image_view, iview, attach_begin->pAttachments[i]); - state->attachments[i].image_view = iview; - } else if (framebuffer && i < framebuffer->attachment_count) { - ANV_FROM_HANDLE(anv_image_view, iview, framebuffer->attachments[i]); - state->attachments[i].image_view = iview; - } else { - state->attachments[i].image_view = NULL; - } - } - - if (begin) { - for (uint32_t i = 0; i < pass->attachment_count; ++i) { - const struct anv_render_pass_attachment *pass_att = &pass->attachments[i]; - struct anv_attachment_state *att_state = &state->attachments[i]; - VkImageAspectFlags att_aspects = vk_format_aspects(pass_att->format); - VkImageAspectFlags clear_aspects = 0; - - if (att_aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV) { - /* color attachment */ - if (pass_att->load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) { - clear_aspects |= VK_IMAGE_ASPECT_COLOR_BIT; - } - } else { - /* depthstencil attachment */ - if (att_aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { - if (pass_att->load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) { - clear_aspects |= VK_IMAGE_ASPECT_DEPTH_BIT; - } - } - if (att_aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { - if (pass_att->stencil_load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) { - clear_aspects |= VK_IMAGE_ASPECT_STENCIL_BIT; - } - } - } - - att_state->current_layout = pass_att->initial_layout; - att_state->current_stencil_layout = pass_att->stencil_initial_layout; - att_state->pending_clear_aspects = clear_aspects; - if (clear_aspects) - att_state->clear_value = begin->pClearValues[i]; - - struct anv_image_view *iview = state->attachments[i].image_view; - - const uint32_t num_layers = iview->planes[0].isl.array_len; - att_state->pending_clear_views = (1 << num_layers) - 1; - - /* This will be initialized after the first subpass transition. */ - att_state->aux_usage = ISL_AUX_USAGE_NONE; - - att_state->fast_clear = false; - if (clear_aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV) { - assert(clear_aspects == VK_IMAGE_ASPECT_COLOR_BIT); - att_state->fast_clear = - anv_can_fast_clear_color_view(cmd_buffer->device, iview, - pass_att->first_subpass_layout, - vk_to_isl_color(att_state->clear_value.color), - framebuffer->layers, - begin->renderArea); - } else if (clear_aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | - VK_IMAGE_ASPECT_STENCIL_BIT)) { - att_state->fast_clear = - anv_can_hiz_clear_ds_view(cmd_buffer->device, iview, - pass_att->first_subpass_layout, - clear_aspects, - att_state->clear_value.depthStencil.depth, - begin->renderArea); - } - } - } - - return VK_SUCCESS; -} - -/** - * Setup anv_cmd_state::attachments for vkCmdBeginRenderPass. - */ -static VkResult -genX(cmd_buffer_alloc_att_surf_states)(struct anv_cmd_buffer *cmd_buffer, - const struct anv_render_pass *pass, - const struct anv_subpass *subpass) -{ - const struct isl_device *isl_dev = &cmd_buffer->device->isl_dev; - struct anv_cmd_state *state = &cmd_buffer->state; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; /* Reserve one for the NULL state. */ - unsigned num_states = 1; - for (uint32_t i = 0; i < subpass->color_count; i++) { - uint32_t att = subpass->color_attachments[i].attachment; - if (att == VK_ATTACHMENT_UNUSED) - continue; - - num_states++; - } - + unsigned num_states = 1 + util_bitcount(color_att_valid); + const struct isl_device *isl_dev = &cmd_buffer->device->isl_dev; const uint32_t ss_stride = align_u32(isl_dev->ss.size, isl_dev->ss.align); - state->attachment_states = + gfx->att_states = anv_state_stream_alloc(&cmd_buffer->surface_state_stream, num_states * ss_stride, isl_dev->ss.align); - if (state->attachment_states.map == NULL) { + if (gfx->att_states.map == NULL) { return anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_OUT_OF_DEVICE_MEMORY); } - struct anv_state next_state = state->attachment_states; + struct anv_state next_state = gfx->att_states; next_state.alloc_size = isl_dev->ss.size; - state->null_surface_state = next_state; + gfx->null_surface_state = next_state; next_state.offset += ss_stride; next_state.map += ss_stride; - for (uint32_t i = 0; i < subpass->color_count; i++) { - uint32_t att = subpass->color_attachments[i].attachment; - if (att == VK_ATTACHMENT_UNUSED) - continue; - - assert(att < pass->attachment_count); - assert(vk_format_is_color(pass->attachments[att].format)); - - next_state.offset += ss_stride; - next_state.map += ss_stride; + gfx->color_att_count = color_att_count; + for (uint32_t i = 0; i < color_att_count; i++) { + if (color_att_valid & BITFIELD_BIT(i)) { + gfx->color_att[i] = (struct anv_attachment) { + .surface_state.state = next_state, + }; + next_state.offset += ss_stride; + next_state.map += ss_stride; + } else { + gfx->color_att[i] = (struct anv_attachment) { + .surface_state.state = gfx->null_surface_state, + }; + } } - - assert(next_state.offset == state->attachment_states.offset + - state->attachment_states.alloc_size); + gfx->depth_att = (struct anv_attachment) { }; + gfx->stencil_att = (struct anv_attachment) { }; return VK_SUCCESS; } +static void +anv_cmd_buffer_reset_rendering(struct anv_cmd_buffer *cmd_buffer) +{ + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + + gfx->render_area = (VkRect2D) { }; + gfx->layer_count = 0; + gfx->samples = 0; + + gfx->color_att_count = 0; + gfx->depth_att = (struct anv_attachment) { }; + gfx->stencil_att = (struct anv_attachment) { }; + gfx->null_surface_state = ANV_STATE_NULL; +} + VkResult genX(BeginCommandBuffer)( VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) { ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); + VkResult result; /* If this is the first vkBeginCommandBuffer, we must *initialize* the * command buffer's state. Otherwise, we must *reset* its state. In both @@ -1741,6 +1627,7 @@ genX(BeginCommandBuffer)( * the command buffer in the recording state. */ anv_cmd_buffer_reset(cmd_buffer); + anv_cmd_buffer_reset_rendering(cmd_buffer); cmd_buffer->usage_flags = pBeginInfo->flags; @@ -1795,84 +1682,106 @@ genX(BeginCommandBuffer)( */ cmd_buffer->state.push_constants_dirty |= VK_SHADER_STAGE_ALL_GRAPHICS; - VkResult result = VK_SUCCESS; if (cmd_buffer->usage_flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) { - assert(pBeginInfo->pInheritanceInfo); - ANV_FROM_HANDLE(anv_render_pass, pass, - pBeginInfo->pInheritanceInfo->renderPass); - struct anv_subpass *subpass; - if (!pass) { - const VkCommandBufferInheritanceRenderingInfoKHR *inheritance_info = - vk_find_struct_const(pBeginInfo->pInheritanceInfo->pNext, - COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR); - assert(inheritance_info); - struct anv_dynamic_pass_create_info info = { - .viewMask = inheritance_info->viewMask, - .colorAttachmentCount = inheritance_info->colorAttachmentCount, - .pColorAttachmentFormats = inheritance_info->pColorAttachmentFormats, - .depthAttachmentFormat = inheritance_info->depthAttachmentFormat, - .stencilAttachmentFormat = inheritance_info->stencilAttachmentFormat, - .rasterizationSamples = inheritance_info->rasterizationSamples, - }; - anv_dynamic_pass_init(&cmd_buffer->state.dynamic_render_pass, &info); - pass = &cmd_buffer->state.dynamic_render_pass.pass; - subpass = &cmd_buffer->state.dynamic_render_pass.subpass; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; - result = cmd_buffer_alloc_state_attachments(cmd_buffer, - pass->attachment_count); + const VkCommandBufferInheritanceRenderingInfoKHR *inheritance_info = + vk_get_command_buffer_inheritance_rendering_info(cmd_buffer->vk.level, + pBeginInfo); + + /* We can't get this information from the inheritance info */ + gfx->render_area = (VkRect2D) { }; + gfx->layer_count = 0; + gfx->samples = 0; + gfx->depth_att = (struct anv_attachment) { }; + gfx->stencil_att = (struct anv_attachment) { }; + + if (inheritance_info == NULL) { + gfx->rendering_flags = 0; + gfx->view_mask = 0; + gfx->samples = 0; + result = anv_cmd_buffer_init_attachments(cmd_buffer, 0, 0); if (result != VK_SUCCESS) return result; - - result = genX(cmd_buffer_alloc_att_surf_states)(cmd_buffer, pass, - subpass); - if (result != VK_SUCCESS) - return result; - - cmd_buffer->state.pass = pass; - cmd_buffer->state.subpass = subpass; } else { - subpass = &pass->subpasses[pBeginInfo->pInheritanceInfo->subpass]; + gfx->rendering_flags = inheritance_info->flags; + gfx->view_mask = inheritance_info->viewMask; + gfx->samples = inheritance_info->rasterizationSamples; - VK_FROM_HANDLE(vk_framebuffer, framebuffer, + uint32_t color_att_valid = 0; + uint32_t color_att_count = inheritance_info->colorAttachmentCount; + for (uint32_t i = 0; i < color_att_count; i++) { + VkFormat format = inheritance_info->pColorAttachmentFormats[i]; + if (format != VK_FORMAT_UNDEFINED) + color_att_valid |= BITFIELD_BIT(i); + } + result = anv_cmd_buffer_init_attachments(cmd_buffer, + color_att_count, + color_att_valid); + if (result != VK_SUCCESS) + return result; + + for (uint32_t i = 0; i < color_att_count; i++) { + gfx->color_att[i].vk_format = + inheritance_info->pColorAttachmentFormats[i]; + } + gfx->depth_att.vk_format = + inheritance_info->depthAttachmentFormat; + gfx->stencil_att.vk_format = + inheritance_info->stencilAttachmentFormat; + } + + /* Try to figure out the depth buffer if we can */ + if (pBeginInfo->pInheritanceInfo->renderPass != VK_NULL_HANDLE && + pBeginInfo->pInheritanceInfo->framebuffer != VK_NULL_HANDLE) { + VK_FROM_HANDLE(vk_render_pass, pass, + pBeginInfo->pInheritanceInfo->renderPass); + VK_FROM_HANDLE(vk_framebuffer, fb, pBeginInfo->pInheritanceInfo->framebuffer); + const struct vk_subpass *subpass = + &pass->subpasses[pBeginInfo->pInheritanceInfo->subpass]; - cmd_buffer->state.pass = pass; - cmd_buffer->state.subpass = subpass; + if (!(fb->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR) && + subpass->depth_stencil_attachment != NULL) { + const struct vk_subpass_attachment *att = + subpass->depth_stencil_attachment; - /* This is optional in the inheritance info. */ - cmd_buffer->state.framebuffer = framebuffer; + assert(att->attachment < fb->attachment_count); + ANV_FROM_HANDLE(anv_image_view, iview, + fb->attachments[att->attachment]); - result = genX(cmd_buffer_setup_attachments)(cmd_buffer, pass, - framebuffer, NULL); - if (result != VK_SUCCESS) - return result; - - result = genX(cmd_buffer_alloc_att_surf_states)(cmd_buffer, pass, - subpass); - if (result != VK_SUCCESS) - return result; - - /* Record that HiZ is enabled if we can. */ - if (cmd_buffer->state.framebuffer) { - const struct anv_image_view * const iview = - anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); - - if (iview && (iview->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT)) { - VkImageLayout layout = - cmd_buffer->state.subpass->depth_stencil_attachment->layout; - - enum isl_aux_usage aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, iview->image, + if (iview->vk.image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { + assert(gfx->depth_att.vk_format == iview->vk.format); + gfx->depth_att.iview = iview; + gfx->depth_att.layout = att->layout; + gfx->depth_att.aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + iview->image, VK_IMAGE_ASPECT_DEPTH_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - layout); + att->layout); + } - cmd_buffer->state.hiz_enabled = isl_aux_usage_has_hiz(aux_usage); + if (iview->vk.image->aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { + assert(gfx->stencil_att.vk_format == iview->vk.format); + gfx->stencil_att.iview = iview; + gfx->stencil_att.layout = att->stencil_layout; + gfx->stencil_att.aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + iview->image, + VK_IMAGE_ASPECT_STENCIL_BIT, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + att->stencil_layout); } } } + if (gfx->depth_att.iview != NULL) { + cmd_buffer->state.hiz_enabled = + isl_aux_usage_has_hiz(gfx->depth_att.aux_usage); + } + cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_RENDER_TARGETS; } @@ -1889,7 +1798,7 @@ genX(BeginCommandBuffer)( } #endif - return result; + return VK_SUCCESS; } /* From the PRM, Volume 2a: @@ -2023,8 +1932,8 @@ genX(CmdExecuteCommands)( */ struct anv_bo *ss_bo = primary->device->surface_state_pool.block_pool.bo; - struct anv_state src_state = primary->state.attachment_states; - struct anv_state dst_state = secondary->state.attachment_states; + struct anv_state src_state = primary->state.gfx.att_states; + struct anv_state dst_state = secondary->state.gfx.att_states; assert(src_state.alloc_size == dst_state.alloc_size); genX(cmd_buffer_so_memcpy)(primary, @@ -2643,7 +2552,6 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, struct anv_shader_bin *shader, struct anv_state *bt_state) { - struct anv_subpass *subpass = cmd_buffer->state.subpass; uint32_t state_offset; struct anv_pipeline_bind_map *map = &shader->bind_map; @@ -2680,25 +2588,13 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, case ANV_DESCRIPTOR_SET_COLOR_ATTACHMENTS: /* Color attachment binding */ assert(shader->stage == MESA_SHADER_FRAGMENT); - if (binding->index < subpass->color_count) { - const unsigned att = - subpass->color_attachments[binding->index].attachment; - - /* From the Vulkan 1.0.46 spec: - * - * "If any color or depth/stencil attachments are - * VK_ATTACHMENT_UNUSED, then no writes occur for those - * attachments." - */ - if (att == VK_ATTACHMENT_UNUSED) { - surface_state = cmd_buffer->state.null_surface_state; - } else { - surface_state = cmd_buffer->state.attachments[att].color.state; - } + if (binding->index < cmd_buffer->state.gfx.color_att_count) { + const struct anv_attachment *att = + &cmd_buffer->state.gfx.color_att[binding->index]; + surface_state = att->surface_state.state; } else { - surface_state = cmd_buffer->state.null_surface_state; + surface_state = cmd_buffer->state.gfx.null_surface_state; } - assert(surface_state.map); bt_map[s] = surface_state.offset + state_offset; break; @@ -4041,6 +3937,13 @@ cmd_buffer_emit_vertex_constants_and_flush(struct anv_cmd_buffer *cmd_buffer, genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer); } +static unsigned +anv_cmd_buffer_get_view_count(struct anv_cmd_buffer *cmd_buffer) +{ + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + return MAX2(1, util_bitcount(gfx->view_mask)); +} + void genX(CmdDraw)( VkCommandBuffer commandBuffer, uint32_t vertexCount, @@ -4058,7 +3961,7 @@ void genX(CmdDraw)( const uint32_t count = (vertexCount * instanceCount * (pipeline->use_primitive_replication ? - 1 : anv_subpass_view_count(cmd_buffer->state.subpass))); + 1 : anv_cmd_buffer_get_view_count(cmd_buffer))); anv_measure_snapshot(cmd_buffer, INTEL_SNAPSHOT_DRAW, "draw", count); @@ -4077,7 +3980,7 @@ void genX(CmdDraw)( * different views. We need to multiply instanceCount by the view count. */ if (!pipeline->use_primitive_replication) - instanceCount *= anv_subpass_view_count(cmd_buffer->state.subpass); + instanceCount *= anv_cmd_buffer_get_view_count(cmd_buffer); anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE), prim) { prim.PredicateEnable = cmd_buffer->state.conditional_render_enabled; @@ -4113,7 +4016,7 @@ void genX(CmdDrawMultiEXT)( const uint32_t count = (drawCount * instanceCount * (pipeline->use_primitive_replication ? - 1 : anv_subpass_view_count(cmd_buffer->state.subpass))); + 1 : anv_cmd_buffer_get_view_count(cmd_buffer))); anv_measure_snapshot(cmd_buffer, INTEL_SNAPSHOT_DRAW, "draw_multi", count); @@ -4128,7 +4031,7 @@ void genX(CmdDrawMultiEXT)( * different views. We need to multiply instanceCount by the view count. */ if (!pipeline->use_primitive_replication) - instanceCount *= anv_subpass_view_count(cmd_buffer->state.subpass); + instanceCount *= anv_cmd_buffer_get_view_count(cmd_buffer); uint32_t i = 0; vk_foreach_multi_draw(draw, i, pVertexInfo, drawCount, stride) { @@ -4171,7 +4074,7 @@ void genX(CmdDrawIndexed)( const uint32_t count = (indexCount * instanceCount * (pipeline->use_primitive_replication ? - 1 : anv_subpass_view_count(cmd_buffer->state.subpass))); + 1 : anv_cmd_buffer_get_view_count(cmd_buffer))); anv_measure_snapshot(cmd_buffer, INTEL_SNAPSHOT_DRAW, "draw indexed", @@ -4189,7 +4092,7 @@ void genX(CmdDrawIndexed)( * different views. We need to multiply instanceCount by the view count. */ if (!pipeline->use_primitive_replication) - instanceCount *= anv_subpass_view_count(cmd_buffer->state.subpass); + instanceCount *= anv_cmd_buffer_get_view_count(cmd_buffer); anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE), prim) { prim.PredicateEnable = cmd_buffer->state.conditional_render_enabled; @@ -4226,7 +4129,7 @@ void genX(CmdDrawMultiIndexedEXT)( const uint32_t count = (drawCount * instanceCount * (pipeline->use_primitive_replication ? - 1 : anv_subpass_view_count(cmd_buffer->state.subpass))); + 1 : anv_cmd_buffer_get_view_count(cmd_buffer))); anv_measure_snapshot(cmd_buffer, INTEL_SNAPSHOT_DRAW, "draw indexed_multi", @@ -4242,7 +4145,7 @@ void genX(CmdDrawMultiIndexedEXT)( * different views. We need to multiply instanceCount by the view count. */ if (!pipeline->use_primitive_replication) - instanceCount *= anv_subpass_view_count(cmd_buffer->state.subpass); + instanceCount *= anv_cmd_buffer_get_view_count(cmd_buffer); uint32_t i = 0; if (pVertexOffset) { @@ -4377,7 +4280,7 @@ void genX(CmdDrawIndirectByteCountEXT)( * different views. We need to multiply instanceCount by the view count. */ if (!pipeline->use_primitive_replication) - instanceCount *= anv_subpass_view_count(cmd_buffer->state.subpass); + instanceCount *= anv_cmd_buffer_get_view_count(cmd_buffer); struct mi_builder b; mi_builder_init(&b, &cmd_buffer->device->info, &cmd_buffer->batch); @@ -4420,7 +4323,7 @@ load_indirect_parameters(struct anv_cmd_buffer *cmd_buffer, mi_mem32(anv_address_add(addr, 0))); struct mi_value instance_count = mi_mem32(anv_address_add(addr, 4)); - unsigned view_count = anv_subpass_view_count(cmd_buffer->state.subpass); + unsigned view_count = anv_cmd_buffer_get_view_count(cmd_buffer); if (view_count > 1) { #if GFX_VERx10 >= 75 instance_count = mi_imul_imm(&b, instance_count, view_count); @@ -6156,9 +6059,7 @@ static void cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer) { struct anv_device *device = cmd_buffer->device; - const struct anv_image_view *iview = - anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); - const struct anv_image *image = iview ? iview->image : NULL; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; /* FIXME: Width and Height are wrong */ @@ -6173,10 +6074,18 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer) .mocs = anv_mocs(device, NULL, ISL_SURF_USAGE_DEPTH_BIT), }; - if (iview) + if (gfx->depth_att.iview != NULL) { + info.view = &gfx->depth_att.iview->planes[0].isl; + } else if (gfx->stencil_att.iview != NULL) { + info.view = &gfx->stencil_att.iview->planes[0].isl; + } + + if (gfx->depth_att.iview != NULL) { + const struct anv_image_view *iview = gfx->depth_att.iview; + const struct anv_image *image = iview->image; + info.view = &iview->planes[0].isl; - if (image && (image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT)) { const uint32_t depth_plane = anv_image_aspect_to_plane(image, VK_IMAGE_ASPECT_DEPTH_BIT); const struct anv_surface *depth_surface = @@ -6193,9 +6102,7 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer) info.mocs = anv_mocs(device, depth_address.bo, ISL_SURF_USAGE_DEPTH_BIT); - const uint32_t ds = - cmd_buffer->state.subpass->depth_stencil_attachment->attachment; - info.hiz_usage = cmd_buffer->state.attachments[ds].aux_usage; + info.hiz_usage = gfx->depth_att.aux_usage; if (info.hiz_usage != ISL_AUX_USAGE_NONE) { assert(isl_aux_usage_has_hiz(info.hiz_usage)); @@ -6215,7 +6122,13 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer) } } - if (image && (image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT)) { + if (gfx->stencil_att.iview != NULL) { + const struct anv_image_view *iview = gfx->stencil_att.iview; + const struct anv_image *image = iview->image; + + if (info.view == NULL) + info.view = &iview->planes[0].isl; + const uint32_t stencil_plane = anv_image_aspect_to_plane(image, VK_IMAGE_ASPECT_STENCIL_BIT); const struct anv_surface *stencil_surface = @@ -6261,7 +6174,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer) } static void -cmd_buffer_emit_cps_control_buffer(struct anv_cmd_buffer *cmd_buffer) +cmd_buffer_emit_cps_control_buffer(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image_view *fsr_iview) { #if GFX_VERx10 >= 125 struct anv_device *device = cmd_buffer->device; @@ -6276,8 +6190,6 @@ cmd_buffer_emit_cps_control_buffer(struct anv_cmd_buffer *cmd_buffer) struct isl_cpb_emit_info info = { }; - const struct anv_image_view *fsr_iview = - anv_cmd_buffer_get_fsr_view(cmd_buffer); if (fsr_iview) { info.view = &fsr_iview->planes[0].isl; info.surf = &fsr_iview->image->planes[0].primary_surface.isl; @@ -6296,226 +6208,470 @@ cmd_buffer_emit_cps_control_buffer(struct anv_cmd_buffer *cmd_buffer) #endif /* GFX_VERx10 >= 125 */ } -/** - * This ANDs the view mask of the current subpass with the pending clear - * views in the attachment to get the mask of views active in the subpass - * that still need to be cleared. - */ -static inline uint32_t -get_multiview_subpass_clear_mask(const struct anv_cmd_state *cmd_state, - const struct anv_attachment_state *att_state) +static VkImageLayout +attachment_initial_layout(const VkRenderingAttachmentInfo *att) { - return cmd_state->subpass->view_mask & att_state->pending_clear_views; + const VkRenderingAttachmentInitialLayoutInfoMESA *layout_info = + vk_find_struct_const(att->pNext, + RENDERING_ATTACHMENT_INITIAL_LAYOUT_INFO_MESA); + if (layout_info != NULL) + return layout_info->initialLayout; + + return att->imageLayout; } -static inline bool -do_first_layer_clear(const struct anv_cmd_state *cmd_state, - const struct anv_attachment_state *att_state) +void genX(CmdBeginRendering)( + VkCommandBuffer commandBuffer, + const VkRenderingInfo* pRenderingInfo) { - if (!cmd_state->subpass->view_mask) - return true; + ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + VkResult result; - uint32_t pending_clear_mask = - get_multiview_subpass_clear_mask(cmd_state, att_state); - - return pending_clear_mask & 1; -} - -static inline bool -current_subpass_is_last_for_attachment(const struct anv_cmd_state *cmd_state, - uint32_t att_idx) -{ - const uint32_t last_subpass_idx = - cmd_state->pass->attachments[att_idx].last_subpass_idx; - const struct anv_subpass *last_subpass = - &cmd_state->pass->subpasses[last_subpass_idx]; - return last_subpass == cmd_state->subpass; -} - -static void -clear_color_attachment(struct anv_cmd_buffer *cmd_buffer, - struct anv_attachment_state *att_state, - uint32_t level, - uint32_t base_layer) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct vk_framebuffer *fb = cmd_state->framebuffer; - VkRect2D render_area = cmd_state->render_area; - bool is_multiview = cmd_state->subpass->view_mask != 0; - - struct anv_image_view *iview = att_state->image_view; - const struct anv_image *image = iview->image; - - /* Multi-planar images are not supported as attachments */ - assert(image->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT); - assert(image->n_planes == 1); - - uint32_t base_clear_layer = iview->planes[0].isl.base_array_layer; - uint32_t clear_layer_count = fb->layers; - - if (att_state->fast_clear && - do_first_layer_clear(cmd_state, att_state)) { - /* We only support fast-clears on the first layer */ - assert(level == 0 && base_layer == 0); - - union isl_color_value clear_color = {}; - anv_clear_color_from_att_state(&clear_color, att_state, iview); - if (iview->image->vk.samples == 1) { - anv_image_ccs_op(cmd_buffer, image, - iview->planes[0].isl.format, - iview->planes[0].isl.swizzle, - VK_IMAGE_ASPECT_COLOR_BIT, - 0, 0, 1, ISL_AUX_OP_FAST_CLEAR, - &clear_color, - false); - } else { - anv_image_mcs_op(cmd_buffer, image, - iview->planes[0].isl.format, - iview->planes[0].isl.swizzle, - VK_IMAGE_ASPECT_COLOR_BIT, - 0, 1, ISL_AUX_OP_FAST_CLEAR, - &clear_color, - false); - } - base_clear_layer++; - clear_layer_count--; - if (is_multiview) - att_state->pending_clear_views &= ~1; - - if (isl_color_value_is_zero(clear_color, - iview->planes[0].isl.format)) { - /* This image has the auxiliary buffer enabled. We can mark the - * subresource as not needing a resolve because the clear color - * will match what's in every RENDER_SURFACE_STATE object when - * it's being used for sampling. - */ - set_image_fast_clear_state(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - ANV_FAST_CLEAR_DEFAULT_VALUE); - } else { - set_image_fast_clear_state(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - ANV_FAST_CLEAR_ANY); - } + if (!is_render_queue_cmd_buffer(cmd_buffer)) { + assert(!"Trying to start a render pass on non-render queue!"); + anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_UNKNOWN); + return; } - /* From the VkFramebufferCreateInfo spec: - * - * "If the render pass uses multiview, then layers must be one and each - * attachment requires a number of layers that is greater than the - * maximum bit index set in the view mask in the subpasses in which it - * is used." - * - * So if multiview is active we ignore the number of layers in the - * framebuffer and instead we honor the view mask from the subpass. + anv_measure_beginrenderpass(cmd_buffer); + trace_intel_begin_render_pass(&cmd_buffer->trace, cmd_buffer); + + gfx->rendering_flags = pRenderingInfo->flags; + gfx->render_area = pRenderingInfo->renderArea; + gfx->view_mask = pRenderingInfo->viewMask; + gfx->layer_count = pRenderingInfo->layerCount; + gfx->samples = 0; + + const bool is_multiview = gfx->view_mask != 0; + const VkRect2D render_area = gfx->render_area; + const uint32_t layers = + is_multiview ? util_last_bit(gfx->view_mask) : gfx->layer_count; + + /* The framebuffer size is at least large enough to contain the render + * area. Because a zero renderArea is possible, we MAX with 1. */ - if (is_multiview) { - assert(image->n_planes == 1); - uint32_t pending_clear_mask = - get_multiview_subpass_clear_mask(cmd_state, att_state); + struct isl_extent3d fb_size = { + .w = MAX2(1, render_area.offset.x + render_area.extent.width), + .h = MAX2(1, render_area.offset.y + render_area.extent.height), + .d = layers, + }; - u_foreach_bit(layer_idx, pending_clear_mask) { - uint32_t layer = - iview->planes[0].isl.base_array_layer + layer_idx; + /* Reserve one for the NULL state. */ + uint32_t color_att_valid = 0; + uint32_t color_att_count = pRenderingInfo->colorAttachmentCount; + for (uint32_t i = 0; i < pRenderingInfo->colorAttachmentCount; i++) { + if (pRenderingInfo->pColorAttachments[i].imageView != VK_NULL_HANDLE) + color_att_valid |= BITFIELD_BIT(i); + } + result = anv_cmd_buffer_init_attachments(cmd_buffer, + color_att_count, + color_att_valid); + if (result != VK_SUCCESS) + return; - anv_image_clear_color(cmd_buffer, image, - VK_IMAGE_ASPECT_COLOR_BIT, - att_state->aux_usage, - iview->planes[0].isl.format, - iview->planes[0].isl.swizzle, - level, layer, 1, - render_area, - vk_to_isl_color(att_state->clear_value.color)); + for (uint32_t i = 0; i < gfx->color_att_count; i++) { + if (!(color_att_valid & BITFIELD_BIT(i))) + continue; + + const VkRenderingAttachmentInfo *att = + &pRenderingInfo->pColorAttachments[i]; + ANV_FROM_HANDLE(anv_image_view, iview, att->imageView); + const VkImageLayout initial_layout = attachment_initial_layout(att); + + assert(render_area.offset.x + render_area.extent.width <= + iview->vk.extent.width); + assert(render_area.offset.y + render_area.extent.height <= + iview->vk.extent.height); + assert(layers <= iview->vk.layer_count); + + fb_size.w = MAX2(fb_size.w, iview->vk.extent.width); + fb_size.h = MAX2(fb_size.h, iview->vk.extent.height); + + assert(gfx->samples == 0 || gfx->samples == iview->vk.image->samples); + gfx->samples |= iview->vk.image->samples; + + enum isl_aux_usage aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + att->imageLayout); + + union isl_color_value fast_clear_color = { .u32 = { 0, } }; + + if (att->loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR && + !(gfx->rendering_flags & VK_RENDERING_RESUMING_BIT)) { + const union isl_color_value clear_color = + vk_to_isl_color_with_format(att->clearValue.color, + iview->planes[0].isl.format); + + /* We only support fast-clears on the first layer */ + const bool fast_clear = + (!is_multiview || (gfx->view_mask & 1)) && + anv_can_fast_clear_color_view(cmd_buffer->device, iview, + att->imageLayout, clear_color, + layers, render_area); + + if (att->imageLayout != initial_layout) { + assert(render_area.offset.x == 0 && render_area.offset.y == 0 && + render_area.extent.width == iview->vk.extent.width && + render_area.extent.height == iview->vk.extent.height); + if (is_multiview) { + u_foreach_bit(view, gfx->view_mask) { + transition_color_buffer(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + iview->vk.base_mip_level, 1, + iview->vk.base_array_layer + view, + 1, /* layer_count */ + initial_layout, att->imageLayout, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + fast_clear); + } + } else { + transition_color_buffer(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + iview->vk.base_mip_level, 1, + iview->vk.base_array_layer, + iview->vk.layer_count, + initial_layout, att->imageLayout, + VK_QUEUE_FAMILY_IGNORED, + VK_QUEUE_FAMILY_IGNORED, + fast_clear); + } + } + + uint32_t clear_view_mask = pRenderingInfo->viewMask; + uint32_t base_clear_layer = iview->vk.base_array_layer; + uint32_t clear_layer_count = iview->vk.layer_count; + if (fast_clear) { + /* We only support fast-clears on the first layer */ + assert(iview->vk.base_mip_level == 0 && + iview->vk.base_array_layer == 0); + + fast_clear_color = clear_color; + + if (iview->image->vk.samples == 1) { + anv_image_ccs_op(cmd_buffer, iview->image, + iview->planes[0].isl.format, + iview->planes[0].isl.swizzle, + VK_IMAGE_ASPECT_COLOR_BIT, + 0, 0, 1, ISL_AUX_OP_FAST_CLEAR, + &fast_clear_color, + false); + } else { + anv_image_mcs_op(cmd_buffer, iview->image, + iview->planes[0].isl.format, + iview->planes[0].isl.swizzle, + VK_IMAGE_ASPECT_COLOR_BIT, + 0, 1, ISL_AUX_OP_FAST_CLEAR, + &fast_clear_color, + false); + } + clear_view_mask &= ~1u; + base_clear_layer++; + clear_layer_count--; + + if (isl_color_value_is_zero(clear_color, + iview->planes[0].isl.format)) { + /* This image has the auxiliary buffer enabled. We can mark the + * subresource as not needing a resolve because the clear color + * will match what's in every RENDER_SURFACE_STATE object when + * it's being used for sampling. + */ + set_image_fast_clear_state(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + ANV_FAST_CLEAR_DEFAULT_VALUE); + } else { + set_image_fast_clear_state(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + ANV_FAST_CLEAR_ANY); + } + } + + if (is_multiview) { + u_foreach_bit(view, clear_view_mask) { + anv_image_clear_color(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + aux_usage, + iview->planes[0].isl.format, + iview->planes[0].isl.swizzle, + iview->vk.base_mip_level, + iview->vk.base_array_layer + view, 1, + render_area, clear_color); + } + } else { + anv_image_clear_color(cmd_buffer, iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + aux_usage, + iview->planes[0].isl.format, + iview->planes[0].isl.swizzle, + iview->vk.base_mip_level, + base_clear_layer, clear_layer_count, + render_area, clear_color); + } + } else { + /* If not LOAD_OP_CLEAR, we shouldn't have a layout transition. */ + assert(att->imageLayout == initial_layout); } - att_state->pending_clear_views &= ~pending_clear_mask; - } else if (clear_layer_count > 0) { - assert(image->n_planes == 1); - anv_image_clear_color(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT, - att_state->aux_usage, - iview->planes[0].isl.format, - iview->planes[0].isl.swizzle, - level, base_clear_layer, clear_layer_count, - render_area, - vk_to_isl_color(att_state->clear_value.color)); - } -} + gfx->color_att[i].vk_format = iview->vk.format; + gfx->color_att[i].iview = iview; + gfx->color_att[i].layout = att->imageLayout; + gfx->color_att[i].aux_usage = aux_usage; -static void -clear_depth_stencil_attachment(struct anv_cmd_buffer *cmd_buffer, - struct anv_attachment_state *att_state, - uint32_t level, - uint32_t base_layer, - uint32_t layer_count) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - VkRect2D render_area = cmd_state->render_area; - bool is_multiview = cmd_state->subpass->view_mask != 0; + anv_image_fill_surface_state(cmd_buffer->device, + iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + &iview->planes[0].isl, + ISL_SURF_USAGE_RENDER_TARGET_BIT, + aux_usage, &fast_clear_color, + 0, /* anv_image_view_state_flags */ + &gfx->color_att[i].surface_state, + NULL); - struct anv_image_view *iview = att_state->image_view; - const struct anv_image *image = iview->image; + add_surface_state_relocs(cmd_buffer, gfx->color_att[i].surface_state); - if (att_state->fast_clear && - (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_DEPTH_BIT)) { - /* We currently only support HiZ for single-LOD images */ - assert(isl_aux_usage_has_hiz(iview->image->planes[0].aux_usage)); - assert(iview->planes[0].isl.base_level == 0); - assert(iview->planes[0].isl.levels == 1); + if (GFX_VER < 10 && + (att->loadOp == VK_ATTACHMENT_LOAD_OP_LOAD || + (gfx->rendering_flags & VK_RENDERING_RESUMING_BIT)) && + iview->image->planes[0].aux_usage != ISL_AUX_USAGE_NONE && + iview->planes[0].isl.base_level == 0 && + iview->planes[0].isl.base_array_layer == 0) { + genX(copy_fast_clear_dwords)(cmd_buffer, + gfx->color_att[i].surface_state.state, + iview->image, + VK_IMAGE_ASPECT_COLOR_BIT, + false /* copy to ss */); + } + + if (att->resolveMode != VK_RESOLVE_MODE_NONE) { + gfx->color_att[i].resolve_mode = att->resolveMode; + gfx->color_att[i].resolve_iview = + anv_image_view_from_handle(att->resolveImageView); + gfx->color_att[i].resolve_layout = att->resolveImageLayout; + } } - if (is_multiview) { - uint32_t pending_clear_mask = - get_multiview_subpass_clear_mask(cmd_state, att_state); + const struct anv_image_view *fsr_iview = NULL; + const VkRenderingFragmentShadingRateAttachmentInfoKHR *fsr_att = + vk_find_struct_const(pRenderingInfo->pNext, + RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); + if (fsr_att != NULL && fsr_att->imageView != VK_NULL_HANDLE) { + fsr_iview = anv_image_view_from_handle(fsr_att->imageView); + /* imageLayout and shadingRateAttachmentTexelSize are ignored */ + } - u_foreach_bit(layer_idx, pending_clear_mask) { - uint32_t layer = - iview->planes[0].isl.base_array_layer + layer_idx; + const struct anv_image_view *ds_iview = NULL; + const VkRenderingAttachmentInfo *d_att = pRenderingInfo->pDepthAttachment; + const VkRenderingAttachmentInfo *s_att = pRenderingInfo->pStencilAttachment; + if ((d_att != NULL && d_att->imageView != VK_NULL_HANDLE) || + (s_att != NULL && s_att->imageView != VK_NULL_HANDLE)) { + const struct anv_image_view *d_iview = NULL, *s_iview = NULL; + VkImageLayout depth_layout = VK_IMAGE_LAYOUT_UNDEFINED; + VkImageLayout stencil_layout = VK_IMAGE_LAYOUT_UNDEFINED; + VkImageLayout initial_depth_layout = VK_IMAGE_LAYOUT_UNDEFINED; + VkImageLayout initial_stencil_layout = VK_IMAGE_LAYOUT_UNDEFINED; + enum isl_aux_usage depth_aux_usage = ISL_AUX_USAGE_NONE; + enum isl_aux_usage stencil_aux_usage = ISL_AUX_USAGE_NONE; + float depth_clear_value = 0; + uint32_t stencil_clear_value = 0; - if (att_state->fast_clear) { - anv_image_hiz_clear(cmd_buffer, image, - att_state->pending_clear_aspects, - level, layer, 1, render_area, - att_state->clear_value.depthStencil.stencil); + if (d_att != NULL && d_att->imageView != VK_NULL_HANDLE) { + d_iview = anv_image_view_from_handle(d_att->imageView); + initial_depth_layout = attachment_initial_layout(d_att); + depth_layout = d_att->imageLayout; + depth_aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + d_iview->image, + VK_IMAGE_ASPECT_DEPTH_BIT, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + depth_layout); + depth_clear_value = d_att->clearValue.depthStencil.depth; + } + + if (s_att != NULL && s_att->imageView != VK_NULL_HANDLE) { + s_iview = anv_image_view_from_handle(s_att->imageView); + initial_stencil_layout = attachment_initial_layout(s_att); + stencil_layout = s_att->imageLayout; + stencil_aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + s_iview->image, + VK_IMAGE_ASPECT_STENCIL_BIT, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + stencil_layout); + stencil_clear_value = s_att->clearValue.depthStencil.stencil; + } + + assert(s_iview == NULL || d_iview == NULL || s_iview == d_iview); + ds_iview = d_iview != NULL ? d_iview : s_iview; + assert(ds_iview != NULL); + + assert(render_area.offset.x + render_area.extent.width <= + ds_iview->vk.extent.width); + assert(render_area.offset.y + render_area.extent.height <= + ds_iview->vk.extent.height); + assert(layers <= ds_iview->vk.layer_count); + + fb_size.w = MAX2(fb_size.w, ds_iview->vk.extent.width); + fb_size.h = MAX2(fb_size.h, ds_iview->vk.extent.height); + + assert(gfx->samples == 0 || gfx->samples == ds_iview->vk.image->samples); + gfx->samples |= ds_iview->vk.image->samples; + + VkImageAspectFlags clear_aspects = 0; + if (d_iview != NULL && d_att->loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR && + !(gfx->rendering_flags & VK_RENDERING_RESUMING_BIT)) + clear_aspects |= VK_IMAGE_ASPECT_DEPTH_BIT; + if (s_iview != NULL && s_att->loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR && + !(gfx->rendering_flags & VK_RENDERING_RESUMING_BIT)) + clear_aspects |= VK_IMAGE_ASPECT_STENCIL_BIT; + + if (clear_aspects != 0) { + const bool hiz_clear = + anv_can_hiz_clear_ds_view(cmd_buffer->device, d_iview, + depth_layout, clear_aspects, + depth_clear_value, + render_area); + + if (depth_layout != initial_depth_layout) { + assert(render_area.offset.x == 0 && render_area.offset.y == 0 && + render_area.extent.width == d_iview->vk.extent.width && + render_area.extent.height == d_iview->vk.extent.height); + + if (is_multiview) { + u_foreach_bit(view, gfx->view_mask) { + transition_depth_buffer(cmd_buffer, d_iview->image, + d_iview->vk.base_array_layer + view, + 1 /* layer_count */, + initial_depth_layout, depth_layout, + hiz_clear); + } + } else { + transition_depth_buffer(cmd_buffer, d_iview->image, + d_iview->vk.base_array_layer, + d_iview->vk.layer_count, + initial_depth_layout, depth_layout, + hiz_clear); + } + } + + if (stencil_layout != initial_stencil_layout) { + assert(render_area.offset.x == 0 && render_area.offset.y == 0 && + render_area.extent.width == s_iview->vk.extent.width && + render_area.extent.height == s_iview->vk.extent.height); + + if (is_multiview) { + u_foreach_bit(view, gfx->view_mask) { + transition_stencil_buffer(cmd_buffer, s_iview->image, + s_iview->vk.base_mip_level, 1, + s_iview->vk.base_array_layer + view, + 1 /* layer_count */, + initial_stencil_layout, + stencil_layout, + hiz_clear); + } + } else { + transition_stencil_buffer(cmd_buffer, s_iview->image, + s_iview->vk.base_mip_level, 1, + s_iview->vk.base_array_layer, + s_iview->vk.layer_count, + initial_stencil_layout, + stencil_layout, + hiz_clear); + } + } + + if (is_multiview) { + uint32_t clear_view_mask = pRenderingInfo->viewMask; + while (clear_view_mask) { + int view = u_bit_scan(&clear_view_mask); + + uint32_t level = ds_iview->vk.base_mip_level; + uint32_t layer = ds_iview->vk.base_array_layer + view; + + if (hiz_clear) { + anv_image_hiz_clear(cmd_buffer, ds_iview->image, + clear_aspects, + level, layer, 1, + render_area, + stencil_clear_value); + } else { + anv_image_clear_depth_stencil(cmd_buffer, ds_iview->image, + clear_aspects, + depth_aux_usage, + level, layer, 1, + render_area, + depth_clear_value, + stencil_clear_value); + } + } } else { - anv_image_clear_depth_stencil(cmd_buffer, image, - att_state->pending_clear_aspects, - att_state->aux_usage, - level, layer, 1, render_area, - att_state->clear_value.depthStencil.depth, - att_state->clear_value.depthStencil.stencil); + uint32_t level = ds_iview->vk.base_mip_level; + uint32_t base_layer = ds_iview->vk.base_array_layer; + uint32_t layer_count = ds_iview->vk.layer_count; + + if (hiz_clear) { + anv_image_hiz_clear(cmd_buffer, ds_iview->image, + clear_aspects, + level, base_layer, layer_count, + render_area, + stencil_clear_value); + } else { + anv_image_clear_depth_stencil(cmd_buffer, ds_iview->image, + clear_aspects, + depth_aux_usage, + level, base_layer, layer_count, + render_area, + depth_clear_value, + stencil_clear_value); + } + } + } else { + /* If not LOAD_OP_CLEAR, we shouldn't have a layout transition. */ + assert(depth_layout == initial_depth_layout); + assert(stencil_layout == initial_stencil_layout); + } + + if (d_iview != NULL) { + gfx->depth_att.vk_format = d_iview->vk.format; + gfx->depth_att.iview = d_iview; + gfx->depth_att.layout = depth_layout; + gfx->depth_att.aux_usage = depth_aux_usage; + if (d_att != NULL && d_att->resolveMode != VK_RESOLVE_MODE_NONE) { + assert(d_att->resolveImageView != VK_NULL_HANDLE); + gfx->depth_att.resolve_mode = d_att->resolveMode; + gfx->depth_att.resolve_iview = + anv_image_view_from_handle(d_att->resolveImageView); + gfx->depth_att.resolve_layout = d_att->resolveImageLayout; } } - att_state->pending_clear_views &= ~pending_clear_mask; - } else { - if (att_state->fast_clear) { - anv_image_hiz_clear(cmd_buffer, image, - att_state->pending_clear_aspects, - level, base_layer, layer_count, - render_area, - att_state->clear_value.depthStencil.stencil); - } else { - anv_image_clear_depth_stencil(cmd_buffer, image, - att_state->pending_clear_aspects, - att_state->aux_usage, - level, base_layer, layer_count, - render_area, - att_state->clear_value.depthStencil.depth, - att_state->clear_value.depthStencil.stencil); + if (s_iview != NULL) { + gfx->stencil_att.vk_format = s_iview->vk.format; + gfx->stencil_att.iview = s_iview; + gfx->stencil_att.layout = stencil_layout; + gfx->stencil_att.aux_usage = stencil_aux_usage; + if (s_att->resolveMode != VK_RESOLVE_MODE_NONE) { + assert(s_att->resolveImageView != VK_NULL_HANDLE); + gfx->stencil_att.resolve_mode = s_att->resolveMode; + gfx->stencil_att.resolve_iview = + anv_image_view_from_handle(s_att->resolveImageView); + gfx->stencil_att.resolve_layout = s_att->resolveImageLayout; + } } } -} -static void -cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer, - uint32_t subpass_id) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct anv_render_pass *pass = cmd_state->pass; - struct anv_subpass *subpass = &pass->subpasses[subpass_id]; - cmd_state->subpass = subpass; + /* Finally, now that we know the right size, set up the null surface */ + assert(util_bitcount(gfx->samples) <= 1); + isl_null_fill_state(&cmd_buffer->device->isl_dev, + gfx->null_surface_state.map, + .size = fb_size); - cmd_state->gfx.dirty |= ANV_CMD_DIRTY_RENDER_TARGETS; + /****** We can now start emitting code to begin the render pass ******/ + + gfx->dirty |= ANV_CMD_DIRTY_RENDER_TARGETS; /* Our implementation of VK_KHR_multiview uses instancing to draw the * different views. If the client asks for instancing, we need to use the @@ -6525,7 +6681,7 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer, * of each subpass. */ if (GFX_VER == 7) - cmd_state->gfx.vb_dirty |= ~0; + gfx->vb_dirty |= ~0; /* It is possible to start a render pass with an old pipeline. Because the * render pass and subpass index are both baked into the pipeline, this is @@ -6536,195 +6692,7 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer, * with this edge case, we just dirty the pipeline at the start of every * subpass. */ - cmd_state->gfx.dirty |= ANV_CMD_DIRTY_PIPELINE; - - /* Accumulate any subpass flushes that need to happen before the subpass */ - anv_add_pending_pipe_bits(cmd_buffer, - pass->subpass_flushes[subpass_id], - "begin subpass deps/attachments"); - - VkRect2D render_area = cmd_state->render_area; - struct vk_framebuffer *fb = cmd_state->framebuffer; - - bool is_multiview = subpass->view_mask != 0; - - for (uint32_t i = 0; i < subpass->attachment_count; ++i) { - struct anv_subpass_attachment *att = &subpass->attachments[i]; - const uint32_t a = att->attachment; - if (a == VK_ATTACHMENT_UNUSED) - continue; - - assert(a < pass->attachment_count); - struct anv_attachment_state *att_state = &cmd_state->attachments[a]; - - struct anv_image_view *iview = att_state->image_view; - const struct anv_image *image = iview->image; - - VkImageLayout target_layout = att->layout; - VkImageLayout target_stencil_layout = att->stencil_layout; - - uint32_t level = iview->planes[0].isl.base_level; - uint32_t width = anv_minify(image->vk.extent.width, level); - uint32_t height = anv_minify(image->vk.extent.height, level); - bool full_surface_draw = - render_area.offset.x == 0 && render_area.offset.y == 0 && - render_area.extent.width == width && - render_area.extent.height == height; - - uint32_t base_layer, layer_count; - if (image->vk.image_type == VK_IMAGE_TYPE_3D) { - base_layer = 0; - layer_count = anv_minify(image->vk.extent.depth, level); - } else { - base_layer = iview->planes[0].isl.base_array_layer; - layer_count = fb->layers; - } - - /* Treat the fragment shading rate attachment as color. But make sure we - * don't use fb->layers if the fragment shading rate attachment only has - * one layer. - * - * Vulkan spec 1.2.170 - VkFramebufferCreateInfo : - * - * "each element of pAttachments that is used as a fragment shading - * rate attachment by renderPass must have a layerCount that is - * either 1, or greater than layers" - */ - if ((att->usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR) && - iview->planes[0].isl.array_len == 1) { - base_layer = 0; - layer_count = 1; - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV) { - bool will_full_fast_clear = - (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_COLOR_BIT) && - att_state->fast_clear && full_surface_draw; - - assert(image->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT); - transition_color_buffer(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT, - level, 1, base_layer, layer_count, - att_state->current_layout, target_layout, - VK_QUEUE_FAMILY_IGNORED, - VK_QUEUE_FAMILY_IGNORED, - will_full_fast_clear); - att_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - target_layout); - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { - bool will_full_fast_clear = - (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_DEPTH_BIT) && - att_state->fast_clear && full_surface_draw; - - transition_depth_buffer(cmd_buffer, image, - base_layer, layer_count, - att_state->current_layout, target_layout, - will_full_fast_clear); - att_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, image, - VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - target_layout); - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { - bool will_full_fast_clear = - (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_STENCIL_BIT) && - att_state->fast_clear && full_surface_draw; - - transition_stencil_buffer(cmd_buffer, image, - level, 1, base_layer, layer_count, - att_state->current_stencil_layout, - target_stencil_layout, - will_full_fast_clear); - } - att_state->current_layout = target_layout; - att_state->current_stencil_layout = target_stencil_layout; - - if (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_COLOR_BIT) { - assert(att_state->pending_clear_aspects == VK_IMAGE_ASPECT_COLOR_BIT); - clear_color_attachment(cmd_buffer, att_state, level, - base_layer); - } else if (att_state->pending_clear_aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | - VK_IMAGE_ASPECT_STENCIL_BIT)) { - clear_depth_stencil_attachment(cmd_buffer, att_state, level, - base_layer, layer_count); - } else { - assert(att_state->pending_clear_aspects == 0); - } - - /* If multiview is enabled, then we are only done clearing when we no - * longer have pending layers to clear, or when we have processed the - * last subpass that uses this attachment. - */ - if (!is_multiview || - att_state->pending_clear_views == 0 || - current_subpass_is_last_for_attachment(cmd_state, a)) { - att_state->pending_clear_aspects = 0; - } - } - - /* We've transitioned all our images possibly fast clearing them. Now we - * can fill out the surface states that we will use as render targets - * during actual subpass rendering. - */ - VkResult result = genX(cmd_buffer_alloc_att_surf_states)(cmd_buffer, - pass, subpass); - if (result != VK_SUCCESS) - return; - - isl_null_fill_state(&cmd_buffer->device->isl_dev, - cmd_state->null_surface_state.map, - .size = isl_extent3d(fb->width, fb->height, fb->layers)); - - for (uint32_t i = 0; i < subpass->color_count; ++i) { - struct anv_subpass_attachment *att = &subpass->color_attachments[i]; - const uint32_t a = att->attachment; - if (a == VK_ATTACHMENT_UNUSED) - continue; - - assert(a < pass->attachment_count); - struct anv_render_pass_attachment *pass_att = &pass->attachments[a]; - struct anv_attachment_state *att_state = &cmd_state->attachments[a]; - struct anv_image_view *iview = att_state->image_view; - - /* We had better have a surface state when we get here */ - assert(att_state->color.state.map); - - union isl_color_value clear_color = { .u32 = { 0, } }; - if (pass_att->load_op == VK_ATTACHMENT_LOAD_OP_CLEAR && - att_state->fast_clear) - anv_clear_color_from_att_state(&clear_color, att_state, iview); - - anv_image_fill_surface_state(cmd_buffer->device, - iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - &iview->planes[0].isl, - ISL_SURF_USAGE_RENDER_TARGET_BIT, - att_state->aux_usage, - &clear_color, - 0, - &att_state->color, - NULL); - - add_surface_state_relocs(cmd_buffer, att_state->color); - - if (GFX_VER < 10 && - pass_att->load_op == VK_ATTACHMENT_LOAD_OP_LOAD && - iview->image->planes[0].aux_usage != ISL_AUX_USAGE_NONE && - iview->planes[0].isl.base_level == 0 && - iview->planes[0].isl.base_array_layer == 0) { - genX(copy_fast_clear_dwords)(cmd_buffer, - att_state->color.state, - iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - false /* copy to ss */); - } - } + gfx->dirty |= ANV_CMD_DIRTY_PIPELINE; #if GFX_VER >= 11 /* The PIPE_CONTROL command description says: @@ -6743,20 +6711,49 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer, cmd_buffer_emit_depth_stencil(cmd_buffer); - cmd_buffer_emit_cps_control_buffer(cmd_buffer); + cmd_buffer_emit_cps_control_buffer(cmd_buffer, fsr_iview); +} + +static void +cmd_buffer_mark_attachment_written(struct anv_cmd_buffer *cmd_buffer, + struct anv_attachment *att, + VkImageAspectFlagBits aspect) +{ + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + const struct anv_image_view *iview = att->iview; + + if (gfx->view_mask == 0) { + genX(cmd_buffer_mark_image_written)(cmd_buffer, iview->image, + aspect, att->aux_usage, + iview->planes[0].isl.base_level, + iview->planes[0].isl.base_array_layer, + gfx->layer_count); + } else { + uint32_t res_view_mask = gfx->view_mask; + while (res_view_mask) { + int i = u_bit_scan(&res_view_mask); + + const uint32_t level = iview->planes[0].isl.base_level; + const uint32_t layer = iview->planes[0].isl.base_array_layer + i; + + genX(cmd_buffer_mark_image_written)(cmd_buffer, iview->image, + aspect, att->aux_usage, + level, layer, 1); + } + } } static enum blorp_filter -vk_to_blorp_resolve_mode(VkResolveModeFlagBitsKHR vk_mode) +vk_to_blorp_resolve_mode(VkResolveModeFlagBits vk_mode) { switch (vk_mode) { - case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR: + case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT: return BLORP_FILTER_SAMPLE_0; - case VK_RESOLVE_MODE_AVERAGE_BIT_KHR: + case VK_RESOLVE_MODE_AVERAGE_BIT: return BLORP_FILTER_AVERAGE; - case VK_RESOLVE_MODE_MIN_BIT_KHR: + case VK_RESOLVE_MODE_MIN_BIT: return BLORP_FILTER_MIN_SAMPLE; - case VK_RESOLVE_MODE_MAX_BIT_KHR: + case VK_RESOLVE_MODE_MAX_BIT: return BLORP_FILTER_MAX_SAMPLE; default: return BLORP_FILTER_NONE; @@ -6764,89 +6761,104 @@ vk_to_blorp_resolve_mode(VkResolveModeFlagBitsKHR vk_mode) } static void -cmd_buffer_clear_state_pointers(struct anv_cmd_state *cmd_state) +cmd_buffer_resolve_msaa_attachment(struct anv_cmd_buffer *cmd_buffer, + const struct anv_attachment *att, + VkImageLayout layout, + VkImageAspectFlagBits aspect) { - /* We are done with the previous subpass and all rendering directly to that - * subpass is now complete. Zero out all the surface states so we don't - * accidentally use them between now and the next subpass. - */ - for (uint32_t i = 0; i < cmd_state->pass->attachment_count; ++i) { - struct anv_attachment_state *att_state = &cmd_state->attachments[i]; - memset(&att_state->color, 0, sizeof(att_state->color)); - } - cmd_state->null_surface_state = ANV_STATE_NULL; - cmd_state->attachment_states = ANV_STATE_NULL; -} + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + const struct anv_image_view *src_iview = att->iview; + const struct anv_image_view *dst_iview = att->resolve_iview; -static void -cmd_buffer_mark_images_written(struct anv_cmd_buffer *cmd_buffer, - struct anv_cmd_state *cmd_state, - struct anv_subpass *subpass, - struct vk_framebuffer *fb) -{ - for (uint32_t i = 0; i < subpass->attachment_count; ++i) { - struct anv_subpass_attachment *att = &subpass->attachments[i]; - const uint32_t a = att->attachment; - if (a == VK_ATTACHMENT_UNUSED) - continue; + enum isl_aux_usage src_aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + src_iview->image, aspect, + VK_IMAGE_USAGE_TRANSFER_SRC_BIT, + layout); - assert(a < cmd_state->pass->attachment_count); - struct anv_attachment_state *att_state = &cmd_state->attachments[a]; - struct anv_image_view *iview = att_state->image_view; + enum isl_aux_usage dst_aux_usage = + anv_layout_to_aux_usage(&cmd_buffer->device->info, + dst_iview->image, aspect, + VK_IMAGE_USAGE_TRANSFER_DST_BIT, + att->resolve_layout); - assert(util_bitcount(att->usage) == 1); - if (att->usage == VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { - /* We assume that if we're ending a subpass, we did do some rendering - * so we may end up with compressed data. - */ - genX(cmd_buffer_mark_image_written)(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - att_state->aux_usage, - iview->planes[0].isl.base_level, - iview->planes[0].isl.base_array_layer, - fb->layers); - } else if (att->usage == VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) { - /* We may be writing depth or stencil so we need to mark the surface. - * Unfortunately, there's no way to know at this point whether the - * depth or stencil tests used will actually write to the surface. - * - * Even though stencil may be plane 1, it always shares a base_level - * with depth. - */ - const struct isl_view *ds_view = &iview->planes[0].isl; - if (iview->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { - genX(cmd_buffer_mark_image_written)(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_DEPTH_BIT, - att_state->aux_usage, - ds_view->base_level, - ds_view->base_array_layer, - fb->layers); - } - if (iview->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { - /* Even though stencil may be plane 1, it always shares a - * base_level with depth. - */ - genX(cmd_buffer_mark_image_written)(cmd_buffer, iview->image, - VK_IMAGE_ASPECT_STENCIL_BIT, - ISL_AUX_USAGE_NONE, - ds_view->base_level, - ds_view->base_array_layer, - fb->layers); - } + enum blorp_filter filter = vk_to_blorp_resolve_mode(att->resolve_mode); + + const VkRect2D render_area = gfx->render_area; + if (gfx->view_mask == 0) { + anv_image_msaa_resolve(cmd_buffer, + src_iview->image, src_aux_usage, + src_iview->planes[0].isl.base_level, + src_iview->planes[0].isl.base_array_layer, + dst_iview->image, dst_aux_usage, + dst_iview->planes[0].isl.base_level, + dst_iview->planes[0].isl.base_array_layer, + aspect, + render_area.offset.x, render_area.offset.y, + render_area.offset.x, render_area.offset.y, + render_area.extent.width, + render_area.extent.height, + gfx->layer_count, filter); + } else { + uint32_t res_view_mask = gfx->view_mask; + while (res_view_mask) { + int i = u_bit_scan(&res_view_mask); + + anv_image_msaa_resolve(cmd_buffer, + src_iview->image, src_aux_usage, + src_iview->planes[0].isl.base_level, + src_iview->planes[0].isl.base_array_layer + i, + dst_iview->image, dst_aux_usage, + dst_iview->planes[0].isl.base_level, + dst_iview->planes[0].isl.base_array_layer + i, + aspect, + render_area.offset.x, render_area.offset.y, + render_area.offset.x, render_area.offset.y, + render_area.extent.width, + render_area.extent.height, + 1, filter); } } } -static void -cmd_buffer_resolve_attachments(struct anv_cmd_buffer *cmd_buffer, - struct anv_cmd_state *cmd_state, - struct anv_subpass *subpass, - struct vk_framebuffer *fb, - uint32_t subpass_id) +void genX(CmdEndRendering)( + VkCommandBuffer commandBuffer) { - struct anv_attachment_state *attachments = cmd_state->attachments; + ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; - if (subpass->has_color_resolve) { + if (anv_batch_has_error(&cmd_buffer->batch)) + return; + + const bool is_multiview = gfx->view_mask != 0; + const uint32_t layers = + is_multiview ? util_last_bit(gfx->view_mask) : gfx->layer_count; + + bool has_color_resolve = false; + for (uint32_t i = 0; i < gfx->color_att_count; i++) { + if (gfx->color_att[i].iview == NULL) + continue; + + cmd_buffer_mark_attachment_written(cmd_buffer, &gfx->color_att[i], + VK_IMAGE_ASPECT_COLOR_BIT); + + /* Stash this off for later */ + if (gfx->color_att[i].resolve_mode != VK_RESOLVE_MODE_NONE && + !(gfx->rendering_flags & VK_RENDERING_SUSPENDING_BIT)) + has_color_resolve = true; + } + + if (gfx->depth_att.iview != NULL) { + cmd_buffer_mark_attachment_written(cmd_buffer, &gfx->depth_att, + VK_IMAGE_ASPECT_DEPTH_BIT); + } + + if (gfx->stencil_att.iview != NULL) { + cmd_buffer_mark_attachment_written(cmd_buffer, &gfx->stencil_att, + VK_IMAGE_ASPECT_STENCIL_BIT); + } + + if (has_color_resolve) { /* We are about to do some MSAA resolves. We need to flush so that the * result of writes to the MSAA color attachments show up in the sampler * when we blit to the single-sampled resolve target. @@ -6855,56 +6867,10 @@ cmd_buffer_resolve_attachments(struct anv_cmd_buffer *cmd_buffer, ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT | ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT, "MSAA resolve"); - - for (uint32_t i = 0; i < subpass->color_count; ++i) { - uint32_t src_att = subpass->color_attachments[i].attachment; - uint32_t dst_att = subpass->resolve_attachments[i].attachment; - - if (dst_att == VK_ATTACHMENT_UNUSED) - continue; - - assert(src_att < cmd_state->pass->attachment_count); - assert(dst_att < cmd_state->pass->attachment_count); - - if (attachments[dst_att].pending_clear_aspects) { - /* From the Vulkan 1.0 spec: - * - * If the first use of an attachment in a render pass is as a - * resolve attachment, then the loadOp is effectively ignored - * as the resolve is guaranteed to overwrite all pixels in the - * render area. - */ - attachments[dst_att].pending_clear_aspects = 0; - } - - struct anv_image_view *src_iview = attachments[src_att].image_view; - struct anv_image_view *dst_iview = attachments[dst_att].image_view; - - const VkRect2D render_area = cmd_state->render_area; - - enum isl_aux_usage src_aux_usage = attachments[src_att].aux_usage; - enum isl_aux_usage dst_aux_usage = attachments[dst_att].aux_usage; - - assert(src_iview->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT && - dst_iview->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT); - - anv_image_msaa_resolve(cmd_buffer, - src_iview->image, src_aux_usage, - src_iview->planes[0].isl.base_level, - src_iview->planes[0].isl.base_array_layer, - dst_iview->image, dst_aux_usage, - dst_iview->planes[0].isl.base_level, - dst_iview->planes[0].isl.base_array_layer, - VK_IMAGE_ASPECT_COLOR_BIT, - render_area.offset.x, render_area.offset.y, - render_area.offset.x, render_area.offset.y, - render_area.extent.width, - render_area.extent.height, - fb->layers, BLORP_FILTER_NONE); - } } - if (subpass->ds_resolve_attachment) { + if (gfx->depth_att.resolve_mode != VK_RESOLVE_MODE_NONE || + gfx->stencil_att.resolve_mode != VK_RESOLVE_MODE_NONE) { /* We are about to do some MSAA resolves. We need to flush so that the * result of writes to the MSAA depth attachments show up in the sampler * when we blit to the single-sampled resolve target. @@ -6913,129 +6879,54 @@ cmd_buffer_resolve_attachments(struct anv_cmd_buffer *cmd_buffer, ANV_PIPE_TEXTURE_CACHE_INVALIDATE_BIT | ANV_PIPE_DEPTH_CACHE_FLUSH_BIT, "MSAA resolve"); + } - uint32_t src_att = subpass->depth_stencil_attachment->attachment; - uint32_t dst_att = subpass->ds_resolve_attachment->attachment; + for (uint32_t i = 0; i < gfx->color_att_count; i++) { + const struct anv_attachment *att = &gfx->color_att[i]; + if (att->resolve_mode == VK_RESOLVE_MODE_NONE || + (gfx->rendering_flags & VK_RENDERING_SUSPENDING_BIT)) + continue; - assert(src_att < cmd_state->pass->attachment_count); - assert(dst_att < cmd_state->pass->attachment_count); + cmd_buffer_resolve_msaa_attachment(cmd_buffer, att, att->layout, + VK_IMAGE_ASPECT_COLOR_BIT); + } - if (attachments[dst_att].pending_clear_aspects) { - /* From the Vulkan 1.0 spec: - * - * If the first use of an attachment in a render pass is as a - * resolve attachment, then the loadOp is effectively ignored - * as the resolve is guaranteed to overwrite all pixels in the - * render area. - */ - attachments[dst_att].pending_clear_aspects = 0; - } + if (gfx->depth_att.resolve_mode != VK_RESOLVE_MODE_NONE && + !(gfx->rendering_flags & VK_RENDERING_SUSPENDING_BIT)) { + const struct anv_image_view *src_iview = gfx->depth_att.iview; - struct anv_image_view *src_iview = attachments[src_att].image_view; - struct anv_image_view *dst_iview = attachments[dst_att].image_view; + /* MSAA resolves sample from the source attachment. Transition the + * depth attachment first to get rid of any HiZ that we may not be + * able to handle. + */ + transition_depth_buffer(cmd_buffer, src_iview->image, + src_iview->planes[0].isl.base_array_layer, + layers, + gfx->depth_att.layout, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + false /* will_full_fast_clear */); - const VkRect2D render_area = cmd_state->render_area; + cmd_buffer_resolve_msaa_attachment(cmd_buffer, &gfx->depth_att, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + VK_IMAGE_ASPECT_DEPTH_BIT); - struct anv_attachment_state *src_state = &attachments[src_att]; - struct anv_attachment_state *dst_state = &attachments[dst_att]; + /* Transition the source back to the original layout. This seems a bit + * inefficient but, since HiZ resolves aren't destructive, going from + * less HiZ to more is generally a no-op. + */ + transition_depth_buffer(cmd_buffer, src_iview->image, + src_iview->planes[0].isl.base_array_layer, + layers, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + gfx->depth_att.layout, + false /* will_full_fast_clear */); + } - if ((src_iview->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) && - (dst_iview->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) && - subpass->depth_resolve_mode != VK_RESOLVE_MODE_NONE_KHR) { - - /* MSAA resolves sample from the source attachment. Transition the - * depth attachment first to get rid of any HiZ that we may not be - * able to handle. - */ - transition_depth_buffer(cmd_buffer, src_iview->image, - src_iview->planes[0].isl.base_array_layer, - fb->layers, - src_state->current_layout, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - false /* will_full_fast_clear */); - src_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, src_iview->image, - VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_USAGE_TRANSFER_SRC_BIT, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); - src_state->current_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - - /* MSAA resolves write to the resolve attachment as if it were any - * other transfer op. Transition the resolve attachment accordingly. - */ - VkImageLayout dst_initial_layout = dst_state->current_layout; - - /* If our render area is the entire size of the image, we're going to - * blow it all away so we can claim the initial layout is UNDEFINED - * and we'll get a HiZ ambiguate instead of a resolve. - */ - if (dst_iview->image->vk.image_type != VK_IMAGE_TYPE_3D && - render_area.offset.x == 0 && render_area.offset.y == 0 && - render_area.extent.width == dst_iview->vk.extent.width && - render_area.extent.height == dst_iview->vk.extent.height) - dst_initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; - - transition_depth_buffer(cmd_buffer, dst_iview->image, - dst_iview->planes[0].isl.base_array_layer, - fb->layers, - dst_initial_layout, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - false /* will_full_fast_clear */); - dst_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, dst_iview->image, - VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_USAGE_TRANSFER_DST_BIT, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - dst_state->current_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - - enum blorp_filter filter = - vk_to_blorp_resolve_mode(subpass->depth_resolve_mode); - - anv_image_msaa_resolve(cmd_buffer, - src_iview->image, src_state->aux_usage, - src_iview->planes[0].isl.base_level, - src_iview->planes[0].isl.base_array_layer, - dst_iview->image, dst_state->aux_usage, - dst_iview->planes[0].isl.base_level, - dst_iview->planes[0].isl.base_array_layer, - VK_IMAGE_ASPECT_DEPTH_BIT, - render_area.offset.x, render_area.offset.y, - render_area.offset.x, render_area.offset.y, - render_area.extent.width, - render_area.extent.height, - fb->layers, filter); - } - - if ((src_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) && - (dst_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) && - subpass->stencil_resolve_mode != VK_RESOLVE_MODE_NONE_KHR) { - - src_state->current_stencil_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - dst_state->current_stencil_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - - enum isl_aux_usage src_aux_usage = ISL_AUX_USAGE_NONE; - const uint32_t plane = - anv_image_aspect_to_plane(dst_iview->image, VK_IMAGE_ASPECT_STENCIL_BIT); - enum isl_aux_usage dst_aux_usage = - dst_iview->image->planes[plane].aux_usage; - - enum blorp_filter filter = - vk_to_blorp_resolve_mode(subpass->stencil_resolve_mode); - - anv_image_msaa_resolve(cmd_buffer, - src_iview->image, src_aux_usage, - src_iview->planes[0].isl.base_level, - src_iview->planes[0].isl.base_array_layer, - dst_iview->image, dst_aux_usage, - dst_iview->planes[0].isl.base_level, - dst_iview->planes[0].isl.base_array_layer, - VK_IMAGE_ASPECT_STENCIL_BIT, - render_area.offset.x, render_area.offset.y, - render_area.offset.x, render_area.offset.y, - render_area.extent.width, - render_area.extent.height, - fb->layers, filter); - } + if (gfx->stencil_att.resolve_mode != VK_RESOLVE_MODE_NONE && + !(gfx->rendering_flags & VK_RENDERING_SUSPENDING_BIT)) { + cmd_buffer_resolve_msaa_attachment(cmd_buffer, &gfx->stencil_att, + gfx->stencil_att.layout, + VK_IMAGE_ASPECT_STENCIL_BIT); } #if GFX_VER == 7 @@ -7055,637 +6946,24 @@ cmd_buffer_resolve_attachments(struct anv_cmd_buffer *cmd_buffer, * destinations, we can update it as part of the transfer op. For the other * layouts, we delay the copy until a transition into some other layout. */ - if (subpass->depth_stencil_attachment) { - uint32_t a = subpass->depth_stencil_attachment->attachment; - assert(a != VK_ATTACHMENT_UNUSED); - - struct anv_attachment_state *att_state = &cmd_state->attachments[a]; - struct anv_image_view *iview = cmd_state->attachments[a].image_view;; + if (gfx->stencil_att.iview != NULL) { + const struct anv_image_view *iview = gfx->stencil_att.iview; const struct anv_image *image = iview->image; + const uint32_t plane = + anv_image_aspect_to_plane(image, VK_IMAGE_ASPECT_STENCIL_BIT); - if (image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { - const uint32_t plane = - anv_image_aspect_to_plane(image, VK_IMAGE_ASPECT_STENCIL_BIT); - - if (anv_surface_is_valid(&image->planes[plane].shadow_surface) && - att_state->current_stencil_layout == VK_IMAGE_LAYOUT_GENERAL) { - assert(image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT); - anv_image_copy_to_shadow(cmd_buffer, image, - VK_IMAGE_ASPECT_STENCIL_BIT, - iview->planes[plane].isl.base_level, 1, - iview->planes[plane].isl.base_array_layer, - fb->layers); - } + if (anv_surface_is_valid(&image->planes[plane].shadow_surface) && + gfx->stencil_att.layout == VK_IMAGE_LAYOUT_GENERAL) { + anv_image_copy_to_shadow(cmd_buffer, image, + VK_IMAGE_ASPECT_STENCIL_BIT, + iview->planes[plane].isl.base_level, 1, + iview->planes[plane].isl.base_array_layer, + layers); } } -#endif /* GFX_VER == 7 */ -} - -static void -cmd_buffer_do_layout_transitions(struct anv_cmd_buffer *cmd_buffer, - struct anv_cmd_state *cmd_state, - struct anv_subpass *subpass, - struct vk_framebuffer *fb, - uint32_t subpass_id) -{ - struct anv_render_pass *pass = cmd_state->pass; - - for (uint32_t i = 0; i < subpass->attachment_count; ++i) { - struct anv_subpass_attachment *att = &subpass->attachments[i]; - const uint32_t a = att->attachment; - if (a == VK_ATTACHMENT_UNUSED) - continue; - - struct anv_render_pass_attachment *pass_att = &pass->attachments[a]; - if (pass_att->last_subpass_idx != subpass_id) - continue; - - assert(a < pass->attachment_count); - struct anv_attachment_state *att_state = &cmd_state->attachments[a]; - struct anv_image_view *iview = att_state->image_view; - const struct anv_image *image = iview->image; - - /* Transition the image into the final layout for this render pass */ - VkImageLayout target_layout = pass_att->final_layout; - VkImageLayout target_stencil_layout = pass_att->stencil_final_layout; - - uint32_t base_layer, layer_count; - if (image->vk.image_type == VK_IMAGE_TYPE_3D) { - base_layer = 0; - layer_count = anv_minify(iview->image->vk.extent.depth, - iview->planes[0].isl.base_level); - } else { - base_layer = iview->planes[0].isl.base_array_layer; - layer_count = fb->layers; - } - - /* Treat the fragment shading rate attachment as color. But make sure we - * don't use fb->layers if the fragment shading rate attachment only has - * one layer. - * - * Vulkan spec 1.2.170 - VkFramebufferCreateInfo : - * - * "each element of pAttachments that is used as a fragment shading - * rate attachment by renderPass must have a layerCount that is - * either 1, or greater than layers" - */ - if (att->usage & VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR && - iview->planes[0].isl.array_len == 1) { - base_layer = 0; - layer_count = 1; - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV) { - assert(image->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT); - transition_color_buffer(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT, - iview->planes[0].isl.base_level, 1, - base_layer, layer_count, - att_state->current_layout, target_layout, - VK_QUEUE_FAMILY_IGNORED, - VK_QUEUE_FAMILY_IGNORED, - false /* will_full_fast_clear */); - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { - transition_depth_buffer(cmd_buffer, image, - base_layer, layer_count, - att_state->current_layout, target_layout, - false /* will_full_fast_clear */); - } - - if (image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { - transition_stencil_buffer(cmd_buffer, image, - iview->planes[0].isl.base_level, 1, - base_layer, layer_count, - att_state->current_stencil_layout, - target_stencil_layout, - false /* will_full_fast_clear */); - } - } -} - -static void -cmd_buffer_end_subpass(struct anv_cmd_buffer *cmd_buffer) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct anv_subpass *subpass = cmd_state->subpass; - uint32_t subpass_id = anv_get_subpass_id(&cmd_buffer->state); - struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; - - cmd_buffer_clear_state_pointers(cmd_state); - - cmd_buffer_mark_images_written(cmd_buffer, cmd_state, subpass, fb); - - cmd_buffer_resolve_attachments(cmd_buffer, cmd_state, subpass, fb, subpass_id); - - cmd_buffer_do_layout_transitions(cmd_buffer, cmd_state, subpass, fb, subpass_id); - - /* Accumulate any subpass flushes that need to happen after the subpass. - * Yes, they do get accumulated twice in the NextSubpass case but since - * genX_CmdNextSubpass just calls end/begin back-to-back, we just end up - * ORing the bits in twice so it's harmless. - */ - anv_add_pending_pipe_bits(cmd_buffer, - cmd_buffer->state.pass->subpass_flushes[subpass_id + 1], - "end subpass deps/attachments"); -} - -void genX(CmdBeginRenderPass2)( - VkCommandBuffer commandBuffer, - const VkRenderPassBeginInfo* pRenderPassBeginInfo, - const VkSubpassBeginInfoKHR* pSubpassBeginInfo) -{ - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - ANV_FROM_HANDLE(anv_render_pass, pass, pRenderPassBeginInfo->renderPass); - VK_FROM_HANDLE(vk_framebuffer, framebuffer, - pRenderPassBeginInfo->framebuffer); - VkResult result; - - if (!is_render_queue_cmd_buffer(cmd_buffer)) { - assert(!"Trying to start a render pass on non-render queue!"); - anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_UNKNOWN); - return; - } - - cmd_buffer->state.framebuffer = framebuffer; - cmd_buffer->state.pass = pass; - cmd_buffer->state.render_area = pRenderPassBeginInfo->renderArea; - - anv_measure_beginrenderpass(cmd_buffer); - trace_intel_begin_render_pass(&cmd_buffer->trace, cmd_buffer); - - result = genX(cmd_buffer_setup_attachments)(cmd_buffer, pass, - framebuffer, - pRenderPassBeginInfo); - if (result != VK_SUCCESS) { - assert(anv_batch_has_error(&cmd_buffer->batch)); - return; - } - - genX(flush_pipeline_select_3d)(cmd_buffer); - - cmd_buffer_begin_subpass(cmd_buffer, 0); -} - -void genX(CmdNextSubpass2)( - VkCommandBuffer commandBuffer, - const VkSubpassBeginInfoKHR* pSubpassBeginInfo, - const VkSubpassEndInfoKHR* pSubpassEndInfo) -{ - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - - if (anv_batch_has_error(&cmd_buffer->batch)) - return; - - assert(cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY); - - uint32_t prev_subpass = anv_get_subpass_id(&cmd_buffer->state); - cmd_buffer_end_subpass(cmd_buffer); - cmd_buffer_begin_subpass(cmd_buffer, prev_subpass + 1); -} - -void genX(CmdEndRenderPass2)( - VkCommandBuffer commandBuffer, - const VkSubpassEndInfoKHR* pSubpassEndInfo) -{ - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - - if (anv_batch_has_error(&cmd_buffer->batch)) - return; - - cmd_buffer_end_subpass(cmd_buffer); - - trace_intel_end_render_pass(&cmd_buffer->trace, cmd_buffer, - cmd_buffer->state.render_area.extent.width, - cmd_buffer->state.render_area.extent.height, - cmd_buffer->state.pass->attachment_count, - cmd_buffer->state.pass->attachment_count > 0 ? - cmd_buffer->state.pass->attachments[0].samples : 0, - cmd_buffer->state.pass->subpass_count); - - cmd_buffer->state.hiz_enabled = false; - - /* Remove references to render pass specific state. This enables us to - * detect whether or not we're in a renderpass. - */ - cmd_buffer->state.framebuffer = NULL; - cmd_buffer->state.pass = NULL; - cmd_buffer->state.subpass = NULL; -} - -static VkAttachmentLoadOp -get_effective_load_op(VkAttachmentLoadOp load_op, bool resuming) -{ - if (load_op == VK_ATTACHMENT_LOAD_OP_CLEAR && resuming) - load_op = VK_ATTACHMENT_LOAD_OP_LOAD; - return load_op; -} - -static VkResult -genX(cmd_buffer_setup_attachments_dynrender)(struct anv_cmd_buffer *cmd_buffer, - const VkRenderingInfoKHR *info) -{ - struct anv_cmd_state *state = &cmd_buffer->state; - struct anv_render_pass *pass = state->pass; - struct anv_subpass *subpass = state->subpass; - bool suspending = info->flags & VK_RENDERING_SUSPENDING_BIT_KHR; - bool resuming = info->flags & VK_RENDERING_RESUMING_BIT_KHR; - VkResult result; - - result = cmd_buffer_alloc_state_attachments(cmd_buffer, - pass->attachment_count); - if (result != VK_SUCCESS) - return result; - - for (uint32_t i = 0; i < info->colorAttachmentCount; ++i) { - const VkRenderingAttachmentInfoKHR *att = &info->pColorAttachments[i]; - struct anv_attachment_state *att_state = &state->attachments[i]; - ANV_FROM_HANDLE(anv_image_view, iview, att->imageView); - if (!iview) - continue; - - att_state->image_view = iview; - att_state->current_layout = att->imageLayout; - - att_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - att->imageLayout); - - VkAttachmentLoadOp load_op = get_effective_load_op(att->loadOp, resuming); - if (load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) { - att_state->pending_clear_aspects = VK_IMAGE_ASPECT_COLOR_BIT; - att_state->clear_value = att->clearValue; - - const uint32_t num_layers = iview->planes[0].isl.array_len; - att_state->pending_clear_views = (1 << num_layers) - 1; - - att_state->fast_clear = - anv_can_fast_clear_color_view(cmd_buffer->device, iview, - att_state->current_layout, - vk_to_isl_color(att_state->clear_value.color), - info->layerCount, - info->renderArea); - - uint32_t level = iview->planes[0].isl.base_level; - - uint32_t base_layer; - if (iview->image->vk.image_type == VK_IMAGE_TYPE_3D) - base_layer = 0; - else - base_layer = iview->planes[0].isl.base_array_layer; - - clear_color_attachment(cmd_buffer, att_state, level, - base_layer); - } - - if (!suspending && att->resolveMode != VK_RESOLVE_MODE_NONE) { - struct anv_attachment_state *resolve_att = - &state->attachments[i + info->colorAttachmentCount]; - resolve_att->image_view = - anv_image_view_from_handle(att->resolveImageView); - resolve_att->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, - resolve_att->image_view->image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - att->resolveImageLayout); - } - } - - if (subpass->depth_stencil_attachment) { - const VkRenderingAttachmentInfoKHR *d_att_info = info->pDepthAttachment; - if (d_att_info != NULL && d_att_info->imageView == VK_NULL_HANDLE) - d_att_info = NULL; - - const VkRenderingAttachmentInfoKHR *s_att_info = info->pStencilAttachment; - if (s_att_info != NULL && s_att_info->imageView == VK_NULL_HANDLE) - s_att_info = NULL; - - const VkRenderingAttachmentInfoKHR *d_or_s_att_info = - d_att_info ? d_att_info : s_att_info; - - struct anv_attachment_state *ds_att_state = - &state->attachments[subpass->depth_stencil_attachment->attachment]; - ds_att_state->image_view = - anv_image_view_from_handle(d_or_s_att_info->imageView); - - if (subpass->ds_resolve_attachment) { - struct anv_attachment_state *ds_res_att_state = - &state->attachments[subpass->ds_resolve_attachment->attachment]; - if (d_att_info && d_att_info->resolveMode != VK_RESOLVE_MODE_NONE) { - ds_res_att_state->image_view = - anv_image_view_from_handle(d_att_info->resolveImageView); - } else { - ds_res_att_state->image_view = - anv_image_view_from_handle(s_att_info->resolveImageView); - } - - if (d_att_info) { - ds_res_att_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, - ds_res_att_state->image_view->image, - VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - d_or_s_att_info->resolveImageLayout); - ds_res_att_state->current_layout = d_att_info->resolveImageLayout; - } - - if (s_att_info) { - ds_res_att_state->current_stencil_layout = - s_att_info->resolveImageLayout; - } - } - - VkImageAspectFlags clear_aspects = 0; - if (d_att_info) { - VkAttachmentLoadOp load_op = - get_effective_load_op(d_att_info->loadOp, resuming); - if (load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) - clear_aspects |= VK_IMAGE_ASPECT_DEPTH_BIT; - - ds_att_state->aux_usage = - anv_layout_to_aux_usage(&cmd_buffer->device->info, - ds_att_state->image_view->image, - VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - d_att_info->imageLayout); - - ds_att_state->current_layout = d_att_info->imageLayout; - } - if (s_att_info) { - VkAttachmentLoadOp load_op = - get_effective_load_op(s_att_info->loadOp, resuming); - if (load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) - clear_aspects |= VK_IMAGE_ASPECT_STENCIL_BIT; - - ds_att_state->current_stencil_layout = s_att_info->imageLayout; - } - - ds_att_state->pending_clear_aspects = clear_aspects; - ds_att_state->clear_value = d_or_s_att_info->clearValue; - - if (clear_aspects) { - struct anv_image_view *iview = ds_att_state->image_view; - - const uint32_t num_layers = iview->planes[0].isl.array_len; - ds_att_state->pending_clear_views = (1 << num_layers) - 1; - - ds_att_state->fast_clear = - anv_can_hiz_clear_ds_view(cmd_buffer->device, iview, - ds_att_state->current_layout, - clear_aspects, - ds_att_state->clear_value.depthStencil.depth, - info->renderArea); - - uint32_t level = iview->planes[0].isl.base_level; - uint32_t base_layer, layer_count; - if (iview->image->vk.image_type == VK_IMAGE_TYPE_3D) { - base_layer = 0; - layer_count = anv_minify(iview->image->vk.extent.depth, level); - } else { - base_layer = iview->planes[0].isl.base_array_layer; - layer_count = info->layerCount; - } - - clear_depth_stencil_attachment(cmd_buffer, ds_att_state, level, - base_layer, layer_count); - } - } - - if (subpass->fsr_attachment) { - const VkRenderingFragmentShadingRateAttachmentInfoKHR *fsr_att_info = - vk_find_struct_const(info->pNext, - RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR); - assert(fsr_att_info); - - struct anv_attachment_state *fsr_att_state = - &state->attachments[subpass->fsr_attachment->attachment]; - fsr_att_state->image_view = - anv_image_view_from_handle(fsr_att_info->imageView); - } - - return VK_SUCCESS; -} - -static void -cmd_buffer_begin_rendering(struct anv_cmd_buffer *cmd_buffer, - const VkRenderingInfoKHR *info) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct anv_render_pass *pass = cmd_state->pass; - struct anv_subpass *subpass = cmd_state->subpass; - - cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_RENDER_TARGETS; - - /* Our implementation of VK_KHR_multiview uses instancing to draw the - * different views. If the client asks for instancing, we need to use the - * Instance Data Step Rate to ensure that we repeat the client's - * per-instance data once for each view. Since this bit is in - * VERTEX_BUFFER_STATE on gfx7, we need to dirty vertex buffers at the top - * of each subpass. - */ - if (GFX_VER == 7) - cmd_buffer->state.gfx.vb_dirty |= ~0; - - /* XXX: Does this still apply here */ - /* It is possible to start a render pass with an old pipeline. Because the - * render pass and subpass index are both baked into the pipeline, this is - * highly unlikely. In order to do so, it requires that you have a render - * pass with a single subpass and that you use that render pass twice - * back-to-back and use the same pipeline at the start of the second render - * pass as at the end of the first. In order to avoid unpredictable issues - * with this edge case, we just dirty the pipeline at the start of every - * subpass. - */ - cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_PIPELINE; - - VkResult result = genX(cmd_buffer_alloc_att_surf_states)(cmd_buffer, - pass, subpass); - if (result != VK_SUCCESS) - return; - - struct isl_extent3d null_surf_size = - isl_extent3d(info->renderArea.offset.x + info->renderArea.extent.width, - info->renderArea.offset.y + info->renderArea.extent.height, - info->layerCount); - for (uint32_t i = 0; i < info->colorAttachmentCount; i++) { - const VkRenderingAttachmentInfoKHR *att = &info->pColorAttachments[i]; - if (!att->imageView) - continue; - - ANV_FROM_HANDLE(anv_image_view, iview, att->imageView); - null_surf_size.w = MAX2(null_surf_size.w, iview->vk.extent.width); - null_surf_size.h = MAX2(null_surf_size.h, iview->vk.extent.height); - } - if (info->pDepthAttachment && info->pDepthAttachment->imageView) { - ANV_FROM_HANDLE(anv_image_view, iview, - info->pDepthAttachment->imageView); - null_surf_size.w = MAX2(null_surf_size.w, iview->vk.extent.width); - null_surf_size.h = MAX2(null_surf_size.h, iview->vk.extent.height); - } - if (info->pStencilAttachment && info->pStencilAttachment->imageView) { - ANV_FROM_HANDLE(anv_image_view, iview, - info->pStencilAttachment->imageView); - null_surf_size.w = MAX2(null_surf_size.w, iview->vk.extent.width); - null_surf_size.h = MAX2(null_surf_size.h, iview->vk.extent.height); - } - - /* 0x0 is allowed with no attachments and rasterizer discard */ - null_surf_size.w = MAX2(null_surf_size.w, 1); - null_surf_size.h = MAX2(null_surf_size.h, 1); - - isl_null_fill_state(&cmd_buffer->device->isl_dev, - cmd_state->null_surface_state.map, - .size = null_surf_size); - - for (uint32_t i = 0; i < info->colorAttachmentCount; i++) { - const VkRenderingAttachmentInfoKHR *att = &info->pColorAttachments[i]; - if (!att->imageView) - continue; - - struct anv_attachment_state *att_state = &cmd_state->attachments[i]; - struct anv_image_view *iview = att_state->image_view; - - struct anv_surface_state *surface_state = &att_state->color; - isl_surf_usage_flags_t isl_surf_usage = ISL_SURF_USAGE_RENDER_TARGET_BIT; - enum isl_aux_usage isl_aux_usage = att_state->aux_usage; - - /* We had better have a surface state when we get here */ - assert(surface_state->state.map); - - VkAttachmentLoadOp load_op = - get_effective_load_op(att->loadOp, - info->flags & VK_RENDERING_RESUMING_BIT_KHR); - union isl_color_value clear_color = { .u32 = { 0, } }; - if (load_op == VK_ATTACHMENT_LOAD_OP_CLEAR && - att_state->fast_clear) - anv_clear_color_from_att_state(&clear_color, att_state, iview); - - anv_image_fill_surface_state(cmd_buffer->device, - iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - &iview->planes[0].isl, - isl_surf_usage, - isl_aux_usage, - &clear_color, - 0, - surface_state, - NULL); - - add_surface_state_relocs(cmd_buffer, *surface_state); - - if (GFX_VER < 10 && - load_op == VK_ATTACHMENT_LOAD_OP_LOAD && - iview->image->planes[0].aux_usage != ISL_AUX_USAGE_NONE && - iview->planes[0].isl.base_level == 0 && - iview->planes[0].isl.base_array_layer == 0) { - genX(copy_fast_clear_dwords)(cmd_buffer, surface_state->state, - iview->image, - VK_IMAGE_ASPECT_COLOR_BIT, - false /* copy to ss */); - } - } - -#if GFX_VER >= 11 - /* The PIPE_CONTROL command description says: - * - * "Whenever a Binding Table Index (BTI) used by a Render Taget Message - * points to a different RENDER_SURFACE_STATE, SW must issue a Render - * Target Cache Flush by enabling this bit. When render target flush - * is set due to new association of BTI, PS Scoreboard Stall bit must - * be set in this packet." - */ - anv_add_pending_pipe_bits(cmd_buffer, - ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT | - ANV_PIPE_STALL_AT_SCOREBOARD_BIT, - "change RT"); #endif - cmd_buffer_emit_depth_stencil(cmd_buffer); - - cmd_buffer_emit_cps_control_buffer(cmd_buffer); -} - -static void -cmd_buffer_end_rendering(struct anv_cmd_buffer *cmd_buffer) -{ - struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct anv_subpass *subpass = cmd_state->subpass; - uint32_t subpass_id = anv_get_subpass_id(&cmd_buffer->state); - struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; - - cmd_buffer_clear_state_pointers(cmd_state); - - if (!cmd_buffer->state.dynamic_render_pass.suspending) { - cmd_buffer_mark_images_written(cmd_buffer, cmd_state, subpass, fb); - - cmd_buffer_resolve_attachments(cmd_buffer, cmd_state, subpass, fb, subpass_id); - } -} - -static void -setup_dynamic_framebuffer(struct vk_framebuffer *fb, - const VkRenderingInfoKHR *info) -{ - fb->width = info->renderArea.extent.width + info->renderArea.offset.x; - fb->height = info->renderArea.extent.height + info->renderArea.offset.y; - fb->layers = info->layerCount; -} - -void genX(CmdBeginRenderingKHR)( - VkCommandBuffer commandBuffer, - const VkRenderingInfoKHR* pRenderingInfo) -{ - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - VkResult result; - - trace_intel_begin_dyn_render_pass(&cmd_buffer->trace, cmd_buffer); - - cmd_buffer->state.framebuffer = &cmd_buffer->state.dynamic_render_pass.framebuffer; - setup_dynamic_framebuffer(cmd_buffer->state.framebuffer, pRenderingInfo); - - cmd_buffer->state.render_area = pRenderingInfo->renderArea; - - anv_dynamic_pass_init_full(&cmd_buffer->state.dynamic_render_pass, - pRenderingInfo); - cmd_buffer->state.pass = &cmd_buffer->state.dynamic_render_pass.pass; - cmd_buffer->state.subpass = &cmd_buffer->state.dynamic_render_pass.subpass; - - result = genX(cmd_buffer_setup_attachments_dynrender)(cmd_buffer, - pRenderingInfo); - if (result != VK_SUCCESS) { - assert(anv_batch_has_error(&cmd_buffer->batch)); - return; - } - genX(flush_pipeline_select_3d)(cmd_buffer); - - cmd_buffer_begin_rendering(cmd_buffer, pRenderingInfo); -} - -void genX(CmdEndRenderingKHR)( - VkCommandBuffer commandBuffer) -{ - ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); - - if (anv_batch_has_error(&cmd_buffer->batch)) - return; - - cmd_buffer_end_rendering(cmd_buffer); - - trace_intel_end_dyn_render_pass(&cmd_buffer->trace, cmd_buffer, - cmd_buffer->state.render_area.extent.width, - cmd_buffer->state.render_area.extent.height, - cmd_buffer->state.pass->attachment_count, - cmd_buffer->state.pass->attachment_count > 0 ? - cmd_buffer->state.pass->attachments[0].samples : 0, - cmd_buffer->state.dynamic_render_pass.suspending, - cmd_buffer->state.dynamic_render_pass.resuming); - - cmd_buffer->state.framebuffer = NULL; - cmd_buffer->state.pass = NULL; - cmd_buffer->state.subpass = NULL; + anv_cmd_buffer_reset_rendering(cmd_buffer); } void diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index 105e302fa80..c9b8aea2201 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -2798,56 +2798,16 @@ genX(graphics_pipeline_create)( .pNext = &rsd_info_tmp, }; - const VkPipelineRenderingCreateInfo *rendering_info; - const VkRenderingSelfDependencyInfoMESA *rsd_info; - VkFormat color_formats_tmp[MAX_RTS]; - if (pCreateInfo->renderPass != VK_NULL_HANDLE) { - ANV_FROM_HANDLE(anv_render_pass, render_pass, pCreateInfo->renderPass); - assert(pCreateInfo->subpass < render_pass->subpass_count); - const struct anv_subpass *subpass = - &render_pass->subpasses[pCreateInfo->subpass]; - - rendering_info_tmp.viewMask = subpass->view_mask; - - assert(subpass->color_count <= MAX_RTS); - for (uint32_t i = 0; i < subpass->color_count; i++) { - uint32_t att_idx = subpass->color_attachments[i].attachment; - if (att_idx < render_pass->attachment_count) - color_formats_tmp[i] = render_pass->attachments[att_idx].format; - else - color_formats_tmp[i] = VK_FORMAT_UNDEFINED; - } - rendering_info_tmp.colorAttachmentCount = subpass->color_count; - rendering_info_tmp.pColorAttachmentFormats = color_formats_tmp; - - if (subpass->depth_stencil_attachment) { - uint32_t ds_att_idx = subpass->depth_stencil_attachment->attachment; - assert(ds_att_idx < render_pass->attachment_count); - VkFormat depth_stencil_format = - render_pass->attachments[ds_att_idx].format; - if (vk_format_has_depth(depth_stencil_format)) { - rendering_info_tmp.depthAttachmentFormat = depth_stencil_format; - rsd_info_tmp.depthSelfDependency = subpass->has_ds_self_dep; - } - if (vk_format_has_stencil(depth_stencil_format)) { - rendering_info_tmp.stencilAttachmentFormat = depth_stencil_format; - rsd_info_tmp.stencilSelfDependency = subpass->has_ds_self_dep; - } - } - + const VkPipelineRenderingCreateInfo *rendering_info = + vk_get_pipeline_rendering_create_info(pCreateInfo); + if (rendering_info == NULL) rendering_info = &rendering_info_tmp; - rsd_info = &rsd_info_tmp; - } else { - rendering_info = vk_find_struct_const(pCreateInfo->pNext, - PIPELINE_RENDERING_CREATE_INFO_KHR); - if (rendering_info == NULL) - rendering_info = &rendering_info_tmp; - rsd_info = vk_find_struct_const(rendering_info->pNext, - RENDERING_SELF_DEPENDENCY_INFO_MESA); - if (rsd_info == NULL) - rsd_info = &rsd_info_tmp; - } + const VkRenderingSelfDependencyInfoMESA *rsd_info = + vk_find_struct_const(rendering_info->pNext, + RENDERING_SELF_DEPENDENCY_INFO_MESA); + if (rsd_info == NULL) + rsd_info = &rsd_info_tmp; result = anv_graphics_pipeline_init(pipeline, device, cache, pCreateInfo, rendering_info, diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index a1b92123065..4355bf409e7 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -1218,9 +1218,9 @@ void genX(CmdEndQueryIndexedEXT)( * first index, mark the other query indices as being already available * with result 0. */ - if (cmd_buffer->state.subpass && cmd_buffer->state.subpass->view_mask) { + if (cmd_buffer->state.gfx.view_mask) { const uint32_t num_queries = - util_bitcount(cmd_buffer->state.subpass->view_mask); + util_bitcount(cmd_buffer->state.gfx.view_mask); if (num_queries > 1) emit_zero_queries(cmd_buffer, &b, pool, query + 1, num_queries - 1); } @@ -1271,9 +1271,9 @@ void genX(CmdWriteTimestamp2KHR)( * first index, mark the other query indices as being already available * with result 0. */ - if (cmd_buffer->state.subpass && cmd_buffer->state.subpass->view_mask) { + if (cmd_buffer->state.gfx.view_mask) { const uint32_t num_queries = - util_bitcount(cmd_buffer->state.subpass->view_mask); + util_bitcount(cmd_buffer->state.gfx.view_mask); if (num_queries > 1) emit_zero_queries(cmd_buffer, &b, pool, query + 1, num_queries - 1); } diff --git a/src/intel/vulkan/gfx7_cmd_buffer.c b/src/intel/vulkan/gfx7_cmd_buffer.c index 98c57c05beb..ad9fa19fb39 100644 --- a/src/intel/vulkan/gfx7_cmd_buffer.c +++ b/src/intel/vulkan/gfx7_cmd_buffer.c @@ -48,11 +48,10 @@ clamp_int64(int64_t x, int64_t min, int64_t max) void gfx7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer) { - struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; - uint32_t count = cmd_buffer->state.gfx.dynamic.scissor.count; - const VkRect2D *scissors = cmd_buffer->state.gfx.dynamic.scissor.scissors; - const VkViewport *viewports = - cmd_buffer->state.gfx.dynamic.viewport.viewports; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + uint32_t count = gfx->dynamic.scissor.count; + const VkRect2D *scissors = gfx->dynamic.scissor.scissors; + const VkViewport *viewports = gfx->dynamic.viewport.viewports; /* Wa_1409725701: * "The viewport-specific state used by the SF unit (SCISSOR_RECT) is @@ -91,21 +90,14 @@ gfx7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer) /* Do this math using int64_t so overflow gets clamped correctly. */ if (cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) { - y_min = clamp_int64((uint64_t) y_min, - cmd_buffer->state.render_area.offset.y, max); - x_min = clamp_int64((uint64_t) x_min, - cmd_buffer->state.render_area.offset.x, max); + y_min = clamp_int64((uint64_t) y_min, gfx->render_area.offset.y, max); + x_min = clamp_int64((uint64_t) x_min, gfx->render_area.offset.x, max); y_max = clamp_int64((uint64_t) y_max, 0, - cmd_buffer->state.render_area.offset.y + - cmd_buffer->state.render_area.extent.height - 1); + gfx->render_area.offset.y + + gfx->render_area.extent.height - 1); x_max = clamp_int64((uint64_t) x_max, 0, - cmd_buffer->state.render_area.offset.x + - cmd_buffer->state.render_area.extent.width - 1); - } else if (fb) { - y_min = clamp_int64((uint64_t) y_min, 0, max); - x_min = clamp_int64((uint64_t) x_min, 0, max); - y_max = clamp_int64((uint64_t) y_max, 0, fb->height - 1); - x_max = clamp_int64((uint64_t) x_max, 0, fb->width - 1); + gfx->render_area.offset.x + + gfx->render_area.extent.width - 1); } struct GFX7_SCISSOR_RECT scissor = { @@ -178,16 +170,9 @@ void genX(CmdBindIndexBuffer)( static uint32_t get_depth_format(struct anv_cmd_buffer *cmd_buffer) { - const struct anv_render_pass *pass = cmd_buffer->state.pass; - const struct anv_subpass *subpass = cmd_buffer->state.subpass; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; - if (!subpass->depth_stencil_attachment) - return D16_UNORM; - - struct anv_render_pass_attachment *att = - &pass->attachments[subpass->depth_stencil_attachment->attachment]; - - switch (att->format) { + switch (gfx->depth_att.vk_format) { case VK_FORMAT_D16_UNORM: case VK_FORMAT_D16_UNORM_S8_UINT: return D16_UNORM; diff --git a/src/intel/vulkan/gfx8_cmd_buffer.c b/src/intel/vulkan/gfx8_cmd_buffer.c index 60d3bab9423..5f012cb823d 100644 --- a/src/intel/vulkan/gfx8_cmd_buffer.c +++ b/src/intel/vulkan/gfx8_cmd_buffer.c @@ -37,10 +37,9 @@ void gfx8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer) { - struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; - uint32_t count = cmd_buffer->state.gfx.dynamic.viewport.count; - const VkViewport *viewports = - cmd_buffer->state.gfx.dynamic.viewport.viewports; + struct anv_cmd_graphics_state *gfx = &cmd_buffer->state.gfx; + uint32_t count = gfx->dynamic.viewport.count; + const VkViewport *viewports = gfx->dynamic.viewport.viewports; struct anv_state sf_clip_state = anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 64, 64); @@ -72,12 +71,16 @@ gfx8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer) .YMaxViewPort = MAX2(vp->y, vp->y + vp->height) - 1, }; - if (fb) { + if (gfx->render_area.extent.width > 0 && + gfx->render_area.extent.height > 0) { /* We can only calculate a "real" guardband clip if we know the * framebuffer at the time we emit the packet. Otherwise, we have * fall back to a worst-case guardband of [-1, 1]. */ - intel_calculate_guardband_size(fb->width, fb->height, + intel_calculate_guardband_size(gfx->render_area.offset.x + + gfx->render_area.extent.width, + gfx->render_area.offset.y + + gfx->render_area.extent.height, sfv.ViewportMatrixElementm00, sfv.ViewportMatrixElementm11, sfv.ViewportMatrixElementm30, @@ -359,13 +362,10 @@ want_stencil_pma_fix(struct anv_cmd_buffer *cmd_buffer) if (!cmd_buffer->state.hiz_enabled) return false; - /* We can't possibly know if HiZ is enabled without the framebuffer */ - assert(cmd_buffer->state.framebuffer); - - /* HiZ is enabled so we had better have a depth buffer with HiZ */ - const struct anv_image_view *ds_iview = - anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); - assert(ds_iview && ds_iview->image->planes[0].aux_usage == ISL_AUX_USAGE_HIZ); + /* We can't possibly know if HiZ is enabled without the depth attachment */ + ASSERTED const struct anv_image_view *d_iview = + cmd_buffer->state.gfx.depth_att.iview; + assert(d_iview && d_iview->image->planes[0].aux_usage == ISL_AUX_USAGE_HIZ); /* 3DSTATE_PS_EXTRA::PixelShaderValid */ struct anv_graphics_pipeline *pipeline = cmd_buffer->state.gfx.pipeline; @@ -388,7 +388,7 @@ want_stencil_pma_fix(struct anv_cmd_buffer *cmd_buffer) * 3DSTATE_WM_DEPTH_STENCIL::StencilTestEnable */ const bool stc_test_en = - (ds_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) && + cmd_buffer->state.gfx.stencil_att.iview != NULL && pipeline->stencil_test_enable; /* 3DSTATE_STENCIL_BUFFER::STENCIL_BUFFER_ENABLE && @@ -396,7 +396,7 @@ want_stencil_pma_fix(struct anv_cmd_buffer *cmd_buffer) * 3DSTATE_DEPTH_BUFFER::STENCIL_WRITE_ENABLE) */ const bool stc_write_en = - (ds_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) && + cmd_buffer->state.gfx.stencil_att.iview != NULL && (cmd_buffer->state.gfx.dynamic.stencil_write_mask.front || cmd_buffer->state.gfx.dynamic.stencil_write_mask.back) && pipeline->writes_stencil; diff --git a/src/intel/vulkan/meson.build b/src/intel/vulkan/meson.build index dff91c889fc..cb93428c1bd 100644 --- a/src/intel/vulkan/meson.build +++ b/src/intel/vulkan/meson.build @@ -122,7 +122,6 @@ libanv_files = files( 'anv_nir_lower_multiview.c', 'anv_nir_lower_ubo_loads.c', 'anv_nir_lower_ycbcr_textures.c', - 'anv_pass.c', 'anv_perf.c', 'anv_pipeline.c', 'anv_pipeline_cache.c',