vk/compiler: mark inputs/outputs as read/written

This doesn't handle inputs and outputs larger than a vec4, but we plan
to add a varyiing splitting/packing pass to handle those anyways.
This commit is contained in:
Connor Abbott 2015-07-08 21:47:43 -04:00
parent 8640dc12dc
commit a841e2c747

View file

@ -950,6 +950,23 @@ anv_compile_shader_glsl(struct anv_compiler *compiler,
program->NumShaders++;
}
static void
setup_nir_io(struct gl_program *prog,
nir_shader *shader)
{
foreach_list_typed(nir_variable, var, node, &shader->inputs) {
prog->InputsRead |= BITFIELD64_BIT(var->data.location);
}
foreach_list_typed(nir_variable, var, node, &shader->outputs) {
/* XXX glslang gives us this but we never use it */
if (!strcmp(var->name, "gl_PerVertex"))
continue;
prog->OutputsWritten |= BITFIELD64_BIT(var->data.location);
}
}
static void
anv_compile_shader_spirv(struct anv_compiler *compiler,
struct gl_shader_program *program,
@ -982,6 +999,8 @@ anv_compile_shader_spirv(struct anv_compiler *compiler,
compiler->screen->devinfo,
NULL, mesa_shader->Stage);
setup_nir_io(mesa_shader->Program, mesa_shader->Program->nir);
fail_if(mesa_shader->Program->nir == NULL,
"failed to translate SPIR-V to NIR\n");