mesa.git
8 years agogallium: refactor pipe_shader_state to support multiple IR's
Rob Clark [Sat, 17 Oct 2015 17:34:24 +0000 (13:34 -0400)]
gallium: refactor pipe_shader_state to support multiple IR's

The goal is to allow the pipe driver to request something other than
TGSI, but detect whether what is getting is TGSI vs what it requested.
The pipe drivers will always have to support TGSI (and convert that into
whatever it is that they prefer), but in some cases we should be able to
skip the TGSI intermediate step (such as glsl->nir vs glsl->tgsi->nir).

I think pipe_compute_state should get similar treatment.  Currently,
afaict, it has one user and one consumer, which has allowed it to be
sloppy wrt. supporting alternative IR's.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agofreedreno: fix multi-layer transfer_map's
Rob Clark [Wed, 11 May 2016 15:28:13 +0000 (11:28 -0400)]
freedreno: fix multi-layer transfer_map's

The use of transfer_inline_write() in TexSubImage path (see fb9fe352ea4)
exposed a bug for "layer_first" resources (ie. a4xx) not setting correct
layer_stride.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agoglsl: use var with initializer on global var validation
Juan A. Suarez Romero [Wed, 11 May 2016 11:48:18 +0000 (13:48 +0200)]
glsl: use var with initializer on global var validation

Currently, when cross validating global variables, all global variables
seen in the shaders that are part of a program are saved in a table.

When checking a variable this already exist in the table, we check both
are initialized to the same value. If the already saved variable does
not have an initializer, we copy it from the new variable.

Unfortunately this is wrong, as we are modifying something it is
constant. Also, if this modified variable is used in
another program, it will keep the initializer, when it should have none.

Instead of copying the initializer, this commit replaces the old
variable with the new one. So if we see again the same variable with an
initializer, we can compare if both are the same or not.

v2: convert tabs in whitespaces (Kenenth Graunke)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoutil/ralloc: Remove double zero'ing of rzalloc buffers
Jordan Justen [Tue, 10 May 2016 21:22:13 +0000 (14:22 -0700)]
util/ralloc: Remove double zero'ing of rzalloc buffers

Juha-Pekka found this back in May 2015:
<1430915727-28677-1-git-send-email-juhapekka.heikkila@gmail.com>

From the discussion, obviously it would be preferable to make
ralloc_size no longer return zeroed memory, but Juha-Pekka found that
it would break Mesa.

In <56AF1C57.2030904@gmail.com>, Juha-Pekka mentioned that patches
exist to fix i965 when ralloc_size is fixed to not zero memory, but
the patches have not made their way to mesa-dev yet.

For now, let's stop doing the double zeroing of rzalloc buffers.

v2:
 * Move ralloc_size code to rzalloc_size, and add a comment as
   suggested by Ken.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agogenxml: avoid using a GNU make pattern rule
Jonathan Gray [Tue, 3 May 2016 00:25:09 +0000 (10:25 +1000)]
genxml: avoid using a GNU make pattern rule

% pattern rules are a GNU extension.  Convert the use of one to a
inference rule to allow this to build on OpenBSD.

v2: inference rules can't have additional prerequisites so add a target
rule to still depend on gen_pack_header.py

Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agogallivm: improve dumping of bitcode
Roland Scheidegger [Wed, 11 May 2016 02:42:51 +0000 (04:42 +0200)]
gallivm: improve dumping of bitcode

Use GALLIVM_DEBUG=dumpbc for dumping of modules as bitcode.
Instead of a fixed llvmpipe.bc name, use ir_<modulename>.bc so multiple
modules can be dumped (albeit it might still overwrite previous modules,
particularly the modules from draw tend to always have the same name).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agoswr: [rasterizer] Include cmath for std::isnan and std::isinf.
Vinson Lee [Mon, 9 May 2016 23:02:12 +0000 (16:02 -0700)]
swr: [rasterizer] Include cmath for std::isnan and std::isinf.

This patch fixes this build error.

  CXX      rasterizer/memory/libswrAVX_la-ClearTile.lo
In file included from rasterizer/memory/ClearTile.cpp:34:0:
./rasterizer/memory/Convert.h: In function ‘uint16_t Convert32To16Float(float)’:
./rasterizer/memory/Convert.h:170:9: error: ‘__builtin_isnan’ is not a member of ‘std’
     if (std::isnan(val))
         ^
./rasterizer/memory/Convert.h:170:9: note: suggested alternative:
<built-in>: note:   ‘__builtin_isnan’
./rasterizer/memory/Convert.h:176:14: error: ‘__builtin_isinf_sign’ is not a member of ‘std’
     else if (std::isinf(val))
              ^
./rasterizer/memory/Convert.h:176:14: note: suggested alternative:
<built-in>: note:   ‘__builtin_isinf_sign’

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95180
Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Tim Rowley <timothy.o.rowley@intel.com>
8 years agoi965/blorp: Don't blend integer values during MSAA resolves
Jason Ekstrand [Wed, 4 May 2016 22:53:04 +0000 (15:53 -0700)]
i965/blorp: Don't blend integer values during MSAA resolves

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agometa/blit: Don't blend integer values during MSAA resolves
Jason Ekstrand [Wed, 4 May 2016 22:52:50 +0000 (15:52 -0700)]
meta/blit: Don't blend integer values during MSAA resolves

Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoi965/fs: Default all constants to a location of -1
Jason Ekstrand [Tue, 10 May 2016 20:54:58 +0000 (13:54 -0700)]
i965/fs: Default all constants to a location of -1

Otherwise constants which aren't live get an undefined constant location.
When we go to set up param and pull_param we end up assigning all unused
uniforms to slot 0.  This cases the Vulkan driver to segfault because it
doesn't have pull_param.

This fixes bugs in the Vulkan driver introduced in c3fab3d000.

Reviewed-by: Mark Janes <mark.a.janes@intel.com>
8 years agost/glsl_to_tgsi: attach image to correct instruction for samples
Dave Airlie [Tue, 10 May 2016 05:53:48 +0000 (15:53 +1000)]
st/glsl_to_tgsi: attach image to correct instruction for samples

This fixes a crash (but not the test):
GL45-CTS.shader_texture_image_samples_tests.functional_test

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agomesa: move MESA_MAP_NOWAIT_BIT up away from GL_MAP_PERSISTENT_BIT
Dave Airlie [Tue, 10 May 2016 04:56:02 +0000 (14:56 +1000)]
mesa: move MESA_MAP_NOWAIT_BIT up away from GL_MAP_PERSISTENT_BIT

This was colliding badly and making
GL45-CTS.buffer_storage.map_persistent_texture
fail on radeonsi.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agomesa/meta: check for signed/unsigned int conversion for pbo getteximage
Dave Airlie [Tue, 10 May 2016 05:41:46 +0000 (15:41 +1000)]
mesa/meta: check for signed/unsigned int conversion for pbo getteximage

When doing GetTexSubImage using a PBO, we should check if it involves
a signed/unsigned conversion and bail if it does, just like in the
other cases.

This fixes:
GL33-CTS.gtf32.GL3Tests.packed_pixels.packed_pixels_pbo
on Haswell at least.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95324
Reviewed-by: Matt Turer <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
8 years agoi965: Handle BRW_OPCODE_DO on Gen6+ in brw_instruction_name().
Matt Turner [Mon, 9 May 2016 22:58:20 +0000 (15:58 -0700)]
i965: Handle BRW_OPCODE_DO on Gen6+ in brw_instruction_name().

This became a problem after the recent disassembler changes.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoradeonsi: Set declared tessellation LDS size to hardware size.
Bas Nieuwenhuizen [Fri, 6 May 2016 19:06:14 +0000 (21:06 +0200)]
radeonsi: Set declared tessellation LDS size to hardware size.

The calculated limit gave problems on SI as it was > 32 KiB
and the hardware LDS size on SI is only 32 KiB. It isn't
correct anyway when processing multiple patches in a threadgroup.

As we potentially have any number of patches such that the
used LDS is at most the hardware LDS size, and exact size
per patch is not known at compile time, this seems like
the only valid bound.

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agofreedreno/ir3: size input/output arrays properly
Rob Clark [Tue, 10 May 2016 15:46:11 +0000 (11:46 -0400)]
freedreno/ir3: size input/output arrays properly

We index into these based on var->data.driver_location, which might have
gaps (ie. two inputs, one w/ drvloc 0 and other 2).  This shows up in
(for example) 'bin/copyteximage 1D', but was only noticed recently due
to additional asserts.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
8 years agoir_to_mesa: Emit smarter ir_binop_logic_or for vertex programs
Ian Romanick [Wed, 13 Apr 2016 18:43:23 +0000 (11:43 -0700)]
ir_to_mesa: Emit smarter ir_binop_logic_or for vertex programs

Continue using ADD in the other case because a fragment shader backend
could fuse the ADD with a MUL to generate a MAD for ((x && y) || z).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoprog: Delete all remains of OPCODE_SNE, OPCODE_SEQ, OPCODE_SGT, and OPCODE_SLE
Ian Romanick [Wed, 13 Apr 2016 00:38:23 +0000 (17:38 -0700)]
prog: Delete all remains of OPCODE_SNE, OPCODE_SEQ, OPCODE_SGT, and OPCODE_SLE

There is nothing left that can generate them.  These used to be
generated by ir_to_mesa or by the assembler for various NV extensions
that have been removed.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoir_to_mesa: Do not emit OPCODE_SEQ or OPCODE_SNE
Ian Romanick [Wed, 13 Apr 2016 01:49:40 +0000 (18:49 -0700)]
ir_to_mesa: Do not emit OPCODE_SEQ or OPCODE_SNE

Nothing that consumes the output of this backend consumes them
navtively.  This is *not* the way i915 has implemented these
instructions, but, as far as I am able to tell, this is the way both the
Cg compiler and the HLSL compiler implement these operations.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoir_to_mesa: Do not emit OPCODE_SLE or OPCODE_SGT
Ian Romanick [Wed, 13 Apr 2016 00:30:25 +0000 (17:30 -0700)]
ir_to_mesa: Do not emit OPCODE_SLE or OPCODE_SGT

Nothing that consumes the output of this backend consumes them
navtively.  This is the way i915 has implemented these instructions
since it began consuming GLSL.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agonvc0: enable compute support by default on GK110+
Samuel Pitoiset [Mon, 9 May 2016 22:22:35 +0000 (00:22 +0200)]
nvc0: enable compute support by default on GK110+

Compute support seems to be pretty stable now, and according to piglit
it doesn't seem to break 3D state.

As a side effect, this will expose ARB_compute_shader on GK110/GK208.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
8 years agogallium/radeon: don't flush the GFX IB if DMA doesn't depend on it
Marek Olšák [Thu, 28 Apr 2016 16:06:55 +0000 (18:06 +0200)]
gallium/radeon: don't flush the GFX IB if DMA doesn't depend on it

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: consolidate radeon_add_to_buffer_list calls for DMA
Marek Olšák [Thu, 28 Apr 2016 15:51:43 +0000 (17:51 +0200)]
radeonsi: consolidate radeon_add_to_buffer_list calls for DMA

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: add a heuristic for better (S)DMA performance
Marek Olšák [Fri, 29 Apr 2016 23:21:22 +0000 (01:21 +0200)]
gallium/radeon: add a heuristic for better (S)DMA performance

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: flush if DMA IB memory usage is too high
Marek Olšák [Thu, 28 Apr 2016 14:32:39 +0000 (16:32 +0200)]
gallium/radeon: flush if DMA IB memory usage is too high

This prevents IB rejections due to insane memory usage from
many concecutive texture uploads.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: add new SDMA texture copy code
Marek Olšák [Thu, 21 Apr 2016 19:41:59 +0000 (21:41 +0200)]
radeonsi: add new SDMA texture copy code

This implements:
- Linear-to-linear partial copies. (unaligned)
- Tiled-to-linear and linear-to-tiled partial copies.
  (unaligned except 1-2 Bpp)
- Tiled-to-tiled partial copies aligned to 8x8.

v2: Extend the SDMA L2T VM fault workaround to T2L.
    - Same algorithm, just applied to T2L.
      (and using a 0-based address and surface.bo_size instead of buf->size)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com> (v1)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: fix (S)DMA read-after-write hazards
Marek Olšák [Tue, 26 Apr 2016 17:29:55 +0000 (19:29 +0200)]
gallium/radeon: fix (S)DMA read-after-write hazards

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: raise the max size for SDMA buffer copies
Marek Olšák [Tue, 26 Apr 2016 17:10:43 +0000 (19:10 +0200)]
radeonsi: raise the max size for SDMA buffer copies

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: remove SDMA texture copy code
Marek Olšák [Tue, 26 Apr 2016 17:06:21 +0000 (19:06 +0200)]
radeonsi: remove SDMA texture copy code

Most of this has never worked according to the new test.

The new code will be radically different.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: only expose *_init_*dma_functions from (S)DMA files
Marek Olšák [Fri, 22 Apr 2016 20:03:24 +0000 (22:03 +0200)]
radeonsi: only expose *_init_*dma_functions from (S)DMA files

just normalizing the interfaces

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: implement randomized SDMA texture copy testing (v2)
Marek Olšák [Fri, 5 Sep 2014 18:15:16 +0000 (20:15 +0200)]
gallium/radeon: implement randomized SDMA texture copy testing (v2)

v2: - adjustments for exercising all important SDMA code paths
    - decrease the probability of getting huge sizes (faster testing)
    - increase the probability of getting power-of-two dimensions
    - change the memory cap to 128MB (faster testing)
    - better detect which engine has been used

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: discard CMASK or DCC if overwriting a whole texture by DMA
Marek Olšák [Thu, 28 Apr 2016 17:22:28 +0000 (19:22 +0200)]
gallium/radeon: discard CMASK or DCC if overwriting a whole texture by DMA

v2: simplify the conditionals

Reviewed-by: Alex Deucher <alexander.deucher@amd.com> (v1)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: use a common function for DMA blit preparation
Marek Olšák [Thu, 21 Apr 2016 21:46:19 +0000 (23:46 +0200)]
gallium/radeon: use a common function for DMA blit preparation

this is more robust and probably fixes some bugs already

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: split out code for discarding DCC
Marek Olšák [Thu, 28 Apr 2016 17:45:22 +0000 (19:45 +0200)]
gallium/radeon: split out code for discarding DCC

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: rename r600_texture_disable_cmask -> discard_cmask
Marek Olšák [Thu, 28 Apr 2016 17:44:42 +0000 (19:44 +0200)]
gallium/radeon: rename r600_texture_disable_cmask -> discard_cmask

because it doesn't decompress

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agost/mesa: use transfer_inline_write for memcpy TexSubImage path
Marek Olšák [Thu, 5 May 2016 19:02:24 +0000 (21:02 +0200)]
st/mesa: use transfer_inline_write for memcpy TexSubImage path

This allows drivers to use their own fast path for texture uploads.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: fix partial layered transfers of cube (array) textures
Marek Olšák [Sun, 8 May 2016 22:39:32 +0000 (00:39 +0200)]
gallium/radeon: fix partial layered transfers of cube (array) textures

a staging cube texture with array_size % 6 != 0 doesn't work very well

just use 2D_ARRAY or 2D for all staging textures

Cc: 11.1 11.2 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: align alignments for better buffer reuse
Marek Olšák [Sun, 8 May 2016 11:40:40 +0000 (13:40 +0200)]
gallium/radeon: align alignments for better buffer reuse

It's for the buffer cache.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: use gart_page_size instead of hardcoded 4096
Marek Olšák [Sun, 8 May 2016 10:30:25 +0000 (12:30 +0200)]
gallium/radeon: use gart_page_size instead of hardcoded 4096

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agowinsys/radeon: use gart_page_size instead of private size_align
Marek Olšák [Sun, 8 May 2016 11:35:19 +0000 (13:35 +0200)]
winsys/radeon: use gart_page_size instead of private size_align

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agowinsys/amdgpu: move gart_page_size to struct radeon_winsys
Marek Olšák [Sun, 8 May 2016 10:27:14 +0000 (12:27 +0200)]
winsys/amdgpu: move gart_page_size to struct radeon_winsys

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallivm: print declarations of intrinsics with GALLIVM_DEBUG=ir
Roland Scheidegger [Tue, 10 May 2016 01:48:13 +0000 (03:48 +0200)]
gallivm: print declarations of intrinsics with GALLIVM_DEBUG=ir

Those aren't really interesting, however outputting them is helpful when
trying to feed the IR to llvm llc (or opt) for debugging.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agogallivm: use InternalLinkage instead of PrivateLinkage for texture functions
Roland Scheidegger [Sun, 8 May 2016 00:27:45 +0000 (02:27 +0200)]
gallivm: use InternalLinkage instead of PrivateLinkage for texture functions

At least with MCJIT the disassembler will crash otherwise when trying to
disassemble such functions.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
8 years agogallivm: disable avx512 features
Roland Scheidegger [Sat, 7 May 2016 22:40:07 +0000 (00:40 +0200)]
gallivm: disable avx512 features

We don't target this yet, and some llvm versions incorrectly enable it based
on cpu string, causing crashes.
(Albeit this is a losing battle, it is pretty much guaranteed when the next
new feature comes along llvm will mistakenly enable it on some future cpu,
thus we would have to proactively disable all new features as llvm adds them.)

This should fix https://bugs.freedesktop.org/show_bug.cgi?id=94291 (untested)

Tested-by: Timo Aaltonen <tjaalton@ubuntu.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com
CC: <mesa-stable@lists.freedesktop.org>
8 years agoRevert "nir: Try to warn when C99 extensions are used in nir headers."
Jose Fonseca [Mon, 9 May 2016 21:35:58 +0000 (14:35 -0700)]
Revert "nir: Try to warn when C99 extensions are used in nir headers."

This reverts commit 99474dc29b0f45413d0e538d7321da9ad4c9f6f5.

-Wpedantic is too verbose, even when applied to just a few includes.

We'll just have to deal with the issues as they come.

Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agoi965/fs: fix MOV_INDIRECT exec_size for doubles
Samuel Iglesias Gonsálvez [Wed, 20 Apr 2016 07:59:11 +0000 (09:59 +0200)]
i965/fs: fix MOV_INDIRECT exec_size for doubles

In that case, the writes need two times the size of a 32-bit value.
We need to adjust the exec_size, so it is not breaking any hardware
rule.

v2:
  - Add an assert to verify type size is not less than 4 bytes (Jordan).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: take into account doubles when calculating read_size for MOV_INDIRECT
Samuel Iglesias Gonsálvez [Tue, 19 Apr 2016 07:49:40 +0000 (09:49 +0200)]
i965/fs: take into account doubles when calculating read_size for MOV_INDIRECT

v2:
- Fix assert's line width (Topi).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/fs: demote_pull_constants() did not take into account double types
Samuel Iglesias Gonsálvez [Fri, 27 Nov 2015 11:52:22 +0000 (12:52 +0100)]
i965/fs: demote_pull_constants() did not take into account double types

The constants could be double, and it was allocating size for float types
for the destination register of varying pull constant loads.

Then the fs_visitor::validate() will complain.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/fs: push first double-based uniforms in push constant buffer
Samuel Iglesias Gonsálvez [Thu, 5 May 2016 07:18:07 +0000 (09:18 +0200)]
i965/fs: push first double-based uniforms in push constant buffer

When there is a mix of definitions of uniforms with 32-bit or 64-bit
data type sizes, the driver ends up doing misaligned access to double
based variables in the push constant buffer.

To fix this, this patch pushes first all the 64-bit variables and
then the rest. Then, all the variables would be aligned to
its data type size.

v2:
- Fix typo and improve comment (Jordan).
- Use ralloc(NULL,...) instead of rzalloc(mem_ctx,...) (Jordan).
- Fix typo (Topi).
- Use pointers instead of references in set_push_pull_constant_loc() (Topi).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
8 years agoi965/fs: recognize writes with a subreg_offset > 0 as partial
Iago Toral Quiroga [Thu, 31 Mar 2016 10:05:31 +0000 (12:05 +0200)]
i965/fs: recognize writes with a subreg_offset > 0 as partial

Usually, writes to a subreg_offset > 0 would also have a stride > 1
and we would recognize them as partial, however, there is one case
where this does not happen, that is when we generate code for 64-bit
imemdiates in gen7, where we produce something like this:

mov(8) vgrf10:UD, <low 32-bit>
mov(8) vgrf10+0.4:UD, <high 32-bit>

and then we use the result with a stride of 0, as in:

mov(8) vgrf13:DF, vgrf10<0>:DF

Although we could try to avoid this issue by producing different code
for this by using writes with a stride of 2, that runs into other
problems affecting gen7 and the fact is that any instruction that
writes to a subreg_offset > 0 is a partial write so we should really
recognize them as such.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs/lower_simd_width: Fix registers written for split instructions
Iago Toral Quiroga [Fri, 15 Jan 2016 13:59:13 +0000 (14:59 +0100)]
i965/fs/lower_simd_width: Fix registers written for split instructions

When the original instruction had a stride > 1, the combined registers
written by the split instructions won't amount to the same register space
written by the original instruction because the split instructions will
use a stride of 1. The current code assumed otherwise and computed the
number of registers written by split instructions as an equal share based
on the relation between the lowered width and the original execution size
of the instruction.

It is only after the split, when we interleave the components of the result
from the lowered instructions back into the original dst register, that the
original stride takes effect and we write all the registers specified by
the original instruction.

Just make the number of register written the same as the vgrf space we
allocate for the dst of the split instruction.

Fixes crashes in fp64 tests produced as a result of assigning incorrectly the
number of registers written by split instructions, which led to incorrect
validation of the size of the writes against the allocated vgrf space.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: rename our lower_d2f pass to lower_d2x
Iago Toral Quiroga [Mon, 18 Jan 2016 10:31:36 +0000 (11:31 +0100)]
i965/fs: rename our lower_d2f pass to lower_d2x

Since it no longer handles conversions from double to float but from
double to various other 32-bit types.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: implement i2d and u2d
Iago Toral Quiroga [Tue, 12 Jan 2016 13:08:57 +0000 (14:08 +0100)]
i965/fs: implement i2d and u2d

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: implement d2i and d2u
Iago Toral Quiroga [Mon, 18 Jan 2016 10:23:49 +0000 (11:23 +0100)]
i965/fs: implement d2i and d2u

These need the same treatment as d2f, so generalize our d2f lowering to cover
these too.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: implement d2b
Iago Toral Quiroga [Mon, 18 Jan 2016 10:23:33 +0000 (11:23 +0100)]
i965/fs: implement d2b

v2: Use subscript() instead of stride() (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: implement fsign() for doubles
Iago Toral Quiroga [Thu, 7 Jan 2016 13:15:37 +0000 (14:15 +0100)]
i965/fs: implement fsign() for doubles

v2 (Sam):
  - Fix indentation (Kenneth)
  - Simplify code (Kenneth)

v3: Use subscript() instead of stride() (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add null_reg_df
Iago Toral Quiroga [Thu, 7 Jan 2016 13:12:26 +0000 (14:12 +0100)]
i965/fs: add null_reg_df

Probably not needed since we fix the dst type of comparisons
automatically, but for consistency with the rest of null_reg_*
functions.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: We only support 32-bit integer ALU operations for now
Iago Toral Quiroga [Tue, 10 Nov 2015 09:18:55 +0000 (10:18 +0100)]
i965/fs: 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: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: handle fp64 opcodes in brw_do_channel_expressions
Iago Toral Quiroga [Wed, 27 Jan 2016 11:48:38 +0000 (12:48 +0100)]
i965/fs: handle fp64 opcodes in brw_do_channel_expressions

In the case of the pack opcode we are already doing the
lowering in NIR, so no need to do it here. The unpack opcode
operates on scalars, so it should not be lowered.

In the case of frexp_sig and frexp_exp, they are lowered in
lower_instructions, so we don't have to care about them.

All the remaining opcodes involve conversions from and to doubles
and are business as usual.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add support for f2d and d2f
Connor Abbott [Thu, 30 Jul 2015 07:20:40 +0000 (00:20 -0700)]
i965/fs: add support for f2d and d2f

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add a pass for legalizing d2f
Connor Abbott [Sun, 1 Nov 2015 08:10:21 +0000 (03:10 -0500)]
i965/fs: add a pass for legalizing d2f

We need to do this late, in order to avoid partial writes during the
optimization loop.

v2: Use subscript() instead of stride().

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: fix dst width calculation in CSE
Connor Abbott [Tue, 11 Aug 2015 21:24:55 +0000 (14:24 -0700)]
i965/fs: fix dst width calculation in CSE

v2 (Sam):
- Fix line width (Topi).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/fs: fix regs_written in LOAD_PAYLOAD for doubles
Connor Abbott [Tue, 11 Aug 2015 21:23:57 +0000 (14:23 -0700)]
i965/fs: fix regs_written in LOAD_PAYLOAD for doubles

v2: Account for the stride of the dst (Iago)

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/fs: fix is_copy_payload() for doubles
Connor Abbott [Tue, 11 Aug 2015 21:10:46 +0000 (14:10 -0700)]
i965/fs: fix is_copy_payload() for doubles

v2 (Sam):
- LOAD_PAYLOAD treats each header source as a 32B block
  regardless of the datatype. Drop the change (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965/fs: fix compares for doubles
Connor Abbott [Tue, 4 Aug 2015 01:08:58 +0000 (18:08 -0700)]
i965/fs: fix compares for doubles

The destination has to have the same source as the type, or else the
simulator will complain. As a result, we need to emit a CMP that
outputs a 64-bit wide result and then do a strided MOV to pick out the
low 32 bits of each channel.

v2: Use subscript() instead of stride() (Curro)

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: extend exec_size halving in the generator
Connor Abbott [Tue, 4 Aug 2015 00:44:08 +0000 (17:44 -0700)]
i965/fs: extend exec_size halving in the generator

The HW has a restriction that only vertical stride may cross register
boundaries. Previously, this only mattered for SIMD16 instructions where
we needed to use the same regioning parameters as the equivalent SIMD8
instruction but double the exec size. But we need to do the same
splitting for 64-bit instructions as well as instructions with a stride
of 2 (which effectively consume 64 bits per element). Fix up the code to
do the right thing instead of special-casing SIMD16.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: fix assign_constant_locations() for doubles
Connor Abbott [Wed, 29 Jul 2015 00:06:12 +0000 (17:06 -0700)]
i965/fs: fix assign_constant_locations() for doubles

Uniform doubles will read two registers, in which case we need to mark
both as being live.

v2 (Sam):
  - Use a formula to get the number of registers read with proper
    units (Curro).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965/fs: use byte_offset() in offset() for uniforms
Connor Abbott [Tue, 28 Jul 2015 23:53:53 +0000 (16:53 -0700)]
i965/fs: use byte_offset() in offset() for uniforms

This makes things more consistent, and also fixes the offset calculation
for double uniforms.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: handle uniforms in byte_offset()
Connor Abbott [Tue, 28 Jul 2015 23:53:02 +0000 (16:53 -0700)]
i965/fs: handle uniforms in byte_offset()

v2: Do it only for uniforms (Iago)

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: fix type_size() for doubles
Connor Abbott [Tue, 28 Jul 2015 22:51:40 +0000 (15:51 -0700)]
i965/fs: fix type_size() for doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: optimize unpack double
Iago Toral Quiroga [Tue, 19 Apr 2016 11:29:55 +0000 (13:29 +0200)]
i965/fs: optimize unpack double

When we are actually unpacking from a double that we have previously
packed from its 32-bit components we can bypass the pack operation
and source from its arguments directly.

v2 (Sam):
- Fix line overflow (Topi)
- Bail if the parent instruction's source is not SSA (Connor)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: optimize pack double
Iago Toral Quiroga [Tue, 19 Apr 2016 10:59:47 +0000 (12:59 +0200)]
i965/fs: optimize pack double

When we are actually creating a double using values obtained from a
previous unpack operation we can bypass the unpack and source from
the original double value directly.

v2:
- Style changes (Topi)
- Bail is parent instruction's src is not SSA (Connor)

v3: Use subscript() instead of stride() (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs/nir: translate double pack/unpack
Connor Abbott [Fri, 14 Aug 2015 19:29:31 +0000 (12:29 -0700)]
i965/fs/nir: translate double pack/unpack

v2 (Sam):
- Fix line overflow (Topi).

v3: Use subscript() instead of stride() (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add a pass for lowering PACK opcodes
Connor Abbott [Thu, 5 May 2016 09:45:19 +0000 (11:45 +0200)]
i965/fs: add a pass for lowering PACK opcodes

v2: Use subscript() instead of stride() (Curro)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add PACK opcode
Connor Abbott [Thu, 5 May 2016 09:40:41 +0000 (11:40 +0200)]
i965/fs: add PACK opcode

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: Introduce helper to extract a field from each channel of a register.
Francisco Jerez [Mon, 2 May 2016 23:10:28 +0000 (16:10 -0700)]
i965/fs: Introduce helper to extract a field from each channel of a register.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
8 years agoi965/fs: always pass the bitsize to brw_type_for_nir_type()
Connor Abbott [Wed, 29 Jul 2015 16:11:03 +0000 (09:11 -0700)]
i965/fs: always pass the bitsize to brw_type_for_nir_type()

v2 (Sam):
- Add bitsize to brw_type_for_nir_type() in optimize_extract_to_float()

v3 (Sam):
- Fix line width (Topi).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: add support for printing double immediates
Connor Abbott [Mon, 3 Aug 2015 22:00:51 +0000 (15:00 -0700)]
i965/fs: add support for printing double immediates

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: don't propagate 64-bit immediates
Connor Abbott [Mon, 3 Aug 2015 21:53:05 +0000 (14:53 -0700)]
i965/fs: don't propagate 64-bit immediates

They can only be used with 1-src instructions, which practically (since
we should've constant-propagated away all 1-src instructions with 64-bit
immediates in NIR) means that they must be kept in separate MOV's and
can't be propagated.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965/fs: use the NIR bit size when creating registers
Connor Abbott [Wed, 29 Jul 2015 21:16:51 +0000 (14:16 -0700)]
i965/fs: use the NIR bit size when creating registers

v2 (Iago):
  - Squashed bits from 'support double precission constant operands for
    the implementation of 64-bit emit_load_const'.
  - Do not use BRW_REGISTER_TYPE_D for all 32-bit registers since that breaks
    asserts and functionality for some piglit tests. Just keep 32-bit types
    untouched and add 64-bit support.
  - Use DF instead of Q for 64-bit registers. Otherwise the code we generate
    will use Q sometimes and DF others and we hit unwanted DF/Q conversions,
    so always use DF.

v3 (Sam):
  - Mark 'reg_type' occurrences as const (Topi).

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Signed-off-by: Tapani Palli <tapani.palli@intel.com>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: fixup uniform setup for doubles
Connor Abbott [Mon, 2 Nov 2015 05:02:54 +0000 (00:02 -0500)]
i965: fixup uniform setup for doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: two-argument instructions can only use 32-bit immediates
Iago Toral Quiroga [Thu, 7 Jan 2016 13:11:28 +0000 (14:11 +0100)]
i965: two-argument instructions can only use 32-bit immediates

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965: fix brw_abs_immediate() for doubles
Iago Toral Quiroga [Wed, 18 Nov 2015 11:11:58 +0000 (12:11 +0100)]
i965: fix brw_abs_immediate() for doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965: fix brw_saturate_immediate() for doubles
Iago Toral Quiroga [Wed, 18 Nov 2015 11:09:30 +0000 (12:09 +0100)]
i965: fix brw_saturate_immediate() for doubles

v2 (Sam):
  - Mark 'size' as const (Topi).
  - Add comment to explain that we do copies 64-bits regardless of the
    type (Topi)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
8 years agoi965: fix is_zero(), is_one() and is_negative_one() for doubles
Connor Abbott [Wed, 18 Nov 2015 11:38:31 +0000 (12:38 +0100)]
i965: fix is_zero(), is_one() and is_negative_one() for doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: fix brw_negate_immediate() for doubles
Connor Abbott [Wed, 18 Nov 2015 11:38:03 +0000 (12:38 +0100)]
i965: fix brw_negate_immediate() for doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965/eu: add support for DF immediates
Connor Abbott [Mon, 3 Aug 2015 21:47:36 +0000 (14:47 -0700)]
i965/eu: add support for DF immediates

v2 (Sam):
  - Remove 'however' from the comment (Topi)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: add support for disassembling DF immediates
Connor Abbott [Mon, 3 Aug 2015 21:47:12 +0000 (14:47 -0700)]
i965: add support for disassembling DF immediates

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: add support for getting/setting DF immediates
Connor Abbott [Mon, 3 Aug 2015 21:40:37 +0000 (14:40 -0700)]
i965: add support for getting/setting DF immediates

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: add brw_imm_df
Connor Abbott [Thu, 12 Nov 2015 11:40:38 +0000 (12:40 +0100)]
i965: add brw_imm_df

v2 (Iago)
  - Fixup accessibility in backend_reg

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965/eu: Allow 3-src float ops with doubles
Topi Pohjolainen [Mon, 20 Oct 2014 08:46:37 +0000 (11:46 +0300)]
i965/eu: Allow 3-src float ops with doubles

v2:
  - set 3src_src_type for BRW_REGISTER_TYPE_DF (Connor)

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965/disasm: fix disasm of 3-src doubles
Connor Abbott [Wed, 29 Jul 2015 20:53:36 +0000 (13:53 -0700)]
i965/disasm: fix disasm of 3-src doubles

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: Tell backend register about double precision type
Topi Pohjolainen [Tue, 16 Sep 2014 09:02:22 +0000 (12:02 +0300)]
i965: Tell backend register about double precision type

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Signed-off-by: Tapani P\344lli <tapani.palli@intel.com>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: Determine size of double precision float register
Topi Pohjolainen [Wed, 3 Sep 2014 17:10:30 +0000 (20:10 +0300)]
i965: Determine size of double precision float register

This is used to determine how many registers an instruction reads and
writes as well as for offseting register region into a desired component.

v2 (Connor): rebase on master

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Signed-off-by: Tapani P\344lli <tapani.palli@intel.com>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: Lower DFRACEXP/DLDEXP
Topi Pohjolainen [Wed, 15 Oct 2014 14:41:02 +0000 (17:41 +0300)]
i965: Lower DFRACEXP/DLDEXP

v2 (Connor): rebase on master which moved this to brw_link.cpp
v3 (Sam):
- Only enable DFREXP_DLDEXP_TO_ARITH in process_glsl_ir(). This is
used for doubles. Single floating point op is lowered by NIR.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: use pack/unpackDouble lowering
Connor Abbott [Fri, 7 Aug 2015 15:45:49 +0000 (08:45 -0700)]
i965: use pack/unpackDouble lowering

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agoi965: use double lowering pass
Connor Abbott [Mon, 3 Aug 2015 22:02:05 +0000 (15:02 -0700)]
i965: use double lowering pass

v2: also lower trunc, ceil, floor, fract and roundEven (Iago)
v3: also lower mod for doubles (Sam)

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agofreedreno/ir3: lower lrp when operating with double operands
Samuel Iglesias Gonsálvez [Tue, 19 Jan 2016 14:22:18 +0000 (15:22 +0100)]
freedreno/ir3: lower lrp when operating with double operands

Lower lrp when operating with double operands because float version of
lrp is also lowered.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoi965: enable lrp lowering for doubles
Samuel Iglesias Gonsálvez [Tue, 19 Jan 2016 07:19:20 +0000 (08:19 +0100)]
i965: enable lrp lowering for doubles

Broadwell and previous generations does not support lrp instruction
operating with doubles.

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
8 years agost/glsl_to_tgsi: brown paper bag for the input offsets fix.
Dave Airlie [Tue, 10 May 2016 04:40:54 +0000 (14:40 +1000)]
st/glsl_to_tgsi: brown paper bag for the input offsets fix.

Oops, thanks compiler.

Signed-off-by: Dave Airlie <airlied@redhat.com>