panvk: Consider primitive restart in index buffer walks
Fixes: dEQP-VK.pipeline.input_assembly.primitive_restart.index_type_uint32.line_strip Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16140>
This commit is contained in:
parent
68c05c660b
commit
dfcb2f0699
|
@ -21,6 +21,7 @@ include = [
|
|||
"dEQP-VK.glsl.derivate.*.linear.*",
|
||||
"dEQP-VK.glsl.derivate.*.uniform_*",
|
||||
"dEQP-VK.image.load_store.with_format.*",
|
||||
"dEQP-VK.pipeline.input_assembly.*",
|
||||
"dEQP-VK.pipeline.sampler.view_type.*.format.r*.address_modes.all_mode_clamp_to_border*",
|
||||
"dEQP-VK.ssbo.layout.single_basic_type.*",
|
||||
]
|
||||
|
|
|
@ -989,6 +989,7 @@ panvk_per_arch(CmdDraw)(VkCommandBuffer commandBuffer,
|
|||
static void
|
||||
panvk_index_minmax_search(struct panvk_cmd_buffer *cmdbuf,
|
||||
uint32_t start, uint32_t count,
|
||||
bool restart,
|
||||
uint32_t *min, uint32_t *max)
|
||||
{
|
||||
void *ptr = cmdbuf->state.ib.buffer->bo->ptr.cpu +
|
||||
|
@ -1013,6 +1014,7 @@ panvk_index_minmax_search(struct panvk_cmd_buffer *cmdbuf,
|
|||
uint ## sz ## _t *indices = ptr; \
|
||||
*min = UINT ## sz ## _MAX; \
|
||||
for (uint32_t i = 0; i < count; i++) { \
|
||||
if (restart && indices[i + start] == UINT ## sz ##_MAX) continue; \
|
||||
*min = MIN2(indices[i + start], *min); \
|
||||
*max = MAX2(indices[i + start], *max); \
|
||||
} \
|
||||
|
@ -1041,7 +1043,11 @@ panvk_per_arch(CmdDrawIndexed)(VkCommandBuffer commandBuffer,
|
|||
if (instanceCount == 0 || indexCount == 0)
|
||||
return;
|
||||
|
||||
panvk_index_minmax_search(cmdbuf, firstIndex, indexCount,
|
||||
const struct panvk_pipeline *pipeline =
|
||||
panvk_cmd_get_pipeline(cmdbuf, GRAPHICS);
|
||||
bool primitive_restart = pipeline->ia.primitive_restart;
|
||||
|
||||
panvk_index_minmax_search(cmdbuf, firstIndex, indexCount, primitive_restart,
|
||||
&min_vertex, &max_vertex);
|
||||
|
||||
unsigned vertex_range = max_vertex - min_vertex + 1;
|
||||
|
|
Loading…
Reference in New Issue