mesa.git
7 years agoi965/vec4: add dst_null_df()
Iago Toral Quiroga [Fri, 5 Feb 2016 09:11:48 +0000 (10:11 +0100)]
i965/vec4: add dst_null_df()

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4: We only support 32-bit integer ALU operations for now
Iago Toral Quiroga [Tue, 10 Nov 2015 09:20:25 +0000 (10:20 +0100)]
i965/vec4: We only support 32-bit integer ALU operations for now

Add asserts so we remember to address this when we enable 64-bit
integer support, as suggested by Connor and Jason.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/disasm: align16 DF source regions have a width of 2
Iago Toral Quiroga [Wed, 25 May 2016 06:21:23 +0000 (08:21 +0200)]
i965/disasm: align16 DF source regions have a width of 2

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4: set correct register regions for 32-bit and 64-bit
Iago Toral Quiroga [Wed, 18 Nov 2015 13:00:58 +0000 (14:00 +0100)]
i965/vec4: set correct register regions for 32-bit and 64-bit

For 32-bit instructions we want to use <4,4,1> regions for VGRF
sources so we should really set a width of 4 (we were setting 8).

For 64-bit instructions we want to use a width of 2 because the
hardware uses 32-bit swizzles, meaning that we can only address 2
consecutive 64-bit components in a row. Also, Curro suggested that
the hardware is probably fixing the width to 2 for 64-bit instructions
anyway, so just go with that and use <2,2,1>.

v2:
 - No need to explicitly set the vertical stride of 64-bit regions to 2,
   brw_vecn_grf with a width of 2 will do that for us.
 - No need to adjust the width of dst registers.

v3 (Ian):
 - Make type_size and width const.

Signed-off-by: Connor Abbott <connor.w.abbott@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965: add brw_vecn_grf()
Connor Abbott [Thu, 13 Aug 2015 21:22:03 +0000 (14:22 -0700)]
i965: add brw_vecn_grf()

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4: translate d2f/f2d
Iago Toral Quiroga [Thu, 13 Aug 2015 22:56:22 +0000 (15:56 -0700)]
i965/vec4: translate d2f/f2d

Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4: add double/float conversion pseudo-opcodes
Iago Toral Quiroga [Thu, 13 Aug 2015 22:36:05 +0000 (15:36 -0700)]
i965/vec4: add double/float conversion pseudo-opcodes

These need to be emitted as align1 MOV's, since they need to have a
stride of 2 on the float register (whether src or dest) so that data
from another thread doesn't cross the middle of a SIMD8 register.

v2 (Iago):
- The float-to-double needs to align 32-bit data to 64-bit before doing the
conversion. This was doable in align16 when we tried to use an execsize
of 4, but with an execsize of 8 we would need another align1 opcode to do
that (since we need data to cross the middle of a SIMD register). Just
making the opcode handle this internally seems more practical that adding
another opcode just for this purpose and having the caller know about this
before converting.
- The double-to-float conversion produces 32-bit elements aligned to 64-bit
so we make the opcode re-pack the result to 32-bit and fit in one register,
as expected by SIMD4x2 operation. This still requires that callers reserve
two registers for the float data destination because we need to produce
64-bit aligned data first, and repack it later on the same destination
register, but it saves the need for a re-pack opcode only to achieve this
making the operation complete in a single opcode. Hopefully that is worth
the weirdness of the double register allocation...

Signed-off-by: Connor Abbott <connor.w.abbott@intel.com>
Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4: add support for printing DF immediates
Connor Abbott [Thu, 13 Aug 2015 21:18:04 +0000 (14:18 -0700)]
i965/vec4: add support for printing DF immediates

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: fix emitting 64-bit immediates
Iago Toral Quiroga [Thu, 13 Aug 2015 22:30:34 +0000 (15:30 -0700)]
i965/vec4/nir: fix emitting 64-bit immediates

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: set the right type for 64-bit registers
Connor Abbott [Thu, 13 Aug 2015 21:35:46 +0000 (14:35 -0700)]
i965/vec4/nir: set the right type for 64-bit registers

Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: support doubles in ALU operations
Iago Toral Quiroga [Wed, 25 May 2016 07:27:49 +0000 (09:27 +0200)]
i965/vec4/nir: support doubles in ALU operations

Basically, this involves considering the bit-size information to set
the appropriate type on both operands and destination.

v2 (Curro)
  - Don't use two temporaries (and write one of them twice ) to obtain
    the nir_alu_type.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: Add bit-size information to types
Iago Toral Quiroga [Mon, 2 Nov 2015 05:07:27 +0000 (00:07 -0500)]
i965/vec4/nir: Add bit-size information to types

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: allocate two registers for dvec3/dvec4
Connor Abbott [Mon, 29 Feb 2016 11:35:05 +0000 (12:35 +0100)]
i965/vec4/nir: allocate two registers for dvec3/dvec4

v2 (Curro):
  - Do not special-case for a bit-size of 64, divide the bit_size by 32
    instead.
  - Use DIV_ROUND_UP so we can handle sub-32-bit types.

v3 (Ian):
  - Make num_regs const.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/vec4/nir: simplify glsl_type_for_nir_alu_type()
Connor Abbott [Mon, 10 Aug 2015 18:35:34 +0000 (11:35 -0700)]
i965/vec4/nir: simplify glsl_type_for_nir_alu_type()

Less duplication, one one less case to handle for doubles and support
for sized NIR types.

v2: Fix call to get_instance by swapping rows and columns params (Iago)

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/nir: double/dvec2 uniforms only need to be padded to a single vec4 slot
Samuel Iglesias Gonsálvez [Mon, 6 Jun 2016 13:49:52 +0000 (15:49 +0200)]
i965/nir: double/dvec2 uniforms only need to be padded to a single vec4 slot

max_vector_size is used in the vec4 backend to pad out the uniform
components to match a size that is a multiple of a vec4. Double and dvec2
uniforms only require a single vec4 slot, not two.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agoi965/fs: fix exec_size when emitting DIM instruction
Samuel Iglesias Gonsálvez [Fri, 23 Dec 2016 06:37:38 +0000 (07:37 +0100)]
i965/fs: fix exec_size when emitting DIM instruction

Otherwise, DIM instructions will be emitted with the default exec size
which could be 16 in some cases, that is not legal.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Suggested-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
7 years agost/mesa: get Version from gl_program rather than gl_shader_program
Timothy Arceri [Sun, 20 Nov 2016 13:29:29 +0000 (00:29 +1100)]
st/mesa: get Version from gl_program rather than gl_shader_program

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoi965: stop passing gl_shader_program to brw_compile_gs() and gen6_gs_visitor()
Timothy Arceri [Mon, 7 Nov 2016 23:28:12 +0000 (10:28 +1100)]
i965: stop passing gl_shader_program to brw_compile_gs() and gen6_gs_visitor()

Instead we caan just use gl_program.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoi965: get InfoLog and LinkStatus via the shader program data pointer in gl_program
Timothy Arceri [Mon, 7 Nov 2016 23:25:57 +0000 (10:25 +1100)]
i965: get InfoLog and LinkStatus via the shader program data pointer in gl_program

This removes another dependency on gl_shader_program in the codegen
functions.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoi965: eliminate gen6_xfb_enabled field in brw_gs_prog_data
Timothy Arceri [Mon, 7 Nov 2016 23:05:42 +0000 (10:05 +1100)]
i965: eliminate gen6_xfb_enabled field in brw_gs_prog_data

We can just get this information from shader_info instead.

Note that passing gen6_gs_visitor() gl_program via _LinkedShaders
will go away in a later patch.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoi965: update brw_get_shader_time_index() not to take gl_shader_program
Timothy Arceri [Tue, 20 Dec 2016 10:37:23 +0000 (21:37 +1100)]
i965: update brw_get_shader_time_index() not to take gl_shader_program

This removes another dependency on gl_shader_program in the codegen
functions which will help allow us to use gl_program in the
CurrentProgram array rather than gl_shader_program.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agogallium/hud: fix the windows build by disabling file dumping
Marek Olšák [Mon, 2 Jan 2017 22:16:48 +0000 (23:16 +0100)]
gallium/hud: fix the windows build by disabling file dumping

7 years agoglsl: Update ES 3.2 shader output restrictions.
Kenneth Graunke [Mon, 2 Jan 2017 10:56:52 +0000 (02:56 -0800)]
glsl: Update ES 3.2 shader output restrictions.

This disallows fancy varyings in tessellation and geometry shaders,
as required by ES 3.2.

Fixes:
dEQP-GLES31.functional.tessellation.user_defined_io.negative.per_patch_array_of_structs
dEQP-GLES31.functional.tessellation.user_defined_io.negative.per_patch_structs_containing_arrays

(Not a candidate for stable branches as it only disallows things which
should be working as desktop GL allows them.)

v2: Update error messages to not say "vertex shader" (caught by Iago).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/miptree: Create a disable CCS flag
Ben Widawsky [Tue, 20 Dec 2016 14:29:05 +0000 (14:29 +0000)]
i965/miptree: Create a disable CCS flag

Cc: Chad Versace <chadversary@chromium.org>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
7 years agoi965: Replace bool aux disable with enum
Ben Widawsky [Sun, 18 Dec 2016 18:31:25 +0000 (10:31 -0800)]
i965: Replace bool aux disable with enum

As CCS buffers are passed to KMS, it becomes useful to be able to
determine exactly what type of aux buffers are disabled. This was
previously not entirely needed (though the code was a little more
confusing), however it becomes very desirable after a recent patch from
Chad:

commit 1c8be049bea786c2c054a770025976beba5b8636
Author: Chad Versace <chadversary@chromium.org>
Date:   Fri Dec 9 16:18:11 2016 -0800

    i965/mt: Disable aux surfaces after making miptree shareable

The next patch will handle CCS and get rid of no_ccs.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
7 years agodocs: document GALLIUM_HUD_DUMP_DIR envvar
Edmondo Tommasina [Wed, 21 Dec 2016 21:58:14 +0000 (22:58 +0100)]
docs: document GALLIUM_HUD_DUMP_DIR envvar

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
7 years agogallium/hud: set filedescriptor for fps graph
Edmondo Tommasina [Wed, 21 Dec 2016 21:58:13 +0000 (22:58 +0100)]
gallium/hud: set filedescriptor for fps graph

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
7 years agogallium/hud: set filedescriptor for cpu graph
Edmondo Tommasina [Wed, 21 Dec 2016 21:58:12 +0000 (22:58 +0100)]
gallium/hud: set filedescriptor for cpu graph

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
7 years agogallium/hud: move file initialization to a function
Edmondo Tommasina [Wed, 21 Dec 2016 21:58:11 +0000 (22:58 +0100)]
gallium/hud: move file initialization to a function

The function will be used later to create the filedescriptor
for other metrics.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
7 years agogallium/hud: dump hud_driver_query values to files
Edmondo Tommasina [Wed, 21 Dec 2016 21:58:09 +0000 (22:58 +0100)]
gallium/hud: dump hud_driver_query values to files

Dump values for every selected data source in GALLIUM_HUD.

Every data source has its own file and the filename is
equal to the data source identifier.

Set GALLIUM_HUD_DUMP_DIR to dump values to files in this directory.

No values are dumped if the environment variable is not set, the
directory doesn't exist or the user doesn't have write access.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
7 years agoanv,radv: disable StorageImageWriteWithoutFormat for now
Ilia Mirkin [Fri, 30 Dec 2016 05:39:30 +0000 (00:39 -0500)]
anv,radv: disable StorageImageWriteWithoutFormat for now

The SPIR-V capability isn't even marked as enabled, and there are no
tests in Vulkan-CTS. Per Jason Ekstrand, this won't work in anv as such
write-only surfaces require additional setup which is currently not
performed.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Acked-by: Dave Airlie <airlied@redhat.com>
Acked-by: Jason Ekstrand <jason.ekstrand@intel.com>
7 years agoi965: Avoid NULL pointer dereference when transform feedback is off.
Kenneth Graunke [Fri, 30 Dec 2016 23:35:02 +0000 (15:35 -0800)]
i965: Avoid NULL pointer dereference when transform feedback is off.

upload_3dstate_streamout can be called when there's no currently bound
transform feedback object.  In this case, we get the default object,
which has a NULL shader (previously gl_shader_program, now gl_program).

The old code did something sketchy, but which worked:

   const struct gl_transform_feedback_info *linked_xfb_info =
      &xfb_obj->shader_program->LinkedTransformFeedback;

Here, if shader_program is NULL, this would be a bogus pointer of 0x60.
But we never actually dereferenced it, so it worked out.

With Timothy's recent reworks, we actually end up dereferencing
xfb_obj->program along the way, which crashes since it's NULL.

The solution is to move this pointer initialization into the "active"
block, where we know it actually exists and won't be bogus.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99231
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
7 years agoglsl/mesa: add reference to gl_shader_program_data from gl_program
Timothy Arceri [Tue, 20 Dec 2016 10:37:25 +0000 (21:37 +1100)]
glsl/mesa: add reference to gl_shader_program_data from gl_program

We also add the stubs for the standalone compiler in this change.

By adding a reference here we can now refactor some code to use
gl_program where we were previously awkwardly using gl_shader_program.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa: make union in gl_program a struct and add FIXME
Timothy Arceri [Fri, 30 Dec 2016 20:45:35 +0000 (07:45 +1100)]
mesa: make union in gl_program a struct and add FIXME

i915 is mixing the use of these fields, for now change this to a
struct and add a FIXME.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99229

7 years agoi965/peephole_ffma: Use nir_builder
Jason Ekstrand [Sat, 24 Dec 2016 19:21:57 +0000 (11:21 -0800)]
i965/peephole_ffma: Use nir_builder

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/split_var_copies: Use a nir_shader rather than a void *mem_ctx
Jason Ekstrand [Sat, 24 Dec 2016 19:03:01 +0000 (11:03 -0800)]
nir/split_var_copies: Use a nir_shader rather than a void *mem_ctx

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/opt_peephole_select: Pass around the actual nir_shader
Jason Ekstrand [Sat, 24 Dec 2016 18:58:17 +0000 (10:58 -0800)]
nir/opt_peephole_select: Pass around the actual nir_shader

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/conditional_if: Properly use the builder
Jason Ekstrand [Sat, 24 Dec 2016 18:39:19 +0000 (10:39 -0800)]
nir/conditional_if: Properly use the builder

We were passing around a void *mem_ctx and using that to initialize the
builder which was wrong since that pointed to ralloc_parent(impl) which
is the shader but the builder is supposed to be initialized with the
nir_function_impl.

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/lower_var_copies: Use a shader rather than a void *mem_ctx
Jason Ekstrand [Sat, 24 Dec 2016 18:34:33 +0000 (10:34 -0800)]
nir/lower_var_copies: Use a shader rather than a void *mem_ctx

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/lower_io: Use the builder instead of carrying a mem_ctx
Jason Ekstrand [Sat, 24 Dec 2016 18:24:29 +0000 (10:24 -0800)]
nir/lower_io: Use the builder instead of carrying a mem_ctx

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir/from_ssa: Use nir_builder for emit_copy
Jason Ekstrand [Sat, 24 Dec 2016 18:14:48 +0000 (10:14 -0800)]
nir/from_ssa: Use nir_builder for emit_copy

This lets us get rid of the void *mem_ctx parameter and make things a
bit more type safe.

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agonir: Make nir_copy_deref follow the "clone" pattern
Jason Ekstrand [Sat, 24 Dec 2016 17:42:34 +0000 (09:42 -0800)]
nir: Make nir_copy_deref follow the "clone" pattern

We rename it to nir_deref_clone, re-order the sources to match the other
clone functions, and expose nir_deref_var_clone.  This past part, in
particular, lets us get rid of quite a few lines since we no longer have
to call nir_copy_deref and wrap it in deref_as_var.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
7 years agofreedreno/ir3: rework varying slots (maybe??)
Rob Clark [Mon, 28 Nov 2016 21:02:31 +0000 (16:02 -0500)]
freedreno/ir3: rework varying slots (maybe??)

See:
dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_vec2_yyyy_fragment

if we only access (in FS) varying.y then it ends up in slot zero..  I'm
not sure the hw likes that..

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agospirv: always expose SpvCapabilityStorageImageExtendedFormats
Ilia Mirkin [Fri, 30 Dec 2016 01:59:12 +0000 (20:59 -0500)]
spirv: always expose SpvCapabilityStorageImageExtendedFormats

I forgot to do this in commit 76b97d544e ("anv: enable storage image
extended formats"). Since both drivers support this now, no need for the
conditional enable.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
7 years agoanv: add support for extended texture gather
Ilia Mirkin [Sun, 27 Nov 2016 20:45:54 +0000 (15:45 -0500)]
anv: add support for extended texture gather

Now that the SPIR-V -> NIR translation is in place, no additional logic
is required.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Acked-by: Jason Ekstrand <jason.ekstrand@intel.com>
7 years agoradv: only allow cmask/dcc in color optimal.
Dave Airlie [Thu, 29 Dec 2016 23:11:19 +0000 (23:11 +0000)]
radv: only allow cmask/dcc in color optimal.

I had this on transfers due to the clear color cmd, but
it seems like that path shouldn't get fast clears.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: only allow cmask/dcc on exclusive or concurrent with graphics queue.
Dave Airlie [Thu, 29 Dec 2016 22:46:27 +0000 (22:46 +0000)]
radv: only allow cmask/dcc on exclusive or concurrent with graphics queue.

Otherwise we don't get the barriers to flush dcc etc.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agonir: Rewrite lower_regs_to_ssa to use the phi builder
Jason Ekstrand [Wed, 14 Dec 2016 05:00:34 +0000 (21:00 -0800)]
nir: Rewrite lower_regs_to_ssa to use the phi builder

This keeps some of Connor's original code.  However, while I was at it,
I updated this very old pass to a bit more modern NIR.

7 years agonir/phi-builder: Set the value in the block when creating a phi
Jason Ekstrand [Thu, 15 Dec 2016 04:25:51 +0000 (20:25 -0800)]
nir/phi-builder: Set the value in the block when creating a phi

After we figure out the value that we are going to return, we have a
loop that walks up the dominance tree and sets the value in each of the
blocks that doesn't have one yet.  In the case of the phi, the def is
set to NEEDS_PHI not NULL, so the last one where the phi node actually
goes never gets filled out.  This can lead to duplicating the phi node
unnecessarily.

7 years agonir: Add foreach_register helper macros
Jason Ekstrand [Wed, 14 Dec 2016 04:54:38 +0000 (20:54 -0800)]
nir: Add foreach_register helper macros

7 years agonir: Rename convert_to_ssa lower_regs_to_ssa
Jason Ekstrand [Wed, 14 Dec 2016 02:19:42 +0000 (18:19 -0800)]
nir: Rename convert_to_ssa lower_regs_to_ssa

This matches the naming of nir_lower_vars_to_ssa, the other to-SSA pass.

7 years agomesa/glsl/i965: remove Driver.NewShader()
Timothy Arceri [Fri, 4 Nov 2016 02:51:59 +0000 (13:51 +1100)]
mesa/glsl/i965: remove Driver.NewShader()

After removing brw_shader in the previous commit this is no longer
needed.

V2: remove use in src/compiler/glsl/test_optpass.cpp

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoi965: move compiled_once flag to brw_program
Timothy Arceri [Fri, 4 Nov 2016 02:37:21 +0000 (13:37 +1100)]
i965: move compiled_once flag to brw_program

This allows us to delete brw_shader and removes the last use of
gl_linked_shader in the codegen paths.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa/glsl: move BlendSupport bitfield to gl_program
Timothy Arceri [Thu, 3 Nov 2016 23:10:19 +0000 (10:10 +1100)]
mesa/glsl: move BlendSupport bitfield to gl_program

This will let us to make _CurrentFragmentProgram a gl_program pointer
allowing for simpilifications to be made.

We also need to add a field to gl_shader to hold it during parsing.

In gl_program we put it inside a union in anticipation of moving
more fields here that can be only fs or vertex stage fields.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa: store gl_program in gl_transform_feedback_object rather than gl_shader_program
Timothy Arceri [Thu, 3 Nov 2016 03:35:08 +0000 (14:35 +1100)]
mesa: store gl_program in gl_transform_feedback_object rather than gl_shader_program

This will allow us to make the CurrentProgram array store gl_program which allows
us to do a bunch of simplifications.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa/glsl: move LinkedTransformFeedback from gl_shader_program to gl_program
Timothy Arceri [Thu, 3 Nov 2016 05:00:37 +0000 (16:00 +1100)]
mesa/glsl: move LinkedTransformFeedback from gl_shader_program to gl_program

This will help allow us to store gl_program in the CurrentProgram array rather
than gl_shader_program which will allow a bunch of simplifications.

Note that we make LinkedTransformFeedback a pointer so we don't waste
memory creating a struct for each stage. We also store a pointer to
the gl_program that will contain the pointer in gl_shader_program so
we can get easy access to the correct stage.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoi965: get LinkedTransformFeedback from gl_transform_feedback_object
Timothy Arceri [Tue, 8 Nov 2016 09:59:25 +0000 (20:59 +1100)]
i965: get LinkedTransformFeedback from gl_transform_feedback_object

We have already set the gl_shader_program pointer to the correct
shader program in _mesa_BeginTransformFeedback() so use it.

This is more consistent with how we do it for gen7.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa: move _Used to gl_program
Timothy Arceri [Mon, 31 Oct 2016 11:08:24 +0000 (22:08 +1100)]
mesa: move _Used to gl_program

We no longer need to initialise it because gl_program is never reused.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa/compiler: add local_size_variable to shader_info
Timothy Arceri [Mon, 31 Oct 2016 11:06:37 +0000 (22:06 +1100)]
mesa/compiler: add local_size_variable to shader_info

This will be used in api_validate.c in a following patch when we
switch to using gl_program pointers for the pipelines CurrentProgram
array.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa: pass gl_program to _mesa_append_uniforms_to_file()
Timothy Arceri [Mon, 31 Oct 2016 10:51:40 +0000 (21:51 +1100)]
mesa: pass gl_program to _mesa_append_uniforms_to_file()

This now contains everything we need.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoglsl/mesa: set separate_shader directly in shader_info
Timothy Arceri [Mon, 31 Oct 2016 08:35:49 +0000 (19:35 +1100)]
glsl/mesa: set separate_shader directly in shader_info

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa/glsl: move subroutine metadata to gl_program
Timothy Arceri [Wed, 28 Dec 2016 21:56:43 +0000 (08:56 +1100)]
mesa/glsl: move subroutine metadata to gl_program

This will allow us to store gl_program rather than gl_shader_program
as the current program perstage which allows us to simplify code
that makes use of the CurrentProgram list.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agomesa/compiler: add stage to shader_info
Timothy Arceri [Mon, 31 Oct 2016 08:57:57 +0000 (19:57 +1100)]
mesa/compiler: add stage to shader_info

This will allow us to simplify the current program logic for SSO.

Also since we aim to detach shader_info from nir_shader this will come
in handy avoiding passing nir_shader around just to keep track of
the stage we are dealing with.

V2: set stage for arb asm programs also.

Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agovc4: Rework scheduling of thread switch to cut one more NOP.
Eric Anholt [Tue, 27 Dec 2016 21:52:54 +0000 (13:52 -0800)]
vc4: Rework scheduling of thread switch to cut one more NOP.

Jonas's patch got us most of the benefit of scheduling instructions into
the delay slots of thread switch, but if there had been nothing to pair
the thrsw with, it would move the thrsw up and leave a NOP where the thrsw
was.

Instead, don't pair anything with thrsw through the normal scheduling
path, and have a separate helper function that inserts the thrsw earlier
if possible and inserts any necessary NOPs.

total instructions in shared programs: 93027 -> 92643 (-0.41%)
instructions in affected programs:     14952 -> 14568 (-2.57%)

7 years agovc4: Fill thread switching delay slots
Jonas Pfeil [Sun, 20 Nov 2016 19:45:13 +0000 (20:45 +0100)]
vc4: Fill thread switching delay slots

Scan for instructions without a signal set in front of the switching
instruction and move the signal up there.

shader-db results:

total instructions in shared programs: 94494 -> 93027 (-1.55%)
instructions in affected programs:     23545 -> 22078 (-6.23%)

v2: Fix re-emitting of the instruction in the loop trying to emit NOPs,
    drop a scheduling change from branch delay slots. (by anholt)

Signed-off-by: Jonas Pfeil <pfeiljonas@gmx.de>
7 years agovc4: Enable NIR-based loop unrolling.
Eric Anholt [Tue, 27 Dec 2016 20:29:09 +0000 (12:29 -0800)]
vc4: Enable NIR-based loop unrolling.

This successfully unrolls a new shader in GLB2.7, which also gets that
shader to successfully compile in multithreaded mode.

7 years agonir: stop gcc warning about uninitialised variables
Timothy Arceri [Thu, 29 Dec 2016 02:18:59 +0000 (13:18 +1100)]
nir: stop gcc warning about uninitialised variables

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoradv: denote support for extended storage image formats.
Dave Airlie [Tue, 27 Dec 2016 23:28:05 +0000 (23:28 +0000)]
radv: denote support for extended storage image formats.

I'm sure anv has support for these as well, but this is just
a first use of the interface to allow different supported spir-v
features.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agospirv: add interface for drivers to define support extensions.
Dave Airlie [Tue, 27 Dec 2016 23:27:14 +0000 (23:27 +0000)]
spirv: add interface for drivers to define support extensions.

I expect over time the struct contents will change as all
drivers support stuff etc, but for now this should be a good
starting point.

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agomesa/shaderobj: Fix races on refcounts
Chad Versace [Tue, 27 Dec 2016 22:26:24 +0000 (14:26 -0800)]
mesa/shaderobj: Fix races on refcounts

Use atomic ops when updating gl_shader::RefCount.

Fixes intermittent failures and crashes in
'dEQP-EGL.functional.sharing.gles2.multithread.*'.
All tests in that group now pass except
'dEQP-EGL.functional.sharing.gles2.multithread.simple_egl_server_sync.textures.copyteximage2d_texsubimage2d_render'.

Tested with:
  mesa: branch 'master' at d6545f2
  deqp: branch 'nougat-cts-dev' at 4acf725 with additional local fixes
  DEQP_TARGET: x11_egl
  hw: Intel Broadwell 0x1616

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99085
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Cc: mesa-stable@lists.freedesktop.org
Cc: Mark Janes <mark.a.janes@intel.com>
Cc: Haixia Shi <hshi@chromium.org>
7 years agofreedreno/ir3: fix linkage::var size
Rob Clark [Mon, 26 Dec 2016 19:16:57 +0000 (14:16 -0500)]
freedreno/ir3: fix linkage::var size

It should actually be 32 for a4xx/a5xx.. we still only advertise 16 but
for a5xx the linkage map includes position/psize.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/ir3: treat clipvertex like a normal varying
Rob Clark [Sun, 25 Dec 2016 18:16:51 +0000 (13:16 -0500)]
freedreno/ir3: treat clipvertex like a normal varying

We need this in case it is streamed out.  Not sure why we were treating
it specially before.  Having it as a VS out is harmless if FS doesn't
have a matching input.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/a5xx: transform-feedback support
Rob Clark [Sat, 24 Dec 2016 19:44:26 +0000 (14:44 -0500)]
freedreno/a5xx: transform-feedback support

We'll need to revisit when adding hw binning pass support, whether we
can still do this in main draw step, as we do w/ a3xx/a4xx, or if we
needed to move it to the binning stage.

Still some failing piglits but most tests pass and the common cases seem
to work.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno: update generated headers
Rob Clark [Sat, 24 Dec 2016 16:57:35 +0000 (11:57 -0500)]
freedreno: update generated headers

Pull in a5xx streamout related regs.  Also fixes a couple incorrect
register definitions.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/ir3: UBO support for 64b GPUs (a5xx)
Rob Clark [Sat, 24 Dec 2016 00:19:01 +0000 (19:19 -0500)]
freedreno/ir3: UBO support for 64b GPUs (a5xx)

Update address calculation to support 64b addresses.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/ir3: rework location of driver constants
Rob Clark [Thu, 22 Dec 2016 03:43:52 +0000 (22:43 -0500)]
freedreno/ir3: rework location of driver constants

Rework how we lay out driver constants (driver-params, UBO/TFBO buffer
addresses, immediates) for more flexibility.  For a5xx+ we need to deal
with the fact that gpu ptrs are 64b instead of 32b, which makes the
fixed offset scheme not work so well.  While we are dealing with that
we might also make the layout more dynamic to account for varying # of
UBOs, etc.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/a5xx: fix emit for bo addresses
Rob Clark [Thu, 22 Dec 2016 03:47:42 +0000 (22:47 -0500)]
freedreno/a5xx: fix emit for bo addresses

Reloc for the buffer address is two dwords on 64b devices (a5xx+)

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agofreedreno/a5xx: texture layout
Rob Clark [Tue, 6 Dec 2016 18:32:31 +0000 (13:32 -0500)]
freedreno/a5xx: texture layout

Seems to be imilar to a4xx, and sampler state "array-pitch" needs
to be aligned to page size.

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agottn: set ->info->num_ubos
Rob Clark [Thu, 22 Dec 2016 05:56:48 +0000 (00:56 -0500)]
ttn: set ->info->num_ubos

For dealing w/ 32b vs 64b gpu addresses, I need to rework how we pass
UBO buffer addresses to shader, and knowing up front the # of UBOs is
useful.  But I noticed ttn wasn't setting this.

Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
7 years agoanv: Handle vkGetPhysicalDeviceQueueFamilyProperties with count == 0
Chad Versace [Tue, 27 Dec 2016 18:25:58 +0000 (10:25 -0800)]
anv: Handle vkGetPhysicalDeviceQueueFamilyProperties with count == 0

The spec implicitly allows the incoming count to be 0. From the Vulkan
1.0.38 spec, Section 4.1 Physical Devices:

    If the value referenced by pQueueFamilyPropertyCount is not 0 [then
    do stuff].

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoegl: Emit correct error when robust context creation fails
Chad Versace [Fri, 23 Dec 2016 01:06:14 +0000 (17:06 -0800)]
egl: Emit correct error when robust context creation fails

Fixes dEQP-EGL.functional.create_context_ext.robust_*
on Intel with GBM.

If the user sets the EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR in
EGL_CONTEXT_FLAGS_KHR when creating an OpenGL ES context, then
EGL_KHR_create_context spec requires that we unconditionally emit
EGL_BAD_ATTRIBUTE because that flag does not exist for OpenGL ES. When
creating an OpenGL context, the spec requires that we emit EGL_BAD_MATCH
if we can't support the request; that error is generated in the egl_dri2
layer where the driver capability is actually checked.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99188
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
7 years agoanv: return count of queue families written
Damien Grassart [Sun, 25 Dec 2016 00:00:58 +0000 (01:00 +0100)]
anv: return count of queue families written

The Vulkan spec indicates that
vkGetPhysicalDeviceQueueFamilyProperties() should overwrite
pQueueFamilyPropertyCount with the number of structures actually
written to pQueueFamilyProperties.

Signed-off-by: Damien Grassart <damien@grassart.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
Cc: mesa-stable@lists.freedesktop.org
7 years agoi965: Allow import/export of ARGB1555 images
Chad Versace [Thu, 22 Dec 2016 23:00:12 +0000 (15:00 -0800)]
i965: Allow import/export of ARGB1555 images

To my knowledge, this fixes no tests. I simply wrote the patch for
completeness as a follow-up to the previous two patches.

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
7 years agomesa/texformat: Handle GL_RGBA + GL_UNSIGNED_SHORT_5_5_5_1
Chad Versace [Thu, 22 Dec 2016 22:39:44 +0000 (14:39 -0800)]
mesa/texformat: Handle GL_RGBA + GL_UNSIGNED_SHORT_5_5_5_1

_mesa_choose_tex_format() already handles GL_RGBA + GL_UNSIGNED_SHORT_1_5_5_5_REV
by converting it to MESA_FORMAT_B5G5R5A1_UNORM. Teach it do the same for
the non-reversed type. Otherwise, the switch's fallthrough converts it
to an 8888 format, which has incompatible precision in the alpha
channel.

Patch 2/2 to fix dEQP-EGL.functional.image.modify.tex_rgb5_a1_tex_subimage_rgba8
on Intel.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99185
Cc: Haixia Shi <hshi@chromium.org>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agodri: Add __DRI_IMAGE_FORMAT_ARGB1555
Chad Versace [Thu, 22 Dec 2016 22:44:47 +0000 (14:44 -0800)]
dri: Add __DRI_IMAGE_FORMAT_ARGB1555

This allows eglCreateImage() to accept textures of said format.

Patch 1/2 to fix
dEQP-EGL.functional.image.modify.tex_rgb5_a1_tex_subimage_rgba8
on Intel.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99185
Cc: Haixia Shi <hshi@chromium.org>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agoegl/dri2: implement query surface hook
Tapani Pälli [Wed, 21 Dec 2016 08:21:34 +0000 (10:21 +0200)]
egl/dri2: implement query surface hook

This makes better guarantee that the values we return are
in sync what the underlying drawable currently has.

Together with dEQP change in bug #98327 this fixes following test:

   dEQP-EGL.functional.resize.surface_size.grow

v2: avoid unnecessary x11 roundtrips (Chad Versace)

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Tested-by: Mark Janes <mark.a.janes@intel.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98327

7 years agoradv: add some asserts for operations on general queue
Dave Airlie [Tue, 27 Dec 2016 03:26:11 +0000 (03:26 +0000)]
radv: add some asserts for operations on general queue

These might be useful in the future, or not.

Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: Also skip DCC clear flushes for compute.
Bas Nieuwenhuizen [Mon, 26 Dec 2016 23:57:36 +0000 (00:57 +0100)]
radv: Also skip DCC clear flushes for compute.

(airlied: fixes DOOM hang with compute queue enabled)
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
7 years agoradv: handle queue present directly to winsys
Dave Airlie [Fri, 23 Dec 2016 06:24:21 +0000 (06:24 +0000)]
radv: handle queue present directly to winsys

Don't call the QueueSubmit interface, just call direct to the
winsys, so we can pass the wait semaphores.

Noticed while debugging doom, doesn't fix anything.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agointel/blorp_blit: Fix max blit size for gen6
Jordan Justen [Sat, 24 Dec 2016 02:41:15 +0000 (18:41 -0800)]
intel/blorp_blit: Fix max blit size for gen6

Fixes ES3-CTS.gtf.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_stencil_blit

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoradv: fix rendering to b10g11r11_ufloat_pack32
Dave Airlie [Fri, 23 Dec 2016 06:41:32 +0000 (06:41 +0000)]
radv: fix rendering to b10g11r11_ufloat_pack32

doom was causing a printf about an illegal color, it was due the
non-void returning -1, and the other function checking for 4,
align these.

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: handle multi-component shared load/stores.
Dave Airlie [Fri, 23 Dec 2016 05:41:18 +0000 (05:41 +0000)]
radv: handle multi-component shared load/stores.

This was seen in doom shaders, so handle it properly.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave AIrlie <airlied@redhat.com>
7 years agoclover: Use Clang's diagnostics
Vedran Miletić [Wed, 21 Dec 2016 12:49:36 +0000 (13:49 +0100)]
clover: Use Clang's diagnostics

Presently errors from frontend are handled only if they occur in
clang::CompilerInvocation::CreateFromArgs(). This patch uses
clang::DiagnosticsEngine to detect errors such as invalid values for
Clang frontend arguments.

Fixes Piglit's cl/program/build/fail/invalid-version-declaration.cl
test.

v2: fix inconsistent code formatting

Signed-off-by: Vedran Miletić <vedran@miletic.net>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Tested-by: Aaron Watry <awatry@gmail.com>
7 years agoradv: return count of queue families written
Damien Grassart [Sat, 24 Dec 2016 23:41:45 +0000 (00:41 +0100)]
radv: return count of queue families written

The Vulkan spec indicates that
vkGetPhysicalDeviceQueueFamilyProperties() should overwrite
pQueueFamilyPropertyCount with the number of structures actually
written to pQueueFamilyProperties.

Signed-off-by: Damien Grassart <damien@grassart.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
7 years agoi965/generator/tex: Handle an immediate sampler with an indirect texture
Jason Ekstrand [Thu, 22 Dec 2016 23:26:12 +0000 (15:26 -0800)]
i965/generator/tex: Handle an immediate sampler with an indirect texture

In this case we were dying when we tried to do SHL addr sampler imm(8)
because that puts an immediate in src0 of a two source instruction. This
fixes 2704 of the new separate sampler Vulkan CTS tests on Sky Lake.

Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
Cc: "13.0" <mesa-stable@lists.freedesktop.org>
7 years agoswr: fix icc compile error
Bruce Cherniak [Fri, 23 Dec 2016 00:06:41 +0000 (18:06 -0600)]
swr: fix icc compile error

ICC doesn't like the use of nullptr (std::nullptr_t) argument in
p_atomic_set.  GCC and clang don't complain.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99119
Reviewed-by: Tim Rowley <timothy.o.rowley@intel.com>
7 years agoradv: set some proper values for interp offset limits.
Dave Airlie [Thu, 22 Dec 2016 01:52:30 +0000 (11:52 +1000)]
radv: set some proper values for interp offset limits.

These are taken from the amdgpu-pro driver, and cause no
CTS change.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoradv: bump texel offsets to align with radeonsi
Dave Airlie [Thu, 22 Dec 2016 00:35:46 +0000 (10:35 +1000)]
radv: bump texel offsets to align with radeonsi

it appears from the amdgpu-pro results the hw can do more,
but let's just align with radeonsi for now.

No CTS regressions.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agonir/algebraic: Add optimizations for "a == a && a CMP b"
Jason Ekstrand [Tue, 20 Dec 2016 05:29:51 +0000 (21:29 -0800)]
nir/algebraic: Add optimizations for "a == a && a CMP b"

This sequence shows up The Talos Principal, at least under Vulkan,
and prevents loop analysis from properly computing trip counts in a
few loops.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
7 years agoi965: Use nir_opt_trivial_continues and nir_opt_if
Jason Ekstrand [Sat, 17 Dec 2016 07:30:40 +0000 (23:30 -0800)]
i965: Use nir_opt_trivial_continues and nir_opt_if

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>