mesa.git
8 years agoegl: android: query native window default width and height (v2)
Haixia Shi [Thu, 28 Jul 2016 17:51:12 +0000 (10:51 -0700)]
egl: android: query native window default width and height (v2)

On android platform, the width and height of a native window surface may
be updated after initialization. It is therefore necessary to query android
framework for the current width and height.

v2: remove Android specific #ifdef's and just implement the fallback directly
if the platform query_surface() callback is not provided.

TEST=dEQP-EGL.functional.resize.surface_size#* on cyan-cheets

Reviewed-by: Kristian H. Kristensen <hoegsberg@chromium.org> (v1)
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: I673f7d2f1d90c3bf572b30f63da537f2cae1496e

8 years agoanv/device: Enable sample shading on gen7+
Anuj Phogat [Mon, 8 Aug 2016 23:10:00 +0000 (16:10 -0700)]
anv/device: Enable sample shading on gen7+

Passes all 30 min_sample_shading tests in vulkan cts.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/gen7_pipeline: Set multisample state using shared function
Anuj Phogat [Mon, 8 Aug 2016 21:36:40 +0000 (14:36 -0700)]
anv/gen7_pipeline: Set multisample state using shared function

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/pipeline: Add sample locations for gen7-7.5
Anuj Phogat [Mon, 8 Aug 2016 21:53:48 +0000 (14:53 -0700)]
anv/pipeline: Add sample locations for gen7-7.5

V1: Add multisample positions (Nanley)
V2: Fix 8x sample positions to match OpenGL (Anuj)
V3: Vulkan has standard sample locations. They need not be same as
    in OpenGL. (Anuj)

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/pipeline: Move emit_ms_state() to genX_pipeline_util.h
Anuj Phogat [Mon, 8 Aug 2016 21:48:07 +0000 (14:48 -0700)]
anv/pipeline: Move emit_ms_state() to genX_pipeline_util.h

This will help sharing multisample state setting code.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agogallium: Add c99_compat.h to u_bitcast.h
Mathias Fröhlich [Sat, 6 Aug 2016 05:26:59 +0000 (07:26 +0200)]
gallium: Add c99_compat.h to u_bitcast.h

We need this for 'inline'.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Tested-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agoutil: Move _mesa_fsl/util_last_bit into util/bitscan.h
Mathias Fröhlich [Tue, 2 Aug 2016 06:46:04 +0000 (08:46 +0200)]
util: Move _mesa_fsl/util_last_bit into util/bitscan.h

As requested with the initial creation of util/bitscan.h
now move other bitscan related functions into util.

v2: Split into two patches.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Tested-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agoradeonsi: enable multi-draw related pipe caps
Nicolai Hähnle [Thu, 28 Jul 2016 16:01:54 +0000 (17:01 +0100)]
radeonsi: enable multi-draw related pipe caps

This enables GL_shader_draw_parameters and GL_ARB_indirect_parameters as well
as a properly accelerated implementation of GL_ARB_multi_draw_indirect.

Enabling the feature requires a sufficiently uptodate firmware -- those have
already been released a long time ago, although this does mean that the
feature only works with the amdgpu kernel module, since the radeon module
doesn't have a way to query the firmware version.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: program additional multi draw parameters
Nicolai Hähnle [Mon, 8 Aug 2016 14:00:29 +0000 (16:00 +0200)]
radeonsi: program additional multi draw parameters

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: program the DRAWID SGPR
Nicolai Hähnle [Mon, 8 Aug 2016 13:54:50 +0000 (15:54 +0200)]
radeonsi: program the DRAWID SGPR

Note that for indirect draws, the new MULTI firmware packets are required.

There's also no need to reset last_{start_instance,sh_base_reg}, since
resetting last_base_vertex is sufficient.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: add DRAWID parameter to vertex shaders
Nicolai Hähnle [Mon, 8 Aug 2016 13:38:04 +0000 (15:38 +0200)]
radeonsi: add DRAWID parameter to vertex shaders

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: wire up TGSI_SEMANTIC_BASEINSTANCE
Nicolai Hähnle [Mon, 8 Aug 2016 13:33:14 +0000 (15:33 +0200)]
radeonsi: wire up TGSI_SEMANTIC_BASEINSTANCE

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: remove an incorrect assertion
Nicolai Hähnle [Mon, 8 Aug 2016 15:50:42 +0000 (17:50 +0200)]
radeonsi: remove an incorrect assertion

Byte indices don't need any alignment, so remove this assertion (it got moved
into a path where a piglit test hit it during the refactoring of
commit 64ff23a58c).

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: flush TC L2 cache for indirect draw data
Nicolai Hähnle [Mon, 8 Aug 2016 15:06:22 +0000 (17:06 +0200)]
radeonsi: flush TC L2 cache for indirect draw data

This fixes a bug when indirect draw data is generated by transform
feedback.

Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi/sid: add additional bits for the DRAW_(INDEX)_INDIRECT_MULTI packets
Nicolai Hähnle [Mon, 8 Aug 2016 13:54:56 +0000 (15:54 +0200)]
radeonsi/sid: add additional bits for the DRAW_(INDEX)_INDIRECT_MULTI packets

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agost/mesa: define ST_NEW_ flags as uint64_t values, not enums
Brian Paul [Mon, 8 Aug 2016 22:37:00 +0000 (16:37 -0600)]
st/mesa: define ST_NEW_ flags as uint64_t values, not enums

MSVC doesn't support 64-bit enum values, at least not with C code.
The compiler was warning:

c:\users\brian\projects\mesa\src\mesa\state_tracker\st_atom_list.h(43) : warning
 C4309: 'initializing' : truncation of constant value
c:\users\brian\projects\mesa\src\mesa\state_tracker\st_atom_list.h(44) : warning
 C4309: 'initializing' : truncation of constant value
...

And at runtime we crashed since the high 32-bits of the 'dirty' bitmask
was always 0xffffffff and the 32+u_bit_scan() index went out of bounds of
the atoms[] array.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agomesa: simplify ff fs generator a bit
Miklós Máté [Sat, 6 Aug 2016 21:34:00 +0000 (15:34 -0600)]
mesa: simplify ff fs generator a bit

Literally.

Signed-off-by: Miklós Máté <mtmkls@gmail.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
8 years agoddebug: dump driver states and shaders for apitrace calls
Marek Olšák [Sun, 7 Aug 2016 14:24:40 +0000 (16:24 +0200)]
ddebug: dump driver states and shaders for apitrace calls

I think this was an oversight when the PIPE_DUMP flags were added.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agonir: make use of nir_cf_list_extract() helper
Timothy Arceri [Fri, 5 Aug 2016 01:08:20 +0000 (11:08 +1000)]
nir: make use of nir_cf_list_extract() helper

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agonir: Always print non-identity swizzles.
Matt Turner [Tue, 22 Sep 2015 17:30:05 +0000 (10:30 -0700)]
nir: Always print non-identity swizzles.

Previously we would not print a swizzle on ssa_52 when only its .x
component is used (as seen in the definition of ssa_53):

   vec3 ssa_52 = fadd ssa_51, ssa_51
   vec1 ssa_53 = flog2 ssa_52
   vec1 ssa_54 = flog2 ssa_52.y
   vec1 ssa_55 = flog2 ssa_52.z

But this makes the interpretation of the RHS of the definition difficult
to understand and dependent on the size of the LHS. Just print swizzles
when they are not the identity swizzle, so the previous example is now
printed as:

   vec3 ssa_52 = fadd ssa_51.xyz, ssa_51.xyz
   vec1 ssa_53 = flog2 ssa_52.x
   vec1 ssa_54 = flog2 ssa_52.y
   vec1 ssa_55 = flog2 ssa_52.z

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/pipeline/gen7: Set multisample modes
Lionel Landwerlin [Mon, 8 Aug 2016 19:30:08 +0000 (20:30 +0100)]
anv/pipeline/gen7: Set multisample modes

Fixes the following failures :

dEQP-VK.api.copy_and_blit.resolve_image.whole_4_bit
dEQP-VK.api.copy_and_blit.resolve_image.whole_8_bit
dEQP-VK.api.copy_and_blit.resolve_image.partial_4_bit
dEQP-VK.api.copy_and_blit.resolve_image.partial_8_bit
dEQP-VK.api.copy_and_blit.resolve_image.with_regions_4_bit
dEQP-VK.api.copy_and_blit.resolve_image.with_regions_8_bit

Tested on IVB/HSW

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoanv/pipeline: rename info to rs_info in emit_rs_state
Lionel Landwerlin [Mon, 8 Aug 2016 19:30:07 +0000 (20:30 +0100)]
anv/pipeline: rename info to rs_info in emit_rs_state

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoRevert "glsl: don't try to lower non-gl builtins as if they were gl_FragData"
Marek Olšák [Mon, 8 Aug 2016 20:05:29 +0000 (22:05 +0200)]
Revert "glsl: don't try to lower non-gl builtins as if they were gl_FragData"

This reverts commit a37e46323c7e18bec4160f2f66847c10b7041dc1.

It broke the game Overlord such that it hung a GCN GNU. While I don't know
how the hang happened because of its randomness and gfx corruption precedes
it, many of the shaders contain this:

out vec4 FragData[gl_MaxDrawBuffers];

8 years agoegl/android: Add support for YV12 pixel format (v2)
Tomasz Figa [Tue, 2 Aug 2016 11:07:54 +0000 (20:07 +0900)]
egl/android: Add support for YV12 pixel format (v2)

This patch adds support for YV12 pixel format to the Android platform
backend. Only creating EGL images is supported, it is not added to the
list of available visuals.

v2: Use const array defined just for YV12 instead of trying to be overly
    generic.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Signed-off-by: Kalyan Kondapally <kalyan.kondapally@intel.com>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: I4aeb2d67a95c5cdd10b530c549b23146c8f0b983

8 years agost/mesa: Make Gallium's BlitFramebuffer follow the GL 4.4 sRGB rules.
Kenneth Graunke [Wed, 3 Aug 2016 18:39:18 +0000 (11:39 -0700)]
st/mesa: Make Gallium's BlitFramebuffer follow the GL 4.4 sRGB rules.

OpenGL 4.4 specifies that BlitFramebuffer should perform sRGB encode
and decode like ES 3.x does, but only when GL_FRAMEBUFFER_SRGB is
enabled.  This is technically incompatible in certain cases, but is
more consistent across GL, ES, and WebGL, and more flexible.

The NVIDIA 367.35 drivers appear to follow this behavior.

For the awful spec analysis, please read Piglit's
tests/spec/arb_framebuffer_srgb/blit.c, which explains the differences
between GL 4.1, 4.2, 4.3 (2012), 4.3 (2013), and 4.4, and why this
is the right rule to implement.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agometa: Make Meta's BlitFramebuffer() follow the GL 4.4 sRGB rules.
Kenneth Graunke [Tue, 2 Aug 2016 23:32:52 +0000 (16:32 -0700)]
meta: Make Meta's BlitFramebuffer() follow the GL 4.4 sRGB rules.

Just avoid whacking GL_FRAMEBUFFER_SRGB altogether, so we respect
the application's setting.  This appears to work.

v2: Update one more comment (requested by Ian).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965: Make BLORP's BlitFramebuffer follow the GL 4.4 sRGB rules.
Kenneth Graunke [Tue, 2 Aug 2016 04:56:38 +0000 (21:56 -0700)]
i965: Make BLORP's BlitFramebuffer follow the GL 4.4 sRGB rules.

OpenGL 4.4 specifies that BlitFramebuffer should perform sRGB encode
and decode like ES 3.x does, but only when GL_FRAMEBUFFER_SRGB is
enabled.  This is technically incompatible in certain cases, but is
more consistent across GL, ES, and WebGL, and more flexible.

The NVIDIA 367.35 drivers appear to follow this behavior.

For the awful spec analysis, please read Piglit's
tests/spec/arb_framebuffer_srgb/blit.c, which explains the differences
between GL 4.1, 4.2, 4.3 (2012), 4.3 (2013), and 4.4, and why this
is the right rule to implement.

Note that ctx->Color.sRGBEnabled is initialized to _mesa_is_gles(ctx),
and ES doesn't have enable/disable flags for GL_FRAMEBUFFER_SRGB, so
it's effectively on all the time.  This means the ES behavior should
be unchanged.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965: Make BLORP do sRGB encode/decode on ES 2 as well.
Kenneth Graunke [Wed, 3 Aug 2016 06:48:47 +0000 (23:48 -0700)]
i965: Make BLORP do sRGB encode/decode on ES 2 as well.

This should have no effect, as all drivers which support BLORP also
support ES 3.0 - so ES 2.0 would be promoted and follow the ES 3 rules.

ES 1.0 doesn't have BlitFramebuffer.

This is purely to clarify the next patch a bit.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoRevert "st/mesa: use sRGB formats for MSAA resolving if destination is sRGB"
Kenneth Graunke [Wed, 3 Aug 2016 18:32:21 +0000 (11:32 -0700)]
Revert "st/mesa: use sRGB formats for MSAA resolving if destination is sRGB"

This reverts commit 4e549ddb500cf677b6fa16d9ebdfa67cc23da097,
dropping the hack from Gallium that I just deleted from i965.

See the previous commit for rationale.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoi965: Drop the "do resolves in sRGB" hack.
Kenneth Graunke [Tue, 2 Aug 2016 18:04:01 +0000 (11:04 -0700)]
i965: Drop the "do resolves in sRGB" hack.

I've never quite understood the purpose of this hack - supposedly,
doing resolves in the sRGB colorspace is slightly more accurate.

Currently, BlitFramebuffer() ignores sRGB encoding and decoding
on OpenGL, although it encodes and decodes in GLES 3.x.

The updated OpenGL 4.4 rules also allow for encoding and decoding
if GL_FRAMEBUFFER_SRGB is enabled, allowing the application to
control what colorspace blits are done in.  I don't think this hack
makes any sense in such a world - the application can do what it
wants, and we shouldn't second guess them.

A related Piglit patch, "Make multisample accuracy test set
GL_FRAMEBUFFER_SRGB when resolving." makes the Piglit MSAA accuracy
test explicitly request SRGB encoding/decoding during resolves when
running "srgb" subtests.  Without that patch, this commit will regress
those tests, but with it, they should continue to work just fine.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoi965: Bail on the BLT path if BlitFramebuffer requires sRGB conversion.
Kenneth Graunke [Wed, 3 Aug 2016 03:58:30 +0000 (20:58 -0700)]
i965: Bail on the BLT path if BlitFramebuffer requires sRGB conversion.

Modern OpenGL BlitFramebuffer require sRGB encode/decode when
GL_FRAMEBUFFER_SRGB is enabled.  The blitter can't handle this,
so we need to bail.  On Gen4-5, this means falling back to Meta,
which should handle it.

We allow sRGB <-> sRGB blits, as decode then encode ought to be a noop
(other than potential precision loss, which nobody wants anyway).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoegl/android: Make get_fourcc() accept HAL formats
Tomasz Figa [Tue, 2 Aug 2016 11:07:53 +0000 (20:07 +0900)]
egl/android: Make get_fourcc() accept HAL formats

There are DRI_IMAGE_FOURCC macros, for which there are no corresponding
DRI_IMAGE_FORMAT macros. To support such formats we need to make the
lookup function take the native format directly. As a side effect, it
simplifies all existing calls to this function, because they all called
get_format() first to convert from native to DRI_IMAGE_FORMAT.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: I4674000fb5ccfd02e38b8fa89bc567ac1d4fc16b

8 years agoegl/android: Refactor image creation to separate flink and prime paths (v2)
Tomasz Figa [Tue, 2 Aug 2016 11:07:52 +0000 (20:07 +0900)]
egl/android: Refactor image creation to separate flink and prime paths (v2)

This patch splits current dri2_create_image_android_native_buffer() into
main entry point and two additional functions, one for creating an image
from flink name and one for handling prime FDs using the generic DMA-buf
path. This makes the code cleaner and also prepares for disabling flink
path more easily in the future.

v2: Split into separate patch.
    Add error messages.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: Ifdfb5927399d56992fe707160423c29278f49172

8 years agoegl/android: Respect buffer mask in droid_image_get_buffers (v2)
Tomasz Figa [Tue, 2 Aug 2016 11:07:50 +0000 (20:07 +0900)]
egl/android: Respect buffer mask in droid_image_get_buffers (v2)

Drivers can request different set of buffers depending on the buffer
mask they pass to the get_buffers callback. This patch makes
droid_image_get_buffers() respect this mask.

v2: Return error only in case of real error condition and ignore requests
    of unavailable buffers.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: I6c3c4eca90f4c618579f6725dec323c004cb44ba

8 years agoegl/android: Remove unused variables in droid_get_buffers_with_format()
Tomasz Figa [Tue, 2 Aug 2016 11:07:49 +0000 (20:07 +0900)]
egl/android: Remove unused variables in droid_get_buffers_with_format()

Fix compilation warnings due to unused variables left after some earlier
code changes.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: Iec09eb2a62887f3a38dff156756ed8385f3f3447

8 years agoanv/pipeline/gen7: Set the depth format in 3DSTATE_SF
Jason Ekstrand [Sat, 6 Aug 2016 16:11:53 +0000 (09:11 -0700)]
anv/pipeline/gen7: Set the depth format in 3DSTATE_SF

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoisl: Add a helper for getting a depth format from an isl_format
Jason Ekstrand [Sat, 6 Aug 2016 16:11:10 +0000 (09:11 -0700)]
isl: Add a helper for getting a depth format from an isl_format

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoanv/pipeline: Unify 3DSTATE_RASTER and 3DSTATE_SF setup between gen7 and gen8
Jason Ekstrand [Sat, 6 Aug 2016 15:28:23 +0000 (08:28 -0700)]
anv/pipeline: Unify 3DSTATE_RASTER and 3DSTATE_SF setup between gen7 and gen8

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoanv/pipeline/gen8: Set 3DSTATE_SF::StatisticsEnable
Jason Ekstrand [Mon, 8 Aug 2016 18:08:09 +0000 (11:08 -0700)]
anv/pipeline/gen8: Set 3DSTATE_SF::StatisticsEnable

We've been setting it in gen7 forever but never in gen8; best to make it
consistent.  This hasn't caused any problems yet because we don't advertise
support for statistics queries yet.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoanv/pipeline/gen8: Unconditionally set DXMultisampleRasterizaitonEnable
Jason Ekstrand [Sat, 6 Aug 2016 15:42:51 +0000 (08:42 -0700)]
anv/pipeline/gen8: Unconditionally set DXMultisampleRasterizaitonEnable

The multisample rasterization mode is computed based on this field,
3DSTATE_RASTER::DXMultisampleRasterizationMode (only for forced
multisampling), 3DSTATE_RASTER::APIMode, and the number of samples.  There
are two tables in the SKL PRM that describe how the final multisample mode
is calculated: "Windower (WM) Stage >> Multisampling >> Multisample
ModeState >> Table 1" and the formula for "SF_INT::Multisample
Rasterization Mode".

The "DX Multisample Rasterization Enable" bit changes whether multisample
mode is set to OFF_PIXEL or ON_PATTERN in the samples > 1 case.  In the
samples == 1 case, the bit has no effect.  Since Vulkan has no concept of
disabling multisampling for samples > 1, we can just set the bit.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoanv/pipeline/gen8: Use fewer designated initializers in emit_rs_state
Jason Ekstrand [Sat, 6 Aug 2016 14:55:10 +0000 (07:55 -0700)]
anv/pipeline/gen8: Use fewer designated initializers in emit_rs_state

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agogenxml: Make 3DSTATE_SF more consistent between gen7 and gen8+
Jason Ekstrand [Sat, 6 Aug 2016 15:24:00 +0000 (08:24 -0700)]
genxml: Make 3DSTATE_SF more consistent between gen7 and gen8+

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agoanv/pipeline/gen8: Remove an old comment
Jason Ekstrand [Sat, 6 Aug 2016 14:52:23 +0000 (07:52 -0700)]
anv/pipeline/gen8: Remove an old comment

This is now handled in emit_3dstate_clip

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
8 years agomesa: Skip ES 3.0/3.1 transform feedback primitive counting error.
Kenneth Graunke [Thu, 29 Oct 2015 07:21:18 +0000 (00:21 -0700)]
mesa: Skip ES 3.0/3.1 transform feedback primitive counting error.

This error condition is not implementable when using tessellation or
geometry shaders.  The text was also removed from the ES 3.2 spec.
I believe the intended behavior is to remove the error condition
when either OES_geometry_shader or OES_tessellation_shader are
exposed.

v2: Quote a better part of issue 13 (suggested by Ian).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomesa: Share code between _mesa_validate_DrawArrays[_Instanced].
Kenneth Graunke [Fri, 8 Jul 2016 23:18:03 +0000 (16:18 -0700)]
mesa: Share code between _mesa_validate_DrawArrays[_Instanced].

Mostly, I want to share the GLES 3 transform feedback handling,
though most of the rest of the code is identical as well.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoglsl: Implicitly enable OES_shader_io_blocks if geom/tess are enabled.
Kenneth Graunke [Sat, 21 May 2016 18:46:22 +0000 (11:46 -0700)]
glsl: Implicitly enable OES_shader_io_blocks if geom/tess are enabled.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoglsl: Expose gl_PointSize if OES/EXT_tessellation_point_size is enabled.
Kenneth Graunke [Fri, 27 May 2016 18:12:45 +0000 (11:12 -0700)]
glsl: Expose gl_PointSize if OES/EXT_tessellation_point_size is enabled.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoglsl: Add extension plumbing for OES/EXT_tessellation_shader.
Kenneth Graunke [Fri, 8 Jul 2016 19:00:30 +0000 (12:00 -0700)]
glsl: Add extension plumbing for OES/EXT_tessellation_shader.

This adds the #extension directive support, built-in #defines,
lexer keyword support, and updates has_tessellation_shader().

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomesa: Move tessellation shader gets to GL_CORE, GLES31 section.
Kenneth Graunke [Fri, 8 Jul 2016 18:49:30 +0000 (11:49 -0700)]
mesa: Move tessellation shader gets to GL_CORE, GLES31 section.

This makes them available in the GLES 3.1 API.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomesa: Add {OES,EXT}_tessellation_shader to the extensions table.
Kenneth Graunke [Fri, 8 Jul 2016 18:48:15 +0000 (11:48 -0700)]
mesa: Add {OES,EXT}_tessellation_shader to the extensions table.

Also update _mesa_has_tessellation to know about the new extensions.

For now, these are dummy_false, to avoid turning on the extension
until everything's in place.  Eventually, we'll move them over to
the "ARB_tessellation_shader" bit so that any drivers supporting
both the desktop extension and ES 3.1 get the feature.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agomapi: Add PatchParameteriOES and PatchParameteriEXT.
Kenneth Graunke [Fri, 8 Jul 2016 18:42:08 +0000 (11:42 -0700)]
mapi: Add PatchParameteriOES and PatchParameteriEXT.

The OES_tessellation_shader and EXT_tessellation_shader specifications
have suffixed names.  These are identical to the core function, so just
alias them.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
8 years agoradeonsi: add has_draw_indirect_multi flag
Nicolai Hähnle [Fri, 29 Jul 2016 16:59:11 +0000 (17:59 +0100)]
radeonsi: add has_draw_indirect_multi flag

Prefer to use DRAW_(INDEX)_INDIRECT_MULTI when available in the firmware.

Versions for SI and CI already added as provided by the firmware team, but
keep in mind that they won't currently be used since the radeon kernel module
has no interface to query the firmware version.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: transpose indirect/index draw dispatch
Nicolai Hähnle [Fri, 29 Jul 2016 17:05:30 +0000 (18:05 +0100)]
radeonsi: transpose indirect/index draw dispatch

This allows better code sharing for indirect draw calls.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: move index buffer calculations in si_emit_draw_packets up
Nicolai Hähnle [Fri, 29 Jul 2016 16:56:21 +0000 (17:56 +0100)]
radeonsi: move index buffer calculations in si_emit_draw_packets up

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: unify emitting PKT3_SET_BASE for indirect draws
Nicolai Hähnle [Fri, 29 Jul 2016 16:51:23 +0000 (17:51 +0100)]
radeonsi: unify emitting PKT3_SET_BASE for indirect draws

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agowinsys/amdgpu: query ME/PFP/CE firmware versions
Nicolai Hähnle [Thu, 28 Jul 2016 15:40:21 +0000 (16:40 +0100)]
winsys/amdgpu: query ME/PFP/CE firmware versions

The radeon kernel module doesn't have the firmware query interface, so the
corresponding values will remain 0.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: move spi_ps_input_addr override outside of the loop
Nicolai Hähnle [Wed, 3 Aug 2016 11:30:32 +0000 (13:30 +0200)]
radeonsi: move spi_ps_input_addr override outside of the loop

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: drop unnecessary u_pstipple.h include
Nicolai Hähnle [Wed, 3 Aug 2016 10:54:45 +0000 (12:54 +0200)]
radeonsi: drop unnecessary u_pstipple.h include

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoradeonsi: do not pass the return type to buffer_load_const
Nicolai Hähnle [Wed, 3 Aug 2016 10:52:28 +0000 (12:52 +0200)]
radeonsi: do not pass the return type to buffer_load_const

Overriding it is not allowed anyway, and actually lead to a crash when polygon
stippling was used with monolithic shaders.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
8 years agoglsl: Combine GS and TES array resizing visitors.
Kenneth Graunke [Fri, 8 Jul 2016 20:29:31 +0000 (13:29 -0700)]
glsl: Combine GS and TES array resizing visitors.

These are largely identical, except that the GS version has a few
extra error conditions.  We can just pass in the stage and skip these.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Fix location bias for patch variables.
Kenneth Graunke [Fri, 24 Jun 2016 07:09:00 +0000 (00:09 -0700)]
glsl: Fix location bias for patch variables.

We need to subtract VARYING_SLOT_PATCH0, not VARYING_SLOT_VAR0.

Since "patch" only applies to inputs and outputs, we can just handle
this once outside the switch statement, rather than replicating the
check twice and complicating the earlier conditions.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Fix the program resource names of gl_TessLevelOuter/Inner[].
Kenneth Graunke [Fri, 24 Jun 2016 06:12:45 +0000 (23:12 -0700)]
glsl: Fix the program resource names of gl_TessLevelOuter/Inner[].

These are lowered to gl_TessLevel{Outer,Inner}MESA.  We need them to
appear in the program resource list with their original names and types.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Delete bogus ir_set_program_inouts assert.
Kenneth Graunke [Wed, 28 Oct 2015 23:39:11 +0000 (16:39 -0700)]
glsl: Delete bogus ir_set_program_inouts assert.

This assertion is bogus.  Varying structs, and arrays of structs, are
allowed by GLSL, and we can see them here.  While we currently don't
have any partial-variable support for those, simply returning false
and marking the entire thing as used is certainly legitimate.

I believe this is often swept under the rug by varying packing,
but that's disabled in certain tessellation situations.

Hit by 20 dEQP-GLES31.functional.tessellation.user_defined_io.* tests.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Simplify interface qualifier parsing.
Kenneth Graunke [Thu, 2 Jun 2016 01:40:21 +0000 (18:40 -0700)]
glsl: Simplify interface qualifier parsing.

This better matches the grammar in section 4.3.9 of the GLSL 4.5 spec,
and also removes some redundant code.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoglsl: Add a has_tessellation_shader() helper.
Kenneth Graunke [Fri, 20 May 2016 22:17:37 +0000 (15:17 -0700)]
glsl: Add a has_tessellation_shader() helper.

Similar to has_geometry_shader(), has_compute_shader(), and so on.
This will make it easier to add more conditions here later.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
8 years agoRevert "gallium/radeon: count contexts"
Marek Olšák [Sat, 6 Aug 2016 15:28:57 +0000 (17:28 +0200)]
Revert "gallium/radeon: count contexts"

This reverts commit b403eb338533894ee012a96bf55653996c92ec7c.

Not needed.

8 years agoradeonsi: add GLSL lit tests
Marek Olšák [Sat, 30 Jul 2016 22:50:14 +0000 (00:50 +0200)]
radeonsi: add GLSL lit tests

They can only be run manually as described in HOW_TO_RUN.
It should help catch suboptimal code generation.

Some of the tests already fail.

v2: rename the tests to *.glsl,
    fix lit.cfg to find FileCheck

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (v1)
8 years agoradeonsi: add a standalone compiler amdgcn_glslc
Marek Olšák [Sat, 30 Jul 2016 22:48:11 +0000 (00:48 +0200)]
radeonsi: add a standalone compiler amdgcn_glslc

This will be used by GLSL lit tests.

For developers only. It shouldn't be distributable and it doesn't use
the Mesa build system.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: add environment variable SI_FORCE_FAMILY
Marek Olšák [Sat, 30 Jul 2016 22:46:09 +0000 (00:46 +0200)]
radeonsi: add environment variable SI_FORCE_FAMILY

This will be used by: amdgcn_glslc -mcpu=[family]

It can also be used for shader-db if you want stats for a different family.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agowinsys/radeon: implement cs_get_next_fence
Marek Olšák [Mon, 1 Aug 2016 22:44:55 +0000 (00:44 +0200)]
winsys/radeon: implement cs_get_next_fence

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agowinsys/amdgpu: implement cs_get_next_fence
Marek Olšák [Mon, 1 Aug 2016 22:44:55 +0000 (00:44 +0200)]
winsys/amdgpu: implement cs_get_next_fence

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: add cs_get_next_fence winsys callback
Marek Olšák [Mon, 1 Aug 2016 22:43:02 +0000 (00:43 +0200)]
gallium/radeon: add cs_get_next_fence winsys callback

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: count contexts
Marek Olšák [Fri, 15 Jul 2016 21:17:43 +0000 (23:17 +0200)]
gallium/radeon: count contexts

We don't wanna use unflushed fences when we have multiple contexts.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: count gfx IB flushes
Marek Olšák [Fri, 15 Jul 2016 21:16:08 +0000 (23:16 +0200)]
gallium/radeon: count gfx IB flushes

This will be used as a counter for whether fence_finish needs to flush
the IB.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: move radeon_winsys::cs_memory_below_limit to drivers
Marek Olšák [Fri, 29 Jul 2016 19:53:23 +0000 (21:53 +0200)]
gallium/radeon: move radeon_winsys::cs_memory_below_limit to drivers

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: inline radeon_winsys::query_memory_usage
Marek Olšák [Fri, 29 Jul 2016 19:41:23 +0000 (21:41 +0200)]
gallium/radeon: inline radeon_winsys::query_memory_usage

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon/winsyses: expose per-IB used_vram and used_gart to drivers
Marek Olšák [Fri, 29 Jul 2016 19:39:00 +0000 (21:39 +0200)]
gallium/radeon/winsyses: expose per-IB used_vram and used_gart to drivers

The following patches will use this.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon/winsyses: print CS submission error number
Marek Olšák [Fri, 29 Jul 2016 16:31:33 +0000 (18:31 +0200)]
gallium/radeon/winsyses: print CS submission error number

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: flush if constant, shader, and streamout buffers use too much memory
Marek Olšák [Fri, 29 Jul 2016 16:18:36 +0000 (18:18 +0200)]
radeonsi: flush if constant, shader, and streamout buffers use too much memory

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: flush if sampler views and images use too much memory
Marek Olšák [Fri, 29 Jul 2016 15:48:28 +0000 (17:48 +0200)]
radeonsi: flush if sampler views and images use too much memory

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: deal with high vertex buffer memory usage correctly
Marek Olšák [Fri, 29 Jul 2016 15:28:43 +0000 (17:28 +0200)]
radeonsi: deal with high vertex buffer memory usage correctly

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: take compute shader and dispatch indirect memory usage into account
Marek Olšák [Fri, 29 Jul 2016 14:33:50 +0000 (16:33 +0200)]
radeonsi: take compute shader and dispatch indirect memory usage into account

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: take scratch buffer and draw indirect memory usage into account
Marek Olšák [Fri, 29 Jul 2016 14:33:50 +0000 (16:33 +0200)]
radeonsi: take scratch buffer and draw indirect memory usage into account

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agoradeonsi: check IB memory usage of CP DMA operations
Marek Olšák [Fri, 29 Jul 2016 14:20:19 +0000 (16:20 +0200)]
radeonsi: check IB memory usage of CP DMA operations

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agogallium/radeon: add r600_resource::vram_usage and gart_usage
Marek Olšák [Fri, 29 Jul 2016 13:48:18 +0000 (15:48 +0200)]
gallium/radeon: add r600_resource::vram_usage and gart_usage

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
8 years agomesa: Copy bitmask of VBOs in the VAO on gl{Push,Pop}Attrib.
Mathias Fröhlich [Mon, 1 Aug 2016 04:55:35 +0000 (06:55 +0200)]
mesa: Copy bitmask of VBOs in the VAO on gl{Push,Pop}Attrib.

On gl{Push,Pop}Attrib(GL_CLIENT_VERTEX_ARRAY_BIT) take
care that gl_vertex_array_object::VertexAttribBufferMask
matches the bound buffer object in the
gl_vertex_array_object::VertexBinding array.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Fredrik Höglund <fredrik@kde.org>
8 years agoanv/gen7_pipeline: Set PixelShaderKillPixel for discards
Nanley Chery [Thu, 4 Aug 2016 22:47:23 +0000 (15:47 -0700)]
anv/gen7_pipeline: Set PixelShaderKillPixel for discards

According to the IVB PRM Vol2 P1, this bit must be set if a pixel shader
contains a discard instruction.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97207
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
8 years agoutil/r11g11b10f: Whitespace cleanups
Jason Ekstrand [Wed, 3 Aug 2016 18:06:19 +0000 (11:06 -0700)]
util/r11g11b10f: Whitespace cleanups

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoutil/format: Use explicitly sized types
Jason Ekstrand [Wed, 3 Aug 2016 16:58:13 +0000 (09:58 -0700)]
util/format: Use explicitly sized types

Both the rgb9e5 and r11g11b10 formats are defined based on how they are
packed into a 32-bit integer.  It makes sense that the functions that
manipulate them take an explicitly sized type.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoutil/rgb9e5: Get rid of the float754 union
Jason Ekstrand [Wed, 3 Aug 2016 16:54:03 +0000 (09:54 -0700)]
util/rgb9e5: Get rid of the float754 union

There are a number of reasons for this refactor.  First, format_rgb9e5.h is
not something that a user would expect to define such a generic union.
Second, defining it requires checking for endianness which is ugly.  Third,
90% of what we were doing with the union was float <-> uint32_t bitcasts
and the remaining 10% can be done with a sinmple left-shift by 23.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoutil/format_rgb9e5: Get rid of the rgb9e5 union
Jason Ekstrand [Wed, 3 Aug 2016 16:39:00 +0000 (09:39 -0700)]
util/format_rgb9e5: Get rid of the rgb9e5 union

The rgb9e5 format is a packed format defined in terms of slicing up a
single 32-bit value.  The bitfields are far more confusing than simple
shifts and require that we check the endianness.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoutil: Move format_r11g11b10f.h to src/util
Jason Ekstrand [Wed, 3 Aug 2016 16:22:13 +0000 (09:22 -0700)]
util: Move format_r11g11b10f.h to src/util

It's used from both mesa main and gallium.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoutil: Move format_rgb9e5.h to src/util
Jason Ekstrand [Wed, 3 Aug 2016 16:16:12 +0000 (09:16 -0700)]
util: Move format_rgb9e5.h to src/util

It's used from both mesa main and gallium.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
8 years agoglsl: fix indentation, comments and line lengths in ast_function.cpp
Andres Gomez [Tue, 2 Aug 2016 20:19:28 +0000 (23:19 +0300)]
glsl: fix indentation, comments and line lengths in ast_function.cpp

Acked-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
8 years agoglsl: apply_implicit_conversion is static again
Andres Gomez [Tue, 2 Aug 2016 11:26:23 +0000 (14:26 +0300)]
glsl: apply_implicit_conversion is static again

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
8 years agoglsl: struct constructors/initializers only allow implicit conversions
Andres Gomez [Sat, 30 Jul 2016 14:57:54 +0000 (17:57 +0300)]
glsl: struct constructors/initializers only allow implicit conversions

When an argument for a structure constructor or initializer doesn't
match the expected type, only Section 4.1.10 “Implicit Conversions”
are allowed to try to match that expected type.

From page 32 (page 38 of the PDF) of the GLSL 1.20 spec:

  " The arguments to the constructor will be used to set the structure's
    fields, in order, using one argument per field. Each argument must
    be the same type as the field it sets, or be a type that can be
    converted to the field's type according to Section 4.1.10 “Implicit
    Conversions.”"

From page 35 (page 41 of the PDF) of the GLSL 4.20 spec:

  " In all cases, the innermost initializer (i.e., not a list of
    initializers enclosed in curly braces) applied to an object must
    have the same type as the object being initialized or be a type that
    can be converted to the object's type according to section 4.1.10
    "Implicit Conversions". In the latter case, an implicit conversion
    will be done on the initializer before the assignment is done."

v2: Remove also the now redundant constant conversion, the
    constant_record_constructor helper and the replacement code
    (Timothy).

Fixes GL44-CTS.shading_language_420pack.initializer_list_negative

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
8 years agoglsl: Refactor implicit conversion into its own helper
Andres Gomez [Tue, 2 Aug 2016 13:20:59 +0000 (16:20 +0300)]
glsl: Refactor implicit conversion into its own helper

v2: Refactor also the conversion to constant and replacement code
    (Timothy).

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
8 years agoglsl/types: disallow implicit conversions before GLSL 1.20
Andres Gomez [Sat, 30 Jul 2016 22:46:59 +0000 (01:46 +0300)]
glsl/types: disallow implicit conversions before GLSL 1.20

Implicit conversions were added in the GLSL 1.20 spec version.

v2: Join the checks for GLSL 1.10 and ESSL (Timothy).

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Andres Gomez <agomez@igalia.com>
8 years agoi965: Rework the unlit centroid workaround.
Kenneth Graunke [Tue, 2 Aug 2016 03:59:08 +0000 (20:59 -0700)]
i965: Rework the unlit centroid workaround.

Previously, for every input, we moved the dispatch mask to the flag
register, then emitted two predicated PLN instructions, one with
centroid barycentric coordinates (for normal pixels), and one with
pixel barycentric coordinates (for unlit helper pixels).

Instead, we can simply emit a set of predicated MOVs at the top of
the program which copy the pixel barycentric coordinates over the
centroid ones for unlit helper pixel channels.  Then, we can just
use normal PLNs.

On Sandybridge:

total instructions in shared programs: 7538470 -> 7534500 (-0.05%)
instructions in affected programs: 101268 -> 97298 (-3.92%)
helped: 705
HURT: 9 (all of which are SIMD16 programs)

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
8 years agoswr: [rasterizer core] static analysis fixes for conservative rast
Tim Rowley [Fri, 29 Jul 2016 17:47:49 +0000 (11:47 -0600)]
swr: [rasterizer core] static analysis fixes for conservative rast

Signed-off-by: Tim Rowley <timothy.o.rowley@intel.com>