X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Ffrontends%2Fclover%2Fnir%2Finvocation.cpp;h=1faf8a6eb218bdf579429dabd3ab7d8036f1a753;hb=918e444f04552c74e805885caa0db66352fac2fd;hp=8b52379314c0e9142d36de63c5c4fb7e0259c16f;hpb=e2e89fb137c220e035403d8dc6d00d6c44a4f675;p=mesa.git diff --git a/src/gallium/frontends/clover/nir/invocation.cpp b/src/gallium/frontends/clover/nir/invocation.cpp index 8b52379314c..1faf8a6eb21 100644 --- a/src/gallium/frontends/clover/nir/invocation.cpp +++ b/src/gallium/frontends/clover/nir/invocation.cpp @@ -63,6 +63,17 @@ module clover::nir::spirv_to_nir(const module &mod, const device &dev, { struct spirv_to_nir_options spirv_options = {}; spirv_options.environment = NIR_SPIRV_OPENCL; + if (dev.address_bits() == 32u) { + spirv_options.shared_addr_format = nir_address_format_32bit_global; + spirv_options.global_addr_format = nir_address_format_32bit_global; + spirv_options.temp_addr_format = nir_address_format_32bit_global; + spirv_options.ubo_addr_format = nir_address_format_32bit_global; + } else { + spirv_options.shared_addr_format = nir_address_format_64bit_global; + spirv_options.global_addr_format = nir_address_format_64bit_global; + spirv_options.temp_addr_format = nir_address_format_64bit_global; + spirv_options.ubo_addr_format = nir_address_format_32bit_index_offset; + } spirv_options.caps.address = true; spirv_options.caps.float64 = true; spirv_options.caps.int8 = true; @@ -101,7 +112,7 @@ module clover::nir::spirv_to_nir(const module &mod, const device &dev, // Calculate input offsets. unsigned offset = 0; - nir_foreach_variable_safe(var, &nir->inputs) { + nir_foreach_shader_in_variable_safe(var, nir) { offset = align(offset, glsl_get_cl_alignment(var->type)); var->data.driver_location = offset; offset += glsl_get_cl_size(var->type); @@ -134,18 +145,23 @@ module clover::nir::spirv_to_nir(const module &mod, const device &dev, NIR_PASS_V(nir, nir_lower_vars_to_ssa); NIR_PASS_V(nir, nir_opt_dce); - NIR_PASS_V(nir, nir_lower_explicit_io, nir_var_shader_in, nir_address_format_32bit_offset); + NIR_PASS_V(nir, nir_lower_vars_to_explicit_types, nir_var_mem_shared, + glsl_get_cl_type_size_align); + + /* use offsets for shader_in and shared memory */ nir_variable_mode modes = (nir_variable_mode)( - nir_var_mem_global | + nir_var_shader_in | nir_var_mem_shared); + NIR_PASS_V(nir, nir_lower_explicit_io, modes, nir_address_format_32bit_offset); + + /* use global format for global memory */ nir_address_format format = nir->info.cs.ptr_size == 64 ? nir_address_format_64bit_global : nir_address_format_32bit_global; - NIR_PASS_V(nir, nir_lower_explicit_io, modes, format); + NIR_PASS_V(nir, nir_lower_explicit_io, nir_var_mem_global, format); NIR_PASS_V(nir, nir_lower_system_values); if (compiler_options->lower_int64_options) - NIR_PASS_V(nir, nir_lower_int64, - compiler_options->lower_int64_options); + NIR_PASS_V(nir, nir_lower_int64); NIR_PASS_V(nir, nir_opt_dce);