History log of /external/mesa3d/src/compiler/glsl/link_varyings.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
957ec00243ec8ccc0a94f68106d079b54685fe5a 07-Jan-2017 Kenneth Graunke <kenneth@whitecape.org> Revert recent GLSL slot counting fiasco.

I apparently broke mark_whole_variable in ir_set_program_inouts.
It was passing a type that wasn't var->type, so the wrapper didn't
work out. It's all broken, revert it and start over.

Fixes all kinds of things on other drivers.

Revert "glsl: Make is_fixed_function_array actually check for varyings."

This reverts commit 42699e12711668a142b7acf11c168cf4301c1295.

Revert "glsl: Mark whole variable used for ClipDistance and TessLevel*."

This reverts commit 5c580e64cc206ab160e1767c42e4d6c81f67da4d.

Revert "glsl: Override the # of varying slots for ClipDistance and TessLevel*."

This reverts commit 8b5749f65ac434961308ccb579fb8a816e4f29d5.

Revert "glsl: Create and use a new ir_variable::count_attribute_slots() wrapper."

This reverts commit 6aa5cb34d03765b7be8611aa516bc201bd337f73.
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
6aa5cb34d03765b7be8611aa516bc201bd337f73 15-Nov-2015 Kenneth Graunke <kenneth@whitecape.org> glsl: Create and use a new ir_variable::count_attribute_slots() wrapper.

This wraps glsl_type::count_attribute_slots(), but will soon contain a
couple of overrides for a couple of GLSL built-ins variables.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
700bc94dcebf4257740483d2ba467b138234fa1a 03-Nov-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa/glsl: move LinkedTransformFeedback from gl_shader_program to gl_program

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

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

Reviewed-by: Eric Anholt <eric@anholt.net>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ab8c01386ac1c832f3143f57091ed5cf9725c151 09-Nov-2016 Timothy Arceri <timothy.arceri@collabora.com> st/mesa/glsl: move Version to gl_shader_program_data

This is mostly just used during linking however the st uses it
when updating textures.

In order to store gl_program in the CurrentProgram array
rather than gl_shader_program we need to move this field to
the shared gl_shader_program_data struct.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
cbba5e13acc2052349f7e2d304e6dddf31fb199a 09-Nov-2016 Ian Romanick <ian.d.romanick@intel.com> linker: Remove unnecessary overload of program_resource_visitor::visit_field

It looks like I added this version as a short-hand for users that didn't
need the fuller version. I don't think there's any real utility in
that. I'm not sure what my thinking was there. Maybe if those users
overloaded the recursion function could just call the compact version to
avoid passing some parameters? None of the users do that.

Either way, having this extra overload is not useful. Delete it.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
73f53c097a6bbd07572d5e46af4893d17ff8af93 05-Nov-2016 Ilia Mirkin <imirkin@alum.mit.edu> glsl: record number of components used in each slot for varying packing

Instead of packing varyings into vec4's, keep track of how many
components each slot uses and create varyings with matching types. This
ensures that we don't end up using more components than the orginal
shader, which is especially important for geometry shader output limits.

This comes up for NVIDIA hw, where the limit is 1024 output components
for a GS, and the hardware complains *loudly* if you even think about
going over.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
885c78801785701fdca0217a7b0f992f26115ee4 05-Nov-2016 Ilia Mirkin <imirkin@alum.mit.edu> glsl: fix slot_end calculations and simplify reserved_slots check

The previous code was confused about whether slot_end was inclusive or
exclusive. Make it so that it is inclusive consistently, and use it for
setting the new location. This also avoids discrepancies in how
num_components is calculated vs the more manual approach taken for the
former reserved_slots check.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
29c174a3e57c9d6ea36fcfb75e0a04b76fc03ee6 24-Sep-2016 Timothy Arceri <timothy.arceri@collabora.com> Revert "glsl: move xfb BufferStride into gl_transform_feedback_info"

This reverts commit f5a6aab4031bc4754756c1773411728ad9a73381.

This broke some tests. It seems gl_transform_feedback_info gets memset
to 0 so we were losing the values in BufferStride before we used them.
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
f5a6aab4031bc4754756c1773411728ad9a73381 23-Sep-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: move xfb BufferStride into gl_transform_feedback_info

It makes more sense to have this here where we store the other values
from xfb qualifiers. The struct it was previously part of is now only
used to store values that come from the api.

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ae0a4a1299f649ff550a0dfd59d60fc8b91df54f 09-Sep-2016 Marek Olšák <marek.olsak@amd.com> 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>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
f10cc9407b9144fec3e608767edf3bf02df647f2 16-Aug-2016 Thomas Helland <thomashelland90@gmail.com> glsl: Convert link_varyings to the util hash table

Signed-off-by: Thomas Helland <thomashelland90@gmail.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
9c562956f97cbb0698c0dc232eb594e7018a6c08 31-Aug-2016 Kenneth Graunke <kenneth@whitecape.org> glsl: Only force varyings to be flat when varying packing.

Varying packing would like to mark certain variables as flat.
This works as long as both sides of the interfaces are changed
accordingly. However, with SSO, we disable varying packing on
the outermost stages. We also disable varying packing for
certain tessellation stages.

With SSO, we operate on the producer and consumer separately.
Checks based on the consumer stage and variable are risky, and
can easily lead to altering one half of the interface between
stages, breaking SSO pipeline IO validation.

Just stop monkeying around with interpolation modes unless
required for varying packing. There's no point. This also
disables it in unsafe SSO cases.

Fixes CTS tests:
*.tessellation_shader.tessellation_control_to_tessellation_evaluation.gl_MaxPatchVertices_Position_PointSize

Also fixes Piglit's spec/oes_geometry_shader/sso_validation:
- user-defined-gs-input-not-in-block.shader_test
- user-defined-gs-input-in-block.shader_test

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
f9f462936ad903f93829404ce99a2580ea21b725 11-Aug-2016 Kenneth Graunke <kenneth@whitecape.org> glsl: Fix invariant matching in GLSL 4.30 and GLSL ES 1.00.

Old languages (GLSL <= 4.20 and GLSL ES 1.00) require "invariant"
to be specified on both inputs and outputs, and match when linking.

New languages only allow outputs to be qualified as "invariant"
and remove the "invariant must match" restriction when linking
varyings (because no input can have that qualifier).

Commit 426a50e2089b12d33f5c075aa5622f64076914a3 introduced the new
behavior for ES 3.00. It also removed the "must match" restriction
for ES 1.00 shaders, which I believe is incorrect. This patch adds
that back, as well as making 4.30+ follow the new rules.

Thanks to Qiankun Miao for noticing this discrepancy.

Fixes a WebGL 2.0 conformance test when run in Chromium:
https://www.khronos.org/registry/webgl/sdk/tests/deqp/data/gles3/shaders/qualification_order.html?webglVersion=2

Cc: mesa-stable@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96971
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
29d70cc964411e86bcd0bbc5591b3d82f849c9f8 27-Jul-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: free hash tables earlier

These are only used by get_matching_input() which has been call
at this point so free the hash tables.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
91dde3ddcaf6ca5a7aa2d2e9815236ce2ddf698f 26-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: re-enable varying packing in GL4.4+

We can still do packing we just need to get the packing type from the consumer
rather than the producer.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97033
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ac1181ffbef5250cb3b651e047cce5116727c34c 07-Jul-2016 Kenneth Graunke <kenneth@whitecape.org> compiler: Rename INTERP_QUALIFIER_* to INTERP_MODE_*.

Likewise, rename the enum type to glsl_interp_mode.

Beyond the GLSL front-end, talking about "interpolation modes" seems
more natural than "interpolation qualifiers" - in the IR, we're removed
from how exactly the source language specifies how to interpolate an
input. Also, SPIR-V calls these "decorations" rather than "qualifiers".

Generated by:
$ find . -regextype egrep -regex '.*\.(c|cpp|h)' -type f -exec sed -i \
-e 's/INTERP_QUALIFIER_/INTERP_MODE_/g' \
-e 's/glsl_interp_qualifier/glsl_interp_mode/g' {} \;

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Acked-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
3119871bd9558e5881466b70a4c366d2f83bba82 14-Jun-2016 Ian Romanick <ian.d.romanick@intel.com> glsl: Pack integer and double varyings as flat even if interpolation mode is none

v2: Also update varying_matches::compute_packing_class(). Suggested by
Timothy Arceri.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96358
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Cc: Gregory Hainaut <gregory.hainaut@gmail.com>
Cc: Ilia Mirkin <imirkin@alum.mit.edu>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
1591e668e162daf4057a0d44df4e70f19b94fc76 30-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl/mesa: move duplicate shader fields into new struct gl_shader_info

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
1fb8c6df884c2a17cf980c4ea32db4c214903b55 30-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl/mesa: split gl_shader in two

There are two distinctly different uses of this struct. The first
is to store GL shader objects. The second is to store information
about a shader stage thats been linked.

The two uses actually share few fields and there is clearly confusion
about their use. For example the linked shaders map one to one with
a program so can simply be destroyed along with the program. However
previously we were calling reference counting on the linked shaders.

We were also creating linked shaders with a name even though it
is always 0 and called the driver version of the _mesa_new_shader()
function unnecessarily for GL shader objects.

Acked-by: Iago Toral Quiroga <itoral@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
31dee99e052902bc08ddbb1009748dc982ac3211 05-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa/glsl: stop using GL shader type internally

Instead use the internal gl_shader_stage enum everywhere. This
makes things more consistent and gets rid of unnecessary
conversions.

Ideally it would be nice to remove the Type field from gl_shader
altogether but currently it is used to differentiate between
gl_shader and gl_shader_program in the ShaderObjects hash table.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
30df78236c14ca9470fd591a0978625490c010b2 10-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix component overlap validation for doubles

This change makes sure to remove arrays when checking if type
is a double.

The check for the end of the first slot of a multi-slot double
is also fixed by bumping the check to 4 rather than 3.
Previously we were we not reserving the last component.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ad3def919e8bdb4f01db0f06d54961175a1910c4 09-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix max varyings count for ARB_enhanced_layouts

Since this extension allows more than one varying to share a single
location we can't just count the number of slots a varying takes and
add it to the total.

Instead we now reuse the reserved varyings bitfield to determine how
many slots are reserved for explicit locations instead.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
2df46519e4aeb330df30890c2702d96891c18964 08-Jun-2016 Dave Airlie <airlied@redhat.com> glsl/link_varyings: switch to 64bit check instead of double.

This is prep work for int64 support.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
35616a9e0ef0511ebb77e7076c00f2eeb248933a 08-Jun-2016 Dave Airlie <airlied@redhat.com> glsl: use new interfaces for 64-bit checks.

This is just prep work for int64 support, changing
places where 64-bit matters no doubles.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
1f66a4b68955b9d6cae629cec90e5e0f301c6a7a 06-Jun-2016 Dave Airlie <airlied@redhat.com> glsl: for anonymous struct matching use without_array() (v3)

With tessellation shaders we can have cases where we have
arrays of anon structs, so make sure we match using without_array().

Fixes:
GL45-CTS.tessellation_shader.tessellation_control_to_tessellation_evaluation.gl_in

v2:
test lengths match as well (Ilia)
v3:
descend array lengths to check for matches as well (Ilia)

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
1fe7bbb911ac708999685c942e971693b688a334 30-May-2016 Dave Airlie <airlied@redhat.com> glsl/linker: fix multiple streams transform feedback.

e2791b38b42f83add5b07298c39741bf0a6d7d4b
mesa/program_interface_query: fix transform feedback varyings.

caused a regression in
GL45-CTS.gtf40.GL3Tests.transform_feedback3.transform_feedback3_multiple_streams
on radeonsi.

The problem was it was using the skip components varying to set
the stream id, when it should wait until a varying was written,
this just adds the varying checks in the right place.

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
98d40b4d1195ebfaa2fd9ed43755ca6896422c1a 01-Jun-2016 Timothy Arceri <timothy.arceri@collabora.com> Revert "glsl: fix xfb_offset unsized array validation"

This reverts commit aac90ba2920cf5ceb4df6dba776dd3952780e456.

The commit caused a regression in:
piglit.spec.glsl-1_50.compiler.gs-input-nonarray-named-block.geom

Also the CTS test it was meant to fix seems like it may be bogus.

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
aac90ba2920cf5ceb4df6dba776dd3952780e456 27-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix xfb_offset unsized array validation

This partially fixes CTS test:
GL44-CTS.enhanced_layouts.xfb_get_program_resource_api

The test now fails at a tes evaluation shader with unsized output arrays.

The ARB_enhanced_layouts spec says:

"It is a compile-time error to apply xfb_offset to the declaration of an
unsized array."

So this seems like a bug in the CTS.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
e2791b38b42f83add5b07298c39741bf0a6d7d4b 23-May-2016 Dave Airlie <airlied@redhat.com> mesa/program_interface_query: fix transform feedback varyings.

The spec says gl_NextBuffer and gl_SkipComponents need to be
returned to userspace in the program interface queries.

We currently throw those away, this requires a complete piglit
run to make sure no drivers fallover due to the extra varyings.

This fixes:
GL45-CTS.program_interface_query.transform-feedback-built-in

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
2d9308012c5da0891b099b5082c17d28bc51bb09 23-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix explicit location validation for doubles

Previously we would fail to find a match for the second half of a
dvec4 as 'i' would get incremented to 1 before we added the var to
the array at component 0.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
61b67892522c89800541ed4f266ab88e5f1db620 17-May-2016 Dave Airlie <airlied@redhat.com> glsl/linker: attempt to match anonymous structures at link

This is my attempt at fixing at least one of the UE4 bugs with GL4.3.

If we are doing intrastage matching and hit anonymous structs, then
we should do a record comparison instead of using the names.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95005
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
cf9220b11f599ca77134528f5b4ad505f1345e1c 18-May-2016 Ian Romanick <ian.d.romanick@intel.com> glsl/linker: Fix trivial typos in comments

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
d2579728c96e1386cc2c1894c958a219edc27639 17-May-2016 Ian Romanick <ian.d.romanick@intel.com> glsl/linker: Fix some formatting to match current coding conventions

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
02e4753777deb15f3313b3f23a7a73dededd0a61 16-May-2016 Ian Romanick <ian.d.romanick@intel.com> glsl/linker: Silence unused parameter warning

The use of the parameter was removed in d6b92028.

glsl/link_varyings.cpp:1390:39: warning: unused parameter ‘separate_shader’ [-Wunused-parameter]
bool separate_shader)
^

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
4fb4fd0b6b1fe8387dc4c9154359f890d379e9cd 17-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: make reserved_varying_slot() static

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
1d752823afd53f3c8de8175aa9f40f130d15335f 26-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: include per-patch varyings when generating reserved slot bitfield

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
3f477f0ea53b92be4a7b026fdffb3664f154218b 17-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: remove remainings tabs in link_varyings.cpp

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
6d5f7557fb45d56e38f7e19060e05de4c77a9ee5 17-May-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix location and component packing validation on patches

These varyings have a separate location domain from per-vertex varyings
and need to be handled separately.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
d656736bbf926c219b6bcbc0ad59132fc82a7382 08-May-2016 Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de> glsl: Add arb_cull_distance support (v3)

v2: make too large array a compile error
v3: squash mesa/prog patch to avoid static compiler errors in bisect

Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
eb18fea707fd7859e712ee7279e9acc68e177ceb 08-May-2016 Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de> mesa/main: Add support for GL_ARB_cull_distance (v2)

airlied:
v2: rename LowerClipDistance to LowerCombinedClipCullDistnace.
I don't think we want any other behaviour with any current hw.

Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
0d88b15f073d09afed1747d9cdde98f15c7aa28d 17-Dec-2015 Timothy Arceri <timothy.arceri@collabora.com> glsl: cross validate varyings with a component qualifier

This change checks for component overlap, including handling overlap of
locations and components by doubles. Previously there was no validation
for assigning explicit locations to a location used by the second half
of a double.

V3: simplify handling of doubles and fix double component aliasing
detection

V2: fix component matching for matricies

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
72b5d00c9cdffea1452341657f07461725b6962f 24-Dec-2015 Timothy Arceri <timothy.arceri@collabora.com> glsl: fix cross validation for explicit locations on structs and arrays

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
26c56e24e700d0ab4c6499fea28328045b5e4b32 03-Apr-2016 Kenneth Graunke <kenneth@whitecape.org> glsl: Don't remove XFB-only varyings.

Consider the case of linking a program with both a vertex and fragment
shader. The VS may compute output varyings that are intended for
transform feedback, and not read by the fragment shader.

In this case, var->data.is_unmatched_generic_inout will be true,
but we still cannot eliminate the varyings. We need to also check
!var->data.is_xfb_only.

Fixes failures in ES31-CTS.gpu_shader5.fma_precision_*, which happen
to use transform feedback in a way we apparently hadn't seen before.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ef1b397b0770ddc24240462a1426f6c3fd4952bb 12-Mar-2016 Jordan Justen <jordan.l.justen@intel.com> glsl: Don't require matching centroid qualifiers

Note: This patch appears to violate older OpenGL and OpenGLES specs.

The OpenGLES GLSL 3.1 and OpenGL GLSL 4.3 specifications both remove
the requirement for the output and input centroid qualifiers to match.

The deqp
dEQP-GLES3.functional.shaders.linkage.varying.rules.differing_interpolation_2
test wants the newer OpenGLES 3.1 specification behavior, even for
OpenGLES 3.0. This patch simply removes the checking in all cases.

The OpenGLES 3.0 conformance test suite doesn't appear to require the
older ("must match") spec behavior.

For reference, here are the relavent spec citations:

The OpenGL 4.2 spec says: "the last active shader stage output
variables and fragment shader input variables of the same name must
match in type and qualification (other than out matching to in)"

The OpenGL 4.3 spec says: "interpolation qualification (e.g., flat)
and auxiliary qualification (e.g. centroid) may differ."

The OpenGLES GLSL 3.00.4 specification says: "The output of the
vertex shader and the input of the fragment shader form an
interface. For this interface, vertex shader output variables and
fragment shader input variables of the same name must match in type
and qualification (other than precision and out matching to in)."

The OpenGLES GLSL 3.10 Specification says: "interpolation
qualification (e.g., flat) and auxiliary qualification (e.g.
centroid) may differ"

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92743
Bugzilla: https://cvs.khronos.org/bugzilla/show_bug.cgi?id=7819
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
c5704bb350425162011367e47be8c69d424a8797 10-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa: add query support for GL_TRANSFORM_FEEDBACK_BUFFER interface

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
9e317271d7694d912da99e524294156b6c2de96e 10-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa: add support to query GL_TRANSFORM_FEEDBACK_BUFFER_INDEX

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
51142e7705a5e0c28de9fc097fa7c8446ba0cffe 10-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa: add support to query GL_OFFSET for GL_TRANSFORM_FEEDBACK_VARYING

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
b77c9098782a36cb811891b2bcb572eb61e608ac 14-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: always enable transform feedback mode when xfb_stride defined

This enables in shader defined transform feedback mode even if the
only place xfb_stride is defined is on the global out.

We don't worry about xfb_buffer since Issue 22 c) in the spec says:

"If the shader has an "xfb_buffer" qualifier identifying a buffer,
but doesn't declare "xfb_offset" on anything associated with it,
what happens?

...

variables not qualified with "xfb_offset" are not captured, which
makes the associated "xfb_buffer" qualifier irrelevant."

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
c95e92b14d69c114b79d941c7e8902a0ea62c287 14-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: handle varyings that are not written to but have an xfb_offset

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
a2fbc5ed44ec8ebf0e8936ff5b21425159511413 13-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: reset current stream tracker

When we move to the next buffer we need to reset the stream
so that we don't generate an error message about streams not
matching.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
f2a3c87a00bb38aa63dfb3a5818b2d53ca46c663 11-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: generate link error when implicit stride is to large

This moves the check until after we have done the stride
calculation and applies it to the xfb_* qualifiers.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
2fab85aaea59cb2d31d34ea6de94180ca83fe2dd 03-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: add xfb_stride link time validation

From the ARB_enhanced_layous spec:

"It is a compile-time or link-time error to have any *xfb_offset*
that overflows *xfb_stride*, whether stated on declarations before
or after the *xfb_stride*, or in different compilation units.

...

When no *xfb_stride* is specified for a buffer, the stride of a
buffer will be the smallest needed to hold the variable placed at
the highest offset, including any required padding."

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
8120e869b1cde7fd1a3679291782f2f50296cb45 11-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: validate global out xfb_stride qualifiers and set stride on empty buffers

Here we use the built-in validation in
ast_layout_expression::process_qualifier_constant() to check for mismatching
global out strides on buffers in a single shader.

From the ARB_enhanced_layouts spec:

"While *xfb_stride* can be declared multiple times for the same buffer,
it is a compile-time or link-time error to have different values
specified for the stride for the same buffer."

For intrastage validation a new helper link_xfb_stride_layout_qualifiers()
is created. We also take this opportunity to make sure stride is at least
a multiple of 4, we will validate doubles at a later stage.

From the ARB_enhanced_layouts spec:

"If the buffer is capturing any double-typed outputs, the stride must
be a multiple of 8, otherwise it must be a multiple of 4, or a
compile-time or link-time error results."

Finally we update store_tfeedback_info() to apply the strides to
LinkedTransformFeedback and update the buffers bitmask to mark any global
buffers with a stride as active. For example a shader with:

layout (xfb_buffer = 0, xfb_offset = 0) out vec4 gs_fs;
layout (xfb_buffer = 1, xfb_stride = 64) out;

Is expected to have a buffer bound to both 0 and 1.

From the ARB_enhanced_layouts spec:

"A binding point requires a bound buffer object if and only if its
associated stride in the program object used for transform feedback
primitive capture is non-zero."

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
cf039a309a36ba537b45f3bfe7e5a154c87d51ad 10-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> mesa: split transform feedback buffer into its own struct

This will be used in a following patch to implement interface
query support for TRANSFORM_FEEDBACK_BUFFER.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
258299d87ad932246ae8b1aa979b4a1a398db155 03-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: use bitmask of active xfb buffer indices

This allows us to print the correct binding point when not all
buffers declared in the shader are bound.

For example if we use a single buffer:

layout(xfb_buffer=2, offset=0) out vec4 v;

We now print '2' when the buffer is not bound rather than '0'.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
99cb5151ed2203842922027fe80512248abad914 11-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: sort xfb varyings in offset/buffer order

The existing transform feedback code expects to receive the list
of varyings in increasing buffer order.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
0c66460fc65e1c45ec2268c978ea11b259441212 24-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: basic linking support for xfb qualifiers

This adds the initial infrastructure for enabling transform feedback
mode via in shader qualifiers and adds initial buffer support.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
4305a60173432635cde2f0f1dea8a715ed327bbc 24-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: add xfb helpers and fields to the tfeedback_decl class

We also apply any array/struct offsets.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
0822517936d473f4889b07606e131e1dc3199644 24-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: add helper to process xfb qualifiers during linking

This function checks for any xfb_* qualifiers which will enable
transform feedback mode and cause any API defined xfb varyings
to be ignored.

It also counts the number of varyings that have a xfb_offset
qualifier and finally it calls the create_xfb_varying_names()
helper to generate the names of varyings to be caputured.

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
707fd3972f3c2e16c710cd7ce819d0c5439c28fd 24-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: add helper to generate xfb varying names

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
8765a9e0fe2987caa6af7473cbc4c55754621806 11-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: generate named interface block names correctly

Firstly this updates the named interface lowering pass to store the
interface without the arrays removed.

Note we need to remove the arrays in the interface/varying matching
code to not regress things but in future this should be fixed
futher as it would seem we currently successfully match interface
blocks with differnt array sizes.

Since we now know if the interface was an array we can reduce the
IR flags from_named_ifc_block_array and from_named_ifc_block_nonarray
to just from_named_ifc_block.

Next rather than having a different code path for named interface
blocks in program_resource_visitor we just make use of the one used
by UBOs this allows us to now handle arrays of arrays correctly.

Finally we add a new param to the recursion function
named_ifc_member this is because we only want to process a single
member at a time. Note that this is also the glsl_struct_field
from the original ifc type before lowering rather than the type
from the lowered variable. This fixes a bug in Mesa where we would
generate the names like WithInstArray[0].g[0][0] when it should be
WithInstArray[0].g[0] for the following interface.

out WithInstArray {
float g[3];
} instArray[2];

Reviewed-by: Dave Airlie <airlied@redhat.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
d6b9202873f015174592e32f3325d00c57153d2d 29-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: disable varying packing when its not safe

In GL 4.4+ there is no guarantee that interpolation qualifiers will
match between stages so we cannot safely pack varyings using the
current packing pass in Mesa.

We also disable packing on outerward facing interfaces for SSO
because in ES we need to retain the unpacked varying information
for draw time validation. For desktop GL we could allow packing for
SSO in versions < 4.4 but its just safer not to do so.

We do however enable packing on individual arrays, structs, and
matrices as these are required by the transform feedback code and it
is still safe to do so.

Finally we also enable packing when a varying is only used for
transform feedback and its not a SSO.

This fixes all remaining rendering issues with the dEQP SSO tests,
the only issues remaining with thoses tests are to do with validation.

Note: There is still one remaining SSO bug that this patch doesn't fix.
Their is a chance that VS -> TCS will have mismatching interfaces
because we pack VS output in case its used by transform feedback but
don't pack TCS input for performance reasons. This patch will make the
situation better but doesn't fix it.

V4: fix out of order function params after rebase, make sure packing
still disabled in tess stages. Update comments as to why we disable
packing on SSO.

V3: ES 3.1 *does* require interpolation to match so don't disable
packing there. Rebased on master rather than on enhanced layouts
component packing series.

V2: Make is_varying_packing_safe() a function in the varying_matches
class, fix spelling (Matt) and make sure to remove the outer array
when dealing with Geom and Tess shaders where appropriate.
Lastly fix piglit regression in new piglit test and document the
undefined behaviour it depends on:
arb_separate_shader_objects/execution/vs-gs-linking.shader_test

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
c0ae6eeb3b0ea42344cc91cd0caa7bd0296172d4 23-Nov-2015 Timothy Arceri <timothy.arceri@collabora.com> glsl: pass disable_varying_packing bool to the lowering pass

This will allow us to choose to ignore the disable which will be
useful for more fine grained control over when to enable or disable
packing.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ebc419fcbddb80648c526efc2b15e15e474724e3 08-Mar-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: don't validate ifc blocks using validation meant for variables

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
31943e6ba5f6bf14797fb4d7699faa69d6899d12 24-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: replace remaining tabs in link_varyings.cpp

Reviewed-by: Thomas Helland <thomashelland90@gmail.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
00a1bd13b5c6b565b5d15409a6f814b0df2fbe29 15-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: warn in GL as well as ES when varying not written

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93339
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
ea7f64f74d0910f72730849d3081ae8a62cc28d4 02-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: don't generate transform feedback candidate when not required

If we are not even looking for one don't bother generating a candidate
list.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
c1bbaff1e83f901d67d78f9e1ddfe8291dd09bfa 02-Feb-2016 Timothy Arceri <timothy.arceri@collabora.com> glsl: replace unreachable code with an assert()

All interface blocks will have been lowered by this point so just
use an assert. Returning false would have caused all sorts of
problems if they were not lowered yet and there is an assert to
catch this later anyway.

We also update the tests to reflect this change.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
f9c43dd22f92cd631f7feffb362a4cd3dad06c87 26-Jan-2016 Samuel Iglesias Gonsálvez <siglesias@igalia.com> glsl: double-precision values don't support interpolation

ARB_gpu_shader_fp64 spec says:

"This extension does not support interpolation of double-precision
values; doubles used as fragment shader inputs must be qualified as
"flat"."

Fixes the regressions added by commit 781d278:

arb_gpu_shader_fp64-double-gettransformfeedbackvarying
arb_gpu_shader_fp64-tf-interleaved
arb_gpu_shader_fp64-tf-interleaved-aligned
arb_gpu_shader_fp64-tf-separate

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93878
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp
eb63640c1d38a200a7b1540405051d3ff79d0d8a 17-Jan-2016 Emil Velikov <emil.velikov@collabora.com> glsl: move to compiler/

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Acked-by: Matt Turner <mattst88@gmail.com>
Acked-by: Jose Fonseca <jfonseca@vmware.com>
/external/mesa3d/src/compiler/glsl/link_varyings.cpp