[Mesa-dev] [PATCH 0/9] Fix shader_draw_parameters CTS tests

Antia Puentes apuentes at igalia.com
Fri Nov 10 17:53:28 UTC 2017


Hi,

the series sets gl_BaseVertex to zero for gl*DrawArrays* in i965.
Previously, its value was the value passed as <first> in the non-indexed
draw call. This was convinient because the gl_VertexID was calculated as
gl_VertexIDBaseZero + gl_BaseVertex.

However, as gl_BaseVertex must be zero for non-indexed draw calls, this
calculation is broken.

Apart from setting the basevertex to zero in i965, the following patches add
a new VS system value which will contain <first> or <basevertex> as needed
to make the gl_VertexID calculation right.


The relevant bits of the OpenGL 4.6 specification involved here are:

* 11.1.3.9 Shader Inputs

"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."

"gl_VertexID holds the integer index i implicitly passed by DrawArrays or
one of the other drawing commands defined in section 10.4."

* 10.4. Drawing Commands Using Vertex Arrays:

  - Page 352:
"The index of any element transferred to the GL by DrawArraysOneInstance is
referred to as its vertex ID, and may be read by a vertex shader as gl_VertexID.
The vertex ID of the ith element transferred is first + i."

  - Page 355:
"The index of any element transferred to the GL by DrawElementsOneInstance is
referred to as its vertex ID, and may be read by a vertex shader as gl_VertexID.
The vertex ID of the ith element transferred is the sum of basevertex and the
value stored in the currently bound element array buffer at offset indices + i."

Regards,
Antia.

Antia Puentes (5):
  compiler: Add new system value SYSTEM_VALUE_BASE_VERTEX_ID
  nir: Add SYSTEM_VALUE_BASE_VERTEX_ID instrinsics
  i965: emit basevertexid as a vertex element component
  i965: gl_BaseVertex must be zero for non-indexed draw calls
  intel/compiler: implement the basevertex(id) load intrinsics

Neil Roberts (4):
  intel/compiler: Add a uses_basevertexid flag
  nir: Offset vertex_id by base_vertex_id instead of base_vertex
  i965: Let nir lower gl_VertexID instead of the linker
  spirv: Lower BaseVertex to BASE_VERTEX_ID instead of BASE_VERTEX

 src/compiler/nir/nir.c                        |  4 +++
 src/compiler/nir/nir_gather_info.c            |  1 +
 src/compiler/nir/nir_intrinsics.h             |  1 +
 src/compiler/nir/nir_lower_system_values.c    |  2 +-
 src/compiler/shader_enums.c                   |  1 +
 src/compiler/shader_enums.h                   | 15 +++++++++++
 src/compiler/spirv/vtn_variables.c            |  2 +-
 src/intel/compiler/brw_compiler.h             |  1 +
 src/intel/compiler/brw_nir.c                  | 12 ++++++---
 src/intel/compiler/brw_vec4.cpp               | 18 ++++++++-----
 src/intel/vulkan/genX_cmd_buffer.c            |  8 +++---
 src/intel/vulkan/genX_pipeline.c              |  4 +--
 src/mesa/drivers/dri/i965/brw_context.c       |  3 ++-
 src/mesa/drivers/dri/i965/brw_context.h       | 36 ++++++++++++++++++-------
 src/mesa/drivers/dri/i965/brw_draw.c          | 33 ++++++++++++++++-------
 src/mesa/drivers/dri/i965/brw_draw_upload.c   | 13 ++++-----
 src/mesa/drivers/dri/i965/genX_state_upload.c | 39 +++++++++++++++------------
 17 files changed, 132 insertions(+), 61 deletions(-)

-- 
2.14.1



More information about the mesa-dev mailing list