diff --git a/src/mesa/main/shader_types.h b/src/mesa/main/shader_types.h index b672a50ae76..3668c68a052 100644 --- a/src/mesa/main/shader_types.h +++ b/src/mesa/main/shader_types.h @@ -508,6 +508,9 @@ struct gl_program /** whether to skip VARYING_SLOT_PSIZ in st_translate_stream_output_info() */ bool skip_pointsize_xfb; + /** Determine whether ::sh or ::arb (below) is valid. */ + bool is_arb_asm; + /** A bitfield indicating which vertex shader inputs consume two slots * * This is used for mapping from single-slot input locations in the GL API diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index fe8c7674db9..78cdb7973af 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -197,6 +197,7 @@ _mesa_init_gl_program(struct gl_program *prog, mesa_shader_stage stage, prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; prog->info.stage = stage; prog->info.use_legacy_math_rules = is_arb_asm; + prog->is_arb_asm = is_arb_asm; /* Uniforms that lack an initializer in the shader code have an initial * value of zero. This includes sampler uniforms. @@ -260,8 +261,10 @@ _mesa_delete_program(struct gl_context *ctx, struct gl_program *prog) } ralloc_free(prog->nir); - ralloc_free(prog->sh.BindlessSamplers); - ralloc_free(prog->sh.BindlessImages); + if (!prog->is_arb_asm) { + ralloc_free(prog->sh.BindlessSamplers); + ralloc_free(prog->sh.BindlessImages); + } ralloc_free(prog->driver_cache_blob); ralloc_free(prog); } @@ -315,7 +318,8 @@ _mesa_reference_program_(struct gl_context *ctx, if (p_atomic_dec_zero(&oldProg->RefCount)) { assert(ctx); - _mesa_reference_shader_program_data(&oldProg->sh.data, NULL); + if (!oldProg->is_arb_asm) + _mesa_reference_shader_program_data(&oldProg->sh.data, NULL); _mesa_delete_program(ctx, oldProg); } @@ -374,6 +378,7 @@ gl_external_samplers(const struct gl_program *prog) GLbitfield external_samplers = 0; GLbitfield mask = prog->SamplersUsed; + assert(!prog->is_arb_asm); while (mask) { int idx = u_bit_scan(&mask); if (prog->sh.SamplerTargets[idx] == TEXTURE_EXTERNAL_INDEX)