nir: Don't replace the nir_shader when NIR_TEST_SERIALIZE=1
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108957 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
@@ -2920,7 +2920,7 @@ nir_variable *nir_variable_clone(const nir_variable *c, nir_shader *shader);
|
|||||||
|
|
||||||
void nir_shader_replace(nir_shader *dest, nir_shader *src);
|
void nir_shader_replace(nir_shader *dest, nir_shader *src);
|
||||||
|
|
||||||
nir_shader *nir_shader_serialize_deserialize(void *mem_ctx, nir_shader *s);
|
void nir_shader_serialize_deserialize(nir_shader *s);
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
void nir_validate_shader(nir_shader *shader, const char *when);
|
void nir_validate_shader(nir_shader *shader, const char *when);
|
||||||
@@ -2995,8 +2995,7 @@ static inline bool should_print_nir(void) { return false; }
|
|||||||
nir_shader_replace(nir, clone); \
|
nir_shader_replace(nir, clone); \
|
||||||
} \
|
} \
|
||||||
if (should_serialize_deserialize_nir()) { \
|
if (should_serialize_deserialize_nir()) { \
|
||||||
void *mem_ctx = ralloc_parent(nir); \
|
nir_shader_serialize_deserialize(nir); \
|
||||||
nir = nir_shader_serialize_deserialize(mem_ctx, nir); \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@@ -1202,21 +1202,28 @@ nir_deserialize(void *mem_ctx,
|
|||||||
return ctx.nir;
|
return ctx.nir;
|
||||||
}
|
}
|
||||||
|
|
||||||
nir_shader *
|
void
|
||||||
nir_shader_serialize_deserialize(void *mem_ctx, nir_shader *s)
|
nir_shader_serialize_deserialize(nir_shader *shader)
|
||||||
{
|
{
|
||||||
const struct nir_shader_compiler_options *options = s->options;
|
const struct nir_shader_compiler_options *options = shader->options;
|
||||||
|
|
||||||
struct blob writer;
|
struct blob writer;
|
||||||
blob_init(&writer);
|
blob_init(&writer);
|
||||||
nir_serialize(&writer, s);
|
nir_serialize(&writer, shader);
|
||||||
ralloc_free(s);
|
|
||||||
|
/* Delete all of dest's ralloc children but leave dest alone */
|
||||||
|
void *dead_ctx = ralloc_context(NULL);
|
||||||
|
ralloc_adopt(dead_ctx, shader);
|
||||||
|
ralloc_free(dead_ctx);
|
||||||
|
|
||||||
|
dead_ctx = ralloc_context(NULL);
|
||||||
|
|
||||||
struct blob_reader reader;
|
struct blob_reader reader;
|
||||||
blob_reader_init(&reader, writer.data, writer.size);
|
blob_reader_init(&reader, writer.data, writer.size);
|
||||||
nir_shader *ns = nir_deserialize(mem_ctx, options, &reader);
|
nir_shader *copy = nir_deserialize(dead_ctx, options, &reader);
|
||||||
|
|
||||||
blob_finish(&writer);
|
blob_finish(&writer);
|
||||||
|
|
||||||
return ns;
|
nir_shader_replace(shader, copy);
|
||||||
|
ralloc_free(dead_ctx);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user