compiler: Move double_inputs to gl_program::DualSlotInputs
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 30 Aug 2018 20:02:25 +0000 (15:02 -0500)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 6 Sep 2018 21:07:50 +0000 (16:07 -0500)
commit25efd787cfd842c0b0b900f35399e44a2e01ea39
treebe4df409f2242e2d16f10c3f8e15e6535b713769
parent1285f71d3e93f200cec0c321bb6e621d4aece7b3
compiler: Move double_inputs to gl_program::DualSlotInputs

Previously, we had two field in shader_info: double_inputs_read and
double_inputs.  Presumably, the one was for all double inputs that are
read and the other is all that exist.  However, because nir_gather_info
regenerates these two values, there is a possibility, if a variable gets
deleted, that the value of double_inputs could change over time.  This
is a problem because double_inputs is used to remap the input locations
to a two-slot-per-dvec3/4 scheme for i965.  If that mapping were to
change between glsl_to_nir and back-end state setup, we would fall over
when trying to map the NIR outputs back onto the GL location space.

This commit changes the way slot re-mapping works.  Instead of the
double_inputs field in shader_info, it adds a DualSlotInputs bitfield to
gl_program.  By having it in gl_program, we more easily guarantee that
NIR passes won't touch it after it's been set.  It also makes more sense
to put it in a GL data structure since it's really a mapping from GL
slots to back-end and/or NIR slots and not really a NIR shader thing.

Tested-by: Alejandro Piñeiro <apinheiro@igalia.com> (ARB_gl_spirv tests)
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
14 files changed:
src/compiler/glsl/glsl_to_nir.cpp
src/compiler/glsl/ir_set_program_inouts.cpp
src/compiler/glsl/serialize.cpp
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_gather_info.c
src/compiler/shader_info.h
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/drivers/dri/i965/genX_state_upload.c
src/mesa/main/glspirv.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_glsl_to_nir.cpp
src/mesa/state_tracker/st_glsl_to_tgsi.cpp
src/mesa/state_tracker/st_program.c