panvk: set provoking vertex in fbinfo
This must match the value set in TILER_CONTEXT. Fixes dEQP-VK.rasterization.flatshading.*, which were failing previously because we were setting first_provoking_vertex to true in the tiler descriptor and false in fbinfo. Signed-off-by: Benjamin Lee <benjamin.lee@collabora.com> Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32273>
This commit is contained in:
@@ -342,24 +342,6 @@ dEQP-VK.renderpass.dedicated_allocation.attachment_allocation.input_output.63,Fa
|
||||
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.rasterization.flatshading.line_strip,Fail
|
||||
dEQP-VK.rasterization.flatshading.line_strip_wide,Fail
|
||||
dEQP-VK.rasterization.flatshading.lines,Fail
|
||||
dEQP-VK.rasterization.flatshading.lines_wide,Fail
|
||||
dEQP-VK.rasterization.flatshading.non_strict_line_strip,Fail
|
||||
dEQP-VK.rasterization.flatshading.non_strict_line_strip_wide,Fail
|
||||
dEQP-VK.rasterization.flatshading.non_strict_lines,Fail
|
||||
dEQP-VK.rasterization.flatshading.non_strict_lines_wide,Fail
|
||||
dEQP-VK.rasterization.flatshading.triangle_fan,Fail
|
||||
dEQP-VK.rasterization.flatshading.triangle_strip,Fail
|
||||
dEQP-VK.rasterization.flatshading.triangles,Fail
|
||||
|
||||
dEQP-VK.rasterization.provoking_vertex.draw.default.line_list,Fail
|
||||
dEQP-VK.rasterization.provoking_vertex.draw.default.line_strip,Fail
|
||||
dEQP-VK.rasterization.provoking_vertex.draw.default.triangle_fan,Fail
|
||||
dEQP-VK.rasterization.provoking_vertex.draw.default.triangle_list,Fail
|
||||
dEQP-VK.rasterization.provoking_vertex.draw.default.triangle_strip,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.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
|
||||
|
||||
@@ -1201,6 +1201,23 @@ get_fb_descs(struct panvk_cmd_buffer *cmdbuf)
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
set_provoking_vertex_mode(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
bool first_provoking_vertex =
|
||||
cmdbuf->vk.dynamic_graphics_state.rs.provoking_vertex ==
|
||||
VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT;
|
||||
|
||||
/* If this is not the first draw, first_provoking_vertex should match
|
||||
* the one from the previous draws. Unfortunately, we can't check it
|
||||
* when the render pass is inherited. */
|
||||
assert(!cmdbuf->state.gfx.render.fbds.gpu ||
|
||||
fbinfo->first_provoking_vertex == first_provoking_vertex);
|
||||
|
||||
fbinfo->first_provoking_vertex = first_provoking_vertex;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
get_render_ctx(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
@@ -1587,6 +1604,8 @@ prepare_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_info *draw)
|
||||
/* FIXME: support non-IDVS. */
|
||||
assert(idvs);
|
||||
|
||||
set_provoking_vertex_mode(cmdbuf);
|
||||
|
||||
result = update_tls(cmdbuf);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
@@ -1015,6 +1015,23 @@ panvk_emit_tiler_dcd(struct panvk_cmd_buffer *cmdbuf,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set_provoking_vertex_mode(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
bool first_provoking_vertex =
|
||||
cmdbuf->vk.dynamic_graphics_state.rs.provoking_vertex ==
|
||||
VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT;
|
||||
|
||||
/* If this is not the first draw, first_provoking_vertex should match
|
||||
* the one from the previous draws. Unfortunately, we can't check it
|
||||
* when the render pass is inherited. */
|
||||
assert(!cmdbuf->cur_batch->fb.desc.gpu ||
|
||||
fbinfo->first_provoking_vertex == first_provoking_vertex);
|
||||
|
||||
fbinfo->first_provoking_vertex = first_provoking_vertex;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
panvk_draw_prepare_tiler_job(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_draw_info *draw)
|
||||
@@ -1233,6 +1250,8 @@ panvk_cmd_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_info *draw)
|
||||
cmdbuf->state.gfx.occlusion_query.mode != MALI_OCCLUSION_MODE_DISABLED;
|
||||
bool needs_tiling = !rs->rasterizer_discard_enable || active_occlusion;
|
||||
|
||||
set_provoking_vertex_mode(cmdbuf);
|
||||
|
||||
if (!rs->rasterizer_discard_enable) {
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
uint32_t rasterization_samples =
|
||||
|
||||
Reference in New Issue
Block a user