i965: Call spirv_to_nir() instead of glsl_to_nir() for SPIR-V shaders

This is the main fork of the shader compilation code-path, where a NIR
shader is obtained by calling spirv_to_nir() or glsl_to_nir(),
depending on its nature..

v2: Use 'spirv_data' member from gl_linked_shader to know which method
   to call. (Timothy Arceri)

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Eduardo Lima Mitev
2017-10-10 14:55:56 +02:00
committed by Alejandro Piñeiro
parent abb6d0797c
commit e7d97aa75d
+8 -2
View File
@@ -31,6 +31,7 @@
#include <pthread.h>
#include "main/imports.h"
#include "main/glspirv.h"
#include "program/prog_parameter.h"
#include "program/prog_print.h"
#include "program/prog_to_nir.h"
@@ -74,9 +75,14 @@ brw_create_nir(struct brw_context *brw,
ctx->Const.ShaderCompilerOptions[stage].NirOptions;
nir_shader *nir;
/* First, lower the GLSL IR or Mesa IR to NIR */
/* First, lower the GLSL/Mesa IR or SPIR-V to NIR */
if (shader_prog) {
nir = glsl_to_nir(shader_prog, stage, options);
if (shader_prog->_LinkedShaders[stage]->spirv_data)
nir = _mesa_spirv_to_nir(ctx, shader_prog, stage, options);
else
nir = glsl_to_nir(shader_prog, stage, options);
assert (nir);
nir_remove_dead_variables(nir, nir_var_shader_in | nir_var_shader_out);
nir_lower_returns(nir);
nir_validate_shader(nir);