gallium/indices: don't expand prim-type for 8-bit indices
Expanding the primitive-type has two undesirable effects: 1. It breaks primitive-restart. This is possible to fix by explicitly handling primitive-restart in more conversion routines. But u_indices_gen.py is kind of a mess, so it's not trivial as-is. 2. It changes the reported gl_VertexID. While it might be possible to work around this in each driver, it seems better to avoid this when we can. Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5976>
This commit is contained in:

committed by
Marge Bot

parent
0c85d6c523
commit
2122b902b8
@@ -44,7 +44,20 @@ static void translate_memcpy_uint( const void *in,
|
||||
{
|
||||
memcpy(out, &((int *)in)[start], out_nr*sizeof(int));
|
||||
}
|
||||
|
||||
|
||||
static void translate_byte_to_ushort( const void *in,
|
||||
unsigned start,
|
||||
UNUSED unsigned in_nr,
|
||||
unsigned out_nr,
|
||||
UNUSED unsigned restart_index,
|
||||
void *out )
|
||||
{
|
||||
uint8_t *src = (uint8_t *)in + start;
|
||||
uint16_t *dst = out;
|
||||
while (out_nr--) {
|
||||
*dst++ = *src++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate indexes when a driver can't support certain types
|
||||
@@ -97,15 +110,15 @@ u_index_translator(unsigned hw_mask,
|
||||
*out_index_size = (in_index_size == 4) ? 4 : 2;
|
||||
out_idx = out_size_idx(*out_index_size);
|
||||
|
||||
if ((hw_mask & (1<<prim)) &&
|
||||
in_index_size == *out_index_size &&
|
||||
in_pv == out_pv)
|
||||
if ((hw_mask & (1<<prim)) &&
|
||||
in_pv == out_pv)
|
||||
{
|
||||
/* Index translation not really needed */
|
||||
if (in_index_size == 4)
|
||||
*out_translate = translate_memcpy_uint;
|
||||
else
|
||||
else if (in_index_size == 2)
|
||||
*out_translate = translate_memcpy_ushort;
|
||||
else
|
||||
*out_translate = translate_byte_to_ushort;
|
||||
|
||||
*out_prim = prim;
|
||||
*out_nr = nr;
|
||||
|
Reference in New Issue
Block a user