summaryrefslogtreecommitdiffstats
path: root/src/compiler/spirv
diff options
context:
space:
mode:
authorNeil Roberts <[email protected]>2019-01-24 14:52:37 +0100
committerAlejandro Piñeiro <[email protected]>2019-01-28 11:42:46 +0100
commit75b3719c4f01595aa339568edd39f0f3b1b53aa3 (patch)
tree6c31cac3a3971cdb54046196ad29435905fcce48 /src/compiler/spirv
parent5c797f73548e44233c8c748e3bda46bbc294b277 (diff)
spirv: Don't use special semantics when counting vertex attribute size
Under Vulkan, the double vertex attributes take up the same size regardless of whether they are vertex inputs or any other stage interface. Under OpenGL (ARB_gl_spirv), from GLSL 4.60 spec, section 4.3.9 Interface Blocks: "It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader. These uses are reserved for future use." So we also don't need to check if it is an vertex input or not, and use false in any case. v2: (changes made by Alejandro Piñeiro) * Update required after "spirv: Handle location decorations on block interface members" own updates (original patch was sent several months ago) * After Neil suggesting it, confirm that this change can be also done for OpenGL (ARB_gl_spirv). Expand commit message. v3: update after changing name of main method on a previous patch Signed-off-by: Neil Roberts <[email protected]> Signed-off-by: Alejandro Piñeiro <[email protected]> Reviewed-by: Tapani Pälli <[email protected]>
Diffstat (limited to 'src/compiler/spirv')
-rw-r--r--src/compiler/spirv/vtn_variables.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 91b24241fd3..ecdfd0c735f 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -1912,8 +1912,7 @@ is_per_vertex_inout(const struct vtn_variable *var, gl_shader_stage stage)
}
static void
-assign_missing_member_locations(struct vtn_variable *var,
- bool is_vertex_input)
+assign_missing_member_locations(struct vtn_variable *var)
{
unsigned length =
glsl_get_length(glsl_without_array(var->type->type));
@@ -1950,7 +1949,8 @@ assign_missing_member_locations(struct vtn_variable *var,
glsl_get_struct_field(glsl_without_array(var->type->type), i);
location +=
- glsl_count_attribute_slots(member_type, is_vertex_input);
+ glsl_count_attribute_slots(member_type,
+ false /* is_gl_vertex_input */);
}
}
@@ -2181,9 +2181,7 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val,
if ((var->mode == vtn_variable_mode_input ||
var->mode == vtn_variable_mode_output) &&
var->var->members) {
- bool is_vertex_input = (b->shader->info.stage == MESA_SHADER_VERTEX &&
- var->mode == vtn_variable_mode_input);
- assign_missing_member_locations(var, is_vertex_input);
+ assign_missing_member_locations(var);
}
if (var->mode == vtn_variable_mode_uniform) {