mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-19 17:08:25 +02:00
compiler/nir: Add conditional lowering for gl_BaseVertex
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
0cbf29fa55
commit
0fb204fac1
2 changed files with 21 additions and 0 deletions
|
|
@ -1930,6 +1930,12 @@ typedef struct nir_shader_compiler_options {
|
|||
/* Indicates that the driver only has zero-based vertex id */
|
||||
bool vertex_id_zero_based;
|
||||
|
||||
/**
|
||||
* If enabled, gl_BaseVertex will be lowered as:
|
||||
* is_indexed_draw (~0/0) & firstvertex
|
||||
*/
|
||||
bool lower_base_vertex;
|
||||
|
||||
bool lower_cs_local_index_from_id;
|
||||
|
||||
bool lower_device_index_to_zero;
|
||||
|
|
|
|||
|
|
@ -121,6 +121,21 @@ convert_block(nir_block *block, nir_builder *b)
|
|||
}
|
||||
break;
|
||||
|
||||
case SYSTEM_VALUE_BASE_VERTEX:
|
||||
/**
|
||||
* From the OpenGL 4.6 (11.1.3.9 Shader Inputs) specification:
|
||||
*
|
||||
* "gl_BaseVertex holds the integer value passed to the baseVertex
|
||||
* parameter to the command that resulted in the current shader
|
||||
* invocation. In the case where the command has no baseVertex
|
||||
* parameter, the value of gl_BaseVertex is zero."
|
||||
*/
|
||||
if (b->shader->options->lower_base_vertex)
|
||||
sysval = nir_iand(b,
|
||||
nir_load_is_indexed_draw(b),
|
||||
nir_load_first_vertex(b));
|
||||
break;
|
||||
|
||||
case SYSTEM_VALUE_INSTANCE_INDEX:
|
||||
sysval = nir_iadd(b,
|
||||
nir_load_instance_id(b),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue