summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/compiler/nir/nir.h1
-rw-r--r--src/compiler/nir/nir_lower_io.c48
-rw-r--r--src/mesa/drivers/dri/i965/brw_nir.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_program.c4
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp3
5 files changed, 5 insertions, 53 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 54302f82a9a..92647632462 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2321,7 +2321,6 @@ void nir_lower_io_to_temporaries(nir_shader *shader,
void nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint);
void nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
- unsigned base_offset,
int (*type_size)(const struct glsl_type *));
typedef enum {
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index d77cb134533..25cca186193 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -44,18 +44,10 @@ struct lower_io_state {
void
nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
- unsigned base_offset,
int (*type_size)(const struct glsl_type *))
{
unsigned location = 0;
- /* There are 32 regular and 32 patch varyings allowed */
- int locations[64][2];
- for (unsigned i = 0; i < 64; i++) {
- for (unsigned j = 0; j < 2; j++)
- locations[i][j] = -1;
- }
-
nir_foreach_variable(var, var_list) {
/*
* UBO's have their own address spaces, so don't count them towards the
@@ -65,44 +57,8 @@ nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
var->interface_type != NULL)
continue;
- /* Make sure we give the same location to varyings packed with
- * ARB_enhanced_layouts.
- */
- int idx = var->data.location - base_offset;
- if (base_offset && idx >= 0) {
- assert(idx < ARRAY_SIZE(locations));
-
- if (locations[idx][var->data.index] == -1) {
- var->data.driver_location = location;
- locations[idx][var->data.index] = location;
-
- /* A dvec3 can be packed with a double we need special handling
- * for this as we are packing across two locations.
- */
- if (glsl_get_base_type(var->type) == GLSL_TYPE_DOUBLE &&
- glsl_get_vector_elements(var->type) == 3) {
- /* Hack around type_size functions that expect vectors to be
- * padded out to vec4. If a float type is the same size as a
- * double then the type size is padded to vec4, otherwise
- * set the offset to two doubles which offsets the location
- * past the first two components in dvec3 which were stored at
- * the previous location.
- */
- unsigned dsize = type_size(glsl_double_type());
- unsigned offset =
- dsize == type_size(glsl_float_type()) ? dsize : dsize * 2;
-
- locations[idx + 1][var->data.index] = location + offset;
- }
-
- location += type_size(var->type);
- } else {
- var->data.driver_location = locations[idx][var->data.index];
- }
- } else {
- var->data.driver_location = location;
- location += type_size(var->type);
- }
+ var->data.driver_location = location;
+ location += type_size(var->type);
}
*size = location;
diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
index ec48da9f2f8..a93d8252535 100644
--- a/src/mesa/drivers/dri/i965/brw_nir.c
+++ b/src/mesa/drivers/dri/i965/brw_nir.c
@@ -380,7 +380,7 @@ brw_nir_lower_fs_outputs(nir_shader *nir)
void
brw_nir_lower_cs_shared(nir_shader *nir)
{
- nir_assign_var_locations(&nir->shared, &nir->num_shared, 0,
+ nir_assign_var_locations(&nir->shared, &nir->num_shared,
type_size_scalar_bytes);
nir_lower_io(nir, nir_var_shared, type_size_scalar_bytes, 0);
}
diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c
index e0a1287f403..8f015026421 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -51,11 +51,11 @@ static void
brw_nir_lower_uniforms(nir_shader *nir, bool is_scalar)
{
if (is_scalar) {
- nir_assign_var_locations(&nir->uniforms, &nir->num_uniforms, 0,
+ nir_assign_var_locations(&nir->uniforms, &nir->num_uniforms,
type_size_scalar_bytes);
nir_lower_io(nir, nir_var_uniform, type_size_scalar_bytes, 0);
} else {
- nir_assign_var_locations(&nir->uniforms, &nir->num_uniforms, 0,
+ nir_assign_var_locations(&nir->uniforms, &nir->num_uniforms,
type_size_vec4_bytes);
nir_lower_io(nir, nir_var_uniform, type_size_vec4_bytes, 0);
}
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index d188bf45e90..a4128064189 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -324,19 +324,16 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog, nir_shader *nir)
sort_varyings(&nir->outputs);
nir_assign_var_locations(&nir->outputs,
&nir->num_outputs,
- VARYING_SLOT_VAR0,
st_glsl_type_size);
st_nir_fixup_varying_slots(st, &nir->outputs);
} else if (nir->stage == MESA_SHADER_FRAGMENT) {
sort_varyings(&nir->inputs);
nir_assign_var_locations(&nir->inputs,
&nir->num_inputs,
- VARYING_SLOT_VAR0,
st_glsl_type_size);
st_nir_fixup_varying_slots(st, &nir->inputs);
nir_assign_var_locations(&nir->outputs,
&nir->num_outputs,
- FRAG_RESULT_DATA0,
st_glsl_type_size);
} else {
unreachable("invalid shader type for tgsi bypass\n");