Module: Mesa Branch: master Commit: 5e31fad8c9c07d984837a07010c6a9dcd2a2aa97 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e31fad8c9c07d984837a07010c6a9dcd2a2aa97
Author: Jason Ekstrand <[email protected]> Date: Wed Sep 2 18:19:35 2020 -0500 clover/nir: Calculate sizes of images and samplers properly Clover uses very specific sizes and alignments for images and samplers to pass various bits of data. We need to add a new size/align helper for inputs which matches the standard CL size/align for most types but also has the right size/align for images and samplers. v2 (Karol): use sizeof(cl_mem) instead of 8 to fix 32 bit runtimes. Reviewed-by: Dave Airlie <[email protected]> Reviewed-by: Karol Herbst <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7069> --- src/gallium/frontends/clover/nir/invocation.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/gallium/frontends/clover/nir/invocation.cpp b/src/gallium/frontends/clover/nir/invocation.cpp index 8528057b593..6e57301a349 100644 --- a/src/gallium/frontends/clover/nir/invocation.cpp +++ b/src/gallium/frontends/clover/nir/invocation.cpp @@ -69,6 +69,20 @@ static void debug_function(void *private_data, *r_log += message; } +static void +clover_arg_size_align(const glsl_type *type, unsigned *size, unsigned *align) +{ + if (type == glsl_type::sampler_type) { + *size = 0; + *align = 1; + } else if (type->is_image()) { + *size = *align = sizeof(cl_mem); + } else { + *size = type->cl_size(); + *align = type->cl_alignment(); + } +} + struct clover_lower_nir_state { std::vector<module::argument> &args; uint32_t global_dims; @@ -298,8 +312,10 @@ module clover::nir::spirv_to_nir(const module &mod, const device &dev, dev.address_bits()); NIR_PASS_V(nir, nir_lower_vars_to_explicit_types, - nir_var_uniform | nir_var_mem_shared | - nir_var_mem_global | nir_var_function_temp, + nir_var_uniform, clover_arg_size_align); + NIR_PASS_V(nir, nir_lower_vars_to_explicit_types, + nir_var_mem_shared | nir_var_mem_global | + nir_var_function_temp, glsl_get_cl_type_size_align); NIR_PASS_V(nir, nir_lower_memcpy); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
