spirv: Lower BaseVertex to FIRST_VERTEX instead of BASE_VERTEX
The base vertex in Vulkan is different from GL in that for non-indexed primitives the value is taken from the firstVertex parameter instead of being set to zero. This coincides with the new SYSTEM_VALUE_FIRST_VERTEX instead of BASE_VERTEX. v2 (idr): Add comment describing why SYSTEM_VALUE_FIRST_VERTEX is used for SpvBuiltInBaseVertex. Suggested by Jason. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> [v1] Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:

committed by
Ian Romanick

parent
c32e1035cb
commit
c4f30a9100
@@ -2673,7 +2673,9 @@ void genX(CmdDraw)(
|
||||
|
||||
genX(cmd_buffer_flush_state)(cmd_buffer);
|
||||
|
||||
if (vs_prog_data->uses_basevertex || vs_prog_data->uses_baseinstance)
|
||||
if (vs_prog_data->uses_firstvertex ||
|
||||
vs_prog_data->uses_basevertex ||
|
||||
vs_prog_data->uses_baseinstance)
|
||||
emit_base_vertex_instance(cmd_buffer, firstVertex, firstInstance);
|
||||
if (vs_prog_data->uses_drawid)
|
||||
emit_draw_index(cmd_buffer, 0);
|
||||
@@ -2711,7 +2713,9 @@ void genX(CmdDrawIndexed)(
|
||||
|
||||
genX(cmd_buffer_flush_state)(cmd_buffer);
|
||||
|
||||
if (vs_prog_data->uses_basevertex || vs_prog_data->uses_baseinstance)
|
||||
if (vs_prog_data->uses_firstvertex ||
|
||||
vs_prog_data->uses_basevertex ||
|
||||
vs_prog_data->uses_baseinstance)
|
||||
emit_base_vertex_instance(cmd_buffer, vertexOffset, firstInstance);
|
||||
if (vs_prog_data->uses_drawid)
|
||||
emit_draw_index(cmd_buffer, 0);
|
||||
@@ -2850,7 +2854,9 @@ void genX(CmdDrawIndirect)(
|
||||
struct anv_bo *bo = buffer->bo;
|
||||
uint32_t bo_offset = buffer->offset + offset;
|
||||
|
||||
if (vs_prog_data->uses_basevertex || vs_prog_data->uses_baseinstance)
|
||||
if (vs_prog_data->uses_firstvertex ||
|
||||
vs_prog_data->uses_basevertex ||
|
||||
vs_prog_data->uses_baseinstance)
|
||||
emit_base_vertex_instance_bo(cmd_buffer, bo, bo_offset + 8);
|
||||
if (vs_prog_data->uses_drawid)
|
||||
emit_draw_index(cmd_buffer, i);
|
||||
@@ -2889,7 +2895,9 @@ void genX(CmdDrawIndexedIndirect)(
|
||||
uint32_t bo_offset = buffer->offset + offset;
|
||||
|
||||
/* TODO: We need to stomp base vertex to 0 somehow */
|
||||
if (vs_prog_data->uses_basevertex || vs_prog_data->uses_baseinstance)
|
||||
if (vs_prog_data->uses_firstvertex ||
|
||||
vs_prog_data->uses_basevertex ||
|
||||
vs_prog_data->uses_baseinstance)
|
||||
emit_base_vertex_instance_bo(cmd_buffer, bo, bo_offset + 12);
|
||||
if (vs_prog_data->uses_drawid)
|
||||
emit_draw_index(cmd_buffer, i);
|
||||
|
Reference in New Issue
Block a user