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

Reply via email to