microsoft/clc: Stop heap-allocating tiny fixed-size transparent structs

The caller can allocate these however they want. They don't need
independent allocations. Removes some unnecessary failure handling.

Acked-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10322>
This commit is contained in:
Jesse Natalie
2021-04-19 06:31:05 -07:00
committed by Marge Bot
parent 27467700e9
commit c3666eec7e
3 changed files with 66 additions and 85 deletions
+20 -12
View File
@@ -803,12 +803,16 @@ ComputeTest::compile(const std::vector<const char *> &sources,
for (unsigned i = 0; i < sources.size(); i++) {
args.source.value = sources[i];
auto obj = clc_compile(&args, &logger);
if (!obj)
clc_object spirv{};
if (!clc_compile(&args, &logger, &spirv))
throw runtime_error("failed to compile object!");
Shader shader;
shader.obj = std::shared_ptr<struct clc_object>(obj, clc_free_object);
shader.obj = std::shared_ptr<clc_object>(new clc_object(spirv), [](clc_object *spirv)
{
clc_free_object(spirv);
delete spirv;
});
shaders.push_back(shader);
}
@@ -830,13 +834,16 @@ ComputeTest::link(const std::vector<Shader> &sources,
link_args.in_objs = objs.data();
link_args.num_in_objs = (unsigned)objs.size();
link_args.create_library = create_library;
struct clc_object *obj = clc_link(&link_args,
&logger);
if (!obj)
clc_object spirv{};
if (!clc_link(&link_args, &logger, &spirv))
throw runtime_error("failed to link objects!");
ComputeTest::Shader shader;
shader.obj = std::shared_ptr<struct clc_object>(obj, clc_free_object);
shader.obj = std::shared_ptr<clc_object>(new clc_object(spirv), [](clc_object *spirv)
{
clc_free_object(spirv);
delete spirv;
});
if (!link_args.create_library)
configure(shader, NULL);
@@ -847,13 +854,14 @@ void
ComputeTest::configure(Shader &shader,
const struct clc_runtime_kernel_conf *conf)
{
struct clc_dxil_object *dxil;
dxil = clc_to_dxil(compiler_ctx, shader.obj.get(), "main_test", conf, &logger);
if (!dxil)
shader.dxil = std::shared_ptr<clc_dxil_object>(new clc_dxil_object{}, [](clc_dxil_object *dxil)
{
clc_free_dxil_object(dxil);
delete dxil;
});
if (!clc_to_dxil(compiler_ctx, shader.obj.get(), "main_test", conf, &logger, shader.dxil.get()))
throw runtime_error("failed to compile kernel!");
shader.dxil = std::shared_ptr<struct clc_dxil_object>(dxil, clc_free_dxil_object);
}
void