mesa/src/intel/compiler
Neil Roberts 2d5ddbe960 i965: Fix output register sizes when variable ranges are interleaved
In 6f5abf3146 this code was fixed to calculate the maximum size of
an attribute in a seperate pass and then allocate the registers to
that size. However this wasn’t taking into account ranges that overlap
but don’t have the same starting location. For example:

layout(location = 0, component = 0) out float a[4];
layout(location = 2, component = 1) out float b[4];

Previously, if ‘a’ was processed first then it would allocate a
register of size 4 for location 0 and it wouldn’t allocate another
register for location 2 because it would already be covered by the
range of 0. Then if something tries to write to b[2] it would try to
write past the end of the register allocated for ‘a’ and it would hit
an assert.

This patch changes it to scan for any overlapping ranges that start
within each range to calculate the maximum extent and allocate that
instead.

Fixed Piglit’s arb_enhanced_layouts/execution/component-layout/
vs-fs-array-interleave-range.shader_test

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Fixes: 6f5abf3146 "i965: Fix output register sizes when multiple variables
       share a slot."
2018-07-04 10:57:51 +02:00
..
.gitignore
brw_cfg.cpp intel/cfg: Represent divergent control flow paths caused by non-uniform loop execution. 2017-12-07 18:27:05 -08:00
brw_cfg.h intel/compiler: consistently use ifndef guards over pragma once 2017-03-22 16:55:22 +00:00
brw_clip.h i965: Move clip program compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_clip_line.c i965: Move clip program compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_clip_point.c i965: Move clip program compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_clip_tri.c i965: Don't emit MOVs with undefined registers for Gen4 point clipping. 2018-02-28 15:03:51 -08:00
brw_clip_unfilled.c i965: Move clip program compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_clip_util.c i965: Move clip program compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_compile_clip.c i965: Rewrite disassembly annotation code 2017-11-17 12:14:38 -08:00
brw_compile_sf.c i965: Move SF compilation to the compiler 2017-05-26 07:58:01 -07:00
brw_compiler.c intel: activate the gl_BaseVertex lowering 2018-05-02 11:24:46 +02:00
brw_compiler.h anv,intel: Enable nir_opt_large_constants for Vulkan 2018-07-02 12:09:50 -07:00
brw_dead_control_flow.cpp
brw_dead_control_flow.h intel/compiler: consistently use ifndef guards over pragma once 2017-03-22 16:55:22 +00:00
brw_disasm.c i965/fs: Add infrastructure for generating CSEL instructions. 2018-03-08 15:26:26 -08:00
brw_disasm_info.c i965: Move mistakenly placed line 2018-02-05 09:50:56 -08:00
brw_disasm_info.h i965: Stop including brw_cfg.h in brw_disasm_info.h 2017-11-17 21:51:16 -08:00
brw_eu.c intel/eu: Use a struct copy instead of a memcpy 2018-06-05 15:51:01 -07:00
brw_eu.h intel/eu: Return new instruction to caller from brw_fb_WRITE(). 2018-06-28 13:19:38 -07:00
brw_eu_compact.c intel/compiler: Add instruction compaction support on Gen11 2018-02-28 11:15:47 -08:00
brw_eu_defines.h intel/fs: Get rid of MOV_DISPATCH_TO_FLAGS 2018-06-28 13:19:38 -07:00
brw_eu_emit.c intel/eu: Fix pixel interpolator queries for SIMD32. 2018-06-28 13:19:38 -07:00
brw_eu_util.c intel/compiler: whitespace cleanups 2017-03-13 11:16:35 +00:00
brw_eu_validate.c intel/compiler: Add Gen11+ native float type 2018-02-28 11:15:47 -08:00
brw_fs.cpp intel/fs: Build 32-wide FS shaders. 2018-06-28 13:25:21 -07:00
brw_fs.h intel/fs: Extend thread payload layout to SIMD32 2018-06-28 13:19:38 -07:00
brw_fs_bank_conflicts.cpp intel/fs/bank_conflicts: Use posix_memalign() instead of overaligned new to obtain vector storage. 2017-12-21 15:19:59 -08:00
brw_fs_builder.h intel/fs: Fix fs_builder::sample_mask_reg() for 32-wide FS dispatch. 2018-06-28 13:19:38 -07:00
brw_fs_cmod_propagation.cpp i965/fs: Propagate conditional modifiers from not instructions 2018-06-15 17:22:27 -07:00
brw_fs_combine_constants.cpp
brw_fs_copy_propagation.cpp intel/fs: Optimize and simplify the copy propagation dataflow logic. 2018-01-17 11:56:08 -08:00
brw_fs_cse.cpp intel/fs: Replace the CINTERP opcode with a simple MOV 2018-05-29 15:44:50 -07:00
brw_fs_dead_code_eliminate.cpp
brw_fs_generator.cpp intel/fs: Get rid of MOV_DISPATCH_TO_FLAGS 2018-06-28 13:19:38 -07:00
brw_fs_live_variables.cpp intel/fs: Restrict live intervals to the subset possibly reachable from any definition. 2017-12-07 18:27:04 -08:00
brw_fs_live_variables.h intel/fs: Restrict live intervals to the subset possibly reachable from any definition. 2017-12-07 18:27:04 -08:00
brw_fs_lower_conversions.cpp i965/compiler: handle conversion to smaller type in the lowering pass for that 2018-05-05 12:41:02 +02:00
brw_fs_lower_pack.cpp
brw_fs_nir.cpp i965: Fix output register sizes when variable ranges are interleaved 2018-07-04 10:57:51 +02:00
brw_fs_reg_allocate.cpp intel/fs: Take into account amount of data read in spilling cost heuristic. 2017-04-24 11:01:40 -07:00
brw_fs_register_coalesce.cpp
brw_fs_saturate_propagation.cpp i965/fs: Handle negating immediates on MADs when propagating saturates 2017-11-21 10:13:07 -08:00
brw_fs_sel_peephole.cpp i965/fs: Do not move MOVs writing the flag outside of control flow 2017-07-20 16:56:49 -07:00
brw_fs_surface_builder.cpp i965/fs: Add byte scattered read message and fs support 2017-12-06 08:57:18 +01:00
brw_fs_surface_builder.h i965/fs: Add byte scattered read message and fs support 2017-12-06 08:57:18 +01:00
brw_fs_validate.cpp
brw_fs_visitor.cpp intel/fs: Add fields to wm_prog_data for SIMD32 dispatch 2018-06-28 13:19:38 -07:00
brw_inst.h intel/compiler/icl: Clear "null render target" bit in extended message descriptor 2018-03-22 09:56:09 -07:00
brw_interpolation_map.c
brw_ir_allocator.h
brw_ir_fs.h intel/fs: Add explicit last_rt flag to fb writes orthogonal to eot. 2018-05-29 15:44:50 -07:00
brw_ir_vec4.h intel/compiler: Add scheduler deps for instructions that implicitly read g0 2018-04-24 14:31:21 -04:00
brw_nir.c intel/compiler: Silence unused parameter warnings brw_nir.c 2018-07-02 16:17:19 -07:00
brw_nir.h intel/compiler: Silence unused parameter warnings brw_nir.c 2018-07-02 16:17:19 -07:00
brw_nir_analyze_boolean_resolves.c
brw_nir_analyze_ubo_ranges.c intel/compiler: Properly consider UBO loads that cross 32B boundaries. 2018-06-14 14:58:59 -07:00
brw_nir_attribute_workarounds.c i965: Drop support for the legacy SNORM -> Float equation. 2018-01-02 16:51:42 -08:00
brw_nir_lower_cs_intrinsics.c i965/fs: Implement basic SPIR-V subgroup intrinsics 2018-03-07 12:13:47 -08:00
brw_nir_opt_peephole_ffma.c
brw_nir_tcs_workarounds.c nir: Get rid of nir_shader::stage 2017-10-20 12:49:17 -07:00
brw_nir_trig_workarounds.py intel: use a flag instead of setting PYTHONPATH 2017-09-27 09:07:28 -07:00
brw_packed_float.c
brw_predicated_break.cpp
brw_reg.h intel/compiler: fix brw_imm_w for negative 16-bit integers 2018-05-03 11:40:25 +02:00
brw_reg_type.c intel/compiler: Check for unsupported register sizes. 2018-03-16 09:27:16 -07:00
brw_reg_type.h intel/compiler: Add Gen11+ native float type 2018-02-28 11:15:47 -08:00
brw_schedule_instructions.cpp intel/compiler: Add scheduler deps for instructions that implicitly read g0 2018-04-24 14:31:21 -04:00
brw_shader.cpp intel/compiler: Silence unused parameter warnings brw_nir.c 2018-07-02 16:17:19 -07:00
brw_shader.h i965: Add negative_equals methods 2018-03-26 08:50:43 -07:00
brw_vec4.cpp intel/compiler: Silence unused parameter warnings brw_nir.c 2018-07-02 16:17:19 -07:00
brw_vec4.h i965/vec4: Fix null destination register in 3-source instructions 2018-03-26 08:50:44 -07:00
brw_vec4_builder.h intel/compiler: Lower flrp32 on Gen11+ 2018-02-28 11:15:47 -08:00
brw_vec4_cmod_propagation.cpp i965/vec4: Don't cmod propagate from CMP to ADD if the writemask isn't compatible 2018-07-02 19:19:16 -07:00
brw_vec4_copy_propagation.cpp i965: Support copy propagating of untyped atomic surface indexes. 2017-09-26 15:35:14 -07:00
brw_vec4_cse.cpp i965/vec4: Allow CSE on subset VF constant loads 2018-03-08 15:26:26 -08:00
brw_vec4_dead_code_eliminate.cpp i965/vec4/dce: improve track of partial flag register writes 2017-04-14 14:56:09 -07:00
brw_vec4_generator.cpp i965: Add ARB_fragment_shader_interlock support. 2018-06-01 16:36:39 +01:00
brw_vec4_gs_nir.cpp i965/vec4: Delete the system value infastructure 2017-05-09 15:08:07 -07:00
brw_vec4_gs_visitor.cpp intel/compiler: Silence unused parameter warnings brw_nir.c 2018-07-02 16:17:19 -07:00
brw_vec4_gs_visitor.h i965/vec4: Delete the system value infastructure 2017-05-09 15:08:07 -07:00
brw_vec4_live_variables.cpp
brw_vec4_live_variables.h i965/vec4: consider subregister offset in live variables 2017-04-14 14:56:08 -07:00
brw_vec4_nir.cpp i965: Combine {VS,FS}_OPCODE_GET_BUFFER_SIZE opcodes. 2017-12-30 20:30:34 -08:00
brw_vec4_reg_allocate.cpp i965/vec4: Return float from spill_cost_for_type() 2017-08-21 14:45:44 -07:00
brw_vec4_surface_builder.cpp i965/vec4: Fix swizzles on atomic sources. 2017-09-26 15:35:11 -07:00
brw_vec4_surface_builder.h
brw_vec4_tcs.cpp intel/fs: Remove program key argument from generator. 2018-06-28 13:19:38 -07:00
brw_vec4_tcs.h i965/vec4: Delete the system value infastructure 2017-05-09 15:08:07 -07:00
brw_vec4_tes.cpp i965/vec4: Delete the system value infastructure 2017-05-09 15:08:07 -07:00
brw_vec4_tes.h i965/vec4: Delete the system value infastructure 2017-05-09 15:08:07 -07:00
brw_vec4_visitor.cpp compiler: int8/uint8 support 2018-03-14 10:08:42 -04:00
brw_vec4_vs.h i965: Drop support for the legacy SNORM -> Float equation. 2018-01-02 16:51:42 -08:00
brw_vec4_vs_visitor.cpp i965: Drop support for the legacy SNORM -> Float equation. 2018-01-02 16:51:42 -08:00
brw_vue_map.c
brw_wm_iz.cpp intel/fs: Extend thread payload layout to SIMD32 2018-06-28 13:19:38 -07:00
gen6_gs_visitor.cpp i965/gen6/gs: Handle case where a GS doesn't allocate VUE 2018-06-26 08:18:55 +02:00
gen6_gs_visitor.h
meson.build intel/compiler: Use gen_get_device_info() in test_eu_validate 2018-03-16 13:20:21 -07:00
test_eu_compact.cpp intel/ir: Fix invalid type aliasing with undefined behavior in test_eu_compact. 2018-02-27 11:42:39 -08:00
test_eu_validate.cpp intel/compiler: Readd ICL to test_eu_validate.cpp 2018-03-22 09:56:09 -07:00
test_fs_cmod_propagation.cpp i965/fs: Propagate conditional modifiers from compares to adds 2018-03-26 08:50:43 -07:00
test_fs_copy_propagation.cpp
test_fs_saturate_propagation.cpp i965/fs: Check ADD/MAD with immediates in satprop unit test 2017-11-21 10:13:07 -08:00
test_vec4_cmod_propagation.cpp i965/vec4: Don't cmod propagate from CMP to ADD if the writemask isn't compatible 2018-07-02 19:19:16 -07:00
test_vec4_copy_propagation.cpp
test_vec4_register_coalesce.cpp
test_vf_float_conversions.cpp