Mesa (master): st/glsl_to_nir: add patch support to st_nir_assign_var_locations()
Timothy Arceri
tarceri at kemper.freedesktop.org
Wed Dec 27 00:28:23 UTC 2017
Module: Mesa
Branch: master
Commit: a88532c612c49681b7622ce8a4afc7417c88694c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a88532c612c49681b7622ce8a4afc7417c88694c
Author: Timothy Arceri <tarceri at itsqueeze.com>
Date: Thu Dec 14 10:14:34 2017 +1100
st/glsl_to_nir: add patch support to st_nir_assign_var_locations()
Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
src/mesa/state_tracker/st_glsl_to_nir.cpp | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index b411621ab2..276450a64a 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -126,8 +126,9 @@ st_nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
gl_shader_stage stage)
{
unsigned location = 0;
- unsigned assigned_locations[VARYING_SLOT_MAX];
+ unsigned assigned_locations[VARYING_SLOT_TESS_MAX];
uint64_t processed_locs = 0;
+ uint32_t processed_patch_locs = 0;
nir_foreach_variable(var, var_list) {
@@ -137,11 +138,24 @@ st_nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
type = glsl_get_array_element(type);
}
+ bool processed = false;
+ if (var->data.patch) {
+ unsigned patch_loc = var->data.location - VARYING_SLOT_VAR0;
+ if (processed_patch_locs & (1 << patch_loc))
+ processed = true;
+
+ processed_patch_locs |= (1 << patch_loc);
+ } else {
+ if (processed_locs & ((uint64_t)1 << var->data.location))
+ processed = true;
+
+ processed_locs |= ((uint64_t)1 << var->data.location);
+ }
+
/* Because component packing allows varyings to share the same location
* we may have already have processed this location.
*/
- if (var->data.location >= VARYING_SLOT_VAR0 &&
- processed_locs & ((uint64_t)1 << var->data.location)) {
+ if (processed && var->data.location >= VARYING_SLOT_VAR0) {
var->data.driver_location = assigned_locations[var->data.location];
*size += type_size(type);
continue;
@@ -150,8 +164,6 @@ st_nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
assigned_locations[var->data.location] = location;
var->data.driver_location = location;
location += type_size(type);
-
- processed_locs |= ((uint64_t)1 << var->data.location);
}
*size += location;
More information about the mesa-commit
mailing list