From 2b3fc26da8bed1f70f6631a3fc6c6cd43fe2acc2 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 18 May 2021 16:04:47 -0700 Subject: [PATCH] i915g: Switch to using nir-to-tgsi. This fixes ~10% of the GLES2 failures thanks to having a better compiler, though in some cases we get some new compile fails due to instr count or uniform count. We still have to do NIR-to-TGSI because the NIR gallivm draw path isn't ready for non-native-integer NIR code, and st/mesa treats native-integer as a screen property instead of a stage property. Other than the noted regressions in the xfails, for dEQP-GLES2.functional.uniform_api.random.74: compile fail changes reasons triggering an aassertion instead of drawing magenta. Reviewed-by: Adam Jackson Part-of: --- .../drivers/i915/ci/deqp-i915-g33-fails.txt | 151 +----------------- .../drivers/i915/ci/piglit-i915-g33-fails.txt | 48 +++--- src/gallium/drivers/i915/ci/traces-i915.yml | 21 +-- src/gallium/drivers/i915/i915_screen.c | 104 +++++++++++- src/gallium/drivers/i915/i915_state.c | 28 +++- src/gallium/drivers/i915/meson.build | 1 + 6 files changed, 177 insertions(+), 176 deletions(-) diff --git a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt index 411a5c9fbe5..761da0e003d 100644 --- a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt +++ b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt @@ -547,21 +547,17 @@ dEQP-GLES2.functional.rasterization.primitives.line_loop_wide,Fail dEQP-GLES2.functional.rasterization.primitives.line_strip_wide,Fail dEQP-GLES2.functional.rasterization.primitives.lines_wide,Fail dEQP-GLES2.functional.rasterization.primitives.points,Fail -dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_fragment,Fail dEQP-GLES2.functional.shaders.builtin_variable.frontfacing,Fail dEQP-GLES2.functional.shaders.discard.dynamic_loop_always,Fail dEQP-GLES2.functional.shaders.discard.dynamic_loop_dynamic,Fail -dEQP-GLES2.functional.shaders.discard.dynamic_loop_never,Fail dEQP-GLES2.functional.shaders.discard.dynamic_loop_texture,Fail dEQP-GLES2.functional.shaders.discard.dynamic_loop_uniform,Fail dEQP-GLES2.functional.shaders.discard.function_static_loop_always,Fail dEQP-GLES2.functional.shaders.discard.function_static_loop_dynamic,Fail -dEQP-GLES2.functional.shaders.discard.function_static_loop_never,Fail dEQP-GLES2.functional.shaders.discard.function_static_loop_texture,Fail dEQP-GLES2.functional.shaders.discard.function_static_loop_uniform,Fail dEQP-GLES2.functional.shaders.discard.static_loop_always,Fail dEQP-GLES2.functional.shaders.discard.static_loop_dynamic,Fail -dEQP-GLES2.functional.shaders.discard.static_loop_never,Fail dEQP-GLES2.functional.shaders.discard.static_loop_texture,Fail dEQP-GLES2.functional.shaders.discard.static_loop_uniform,Fail dEQP-GLES2.functional.shaders.functions.control_flow.mixed_return_break_continue_fragment,Fail @@ -611,7 +607,6 @@ dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_static_write_static dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_static_loop_read_fragment,Fail -dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_static_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.float_dynamic_loop_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.float_dynamic_loop_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.float_dynamic_loop_write_static_loop_read_fragment,Fail @@ -628,7 +623,6 @@ dEQP-GLES2.functional.shaders.indexing.tmp_array.float_static_write_static_loop_ dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_static_loop_read_fragment,Fail -dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_static_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_dynamic_loop_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_dynamic_loop_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_dynamic_loop_write_static_loop_read_fragment,Fail @@ -645,7 +639,6 @@ dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_static_write_static_loop_r dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_static_loop_read_fragment,Fail -dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_static_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_loop_write_static_loop_read_fragment,Fail @@ -662,7 +655,6 @@ dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_static_write_static_loop_r dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_static_loop_read_fragment,Fail -dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_static_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_loop_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_dynamic_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_loop_write_static_loop_read_fragment,Fail @@ -781,14 +773,12 @@ dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscri dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscript_write_static_subscript_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_subscript_write_dynamic_loop_subscript_read_fragment,Fail dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_subscript_write_static_loop_subscript_read_fragment,Fail -dEQP-GLES2.functional.shaders.loops.custom.continue_in_fragment_for_loop,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.101_iterations_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.compound_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.infinite_with_conditional_break_fragment,Fail @@ -797,13 +787,11 @@ dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.nested_fragment dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.nested_sequence_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.nested_tricky_dataflow_2_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.select_iteration_count_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.sequence_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.sequence_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.single_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.vector_counter_fragment,Fail @@ -819,7 +807,6 @@ dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.conditional_body dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.infinite_with_conditional_break_fragment,Fail @@ -828,7 +815,6 @@ dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.nested_fragment, dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.nested_sequence_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.nested_tricky_dataflow_2_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.select_iteration_count_fragment,Fail @@ -850,7 +836,6 @@ dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_body dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.infinite_with_conditional_break_fragment,Fail @@ -859,7 +844,6 @@ dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_fragment, dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_sequence_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.nested_tricky_dataflow_2_fragment,Fail -dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.do_while_uniform_iterations.select_iteration_count_fragment,Fail @@ -881,7 +865,6 @@ dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_body_fra dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_constant_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.infinite_with_conditional_break_fragment,Fail @@ -891,7 +874,6 @@ dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_sequence_frag dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_constant_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_constant_iterations.select_iteration_count_fragment,Fail @@ -913,7 +895,6 @@ dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.conditional_body_frag dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.infinite_with_conditional_break_fragment,Fail @@ -923,7 +904,6 @@ dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.nested_sequence_fragm dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.select_iteration_count_fragment,Fail @@ -931,7 +911,6 @@ dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.sequence_fragment,Fai dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.sequence_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.single_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.unconditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.101_iterations_fragment,Fail @@ -946,7 +925,6 @@ dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.conditional_body_frag dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.infinite_with_conditional_break_fragment,Fail @@ -956,7 +934,6 @@ dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.nested_sequence_fragm dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.select_iteration_count_fragment,Fail @@ -964,7 +941,6 @@ dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.sequence_fragment,Fai dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.sequence_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.single_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.unconditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.for_uniform_iterations.vector_counter_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.101_iterations_fragment,Fail @@ -979,7 +955,6 @@ dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_body_f dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_constant_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.infinite_with_conditional_break_fragment,Fail @@ -989,7 +964,6 @@ dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_sequence_fr dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_constant_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.select_iteration_count_fragment,Fail @@ -997,7 +971,6 @@ dEQP-GLES2.functional.shaders.loops.while_constant_iterations.sequence_fragment, dEQP-GLES2.functional.shaders.loops.while_constant_iterations.sequence_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.single_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_constant_iterations.unconditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_constant_iterations.vector_counter_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.101_iterations_fragment,Fail @@ -1012,7 +985,6 @@ dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.conditional_body_fr dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.infinite_with_conditional_break_fragment,Fail @@ -1022,7 +994,6 @@ dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_sequence_fra dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.select_iteration_count_fragment,Fail @@ -1030,7 +1001,6 @@ dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.sequence_fragment,F dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.sequence_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.single_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.unconditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.101_iterations_fragment,Fail @@ -1045,7 +1015,6 @@ dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_body_fr dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.conditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.double_continue_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.empty_body_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.function_call_inout_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.function_call_return_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.infinite_with_conditional_break_fragment,Fail @@ -1055,7 +1024,6 @@ dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_sequence_fra dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_tricky_dataflow_1_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.nested_tricky_dataflow_2_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.no_iterations_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.only_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.post_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.pre_increment_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.select_iteration_count_fragment,Fail @@ -1063,17 +1031,8 @@ dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.sequence_fragment,F dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.sequence_statement_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.single_iteration_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.single_statement_fragment,Fail -dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.unconditional_break_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.unconditional_continue_fragment,Fail dEQP-GLES2.functional.shaders.loops.while_uniform_iterations.vector_counter_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.highp_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.highp_vec2_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.highp_vec3_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.highp_vec4_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.mediump_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.mediump_vec2_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.mediump_vec3_fragment,Fail -dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.atan2.mediump_vec4_fragment,Fail dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.cos.highp_float_fragment,Fail dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.cos.highp_vec2_fragment,Fail dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.cos.highp_vec3_fragment,Fail @@ -1102,16 +1061,7 @@ dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.tan.mediump_float_ dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.tan.mediump_vec2_fragment,Fail dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.tan.mediump_vec3_fragment,Fail dEQP-GLES2.functional.shaders.operator.angle_and_trigonometry.tan.mediump_vec4_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.highp_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.highp_vec3_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.lowp_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.lowp_vec3_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.mediump_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.common_functions.sign.mediump_vec3_fragment,Fail -dEQP-GLES2.functional.shaders.operator.geometric.normalize.highp_float_fragment,Fail -dEQP-GLES2.functional.shaders.operator.geometric.normalize.mediump_float_fragment,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.22,Fail -dEQP-GLES2.functional.shaders.random.all_features.fragment.28,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.32,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.34,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.38,Fail @@ -1120,11 +1070,9 @@ dEQP-GLES2.functional.shaders.random.all_features.fragment.49,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.5,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.53,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.63,Fail -dEQP-GLES2.functional.shaders.random.all_features.fragment.73,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.78,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.80,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.86,Fail -dEQP-GLES2.functional.shaders.random.all_features.fragment.88,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.89,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.93,Fail dEQP-GLES2.functional.shaders.random.all_features.fragment.95,Fail @@ -1157,20 +1105,15 @@ dEQP-GLES2.functional.shaders.random.trigonometric.fragment.63,Fail dEQP-GLES2.functional.shaders.random.trigonometric.fragment.7,Fail dEQP-GLES2.functional.shaders.random.trigonometric.fragment.81,Fail dEQP-GLES2.functional.shaders.random.trigonometric.fragment.92,Fail -dEQP-GLES2.functional.shaders.return.return_in_dynamic_loop_always_fragment,Fail dEQP-GLES2.functional.shaders.return.return_in_dynamic_loop_dynamic_fragment,Fail dEQP-GLES2.functional.shaders.return.return_in_dynamic_loop_never_fragment,Fail dEQP-GLES2.functional.shaders.return.return_in_static_loop_dynamic_fragment,Fail dEQP-GLES2.functional.shaders.return.return_in_static_loop_never_fragment,Fail -dEQP-GLES2.functional.shaders.scoping.valid.for_init_statement_variable_hides_global_variable_fragment,Fail -dEQP-GLES2.functional.shaders.scoping.valid.for_init_statement_variable_hides_local_variable_fragment,Fail -dEQP-GLES2.functional.shaders.scoping.valid.while_condition_variable_hides_global_variable_fragment,Fail -dEQP-GLES2.functional.shaders.scoping.valid.while_condition_variable_hides_local_variable_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.dynamic_loop_assignment_fragment,Fail -dEQP-GLES2.functional.shaders.struct.local.dynamic_loop_nested_struct_array_fragment,Crash +dEQP-GLES2.functional.shaders.struct.local.dynamic_loop_nested_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.dynamic_loop_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.loop_assignment_fragment,Fail -dEQP-GLES2.functional.shaders.struct.local.loop_nested_struct_array_fragment,Crash +dEQP-GLES2.functional.shaders.struct.local.loop_nested_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.loop_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.nested_dynamic_loop_assignment_fragment,Fail dEQP-GLES2.functional.shaders.struct.local.nested_loop_assignment_fragment,Fail @@ -1180,6 +1123,11 @@ dEQP-GLES2.functional.shaders.struct.uniform.dynamic_loop_struct_array_fragment, dEQP-GLES2.functional.shaders.struct.uniform.loop_nested_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.uniform.loop_struct_array_fragment,Fail dEQP-GLES2.functional.shaders.struct.uniform.nested_struct_array_dynamic_index_fragment,Fail + +# Need to port the DP3 trick for all_equal from st_glsl_to_tgsi. +dEQP-GLES2.functional.shaders.struct.uniform.equal_fragment,Fail +dEQP-GLES2.functional.shaders.struct.uniform.not_equal_fragment,Fail + dEQP-GLES2.functional.shaders.texture_functions.vertex.texture2dlod,Fail dEQP-GLES2.functional.shaders.texture_functions.vertex.texturecube,Fail dEQP-GLES2.functional.shaders.texture_functions.vertex.texturecubelod,Fail @@ -1284,128 +1232,45 @@ dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_clamp,Fail dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_mirror,Fail dEQP-GLES2.functional.texture.vertex.cube.wrap.repeat_repeat,Fail dEQP-GLES2.functional.texture.wrap.clamp_clamp_nearest_npot_etc1,Fail -dEQP-GLES2.functional.uniform_api.random.0,Fail dEQP-GLES2.functional.uniform_api.random.13,Fail -dEQP-GLES2.functional.uniform_api.random.17,Fail dEQP-GLES2.functional.uniform_api.random.20,Fail dEQP-GLES2.functional.uniform_api.random.21,Fail dEQP-GLES2.functional.uniform_api.random.24,Fail -dEQP-GLES2.functional.uniform_api.random.33,Fail -dEQP-GLES2.functional.uniform_api.random.47,Fail -dEQP-GLES2.functional.uniform_api.random.48,Fail dEQP-GLES2.functional.uniform_api.random.54,Fail -dEQP-GLES2.functional.uniform_api.random.55,Fail dEQP-GLES2.functional.uniform_api.random.71,Fail -dEQP-GLES2.functional.uniform_api.random.74,Fail +dEQP-GLES2.functional.uniform_api.random.74,Crash dEQP-GLES2.functional.uniform_api.random.80,Fail dEQP-GLES2.functional.uniform_api.random.81,Fail -dEQP-GLES2.functional.uniform_api.random.94,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.bool_bvec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.int_ivec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.mat4_mat2_both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.mat4_mat2_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.sampler2D_samplerCube_both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.array_in_struct.sampler2D_samplerCube_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.mat3_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.mat3_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.mat4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic.mat4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.mat4_both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.mat4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.sampler2D_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.sampler2D_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_array.vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.sampler2D_samplerCube_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.sampler2D_samplerCube_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.mat4_mat2_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.basic_struct.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic.both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic.fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic_array.both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_basic_array.fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_nested_structs_arrays.both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.multiple_nested_structs_arrays.fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.bool_bvec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.int_ivec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.nested_structs_arrays.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.mat4_mat2_both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.sampler2D_samplerCube_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_pointer.render.struct_in_array.sampler2D_samplerCube_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.bool_bvec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.int_ivec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.sampler2D_samplerCube_both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.array_in_struct.sampler2D_samplerCube_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.sampler2D_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.sampler2D_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_array.vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.sampler2D_samplerCube_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.basic_struct.sampler2D_samplerCube_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.multiple_basic_array.both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.multiple_basic_array.fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.multiple_nested_structs_arrays.both,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.multiple_nested_structs_arrays.fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.bool_bvec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.nested_structs_arrays.int_ivec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.float_vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_both,Fail -dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.bool_bvec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.float_vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.int_ivec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.mat4_mat2_both,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.array_in_struct.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic.mat3_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic.mat3_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic.mat4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic.mat4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.mat4_both,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.mat4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.sampler2D_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.sampler2D_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_array.vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_struct.mat4_mat2_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.basic_struct.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_basic.both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_basic.fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_basic_array.both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_basic_array.fragment,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_nested_structs_arrays.both,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.multiple_nested_structs_arrays.fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.bool_bvec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.bool_bvec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.float_vec4_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.int_ivec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.int_ivec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.nested_structs_arrays.mat4_mat2_fragment,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.struct_in_array.float_vec4_both,Fail -dEQP-GLES2.functional.uniform_api.value.initial.render.struct_in_array.float_vec4_fragment,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.struct_in_array.mat4_mat2_both,Fail dEQP-GLES2.functional.uniform_api.value.initial.render.struct_in_array.mat4_mat2_fragment,Fail dEQP-GLES2.functional.texture.vertex.cube.filtering.nearest_mipmap_nearest_nearest_mirror,Fail diff --git a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt index ac7b35c9e00..1c42c0ba0a2 100644 --- a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt +++ b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt @@ -131,6 +131,13 @@ spec@!opengl 1.0@gl-1.0-ortho-pos,Crash spec@!opengl 1.0@gl-1.0-rendermode-feedback,Crash spec@!opengl 1.0@gl-1.0-scissor-offscreen,Fail spec@!opengl 1.0@gl-1.0-swapbuffers-behavior,Fail + +# mesa/st draw path doesn't do nir-to-tgsi, so gallivm NIR fails +# to handle our vector-y, non-native-integers shaders. We could extend +# gallivm NIR to handle it, or disentangle per-stage native integers on the +# frontend. +spec@!opengl 1.0@rasterpos,Crash + spec@!opengl 1.1@clipflat,Fail spec@!opengl 1.1@clipflat@glBegin/End(GL_POLYGON)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center bottom PV: FIRST,Fail spec@!opengl 1.1@clipflat@glBegin/End(GL_POLYGON)- glFrontFace(GL_CCW)- glPolygonMode(GL_FILL)- quadrant: center top PV: FIRST,Fail @@ -417,7 +424,7 @@ spec@!opengl 1.1@linestipple@Factor 3x,Fail spec@!opengl 1.1@linestipple@Line loop,Fail spec@!opengl 1.1@linestipple@Line strip,Fail spec@!opengl 1.1@longprim,Crash -spec@!opengl 1.1@point-line-no-cull,Fail +spec@!opengl 1.1@point-line-no-cull,Crash spec@!opengl 1.1@polygon-mode-offset,Fail spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on bottom edge,Fail spec@!opengl 1.1@polygon-mode-offset@config 0: Expected white pixel on left edge,Fail @@ -492,6 +499,12 @@ spec@!opengl 1.2@texwrap 3d proj bordercolor,Fail spec@!opengl 1.2@texwrap 3d proj bordercolor@GL_RGBA8- projected- border color only,Fail spec@!opengl 1.4@copy-pixels,Fail spec@!opengl 1.4@gl-1.4-polygon-offset,Fail + +# 1D textures are treated as 2D, but we don't force +# the Y clamp to repeat or edge, so you get interpolation, and we get +# different undefined values in the y coordinate in the new shader. +spec@!opengl 1.4@gl-1.4-tex1d-2dborder,Fail + spec@!opengl 1.4@tex-miplevel-selection,Fail spec@!opengl 1.4@tex-miplevel-selection-lod,Fail spec@!opengl 1.4@tex-miplevel-selection-lod-bias,Fail @@ -636,7 +649,10 @@ spec@arb_pixel_buffer_object@cubemap npot pbo,Fail spec@arb_pixel_buffer_object@fbo-pbo-readpixels-small,Fail spec@arb_pixel_buffer_object@pbo-getteximage,Fail spec@arb_pixel_buffer_object@texsubimage pbo,Fail -spec@arb_point_parameters@arb_point_parameters-point-attenuation,Fail + +# nir_lower_aapoint_impl() uses b32csel instead of fcsel. +spec@arb_point_parameters@arb_point_parameters-point-attenuation,Crash + spec@arb_point_parameters@arb_point_parameters-point-attenuation@Aliased combinations,Fail spec@arb_point_parameters@arb_point_parameters-point-attenuation@Antialiased combinations,Fail spec@arb_provoking_vertex@arb-provoking-vertex-render,Fail @@ -661,6 +677,10 @@ spec@arb_texture_rectangle@glsl-fs-shadow2drect-08,Fail spec@arb_texture_rectangle@glsl-fs-shadow2drectproj,Fail spec@arb_texture_rectangle@tex-miplevel-selection gl2:texture() 2drectshadow,Fail spec@arb_texture_rectangle@tex-miplevel-selection gl2:textureproj 2drectshadow,Fail + +# Too many texture phases, would be avoided if nir_to_tgsi did TXP or if we scheduled. +spec@arb_texture_rectangle@texrect-many,Fail + spec@arb_texture_rectangle@texwrap rect bordercolor,Fail spec@arb_texture_rectangle@texwrap rect bordercolor@GL_RGBA8- border color only,Fail spec@arb_texture_rectangle@texwrap rect proj bordercolor,Fail @@ -867,7 +887,6 @@ spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SLUMINANCE_ spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB- border color only,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_ALPHA- border color only,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_S3TC_DXT1_EXT- border color only,Fail -spec@glsl-1.10@execution@built-in-functions@fs-atan-float-float,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-vec2-vec2,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-vec3-vec3,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-vec4-vec4,Fail @@ -906,12 +925,6 @@ spec@glsl-1.10@execution@built-in-functions@fs-matrixcompmult-mat2-mat2,Fail spec@glsl-1.10@execution@built-in-functions@fs-matrixcompmult-mat3-mat3,Fail spec@glsl-1.10@execution@built-in-functions@fs-matrixcompmult-mat4-mat4,Fail spec@glsl-1.10@execution@built-in-functions@fs-mix-float-float-float,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec2-vec2-float,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec2-vec2-vec2,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec3-vec3-float,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec3-vec3-vec3,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec4-vec4-float,Fail -spec@glsl-1.10@execution@built-in-functions@fs-mix-vec4-vec4-vec4,Fail spec@glsl-1.10@execution@built-in-functions@fs-mod-float-float,Fail spec@glsl-1.10@execution@built-in-functions@fs-mod-vec2-float,Fail spec@glsl-1.10@execution@built-in-functions@fs-mod-vec2-vec2,Fail @@ -1057,8 +1070,6 @@ spec@glsl-1.10@execution@built-in-functions@fs-tan-float,Fail spec@glsl-1.10@execution@built-in-functions@fs-tan-vec2,Fail spec@glsl-1.10@execution@built-in-functions@fs-tan-vec3,Fail spec@glsl-1.10@execution@built-in-functions@fs-tan-vec4,Fail -spec@glsl-1.10@execution@builtins@glsl-fs-atan-1,Fail -spec@glsl-1.10@execution@builtins@glsl-fs-atan-2,Fail spec@glsl-1.10@execution@builtins@glsl-fs-atan-3,Fail spec@glsl-1.10@execution@builtins@glsl-fs-tan-1,Fail spec@glsl-1.10@execution@copy-propagation@glsl-copy-propagation-loop-1,Fail @@ -1073,10 +1084,7 @@ spec@glsl-1.10@execution@fs-frontfacing-ternary-0.0-neg-1.0,Fail spec@glsl-1.10@execution@fs-frontfacing-ternary-1-neg-1,Fail spec@glsl-1.10@execution@fs-frontfacing-ternary-1.0-neg-1.0,Fail spec@glsl-1.10@execution@fs-frontfacing-ternary-neg-1.0-1.0,Fail -spec@glsl-1.10@execution@fs-frontfacing-ternary-vec4-neg-1.0-1.0,Fail -spec@glsl-1.10@execution@fs-loop-bounds-unrolled,Fail -spec@glsl-1.10@execution@fs-nested-loop-unrolled-with-return,Fail -spec@glsl-1.10@execution@fs-nested-return-in-loop-nested_in_if,Fail +spec@glsl-1.10@execution@fs-loop-bounds-unrolled,Crash spec@glsl-1.10@execution@fs-notequal-of-expression,Fail spec@glsl-1.10@execution@fs-sign-times-abs,Fail spec@glsl-1.10@execution@fs-sign-times-neg,Fail @@ -1111,12 +1119,10 @@ spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontcolor-smooth-v spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-fixed,Fail spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-none,Fail spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-vertex,Fail -spec@glsl-1.10@execution@loops@complex-loop-analysis-bug,Fail spec@glsl-1.10@execution@loops@glsl-fs-continue-inside-do-while,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-300,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-break,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-continue,Fail -spec@glsl-1.10@execution@loops@glsl-fs-loop-diagonal-break,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-ge,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-gt,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-le,Fail @@ -1130,7 +1136,6 @@ spec@glsl-1.10@execution@loops@glsl-fs-loop-two-counter-04,Fail spec@glsl-1.10@execution@loops@glsl-fs-loop-zero-iter,Fail spec@glsl-1.10@execution@loops@glsl-fs-unroll-out-param,Fail spec@glsl-1.10@execution@loops@glsl-fs-unroll-side-effect,Fail -spec@glsl-1.10@execution@samplers@glsl-fs-lots-of-tex,Fail spec@glsl-1.10@execution@samplers@glsl-fs-shadow1d,Fail spec@glsl-1.10@execution@samplers@glsl-fs-shadow1d-01,Fail spec@glsl-1.10@execution@samplers@glsl-fs-shadow1d-03,Fail @@ -1165,6 +1170,7 @@ spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat3-index-row-wr,Fail spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-index-col-row-wr,Fail spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-index-col-wr,Fail spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-index-row-wr,Fail +spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-index-wr,Fail spec@glsl-1.10@execution@variable-indexing@fs-uniform-array-mat4-index-col-row-rd,Fail spec@glsl-1.10@execution@variable-indexing@fs-varying-array-mat3-index-col-rd,Fail spec@glsl-1.10@execution@variable-indexing@fs-varying-array-mat3-index-col-row-rd,Fail @@ -1326,6 +1332,8 @@ spec@glsl-1.20@execution@built-in-functions@fs-outerproduct-vec3-vec4,Fail spec@glsl-1.20@execution@built-in-functions@fs-outerproduct-vec4-vec2,Fail spec@glsl-1.20@execution@built-in-functions@fs-outerproduct-vec4-vec3,Fail spec@glsl-1.20@execution@built-in-functions@fs-outerproduct-vec4-vec4,Fail +spec@glsl-1.20@execution@fs-const-array-of-struct,Fail +spec@glsl-1.20@execution@fs-const-array-of-struct-of-array,Fail spec@glsl-1.20@execution@fs-function-inout-array-of-structs,Fail spec@glsl-1.20@execution@fs-mix-1.0,Fail spec@glsl-1.20@execution@fs-nan-builtin-max,Fail @@ -1337,7 +1345,6 @@ spec@glsl-1.20@execution@fs-vec4-const-array-indirect-access-128-elements,Fail spec@glsl-1.20@execution@fs-vec4-const-array-indirect-access-256-elements,Fail spec@glsl-1.20@execution@glsl-fs-frontfacing,Fail spec@glsl-1.20@execution@glsl-fs-frontfacing-not,Fail -spec@glsl-1.20@execution@matrix-out-of-bounds-access@fs-mat4-out-of-bounds-6,Crash spec@glsl-1.20@execution@out-parameter-indexing@fs-inout-index-two-level,Fail spec@glsl-1.20@execution@tex-miplevel-selection gl2:texture() 1d,Fail spec@glsl-1.20@execution@tex-miplevel-selection gl2:texture() 1dshadow,Fail @@ -1374,6 +1381,8 @@ spec@glsl-1.20@execution@uniform-initializer@fs-mat4,Fail spec@glsl-1.20@execution@uniform-initializer@fs-mat4-array,Fail spec@glsl-1.20@execution@uniform-initializer@fs-mat4-from-const,Fail spec@glsl-1.20@execution@uniform-initializer@fs-mat4-set-by-other-stage,Fail +spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-col-wr,Fail +spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-row-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-col-row-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat3-index-col-row-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat3-index-col-wr,Fail @@ -1381,6 +1390,7 @@ spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat3-index-row-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-index-col-row-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-index-col-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-index-row-wr,Fail +spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-index-wr,Fail spec@glsl-1.20@execution@variable-indexing@fs-uniform-array-mat4-index-col-row-rd,Fail spec@glsl-1.20@execution@variable-indexing@fs-varying-array-mat3-index-col-rd,Fail spec@glsl-1.20@execution@variable-indexing@fs-varying-array-mat3-index-col-row-rd,Fail diff --git a/src/gallium/drivers/i915/ci/traces-i915.yml b/src/gallium/drivers/i915/ci/traces-i915.yml index f641837e5b4..062085388f9 100644 --- a/src/gallium/drivers/i915/ci/traces-i915.yml +++ b/src/gallium/drivers/i915/ci/traces-i915.yml @@ -12,7 +12,7 @@ traces: - path: gputest/plot3d.trace expectations: - device: i915-g33 - checksum: c85a570e1d2a45555b9e92298522f7d8 + checksum: dc187485584bc45b9050e88163e72c34 - path: gputest/triangle.trace expectations: # Weird white bar behind Tux's head. @@ -23,11 +23,14 @@ traces: # expectations: # - device: i915-g33 # checksum: 8d4c52f0af9c09710d358f24c73fae3c - - path: humus/CelShading.trace - # The cel shading is pretty chunky, but maybe that's just precision stuff. - expectations: - - device: i915-g33 - checksum: 4605ceed2b5c3a03f9262c546d75a8d8 + #- path: humus/CelShading.trace + # # The cel shading is pretty chunky, but maybe that's just precision stuff. + # # Since the NIR change, 1D textures are getting undefined .y channels that + # # could trigger the known bad 1D texture wrap behavior, and the rendering looks + # # like undefined data. + # expectations: + # - device: i915-g33 + # checksum: 4605ceed2b5c3a03f9262c546d75a8d8 # Requires GLSL 1.30 #- path: humus/DynamicBranching3.trace # expectations: @@ -41,7 +44,7 @@ traces: - path: humus/Portals.trace expectations: - device: i915-g33 - checksum: 9306a8d9f37d83a327759319c46f7cae + checksum: 46a5f3c04ef40f275e1d330c2ac965c8 # The shadow raytracing shader fails to compile #- path: humus/RaytracedShadows.trace # expectations: @@ -55,9 +58,9 @@ traces: - path: neverball/neverball.trace expectations: - device: i915-g33 - checksum: 344479e929ad4bc7f7316b5e574b0131 + checksum: e621fd97320f24ea4451565390f9b1ac - path: valve/counterstrike-v2.trace # Tree foliage rendering is extra aliased. expectations: - device: i915-g33 - checksum: 66a18e91b95674a3a1d227ed5681257d + checksum: 4a693fcd3b2fbe388ba847ca3a93f079 diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c index 54c6f4122a1..a0cadd3d6b1 100644 --- a/src/gallium/drivers/i915/i915_screen.c +++ b/src/gallium/drivers/i915/i915_screen.c @@ -26,6 +26,7 @@ **************************************************************************/ +#include "compiler/nir/nir.h" #include "draw/draw_context.h" #include "util/os_misc.h" #include "util/format/u_format.h" @@ -107,11 +108,107 @@ i915_get_name(struct pipe_screen *screen) return buffer; } +static const nir_shader_compiler_options i915_compiler_options = { + .fuse_ffma32 = true, + .lower_bitops = true, /* required for !CAP_INTEGERS nir_to_tgsi */ + .lower_extract_byte = true, + .lower_extract_word = true, + .lower_fdiv = true, + .lower_fdph = true, + .lower_flrp32 = true, + .lower_fmod = true, + .lower_rotate = true, + .lower_uniforms_to_ubo = true, + .lower_vector_cmp = true, + .use_interpolated_input_intrinsics = true, +}; + +static const struct nir_shader_compiler_options gallivm_nir_options = { + .lower_bitops = true, /* required for !CAP_INTEGERS nir_to_tgsi */ + .lower_scmp = true, + .lower_flrp32 = true, + .lower_flrp64 = true, + .lower_fsat = true, + .lower_bitfield_insert_to_shifts = true, + .lower_bitfield_extract_to_shifts = true, + .lower_fdph = true, + .lower_ffma16 = true, + .lower_ffma32 = true, + .lower_ffma64 = true, + .lower_fmod = true, + .lower_hadd = true, + .lower_add_sat = true, + .lower_ldexp = true, + .lower_pack_snorm_2x16 = true, + .lower_pack_snorm_4x8 = true, + .lower_pack_unorm_2x16 = true, + .lower_pack_unorm_4x8 = true, + .lower_pack_half_2x16 = true, + .lower_pack_split = true, + .lower_unpack_snorm_2x16 = true, + .lower_unpack_snorm_4x8 = true, + .lower_unpack_unorm_2x16 = true, + .lower_unpack_unorm_4x8 = true, + .lower_unpack_half_2x16 = true, + .lower_extract_byte = true, + .lower_extract_word = true, + .lower_rotate = true, + .lower_uadd_carry = true, + .lower_usub_borrow = true, + .lower_mul_2x32_64 = true, + .lower_ifind_msb = true, + .max_unroll_iterations = 32, + .use_interpolated_input_intrinsics = true, + .lower_cs_local_index_from_id = true, + .lower_uniforms_to_ubo = true, + .lower_vector_cmp = true, + .lower_device_index_to_zero = true, + /* .support_16bit_alu = true, */ +}; + +static const void * +i915_get_compiler_options(struct pipe_screen *pscreen, + enum pipe_shader_ir ir, + enum pipe_shader_type shader) +{ + assert(ir == PIPE_SHADER_IR_NIR); + if (shader == PIPE_SHADER_FRAGMENT) + return &i915_compiler_options; + else + return &gallivm_nir_options; +} + static int i915_get_shader_param(struct pipe_screen *screen, enum pipe_shader_type shader, enum pipe_shader_cap cap) { + switch (cap) { + case PIPE_SHADER_CAP_PREFERRED_IR: + return PIPE_SHADER_IR_NIR; + case PIPE_SHADER_CAP_SUPPORTED_IRS: + return (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI); + + case PIPE_SHADER_CAP_INTEGERS: + /* mesa/st requires that this cap is the same across stages, and the FS + * can't do ints. + */ + return 0; + + case PIPE_SHADER_CAP_INT16: + return 0; + + case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR: + /* While draw could normally handle this for the VS, the NIR lowering + * to regs can't handle our non-native-integers, so we have to lower to + * if ladders. + */ + return 0; + + default: + break; + } + switch(shader) { case PIPE_SHADER_VERTEX: switch (cap) { @@ -156,7 +253,6 @@ i915_get_shader_param(struct pipe_screen *screen, case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR: case PIPE_SHADER_CAP_SUBROUTINES: return 0; - case PIPE_SHADER_CAP_INTEGERS: case PIPE_SHADER_CAP_INT64_ATOMICS: case PIPE_SHADER_CAP_FP16: case PIPE_SHADER_CAP_FP16_DERIVATIVES: @@ -175,11 +271,11 @@ i915_get_shader_param(struct pipe_screen *screen, case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS: case PIPE_SHADER_CAP_MAX_SHADER_IMAGES: case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD: - case PIPE_SHADER_CAP_PREFERRED_IR: case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS: case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS: case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS: return 0; + case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT: return 32; default: @@ -278,6 +374,9 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap) case PIPE_CAP_MAX_VARYINGS: return 10; + case PIPE_CAP_NIR_IMAGES_AS_DEREF: + return 0; + case PIPE_CAP_VENDOR_ID: return 0x8086; case PIPE_CAP_DEVICE_ID: @@ -530,6 +629,7 @@ i915_screen_create(struct i915_winsys *iws) is->base.get_param = i915_get_param; is->base.get_shader_param = i915_get_shader_param; is->base.get_paramf = i915_get_paramf; + is->base.get_compiler_options = i915_get_compiler_options; is->base.is_format_supported = i915_is_format_supported; is->base.context_create = i915_create_context; diff --git a/src/gallium/drivers/i915/i915_state.c b/src/gallium/drivers/i915/i915_state.c index bc38908d0d4..4bff42841ee 100644 --- a/src/gallium/drivers/i915/i915_state.c +++ b/src/gallium/drivers/i915/i915_state.c @@ -30,6 +30,8 @@ #include "draw/draw_context.h" +#include "nir.h" +#include "nir/nir_to_tgsi.h" #include "util/u_helpers.h" #include "util/u_inlines.h" #include "util/u_math.h" @@ -476,9 +478,18 @@ i915_create_fs_state(struct pipe_context *pipe, return NULL; ifs->draw_data = draw_create_fragment_shader(i915->draw, templ); - ifs->state.tokens = tgsi_dup_tokens(templ->tokens); - tgsi_scan_shader(templ->tokens, &ifs->info); + if (templ->type == PIPE_SHADER_IR_NIR) { + ifs->state.tokens = nir_to_tgsi(templ->ir.nir, pipe->screen); + } else { + assert(templ->type == PIPE_SHADER_IR_TGSI); + /* we need to keep a local copy of the tokens */ + ifs->state.tokens = tgsi_dup_tokens(templ->tokens); + } + + ifs->state.type = PIPE_SHADER_IR_TGSI; + + tgsi_scan_shader(ifs->state.tokens, &ifs->info); /* The shader's compiled to i915 instructions here */ i915_translate_fragment_program(i915, ifs); @@ -527,7 +538,18 @@ i915_create_vs_state(struct pipe_context *pipe, { struct i915_context *i915 = i915_context(pipe); - /* just pass-through to draw module */ + struct pipe_shader_state from_nir; + if (templ->type == PIPE_SHADER_IR_NIR) { + /* The gallivm draw path doesn't support non-native-integers NIR shaders, + * st/mesa does native-integers for the screen as a whole rather than + * per-stage, and i915 FS can't do native integers. So, convert to TGSI, + * where the draw path *does* support non-native-integers. + */ + from_nir.type = PIPE_SHADER_IR_TGSI; + from_nir.tokens = nir_to_tgsi(templ->ir.nir, pipe->screen); + templ = &from_nir; + } + return draw_create_vertex_shader(i915->draw, templ); } diff --git a/src/gallium/drivers/i915/meson.build b/src/gallium/drivers/i915/meson.build index 5bb97ede214..cb17f845c4b 100644 --- a/src/gallium/drivers/i915/meson.build +++ b/src/gallium/drivers/i915/meson.build @@ -67,6 +67,7 @@ libi915 = static_library( files_i915, gnu_symbol_visibility : 'hidden', include_directories : [inc_include, inc_src, inc_gallium, inc_gallium_aux], + dependencies : idep_nir, ) driver_i915 = declare_dependency(