glsl: use nir linker to link atomics

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
This commit is contained in:
Timothy Arceri
2019-12-23 11:37:57 +11:00
parent 8f2cab7767
commit a853de0c95
3 changed files with 15 additions and 3 deletions
+5 -2
View File
@@ -4537,8 +4537,11 @@ link_and_validate_uniforms(struct gl_context *ctx,
check_resources(ctx, prog);
check_subroutine_resources(prog);
check_image_resources(ctx, prog);
link_assign_atomic_counter_resources(ctx, prog);
link_check_atomic_counter_resources(ctx, prog);
if (!ctx->Const.UseNIRGLSLLinker) {
link_assign_atomic_counter_resources(ctx, prog);
link_check_atomic_counter_resources(ctx, prog);
}
}
static bool
+5
View File
@@ -765,6 +765,11 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].PositionAlwaysInvariant = options->vs_position_always_invariant;
enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
PIPE_SHADER_CAP_PREFERRED_IR);
ctx->Const.UseNIRGLSLLinker = preferred_ir == PIPE_SHADER_IR_NIR;
if (ctx->Const.GLSLVersion < 400) {
for (i = 0; i < MESA_SHADER_STAGES; i++)
ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler = true;
+5 -1
View File
@@ -736,8 +736,12 @@ st_link_nir(struct gl_context *ctx,
if (num_shaders == 1)
st_nir_opts(linked_shader[0]->Program->nir);
if (!shader_program->data->spirv)
if (!shader_program->data->spirv) {
if (!gl_nir_link_glsl(ctx, shader_program))
return GL_FALSE;
nir_build_program_resource_list(ctx, shader_program, false);
}
for (unsigned i = 0; i < num_shaders; i++) {
struct gl_linked_shader *shader = linked_shader[i];