mesa.git
7 years agogallium/tgsi: add support for 64-bit integer immediates.
Dave Airlie [Thu, 9 Jun 2016 00:16:22 +0000 (10:16 +1000)]
gallium/tgsi: add support for 64-bit integer immediates.

This adds support to TGSI for 64-bit integer immediates.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agogallium: add opcode and types for 64-bit integers. (v3)
Dave Airlie [Thu, 9 Jun 2016 00:14:51 +0000 (10:14 +1000)]
gallium: add opcode and types for 64-bit integers. (v3)

This just adds the basic support for 64-bit opcodes,
and the new types.

v2: add conversion opcodes.
add documentation.
v3:
- make docs more consistent
- change TGSI_OPCODE_I2U64 to TGSI_OPCODE_U2I64

Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v2)
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoi965: Rename intelScreen to screen.
Kenneth Graunke [Mon, 30 Nov 2015 23:47:13 +0000 (15:47 -0800)]
i965: Rename intelScreen to screen.

"intelScreen" is wordy and also doesn't fit our style guidelines.
"screen" is shorter, which is nice, because we use it fairly often.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agoi965: Rename __DRIScreen pointers to "dri_screen".
Kenneth Graunke [Tue, 1 Dec 2015 00:04:08 +0000 (16:04 -0800)]
i965: Rename __DRIScreen pointers to "dri_screen".

I want to use "screen" as the variable name for a struct intel_screen
pointer.  This means that we can't use it for __DRIscreen pointers.

Sometimes we called it "screen", sometimes "sPriv", sometimes
"driScrnPriv", and sometimes "psp" (Pointer to Screen Private?).
The last one is particularly confusing because we use "psp" to refer to
the Gen4 PIPELINED_STATE_POINTERS packet as well.

Let's be consistent.  "dri_screen" is clear, and it's not used often
enough that I'm worried about the verbosity.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agomesa: Implement ARB_shader_viewport_layer_array for i965
Dylan Baker [Mon, 19 Sep 2016 22:36:09 +0000 (15:36 -0700)]
mesa: Implement ARB_shader_viewport_layer_array for i965

This extension is a combination of AMD_vertex_shader_viewport_index and
AMD_vertex_shader_layer, making it rather trivial to implement.

For gallium I *think* this needs a new cap because of the addition of
support in tessellation evaluation shaders, and since I don't have any
hardware to test it on, I've left that for someone else to wire up.

Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoradeon/vce: add firmware support for version 52.8.3
Leo Liu [Tue, 20 Sep 2016 14:09:23 +0000 (10:09 -0400)]
radeon/vce: add firmware support for version 52.8.3

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
7 years agost/omx/dec/h265: Correct the timestamping
Indrajit Das [Thu, 15 Sep 2016 05:01:15 +0000 (10:31 +0530)]
st/omx/dec/h265: Correct the timestamping

(derived from commit 3b6bda665a5a890f2c98e19d2939d7de92b8cb4c)

v2: fix the tabs(Leo)

Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Nishanth Peethambaran <nishanth.peethambaran@amd.com>
Signed-off-by: Indrajit Das <indrajit-kumar.das@amd.com>
Signed-off-by: Leo Liu <leo.liu@amd.com>
7 years agoaubinator: add a custom handler for immediate register load
Lionel Landwerlin [Fri, 9 Sep 2016 10:22:59 +0000 (11:22 +0100)]
aubinator: add a custom handler for immediate register load

Transforming this :

0x00c77084:  0x11000001:  MI_LOAD_REGISTER_IMM
0x00c77088:  0x0000b020 : Dword 1
    Register Offset: 0x0000b020
    0x00c7708c:  0x00880038 : Dword 2
    Data DWord: 8912952

Into this:

0x007880f0:  0x11000001:  MI_LOAD_REGISTER_IMM
0x007880f4:  0x0000b020 : Dword 1
    Register Offset: 0x0000b020
    0x007880f8:  0x00080040 : Dword 2
    Data DWord: 524352
register L3CNTLREG2 (0xb020) : 0x80040
    SLM Enable: 0
    URB Allocation: 32
    URB Low Bandwidth: 0
    RO Allocation: 32
    RO Low Bandwidth: 0
    DC Allocation: 0
    DC Low Bandwidth: 0

v2: Drop unused arguments (Sirisha)
    Print out register name

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
7 years agost/va: flush the context before calling flush_frontbuffer(v2)
Nayan Deshmukh [Tue, 20 Sep 2016 04:52:12 +0000 (10:22 +0530)]
st/va: flush the context before calling flush_frontbuffer(v2)

so that the texture is rendered to back buffer before calling
flush_frontbuffer and can be copied to a different buffer in
the function

v2: change comment style

Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
7 years agost/vdpau: flush the context before calling flush_frontbuffer
Nayan Deshmukh [Tue, 20 Sep 2016 04:52:11 +0000 (10:22 +0530)]
st/vdpau: flush the context before calling flush_frontbuffer

so that the texture is rendered to back buffer before calling
flush_frontbuffer and can be copied to a different buffer in
the function

Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
7 years agovl/dri3: handle the case of different GPU(v4.2)
Nayan Deshmukh [Tue, 20 Sep 2016 04:52:10 +0000 (10:22 +0530)]
vl/dri3: handle the case of different GPU(v4.2)

In case of prime when rendering is done on GPU other then the
server GPU, use a seprate linear buffer for each back buffer
which will be displayed using present extension.

v2: Use a seprate linear buffer for each back buffer (Michel)
v3: Change variable names and fix coding style (Leo and Emil)
v4: Use PIPE_BIND_SAMPLER_VIEW for back buffer in case when
    a seprate linear buffer is used (Michel)
v4.1: remove empty line
v4.2: destroy the context and handle the case when
      create_context fails (Emil)

Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
Acked-by: Michel Dänzer <michel.daenzer@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
7 years agost/vdpau: fix argument type to vlVdpOutputSurfaceDMABuf
Ilia Mirkin [Wed, 14 Sep 2016 23:16:43 +0000 (19:16 -0400)]
st/vdpau: fix argument type to vlVdpOutputSurfaceDMABuf

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Christian König <christian.koenig@amd.com>
7 years agoswr: [rasterizer core] Better thread destruction
Tim Rowley [Mon, 12 Sep 2016 18:08:12 +0000 (13:08 -0500)]
swr: [rasterizer core] Better thread destruction

Signed-off-by: Tim Rowley <timothy.o.rowley@intel.com>
7 years agoswr: [rasterizer jitter] Fix missing end-of-file newline
Tim Rowley [Fri, 9 Sep 2016 21:44:21 +0000 (16:44 -0500)]
swr: [rasterizer jitter] Fix missing end-of-file newline

Signed-off-by: Tim Rowley <timothy.o.rowley@intel.com>
7 years agoswr: [rasterizer core] Add macros for mapping ArchRast to buckets
Tim Rowley [Tue, 6 Sep 2016 17:36:02 +0000 (12:36 -0500)]
swr: [rasterizer core] Add macros for mapping ArchRast to buckets

Switch all RDTSC_START/STOP macros to use AR_BEGIN/END macros.

Signed-off-by: Tim Rowley <timothy.o.rowley@intel.com>
7 years agoglsl: Skip "unsized arrays aren't allowed" check for TCS/TES/GS vars.
Kenneth Graunke [Thu, 15 Sep 2016 09:10:23 +0000 (02:10 -0700)]
glsl: Skip "unsized arrays aren't allowed" check for TCS/TES/GS vars.

Fixes ESEXT-CTS.draw_elements_base_vertex_tests.AEP_shader_stages and
ESEXT-CTS.texture_cube_map_array.texture_size_tesselation_con_sh.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: get rid of nvc0_stage_sampler_states_bind_range()
Samuel Pitoiset [Sun, 18 Sep 2016 21:48:05 +0000 (23:48 +0200)]
nvc0: get rid of nvc0_stage_sampler_states_bind_range()

Same thing as nvc0_stage_set_sampler_views_range().

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonvc0: get rid of nvc0_stage_set_sampler_views_range()
Samuel Pitoiset [Sun, 18 Sep 2016 21:48:04 +0000 (23:48 +0200)]
nvc0: get rid of nvc0_stage_set_sampler_views_range()

This function was quite similar to nvc0_stage_set_sampler_views()
and I don't see any reasons to not remove it.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agonv50/ir: optimize SUB(a, b) to MOV(a - b)
Samuel Pitoiset [Sun, 18 Sep 2016 10:33:12 +0000 (12:33 +0200)]
nv50/ir: optimize SUB(a, b) to MOV(a - b)

This helps shaders in UE4 demos, especially with Elemental
(+1% perf). This optimization reduces spilling usage in one
shader which explains the little gain.

GF100/GK104:

total instructions in shared programs :2838551 -> 2838045 (-0.02%)
total gprs used in shared programs    :396706 -> 396684 (-0.01%)
total local used in shared programs   :34432 -> 34416 (-0.05%)

                local        gpr       inst      bytes
    helped           1          19         112         112
      hurt           0           0           0           0

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agogk110/ir: fix wrong emission of OP_NOT
Samuel Pitoiset [Sun, 18 Sep 2016 12:42:20 +0000 (14:42 +0200)]
gk110/ir: fix wrong emission of OP_NOT

This should emit src0 instead of src1.
Found by inspection.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
7 years agor600g/sb: fix struct/class declaration conflicts
Martina Kollarova [Fri, 16 Sep 2016 15:54:53 +0000 (18:54 +0300)]
r600g/sb: fix struct/class declaration conflicts

A couple of forward-declarations were causing warnings in clang:
    'value' defined as a class here but previously declared as a struct
    [-Wmismatched-tags]

Signed-off-by: Martina Kollarova <martina.kollarova@intel.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
7 years agoi965: Drop assertion about buffer offset at draw time.
Eric Anholt [Mon, 15 Aug 2016 15:58:27 +0000 (08:58 -0700)]
i965: Drop assertion about buffer offset at draw time.

Given robust access, we should just be returning zeroes if the user gives
us a base pointer that's too big, which is what was happens on a release
build.  This was caught by a webgl conformance test for out-of-bounds
draws on servo.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agotgsi: Enable returns from within loops
Lars Hamre [Tue, 13 Sep 2016 19:08:00 +0000 (13:08 -0600)]
tgsi: Enable returns from within loops

Fixes the following piglit test (for softpipe):
/spec/glsl-1.10/execution/fs-loop-return

Signed-off-by: Lars Hamre <chemecse@gmail.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: relax restriction of compressed formats for texture upload
Charmaine Lee [Fri, 16 Sep 2016 16:50:20 +0000 (09:50 -0700)]
svga: relax restriction of compressed formats for texture upload

This patch relaxes the restriction of compressed formats for texture
upload buffer. For now, 3D texture with compressed format
is still not supported in the texture upload buffer path.

As Brian noted, ETQW does many texture updates with glCompressedTexSubImage.
This patch greatly improves the performance of the ETQW trace.

Tested with ETQW, MTT piglit, glretrace, conform, viewperf

v2: Per Brian's suggestion, removed the subregion boundary check.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: skip query flush if we already have the query result
Brian Paul [Thu, 15 Sep 2016 18:07:18 +0000 (12:07 -0600)]
svga: skip query flush if we already have the query result

This reduces the number of times we flush in some situations (the
arbocclude demo is one trivial example).

Tested with Piglit, ETQW, Sauerbraten, arbocclude.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: remove unneeded svga_context_flush() in svga_end_query()
Brian Paul [Wed, 14 Sep 2016 18:33:15 +0000 (12:33 -0600)]
svga: remove unneeded svga_context_flush() in svga_end_query()

Since commit 99d8fe20abe1f we don't have to flush the command buffer when
we end a query.

Tested with Piglit, Sauerbraten, arbocclude, ETQW (noticably faster now).

Reviewed-by: José Fonseca <jfonseca@vmware.com>
7 years agosvga: use upload buffer for upload texture.
Charmaine Lee [Tue, 6 Sep 2016 18:29:41 +0000 (11:29 -0700)]
svga: use upload buffer for upload texture.

With this patch, when running with vgpu10, instead of mapping directly to the
guest backed memory for texture update, we'll use the texture upload buffer
and use the transfer from buffer command to update the host side texture memory.

This optimization yields about 20% performance improvement with
Lightsmark2008 and about 40% with Tropics.

Tested with Lightsmark2008, Tropics, Heaven, MTT piglit, glretrace, conform.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: refactor svga_texture_transfer_map/unmap functions
Charmaine Lee [Fri, 2 Sep 2016 00:45:28 +0000 (17:45 -0700)]
svga: refactor svga_texture_transfer_map/unmap functions

Split the functions into separate functions for dma and direct map to make
the code more readable.

Tested with MTT piglit, glretrace, viewperf, conform, various OpenGL apps

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: add SVGA3d_vgpu10_TransferFromBuffer()
Charmaine Lee [Thu, 1 Sep 2016 20:40:34 +0000 (13:40 -0700)]
svga: add SVGA3d_vgpu10_TransferFromBuffer()

Also add the corresponding dump function to dump the TransferFromBuffer command.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: single sample surface can be created as non-multisamples surface
Charmaine Lee [Mon, 12 Sep 2016 21:21:40 +0000 (14:21 -0700)]
svga: single sample surface can be created as non-multisamples surface

With this patch, single sample surface will be created as non-multisamples
surface.

Tested with piglit, glretrace.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: fix memory leak with sampler state
Charmaine Lee [Wed, 7 Sep 2016 18:46:26 +0000 (11:46 -0700)]
svga: fix memory leak with sampler state

This patch fixes a memory leak with sampler state when piglit
is run with HW version 11. Sampler state clean up was incorrectly skipped
in svga_cleanup_sampler_state() for vgpu9.

Tested with piglit.

Reviewed-by: Neha Bhende <bhenden@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: fix prim type check/assignment in translate_indices()
Brian Paul [Fri, 2 Sep 2016 20:06:00 +0000 (14:06 -0600)]
svga: fix prim type check/assignment in translate_indices()

Left over test code spotted by Sinclair.

Tested with piglit, Google Earth, Lightsmark, Heaven4, glretraces, etc.

Reviewed-by: Sinclair Yeh <syeh@vmware.com>
7 years agosvga: use SVGA3D_QUERYTYPE_MAX for svga query type check
Charmaine Lee [Thu, 1 Sep 2016 18:07:59 +0000 (11:07 -0700)]
svga: use SVGA3D_QUERYTYPE_MAX for svga query type check

Use SVGA3D_QUERYTYPE_MAX instead of SVGA_QUERY_MAX for
svga query type check.

Tested with various OpenGL apps with GALLIUM_HUD set.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: split the num-resources-mapped hud to textures & buffers
Charmaine Lee [Wed, 31 Aug 2016 21:49:52 +0000 (14:49 -0700)]
svga: split the num-resources-mapped hud to textures & buffers

Replace the num-resources-mapped hud with
num-textures-mapped and num-buffers-mapped, so we can
differentiate the map counts for these two different resources.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: change svga hud defines to enums
Charmaine Lee [Tue, 30 Aug 2016 23:40:12 +0000 (16:40 -0700)]
svga: change svga hud defines to enums

This will make it easier to add new hud types.

Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: implement an index buffer translation cache
Brian Paul [Wed, 31 Aug 2016 20:49:41 +0000 (14:49 -0600)]
svga: implement an index buffer translation cache

Some OpenGL apps, like Cinebench R15, have many glDrawElements(GL_QUADS)
calls.  Since we don't directly support quads we have to convert these
calls into GL_TRIANGLES which involves generating a new index buffer.

This patch saves the new/translated index buffer in the hope that it
can be reused for a later draw call.

Cinebench R15 increases by about 20% with this change.
The NobelClinician Viewer app also hits this code.
Tested with full piglit run.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: try to emit fewer buffer rebind commands
Brian Paul [Thu, 1 Sep 2016 00:28:00 +0000 (18:28 -0600)]
svga: try to emit fewer buffer rebind commands

If a consecutive sequence of drawing commands references the same
vertex/index buffers, there should be no need to rebind the surfaces
for the second and subsequent drawing commands.

Apps that use multiple display lists benefit from this since the vertex
data for several display lists is often stored in one buffer.

In the case of the legacy E&S Glaze demo, this reduces the size of our
command buffers from 91KB to 44KB.  One WSI Fusion trace shows a 33%
reduction in command buffer sizes.

Tested with full piglit run.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: reduce unmapping/remapping of the default constant buffer
Brian Paul [Mon, 15 Aug 2016 15:16:05 +0000 (09:16 -0600)]
svga: reduce unmapping/remapping of the default constant buffer

Previously, every time we put shader constants into the default constant
buffer we called u_upload_alloc(), which mapped the buffer, and
u_upload_unmap().  We had to unmap the buffer before calling
svga_buffer_handle() to get the winsys handle for the buffer.  But we
really only need to do that the first time we reference the const buffer.
Now we try to keep the upload manager's buffer mapped until we fill it or
flush the command buffer.

v2: add additional comment on the buffer unmapping code in
svga_context_flush(), per Charmaine.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: optimize memcpy() in svga_buffer_update_hw()
Brian Paul [Fri, 12 Aug 2016 16:44:22 +0000 (10:44 -0600)]
svga: optimize memcpy() in svga_buffer_update_hw()

When we migrate a buffer from sw/malloc storage to a hardware buffer,
don't memcpy the whole buffer, just copy the part we've written to.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
7 years agosvga: Use comparison between svga texture types to use PredCopyRegion command
Neha Bhende [Thu, 1 Sep 2016 16:43:54 +0000 (09:43 -0700)]
svga: Use comparison between svga texture types to use PredCopyRegion command

PredCopyRegion support copy between same type of textures.
Instead of comparing src and dst pipe texture type, compare svga texture
type which can avoid some software fallback.
for example, it avoids a software blit with the Redway3D Aston demo.

Tested piglit tests on VGPU9 and  VGPU10 on GL/DX11Renderer, Redway3D Aston demo

v2: some nit pick suggested by Charmaine.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agosvga: Add function svga_resource_type()
Neha Bhende [Thu, 1 Sep 2016 16:40:43 +0000 (09:40 -0700)]
svga: Add function svga_resource_type()

This function returns svga texture type for corresponding pipe texture.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
7 years agonvc0/ir: fix subops for IMAD
Samuel Pitoiset [Thu, 15 Sep 2016 16:11:56 +0000 (18:11 +0200)]
nvc0/ir: fix subops for IMAD

Offset was wrong, it's at bit 8, not 4. Also, uses subr instead
of sub when src2 has neg. Similar to GK110 now.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
7 years agonvc0/ir: fix comments about instructions info
Samuel Pitoiset [Tue, 13 Sep 2016 17:37:24 +0000 (19:37 +0200)]
nvc0/ir: fix comments about instructions info

The comment for the commutative flags was wrong because OP_MUL is
before OP_MAD. While we are at it add missing opcodes, and fix
the comment about the short forms.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agomesa: Move buffers-unmapped earlier in check_valid_to_render().
Kenneth Graunke [Thu, 15 Sep 2016 09:10:24 +0000 (02:10 -0700)]
mesa: Move buffers-unmapped earlier in check_valid_to_render().

This needs to be above the switch on API, as that can return true
(valid to render) before this error check even had a chance to run.

Fixes ESEXT-CTS.draw_elements_base_vertex_tests.invalid_mapped_bos,
which worked before commit 72f1566f90c434c7752d8405193eec68d6743246.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
7 years agomesa: Expose GL_CONTEXT_FLAGS in ES 3.2.
Kenneth Graunke [Thu, 15 Sep 2016 09:10:22 +0000 (02:10 -0700)]
mesa: Expose GL_CONTEXT_FLAGS in ES 3.2.

Fixes four ES32-CTS.context_flags.* tests.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agoradeonsi/compute: Use the HSA abi for non-TGSI compute shaders v3
Tom Stellard [Wed, 20 Jul 2016 14:32:59 +0000 (14:32 +0000)]
radeonsi/compute: Use the HSA abi for non-TGSI compute shaders v3

This patch switches non-TGSI compute shaders over to using the HSA
ABI described here:

https://github.com/RadeonOpenCompute/ROCm-Docs/blob/master/AMDGPU-ABI.md

The HSA ABI provides a much cleaner interface for compute shaders and allows
us to share more code in the compiler with the HSA stack.

The main changes in this patch are:
  - We now pass the scratch buffer resource into the shader via user sgprs
    rather than using relocations.
  - Grid/Block sizes are now passed to the shader via the dispatch packet
    rather than at the beginning of the kernel arguments.

Typically for HSA, the CP firmware will create the dispatch packet and set
up the user sgprs automatically.  However, in Mesa we let the driver do
this work.  The main reason for this is that I haven't researched how to
get the CP to do all these things, and I'm not sure if it is supported
for all GPUs.

v2:
  - Add comments explaining why we are setting certain bits of the scratch
    resource descriptor.

v3:
  - Use amdgcn-mesa-mesa3d triple instead of amdgcn--mesa3d.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoradeonsi/compute: Add some more debug printfs
Tom Stellard [Tue, 19 Jul 2016 15:25:06 +0000 (15:25 +0000)]
radeonsi/compute: Add some more debug printfs

7 years agoglsl: remove interpolateAt* instructions for demoted inputs
Marek Olšák [Fri, 9 Sep 2016 00:04:00 +0000 (02:04 +0200)]
glsl: remove interpolateAt* instructions for demoted inputs

This fixes 8 fs-interpolateat* piglit crashes on radeonsi, because it can't
handle non-input operands in interpolateAt*.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agomesa: fix glGetFramebufferAttachmentParameteriv w/ on-demand FRONT_BACK alloc
Marek Olšák [Thu, 8 Sep 2016 19:02:29 +0000 (21:02 +0200)]
mesa: fix glGetFramebufferAttachmentParameteriv w/ on-demand FRONT_BACK alloc

This fixes 66 CTS tests on st/mesa.

Cc: 12.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
7 years agoclover: fix getting scalar args api size
Serge Martin [Tue, 30 Aug 2016 08:10:01 +0000 (10:10 +0200)]
clover: fix getting scalar args api size

This fix getting the size of a struct arg. vec3 types still work ok.
Only buit-in args need to have power of two alignment, getTypeAllocSize
reports the correct size in all cases.

Acked-by: Francisco Jerez <currojerez@riseup.net>
7 years agodocs: add GL_ARB_gl_spirv to features list
Ilia Mirkin [Fri, 16 Sep 2016 16:03:31 +0000 (12:03 -0400)]
docs: add GL_ARB_gl_spirv to features list

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agottn: fix warning after 7bf76563e
Rob Clark [Fri, 16 Sep 2016 15:54:55 +0000 (11:54 -0400)]
ttn: fix warning after 7bf76563e

Signed-off-by: Rob Clark <robdclark@gmail.com>
7 years agogallium/docs: document alpha_to_coverage and alpha_to_one blend state
Brian Paul [Thu, 15 Sep 2016 21:32:59 +0000 (15:32 -0600)]
gallium/docs: document alpha_to_coverage and alpha_to_one blend state

The gallium interface defines these like DX10.  Note that OpenGL ignores
these options if MSAA is disabled or the dest buffer doesn't support
MSAA.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
7 years agost/mesa: update comment in st_atom_msaa.c
Brian Paul [Thu, 15 Sep 2016 21:31:43 +0000 (15:31 -0600)]
st/mesa: update comment in st_atom_msaa.c

The old comment was a copy and paste mistake.  Indent another comment.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
7 years agost/mesa: only enable MSAA coverage options when we have a MSAA buffer
Brian Paul [Thu, 15 Sep 2016 21:13:07 +0000 (15:13 -0600)]
st/mesa: only enable MSAA coverage options when we have a MSAA buffer

Regardless of whether GL_MULTISAMPLE is enabled (it's enabled by default)
we should not set the alpha_to_coverage or alpha_to_one flags if the
current drawing buffer does not do MSAA.

This fixes the new piglit gl-1.3-alpha_to_coverage_nop test.

ETQW is a game that enables GL_SAMPLE_ALPHA_TO_COVERAGE without MSAA.
Shrubs along the side of roads were invisible because fragments with
alpha < 0.5 were being discarded (zero coverage).

v2: remove ctx->DrawBuffer != NULL check.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
7 years agospirv: use subpass image type (v1.1)
Dave Airlie [Thu, 15 Sep 2016 01:08:28 +0000 (02:08 +0100)]
spirv: use subpass image type (v1.1)

This adds support for the input attachments subpass type
to the SPIRV->NIR pass.

v1.1: drop handling from vtn_handle_texture

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoglsl: add subpass image type (v2)
Dave Airlie [Thu, 15 Sep 2016 01:08:12 +0000 (02:08 +0100)]
glsl: add subpass image type (v2)

SPIR-V/Vulkan have a special image type for input attachments
called the subpass type. It has different characteristics than
other images types.

The main one being it can only be an input image to fragment
shaders and loads from it are relative to the frag coord.

This adds support for it to the GLSL types. Unfortunately
we've run out of space in the sampler dim in types, so we
need to use another bit.

v2: Fixup subpass input name (Jason)

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
7 years agoisl: Finish tiling filtering for Gen6.
Kenneth Graunke [Fri, 26 Aug 2016 20:01:13 +0000 (13:01 -0700)]
isl: Finish tiling filtering for Gen6.

Gen6 only has one additional restriction over Gen7+, so we just add it
to the existing gen7 function (which actually covers later gens too).

This should stop FINISHME spew when running GL on Sandybridge.

v2: Fix bytes per block vs. bits per block confusion (Jason) and
    rename function to gen6_filter_tiling (Jason and Chad).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
7 years agoi965: enable ARB_ES3_2_compatibility on gen8+
Ilia Mirkin [Sun, 28 Aug 2016 23:55:05 +0000 (19:55 -0400)]
i965: enable ARB_ES3_2_compatibility on gen8+

Note that ASTC support is not actually mandated for this extension to be
exposed.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Acked-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoi965/nir: Roll set_default_interpolation into lower_fs_inputs
Jason Ekstrand [Wed, 14 Sep 2016 17:42:42 +0000 (10:42 -0700)]
i965/nir: Roll set_default_interpolation into lower_fs_inputs

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoi965/fs: Use NIR for handling forced per-sample interpolation
Jason Ekstrand [Wed, 14 Sep 2016 17:39:52 +0000 (10:39 -0700)]
i965/fs: Use NIR for handling forced per-sample interpolation

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agonir: Add a flag to lower_io to force "sample" interpolation
Jason Ekstrand [Wed, 14 Sep 2016 17:29:38 +0000 (10:29 -0700)]
nir: Add a flag to lower_io to force "sample" interpolation

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agoi965/fs: Use sample interpolation for interpolateAtCentroid in persample mode
Jason Ekstrand [Wed, 14 Sep 2016 17:04:47 +0000 (10:04 -0700)]
i965/fs: Use sample interpolation for interpolateAtCentroid in persample mode

From the ARB_gpu_shader5 spec:

   The built-in functions interpolateAtCentroid() and interpolateAtSample()
   will sample variables as though they were declared with the "centroid"
   or "sample" qualifiers, respectively.

When running with persample dispatch forced by the API, we interpolate
anything that isn't flat as if it's qualified by "sample".  In order to
keep interpolateAtCentroid() consistent with the "centroid" qualifier, we
need to make interpolateAtCentroid() do sample interpolation instead.
Nothing in the GLSL spec guarantees that the result of
interpolateAtCentroid is uniform across samples in any way, so this is a
perfectly fine thing to do.

Fixes 8 of the new dEQP-VK.pipeline.multisample_interpolation.* Vulkan CTS
tests that specifically validate consistency between the "sample" qualifier
and interpolateAtSample()

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agomesa: check for no matrix change in _mesa_LoadMatrixf()
Brian Paul [Wed, 14 Sep 2016 18:16:18 +0000 (12:16 -0600)]
mesa: check for no matrix change in _mesa_LoadMatrixf()

Some apps issue redundant glLoadMatrixf() calls with the same matrix.
Try to avoid setting dirty state in that situation.

This reduces the number of constant buffer updates by about half in
ET Quake Wars.

Tested with Piglit, ETQW, Sauerbraten, Google Earth, etc.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
7 years agodirect-to-native-GL for GLX clients on Cygwin ("Windows-DRI")
Jon Turney [Mon, 11 Jul 2016 20:38:16 +0000 (21:38 +0100)]
direct-to-native-GL for GLX clients on Cygwin ("Windows-DRI")

Structurally, this is very similar to the existing Apple-DRI code, except I
have chosen to implement this using the __GLXDRIdisplay, etc. vtables (as
suggested originally in [1]), rather than a maze of ifdefs.  This also means
that LIBGL_ALWAYS_SOFTWARE and LIBGL_ALWAYS_INDIRECT work as expected.

[1] https://lists.freedesktop.org/archives/mesa-dev/2010-May/000756.html

This adds:

* the Windows-DRI extension protocol headers and the windowsdriproto.pc
file, for use in building the Windows-DRI extension for the X server

* a Windows-DRI extension helper client library

* a Windows-specific DRI implementation for GLX clients

The server is queried for Windows-DRI extension support on the screen before
using it (to detect the case where WGL is disabled or can't be activated).

The server is queried for fbconfigID to pixelformatindex mapping, which is
used to augment glx_config.

The server is queried for a native handle for the drawable (which is of a
different type for windows, pixmaps and pbuffers), which is used to augment
__GLXDRIdrawable.

Various GLX extensions are enabled depending on if the equivalent WGL
extension is available.

7 years agodocs: add news item and link release notes for 12.0.3
Emil Velikov [Thu, 15 Sep 2016 10:31:06 +0000 (11:31 +0100)]
docs: add news item and link release notes for 12.0.3

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
7 years agodocs: add sha256 checksums for 12.0.3
Emil Velikov [Thu, 15 Sep 2016 10:29:24 +0000 (11:29 +0100)]
docs: add sha256 checksums for 12.0.3

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit 09460b8cf7ddac4abb46eb6439314b29954c76a6)

7 years agodocs: add release notes for 12.0.3
Emil Velikov [Thu, 15 Sep 2016 09:18:54 +0000 (10:18 +0100)]
docs: add release notes for 12.0.3

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit d79b2e7bf30ad6d1fa43f30940a64ed9fd0aa9c0)

7 years agomesa: Expose RESET_NOTIFICATION_STRATEGY with KHR_robustness.
Kenneth Graunke [Sat, 3 Sep 2016 05:54:25 +0000 (22:54 -0700)]
mesa: Expose RESET_NOTIFICATION_STRATEGY with KHR_robustness.

This is supposed to be exposed with the GL_KHR_robustness extension,
which we support on ES 2.0 and later.  On desktop GL, it's also exposed
by GL_ARB_robustness, which is supported by all drivers ("dummy_true").
so we also allow desktop GL.

Fixes:
- ES32-CTS.robust.robustness.noResetNotification
- ES32-CTS.robust.robustness.loseContextOnReset

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
7 years agoanv/cmd_buffer: Set the L3 atomic disable mask bit in CHICKEN3 on HSW
Jason Ekstrand [Mon, 12 Sep 2016 19:58:38 +0000 (12:58 -0700)]
anv/cmd_buffer: Set the L3 atomic disable mask bit in CHICKEN3 on HSW

Without this bit set, the value in "L3 Atomic Disable" won't get applied by
the hardware so we won't properly get L3 atomic caching.

Fixes dEQP-VK.spirv_assembly.instruction.compute.opatomic.compex and 198 of
the dEQP-VK.image.atomic_operations.* tests on HSW

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
7 years agointel/blorp: Stop setting 3DSTATE_DRAWING_RECTANGLE
Jason Ekstrand [Mon, 12 Sep 2016 22:50:05 +0000 (15:50 -0700)]
intel/blorp: Stop setting 3DSTATE_DRAWING_RECTANGLE

The Vulkan driver sets 3DSTATE_DRAWING_RECTANGLE once to MAX_INT x MAX_INT
at the GPU initialization time and never sets it again.  The GL driver sets
it every time the framebuffer changes.  Originally, blorp set it to the
size of the drawing area but meant we had to set it back in the Vulkan
driver.  Instead, we can easily just do that in the GL driver's blorp_exec
implementation and not set it in blorp core.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agointel/blorp: Emit 3DSTATE_MULTISAMPLE directly
Jason Ekstrand [Mon, 12 Sep 2016 22:50:04 +0000 (15:50 -0700)]
intel/blorp: Emit 3DSTATE_MULTISAMPLE directly

Previously, we relied on a driver hook for 3DSTATE_MULTISAMPLE.  However,
now that Vulkan and GL use the same sample positions, we can set up
3DSTATE_MULTISAMPLE directly in blorp and delete the driver hook.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agointel: Move Vulkan sample positions to common code
Jason Ekstrand [Mon, 12 Sep 2016 22:50:03 +0000 (15:50 -0700)]
intel: Move Vulkan sample positions to common code

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
7 years agoRevert "tgsi/scan: don't set interp flags for inputs only used by INTERP instructions"
Marek Olšák [Wed, 14 Sep 2016 22:46:26 +0000 (00:46 +0200)]
Revert "tgsi/scan: don't set interp flags for inputs only used by INTERP instructions"

This reverts commit 524fd55d2d973f50a5d8bc2255684610f5faae32.

Reason: https://bugs.freedesktop.org/show_bug.cgi?id=97808

7 years agoi965/vec4: Assert that pull constant load offsets are 16B-aligned.
Francisco Jerez [Fri, 2 Sep 2016 05:37:57 +0000 (22:37 -0700)]
i965/vec4: Assert that pull constant load offsets are 16B-aligned.

Non-16B-aligned pull constant loads are unlikely to be particularly
useful given that you can get roughly the same effect by using
swizzles on the result.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Assert that ATTR regions are register-aligned.
Francisco Jerez [Fri, 2 Sep 2016 05:39:00 +0000 (22:39 -0700)]
i965/vec4: Assert that ATTR regions are register-aligned.

It might be useful to actually handle this once copy propagation
becomes smarter about register-misaligned offsets.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Don't spill non-GRF-aligned register regions.
Francisco Jerez [Fri, 2 Sep 2016 05:36:15 +0000 (22:36 -0700)]
i965/vec4: Don't spill non-GRF-aligned register regions.

A better fix would be to do something along the lines of the FS
back-end spilling code and emit a scratch read before any instruction
that overwrites the register to spill partially due to a non-zero
sub-register offset.  In the meantime mark registers used with a
non-zero sub-register offset as no-spill to prevent the spilling code
from miscompiling the program.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Fix copy propagation for non-register-aligned regions.
Francisco Jerez [Fri, 2 Sep 2016 05:31:43 +0000 (22:31 -0700)]
i965/vec4: Fix copy propagation for non-register-aligned regions.

This prevents it from trying to propagate a copy through a
register-misaligned region.  MOV instructions with a misaligned
destination shouldn't be treated as a direct GRF copy, because they
only define the destination GRFs partially.  Also fix the interference
check implemented with is_channel_updated() to consider overlapping
regions with different register offset to interfere, since the
writemask check implemented in the function is only valid under the
assumption that the source and destination regions are aligned
component by component.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Compare full register offsets in cmod propagation.
Francisco Jerez [Fri, 2 Sep 2016 05:26:59 +0000 (22:26 -0700)]
i965/vec4: Compare full register offsets in cmod propagation.

Cmod propagation would misoptimize the program if the destination
offset of the generating instruction wasn't exactly the same as the
source region offset of the copy instruction.  In preparation for
adding support for sub-GRF offsets to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Assign correct destination offset to rewritten instruction in register...
Francisco Jerez [Fri, 2 Sep 2016 05:12:04 +0000 (22:12 -0700)]
i965/vec4: Assign correct destination offset to rewritten instruction in register coalesce.

Because the pass already checks that the destination offset of each
'scan_inst' that needs to be rewritten matches 'inst->src[0].offset'
exactly, the final offset of the rewritten instruction is just the
original destination offset of the copy.  This is in preparation for
adding support for sub-GRF offsets to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Don't coalesce registers with overlapping writes not matching the MOV...
Francisco Jerez [Fri, 2 Sep 2016 05:08:29 +0000 (22:08 -0700)]
i965/vec4: Don't coalesce registers with overlapping writes not matching the MOV source.

In preparation for adding support for sub-GRF offsets to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Compare full register offsets in opt_register_coalesce nop move check.
Francisco Jerez [Fri, 2 Sep 2016 05:04:02 +0000 (22:04 -0700)]
i965/vec4: Compare full register offsets in opt_register_coalesce nop move check.

In preparation for adding support for sub-GRF offsets to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Check that the write offsets match when setting dependency controls.
Francisco Jerez [Fri, 2 Sep 2016 05:02:00 +0000 (22:02 -0700)]
i965/vec4: Check that the write offsets match when setting dependency controls.

For simplicity just assume that two writes to the same GRF with
different sub-GRF offsets will potentially interfere and break the
dependency control chain.  This is in preparation for adding sub-GRF
offset support to the VEC4 IR.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Change opt_vector_float to keep track of the last offset seen in bytes.
Francisco Jerez [Fri, 2 Sep 2016 04:51:07 +0000 (21:51 -0700)]
i965/vec4: Change opt_vector_float to keep track of the last offset seen in bytes.

This simplifies things slightly and makes the pass more correct in
presence of sub-GRF offsets.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Simplify src/dst_reg to brw_reg conversion by using byte_offset().
Francisco Jerez [Fri, 9 Sep 2016 01:00:11 +0000 (18:00 -0700)]
i965/vec4: Simplify src/dst_reg to brw_reg conversion by using byte_offset().

This should also have the side effect of fixing convert_to_hw_regs()
to handle sub-GRF register offsets.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/ir: Update several stale comments.
Francisco Jerez [Fri, 2 Sep 2016 20:53:13 +0000 (13:53 -0700)]
i965/ir: Update several stale comments.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/ir: Don't print ARF subnr values twice.
Francisco Jerez [Fri, 2 Sep 2016 03:42:24 +0000 (20:42 -0700)]
i965/ir: Don't print ARF subnr values twice.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/vec4: Print src/dst_reg::offset field consistently for all register files.
Francisco Jerez [Fri, 2 Sep 2016 20:52:54 +0000 (13:52 -0700)]
i965/vec4: Print src/dst_reg::offset field consistently for all register files.

C.f. 'i965/fs: Print fs_reg::offset field consistently for all
register files.'.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Print fs_reg::offset field consistently for all register files.
Francisco Jerez [Fri, 2 Sep 2016 03:31:47 +0000 (20:31 -0700)]
i965/fs: Print fs_reg::offset field consistently for all register files.

The offset printing code in fs_visitor::dump_instruction() was doing
things differently for sources and destinations and for each register
file -- In some cases it would be added to the base register number
fs_reg::nr, in other cases it would follow the base register separated
with a plus sign, in other cases (uniforms) it would do both (!).  The
sub-register offset was also being printed or not rather
inconsistently.  Fix it.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Misc simplification.
Francisco Jerez [Fri, 2 Sep 2016 04:19:29 +0000 (21:19 -0700)]
i965/fs: Misc simplification.

Get rid of some leftover redundant arithmetic introduced during the
conversion to byte offsets and sizes that can be simplified easily.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Get rid of fs_inst::set_smear().
Francisco Jerez [Thu, 1 Sep 2016 07:35:03 +0000 (00:35 -0700)]
i965/fs: Get rid of fs_inst::set_smear().

component() was generally a better alternative because of several
issues set_smear() had:

 - It wouldn't take the original stride and offset of the register
   into account, which means that set_smear() on the result of
   e.g. another set_smear() call or an offset() call would give a
   bogus region as result.

 - It was an inherently destructive operation.  See the
   'nir_intrinsic_shader_clock' hunk below for how this could lead to
   subtle bugs in cases where set_smear() was called multiple times on
   the same register like 'r.set_smear(0), r.set_smear(1)' with the
   expectation that each call would return a separate value instead of
   a reference to the same subsequently mutated object.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Use region_contained_in() in compute-to-mrf coalescing pass.
Francisco Jerez [Fri, 2 Sep 2016 03:06:40 +0000 (20:06 -0700)]
i965/fs: Use region_contained_in() in compute-to-mrf coalescing pass.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Move region_contained_in to the IR header and fix for non-VGRF files.
Francisco Jerez [Fri, 2 Sep 2016 03:03:44 +0000 (20:03 -0700)]
i965/fs: Move region_contained_in to the IR header and fix for non-VGRF files.

Also changed the argument names since 'src' and 'dst' don't make that
much sense outside of the context of copy propagation.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Change region_contained_in() to use byte units.
Francisco Jerez [Fri, 2 Sep 2016 02:47:56 +0000 (19:47 -0700)]
i965/fs: Change region_contained_in() to use byte units.

This makes the function less annoying to use and more accurate -- We
shouldn't propagate a copy into a register region that wasn't fully
contained in the destination of the copy (IOW, a source region that
wasn't fully defined by the copy) just because the number of registers
written and read by each instruction happened to get rounded up to the
same GRF multiple.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify copy propagation LOAD_PAYLOAD ACP setup.
Francisco Jerez [Fri, 2 Sep 2016 04:22:03 +0000 (21:22 -0700)]
i965/fs: Simplify copy propagation LOAD_PAYLOAD ACP setup.

By keeping track of 'offset' in byte units.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify a bunch of fs_inst::size_written calculations by using component_si...
Francisco Jerez [Fri, 2 Sep 2016 01:43:48 +0000 (18:43 -0700)]
i965/fs: Simplify a bunch of fs_inst::size_written calculations by using component_size().

Using component_size() is easier and generally more correct because it
takes into account the register type and stride for you.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify result_live calculation in dead_code_eliminate().
Francisco Jerez [Thu, 1 Sep 2016 23:46:34 +0000 (16:46 -0700)]
i965/fs: Simplify result_live calculation in dead_code_eliminate().

No need to unroll the first iteration of the loop manually.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify and fix buggy stride/offset calculations using subscript().
Francisco Jerez [Fri, 2 Sep 2016 02:16:01 +0000 (19:16 -0700)]
i965/fs: Simplify and fix buggy stride/offset calculations using subscript().

These were bashing the 'offset' and 'stride' values of several
registers without taking the previous value into account, which
probably didn't matter in practice for optimize_frontfacing_ternary()
because the 'tmp' register already had a known region, but it would
have given the wrong region as result in the other cases in
lower_integer_multiplication().  subscript(..., i) is a more
straightforward way to take the i-th field of a given type from each
channel of a register which should give the right answer as result
regardless of the original 'offset' and 'stride' parameters of the
register region.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify get_fpu_lowered_simd_width() by using inequalities instead of rounding.
Francisco Jerez [Wed, 7 Sep 2016 20:32:25 +0000 (13:32 -0700)]
i965/fs: Simplify get_fpu_lowered_simd_width() by using inequalities instead of rounding.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
7 years agoi965/fs: Simplify byte_offset().
Francisco Jerez [Fri, 2 Sep 2016 02:27:12 +0000 (19:27 -0700)]
i965/fs: Simplify byte_offset().

In the most common case this can now be implemented as a simple
addition because the offset is already encoded as a single scalar
value in bytes.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>