panvk: pass noperspective_varyings sysval as a push constant

This can handle mismatched interpolation qualifiers between VS and FS,
and is a conformant noperspective implementation. Passing this sysval
dynamically has a performance cost. In the future we can reduce this by
passing it as a constant in some situations.

Signed-off-by: Benjamin Lee <benjamin.lee@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32127>
This commit is contained in:
Benjamin Lee
2024-11-13 18:42:57 -08:00
committed by Marge Bot
parent 103c4123ab
commit 30a288cdc9
6 changed files with 20 additions and 125 deletions

View File

@@ -2691,15 +2691,6 @@ dEQP-VK.draw.renderpass.indexed_draw.draw_instanced_indexed_triangle_list_offset
dEQP-VK.draw.renderpass.indexed_draw.draw_instanced_indexed_triangle_list_with_alloc_offset,Fail
dEQP-VK.draw.renderpass.indexed_draw.draw_instanced_indexed_triangle_strip_with_alloc_offset,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.inverted_depth_ranges.nodepthclamp_deltazero,Fail
dEQP-VK.memory.pipeline_barrier.host_write_index_buffer.1024,Fail
@@ -2711,9 +2702,6 @@ dEQP-VK.memory.pipeline_barrier.host_write_index_buffer.8192,Fail
dEQP-VK.spirv_assembly.instruction.compute.mul_extended.unsigned_8bit,Crash
dEQP-VK.spirv_assembly.instruction.compute.mul_extended.signed_8bit,Crash
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective,Fail
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.interface_blocks.no_perspective,Fail
# New with vk_clear
dEQP-VK.api.copy_and_blit.dedicated_allocation.resolve_image.whole_copy_before_resolving_no_cab.4_bit,Fail
dEQP-VK.api.copy_and_blit.dedicated_allocation.resolve_image.copy_with_regions_before_resolving.4_bit,Fail
@@ -2755,26 +2743,11 @@ dEQP-VK.wsi.wayland.swapchain.simulate_oom.min_image_count,Crash
dEQP-VK.wsi.wayland.swapchain.simulate_oom.pre_transform,Crash
dEQP-VK.wsi.wayland.swapchain.simulate_oom.present_mode,Crash
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
# New with sampleRateShading
dEQP-VK.pipeline.monolithic.multisample_shader_builtin.write_sample_mask.1_samples,Fail
dEQP-VK.pipeline.fast_linked_library.multisample_shader_builtin.write_sample_mask.1_samples,Fail
dEQP-VK.pipeline.pipeline_library.multisample_shader_builtin.write_sample_mask.1_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.dynamic_rendering.primary_cmd_buff.basic.2_cmdbuffers_resuming,Fail
dEQP-VK.dynamic_rendering.primary_cmd_buff.basic.2_secondary_2_primary_cmdbuffers_resuming,Fail
@@ -2788,23 +2761,6 @@ dEQP-VK.dynamic_rendering.primary_cmd_buff.basic.contents_secondary_primary_cmdb
dEQP-VK.dynamic_rendering.primary_cmd_buff.basic.partial_binding_depth_stencil,Fail
dEQP-VK.dynamic_rendering.primary_cmd_buff.basic.single_cmdbuffer_resuming,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.indexed_draw.draw_indexed_triangle_list_offset_minus_one_with_alloc_offset,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.indexed_draw.draw_indexed_triangle_list_offset_minus_one_with_bind_offset_with_alloc_offset,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.indexed_draw.draw_indexed_triangle_list_offset_negative_large_with_alloc_offset,Fail
@@ -2881,25 +2837,6 @@ dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.indexed_draw.draw_instanced_inde
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.indexed_draw.draw_instanced_indexed_triangle_strip_with_bind_offset_with_alloc_offset,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.inverted_depth_ranges.nodepthclamp_deltazero,Fail
dEQP-VK.draw.renderpass.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.rasterization.rasterization_order_attachment_access.depth.samples_1.multi_draw_barriers,Crash
dEQP-VK.rasterization.rasterization_order_attachment_access.stencil.samples_1.multi_draw_barriers,Crash

View File

@@ -271,70 +271,9 @@ dEQP-VK.api.device_init.create_device_global_priority_khr.basic,Fail
dEQP-VK.api.device_init.create_device_global_priority_query.basic,Fail
dEQP-VK.api.device_init.create_device_global_priority_query_khr.basic,Fail
dEQP-VK.draw.renderpass.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.renderpass.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.renderpass.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.63,Fail
dEQP-VK.renderpass2.dedicated_allocation.attachment_allocation.input_output.63,Fail
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective,Fail
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.interface_blocks.no_perspective,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.complete_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.partial_secondary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.no_offset_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.no_offset_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_max_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_max_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_min_1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.linear_interpolation.offset_min_4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.separate.with_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.no_sample_decoration.4_samples,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.1_sample,Fail
dEQP-VK.draw.dynamic_rendering.primary_cmd_buff.multiple_interpolation.structured.with_sample_decoration.4_samples,Fail
dEQP-VK.glsl.limits.near_max.fragment_input.components_123,Fail
dEQP-VK.glsl.limits.near_max.fragment_input.components_124,Fail

View File

@@ -231,12 +231,19 @@ prepare_sysvals(struct panvk_cmd_buffer *cmdbuf,
const struct vk_rasterization_state *rs =
&cmdbuf->vk.dynamic_graphics_state.rs;
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
const struct panvk_shader *fs = cmdbuf->state.gfx.fs.shader;
if (gfx_state_dirty(cmdbuf, RENDER_STATE)) {
sysvals->fs.multisampled = fbinfo->nr_samples > 1;
gfx_state_set_dirty(cmdbuf, PUSH_UNIFORMS);
}
uint32_t noperspective_varyings = fs ? fs->info.varyings.noperspective : 0;
if (sysvals->vs.noperspective_varyings != noperspective_varyings) {
sysvals->vs.noperspective_varyings = noperspective_varyings;
cmdbuf->state.gfx.push_uniforms = 0;
}
if (dyn_gfx_state_dirty(cmdbuf, CB_BLEND_CONSTANTS)) {
for (unsigned i = 0; i < ARRAY_SIZE(cb->blend_constants); i++)
sysvals->blend.constants[i] =

View File

@@ -99,14 +99,17 @@ panvk_cmd_prepare_draw_sysvals(struct panvk_cmd_buffer *cmdbuf,
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
unsigned base_vertex = draw->index_size ? draw->vertex_offset : 0;
uint32_t noperspective_varyings = fs ? fs->info.varyings.noperspective : 0;
if (sysvals->vs.first_vertex != draw->offset_start ||
sysvals->vs.base_vertex != base_vertex ||
sysvals->vs.base_instance != draw->first_instance ||
sysvals->layer_id != draw->layer_id ||
sysvals->fs.multisampled != (fbinfo->nr_samples > 1)) {
sysvals->fs.multisampled != (fbinfo->nr_samples > 1) ||
sysvals->vs.noperspective_varyings != noperspective_varyings) {
sysvals->vs.first_vertex = draw->offset_start;
sysvals->vs.base_vertex = base_vertex;
sysvals->vs.base_instance = draw->first_instance;
sysvals->vs.noperspective_varyings = noperspective_varyings;
sysvals->layer_id = draw->layer_id;
sysvals->fs.multisampled = fbinfo->nr_samples > 1;

View File

@@ -54,6 +54,7 @@ struct panvk_graphics_sysvals {
uint32_t first_vertex;
uint32_t base_vertex;
uint32_t base_instance;
uint32_t noperspective_varyings;
} vs;
struct {

View File

@@ -120,6 +120,14 @@ panvk_lower_sysvals(nir_builder *b, nir_instr *instr, void *data)
val = load_sysval_from_push_const(b, SYSVAL(graphics, fs.multisampled),
bit_size, num_comps);
break;
case nir_intrinsic_load_noperspective_varyings_pan:
/* TODO: lower this to a constant with monolithic pipelines */
/* TODO: use a VS epilog specialized on constant noperspective_varyings
* with VK_EXT_graphics_pipeline_libraries and VK_EXT_shader_object */
assert(b->shader->info.stage == MESA_SHADER_VERTEX);
val = load_sysval_from_push_const(b, SYSVAL(graphics, vs.noperspective_varyings),
bit_size, num_comps);
break;
#if PAN_ARCH <= 7
case nir_intrinsic_load_layer_id: