diff --git a/src/panfrost/ci/deqp-panfrost-g52-vk.toml b/src/panfrost/ci/deqp-panfrost-g52-vk.toml index ea7c50bfb6b..c4ee461d71b 100644 --- a/src/panfrost/ci/deqp-panfrost-g52-vk.toml +++ b/src/panfrost/ci/deqp-panfrost-g52-vk.toml @@ -33,6 +33,7 @@ include = [ "dEQP-VK.image.image_size.*", "dEQP-VK.image.load_store.with_format.*", "dEQP-VK.pipeline.depth.format.d24_unorm_s8_uint.depth_test_disabled.depth_write_enabled", + "dEQP-VK.pipeline.image.suballocation.sampling_type.*.view_type.2d*", "dEQP-VK.pipeline.input_assembly.*", "dEQP-VK.pipeline.logic_op.*", "dEQP-VK.pipeline.sampler.view_type.*.format.r*.address_modes.all_mode_clamp_to_border*", diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index 203c884c44a..c5057126930 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -390,12 +390,6 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, NIR_PASS_V(nir, nir_opt_combine_stores, nir_var_all); NIR_PASS_V(nir, nir_opt_trivial_continues); - if (stage == MESA_SHADER_FRAGMENT) { - /* This is required for nir_lower_blend */ - NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true); - panvk_lower_blend(pdev, nir, &inputs, blend_state, static_blend_constants); - } - /* Do texture lowering here. Yes, it's a duplication of the texture * lowering in bifrost_compile. However, we need to lower texture stuff * now, before we call panvk_per_arch(nir_lower_descriptors)() because some @@ -457,15 +451,24 @@ panvk_per_arch(shader_create)(struct panvk_device *dev, nir_metadata_dominance, (void *)layout); - nir_assign_io_var_locations(nir, nir_var_shader_in, &nir->num_inputs, stage); - nir_assign_io_var_locations(nir, nir_var_shader_out, &nir->num_outputs, stage); - NIR_PASS_V(nir, nir_lower_system_values); NIR_PASS_V(nir, nir_lower_compute_system_values, NULL); NIR_PASS_V(nir, nir_split_var_copies); NIR_PASS_V(nir, nir_lower_var_copies); + /* We have to run nir_lower_blend() after we've gotten rid of copies (it + * requires load/store) and before we assign output locations. + */ + if (stage == MESA_SHADER_FRAGMENT) { + /* This is required for nir_lower_blend */ + NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true); + panvk_lower_blend(pdev, nir, &inputs, blend_state, static_blend_constants); + } + + nir_assign_io_var_locations(nir, nir_var_shader_in, &nir->num_inputs, stage); + nir_assign_io_var_locations(nir, nir_var_shader_out, &nir->num_outputs, stage); + /* Needed to turn shader_temp into function_temp since the backend only * handles the latter for now. */