Re: [Mesa-dev] [PATCH 2/2] nir: don't pack varyings ints with floats unless flat
On Sun, Nov 11, 2018 at 9:37 PM Timothy Arceri wrote: > On 12/11/18 2:11 pm, Jason Ekstrand wrote: > > On November 11, 2018 20:30:29 Timothy Arceri > wrote: > > > >> Fixes: 1c9c42d16b4c ("nir: add varying component packing helpers") > >> --- > >> src/compiler/nir/nir_linking_helpers.c | 9 ++--- > >> 1 file changed, 6 insertions(+), 3 deletions(-) > >> > >> > >> diff --git a/src/compiler/nir/nir_linking_helpers.c > >> b/src/compiler/nir/nir_linking_helpers.c > >> index b07bb40894e..125a8d55b3e 100644 > >> --- a/src/compiler/nir/nir_linking_helpers.c > >> +++ b/src/compiler/nir/nir_linking_helpers.c > >> @@ -196,10 +196,13 @@ nir_remove_unused_varyings(nir_shader *producer, > >> nir_shader *consumer) > >> } > >> > >> static uint8_t > >> -get_interp_type(nir_variable *var, bool default_to_smooth_interp) > >> +get_interp_type(nir_variable *var, const struct glsl_type *type, > >> +bool default_to_smooth_interp) > >> { > >>if (var->data.interpolation != INTERP_MODE_NONE) > >> return var->data.interpolation; > >> + else if (glsl_type_is_integer(type)) > >> + return INTERP_MODE_FLAT; > > > > Are we guaranteed that there will be no explititly interpolated integers? > > The GLSL 1.30 spec used to require ints to be marked as flat but the > 4.60 spec doesn't say much at all. I can make "if > (glsl_type_is_integer(type))" the first check, this would match what we > do in GLSL IR. Would this cover your concerns? > Yes, it would. With that, both are Reviewed-by: Jason Ekstrand > > > >>else if (default_to_smooth_interp) > >> return INTERP_MODE_SMOOTH; > >>else > >> @@ -253,7 +256,7 @@ get_slot_component_masks_and_interp_types(struct > >> exec_list *var_list, > >> unsigned comps_slot2 = 0; > >> for (unsigned i = 0; i < slots; i++) { > >> interp_type[location + i] = > >> - get_interp_type(var, default_to_smooth_interp); > >> + get_interp_type(var, type, default_to_smooth_interp); > >> interp_loc[location + i] = get_interp_loc(var); > >> > >> if (dual_slot) { > >> @@ -425,7 +428,7 @@ compact_components(nir_shader *producer, > >> nir_shader *consumer, uint8_t *comps, > >> continue; > >> > >> bool found_new_offset = false; > >> - uint8_t interp = get_interp_type(var, > >> default_to_smooth_interp); > >> + uint8_t interp = get_interp_type(var, type, > >> default_to_smooth_interp); > >> for (; cursor[interp] < 32; cursor[interp]++) { > >> uint8_t cursor_used_comps = comps[cursor[interp]]; > >> > >> -- > >> 2.19.1 > >> > >> > >> ___ > >> mesa-dev mailing list > >> mesa-dev@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > > > > > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 2/2] nir: don't pack varyings ints with floats unless flat
On 12/11/18 2:11 pm, Jason Ekstrand wrote: On November 11, 2018 20:30:29 Timothy Arceri wrote: Fixes: 1c9c42d16b4c ("nir: add varying component packing helpers") --- src/compiler/nir/nir_linking_helpers.c | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c index b07bb40894e..125a8d55b3e 100644 --- a/src/compiler/nir/nir_linking_helpers.c +++ b/src/compiler/nir/nir_linking_helpers.c @@ -196,10 +196,13 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) } static uint8_t -get_interp_type(nir_variable *var, bool default_to_smooth_interp) +get_interp_type(nir_variable *var, const struct glsl_type *type, + bool default_to_smooth_interp) { if (var->data.interpolation != INTERP_MODE_NONE) return var->data.interpolation; + else if (glsl_type_is_integer(type)) + return INTERP_MODE_FLAT; Are we guaranteed that there will be no explititly interpolated integers? The GLSL 1.30 spec used to require ints to be marked as flat but the 4.60 spec doesn't say much at all. I can make "if (glsl_type_is_integer(type))" the first check, this would match what we do in GLSL IR. Would this cover your concerns? else if (default_to_smooth_interp) return INTERP_MODE_SMOOTH; else @@ -253,7 +256,7 @@ get_slot_component_masks_and_interp_types(struct exec_list *var_list, unsigned comps_slot2 = 0; for (unsigned i = 0; i < slots; i++) { interp_type[location + i] = - get_interp_type(var, default_to_smooth_interp); + get_interp_type(var, type, default_to_smooth_interp); interp_loc[location + i] = get_interp_loc(var); if (dual_slot) { @@ -425,7 +428,7 @@ compact_components(nir_shader *producer, nir_shader *consumer, uint8_t *comps, continue; bool found_new_offset = false; - uint8_t interp = get_interp_type(var, default_to_smooth_interp); + uint8_t interp = get_interp_type(var, type, default_to_smooth_interp); for (; cursor[interp] < 32; cursor[interp]++) { uint8_t cursor_used_comps = comps[cursor[interp]]; -- 2.19.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 2/2] nir: don't pack varyings ints with floats unless flat
On November 11, 2018 20:30:29 Timothy Arceri wrote: Fixes: 1c9c42d16b4c ("nir: add varying component packing helpers") --- src/compiler/nir/nir_linking_helpers.c | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c index b07bb40894e..125a8d55b3e 100644 --- a/src/compiler/nir/nir_linking_helpers.c +++ b/src/compiler/nir/nir_linking_helpers.c @@ -196,10 +196,13 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) } static uint8_t -get_interp_type(nir_variable *var, bool default_to_smooth_interp) +get_interp_type(nir_variable *var, const struct glsl_type *type, +bool default_to_smooth_interp) { if (var->data.interpolation != INTERP_MODE_NONE) return var->data.interpolation; + else if (glsl_type_is_integer(type)) + return INTERP_MODE_FLAT; Are we guaranteed that there will be no explititly interpolated integers? else if (default_to_smooth_interp) return INTERP_MODE_SMOOTH; else @@ -253,7 +256,7 @@ get_slot_component_masks_and_interp_types(struct exec_list *var_list, unsigned comps_slot2 = 0; for (unsigned i = 0; i < slots; i++) { interp_type[location + i] = - get_interp_type(var, default_to_smooth_interp); + get_interp_type(var, type, default_to_smooth_interp); interp_loc[location + i] = get_interp_loc(var); if (dual_slot) { @@ -425,7 +428,7 @@ compact_components(nir_shader *producer, nir_shader *consumer, uint8_t *comps, continue; bool found_new_offset = false; - uint8_t interp = get_interp_type(var, default_to_smooth_interp); + uint8_t interp = get_interp_type(var, type, default_to_smooth_interp); for (; cursor[interp] < 32; cursor[interp]++) { uint8_t cursor_used_comps = comps[cursor[interp]]; -- 2.19.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 2/2] nir: don't pack varyings ints with floats unless flat
Fixes: 1c9c42d16b4c ("nir: add varying component packing helpers") --- src/compiler/nir/nir_linking_helpers.c | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c index b07bb40894e..125a8d55b3e 100644 --- a/src/compiler/nir/nir_linking_helpers.c +++ b/src/compiler/nir/nir_linking_helpers.c @@ -196,10 +196,13 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) } static uint8_t -get_interp_type(nir_variable *var, bool default_to_smooth_interp) +get_interp_type(nir_variable *var, const struct glsl_type *type, +bool default_to_smooth_interp) { if (var->data.interpolation != INTERP_MODE_NONE) return var->data.interpolation; + else if (glsl_type_is_integer(type)) + return INTERP_MODE_FLAT; else if (default_to_smooth_interp) return INTERP_MODE_SMOOTH; else @@ -253,7 +256,7 @@ get_slot_component_masks_and_interp_types(struct exec_list *var_list, unsigned comps_slot2 = 0; for (unsigned i = 0; i < slots; i++) { interp_type[location + i] = - get_interp_type(var, default_to_smooth_interp); + get_interp_type(var, type, default_to_smooth_interp); interp_loc[location + i] = get_interp_loc(var); if (dual_slot) { @@ -425,7 +428,7 @@ compact_components(nir_shader *producer, nir_shader *consumer, uint8_t *comps, continue; bool found_new_offset = false; - uint8_t interp = get_interp_type(var, default_to_smooth_interp); + uint8_t interp = get_interp_type(var, type, default_to_smooth_interp); for (; cursor[interp] < 32; cursor[interp]++) { uint8_t cursor_used_comps = comps[cursor[interp]]; -- 2.19.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev