Just to note, I made some Piglit patches to verify this new behaviour too: https://patchwork.freedesktop.org/series/33626/
This might make testing a little easier if someone wants to implement the behaviour for other drivers too. - Neil Antia Puentes <apuen...@igalia.com> writes: > 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 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev