Daniel Schürmann
ce87da71e9
nir: add pass to lower discard() to demote()
...
This pass is intended to work around game bugs, only!
It also lowers nir_intrinsic_load_helper_invocation to
nir_intrinsic_is_helper_invocation for consistency.
Reviewed-by: Marek Olšák <marek.olsak@amd.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4047 >
2020-03-09 12:29:32 +00:00
Daniel Schürmann
5adcfa68a9
nir: gather info whether a shader uses demote_to_helper
...
Reviewed-by: Marek Olšák <marek.olsak@amd.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4047 >
2020-03-09 12:29:32 +00:00
Tapani Pälli
24408acca4
nir: fix compilation warning on glsl_get_internal_ifc_packing
...
Removes following warning:
warning: 'const' type qualifier on return type has no effect
Signed-off-by: Tapani Pälli <tapani.palli@intel.com >
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4111 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4111 >
2020-03-09 09:43:49 +00:00
Timothy Arceri
1da6b7f8a3
glsl: add subroutine support to nir linker
...
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
b1bc24f826
glsl: dont try to assign uniform storage for uniform blocks
...
Fixes a crash in some shaders.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
576b5ace9e
glsl: add support for builtins to the nir uniform linker
...
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
79127f8d5b
glsl: set ShaderStorageBlocksWriteAccess in the nir linker
...
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
17f240b874
glsl: nir linker fix setting of ssbo top level array
...
This helps correcly set it for each top level member and correctly
handle unsized arrays.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
8ffd09f311
glsl: find the base offset for block members from unnamed blocks
...
These block member have been split into individual vars so we need
to set the correct offsets for each member in the new glsl nir
linker. We also take this opportunity to set the correct location
for the variable.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
76ce775240
glsl: correctly set explicit offsets for struct members
...
This correctly sets offsets set in glsl when using the nir linker.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
590a59437f
glsl: add std140 and std430 layouts to nir uniform linker
...
The current ARB_gl_spirv linking only supports explicit layouts so
we need to update it to support std140 and std430 layouts before
we can use the linker for glsl.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
858a49a10d
nir: add glsl_get_std430_size() helper
...
This will be used by the nir glsl linker for linking uniforms.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
a005f1a6e7
nir: add glsl_get_std430_base_alignment() helper
...
This will be used by the nir glsl linker for linking uniforms.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
1ccfe821b2
nir: add glsl_get_std140_size() helper
...
This will be used by the nir glsl linker for linking uniforms.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
120a26c6f2
nir: add glsl_get_std140_base_alignment() helper
...
This will be used by the nir glsl linker for linking uniforms.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
262b611a5b
nir: add glsl_get_internal_ifc_packing() helper
...
This will be used by the nir glsl linker for linking uniforms.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
a02d8e040f
glsl: correctly find block index when linking glsl with nir linker
...
The existing code for spirv expects all vars to have explicit
bindings set which is not true for glsl.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
10b816d27e
glsl: add name support to nir uniform linker
...
Name support is optional for spirv support but is required for glsl
support.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
aa9b457062
glsl: move get_next_index() earlier in nir link uniforms
...
We will use get_next_index() in more of the helper functions in
the following patches.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
219cefe24f
glsl: move add_parameter() earlier in nir link uniforms
...
We will use add_parameter() in more of the helper functions in
the following patches.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Timothy Arceri
51898c8ee5
glsl: move nir link uniforms struct defs earlier
...
We will need to use the state in more of the helper functions in
the following patches.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4050 >
2020-03-06 23:22:14 +00:00
Alejandro Piñeiro
2ba272135a
nir/linker: remove reference to just SPIR-V linking
...
Several files had a initial comment about the purpose of such files,
including a reference that the NIR linker was implemented with just
ARB_gl_spirv in mind.
Since the nice job Timothy is doing to use the NIR linker on GLSL,
that is not true anymore, so let's remove that reference and also
tweak some other comments.
Acked-by: Timothy Arceri <tarceri@itsqueeze.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4081 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4081 >
2020-03-06 12:28:08 +00:00
Samuel Pitoiset
913d2dcd23
nir/lower_input_attachments: remove bogus assert in try_lower_input_texop()
...
It can be a sampler too.
Fixes: 84b08971fb ("nir/lower_input_attachments: lower nir_texop_fragment_{mask}_fetch")
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2558
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com >
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4043 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4043 >
2020-03-06 09:13:40 +00:00
Kristian H. Kristensen
9f9432d56c
Revert "spirv: Use a simpler and more correct implementaiton of tanh()"
...
This reverts commit da1c49171d .
The reduced formula has precision problems on fp16 around 0. Bring
back the old formula, but make sure to keep the clamping.
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4054 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4054 >
2020-03-05 15:23:31 +00:00
Kristian H. Kristensen
986e92f0ea
Revert "glsl: Use a simpler formula for tanh"
...
This reverts commit 9807f502eb .
The simplified formula doesn't pass the tanh dEQP tests when we lower
to fp16 math.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4054 >
2020-03-05 15:23:31 +00:00
Jason Ekstrand
b20693be41
nir: Flush to zero with OOB low exponents in ldexp
...
Reviewed-by: Arcady Goldmints-Orlov <agoldmints@igalia.com >
Reviewed-by: Matt Turner <mattst88@gmail.com >
2020-03-04 11:39:50 -06:00
Louis-Francis Ratté-Boulianne
82dc149254
glsl/linker: add xfb workaround for modified built-in variables
...
Some lowering passes modify the value of built-in variables in
order for drivers to work properly. However, modifying such values
will also break transform feedback as the captured value won't
match what's expected.
For example, on some hardware, the vertex shaders are expected to
output gl_Position in screen space. However, the transform
feedback captured value is still supposed to be the world-space
coordinates (see nir_lower_viewport_transform).
To fix that, we create a new variable that contains the
pre-transformation value and use it for transform feedback instead
of the built-in one.
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com >
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com >
Acked-by: Daniel Stone <daniels@collabora.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2433 >
2020-03-03 12:28:23 +00:00
Louis-Francis Ratté-Boulianne
4a329bea44
glsl/linker: handle array/struct members for DisableXfbPacking
...
When varying packing is disabled for transform feedback and a xfb
declaration points to an array element or structure member, the
element/member should be aligned to the start of a slot as well.
If that's not the case, a new varying is created and the
element/member value is copied.
There might a way to further optimize the number of slots allocated
or the number of copies necessary if the performance cost is
problematic. For example, in cases where simply padding the top
level variable might correctly align all the captured values.
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com >
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com >
Acked-by: Daniel Stone <daniels@collabora.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2433 >
2020-03-03 12:28:23 +00:00
Louis-Francis Ratté-Boulianne
00746fa2da
glsl/linker: add DisableTransformFeedbackPacking workaround
...
Some drivers (e.g. Panfrost) don't support packing of varyings when
used for transform feedback. This new constant ensures that any
varying used for xfb is aligned at the start of a slot and won't be
packed with other varyings.
Scenarios where transform feedback declarations are related to an
array element or a struct member will be handled in a subsequent
patch.
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com >
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com > (Fix order of arguments to varying_matches())
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com >
Acked-by: Daniel Stone <daniels@collabora.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2433 >
2020-03-03 12:28:23 +00:00
Rhys Perry
8b361df9cf
spirv: fix memory_barrier_tcs_patch emission
...
Shouldn't affect any driver, since all currently implement
memory_barrier_tcs_patch as a no-op. It also looks like optimizations are
fine
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com >
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4003 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4003 >
2020-03-03 11:49:40 +00:00
Rhys Perry
6d839addf9
spirv: improve creation of memory_barrier
...
It shouldn't check for atomic counters or return in case we also need to
create a TCS output barrier.
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4003 >
2020-03-03 11:49:40 +00:00
Timothy Arceri
ad094433b4
glsl: add some error checks to the nir uniform linker
...
These are optional for spirv but it shouldnt hurt to enable them.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
61dc9354c0
glsl: fix sampler index calculation in nir linker
...
Here we reset the counter to 0 for each shader stage not each program.
We also make add a flag to stop iterating over indices that have
already been processed.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
ef47069cc3
glsl: reset next_image_index count for each shader stage
...
This fixes the image index calculation in the nir linker. We need
to reset the counter to 0 for each shader stage not each program.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
e0aa0a839f
glsl: fix resizing of the uniform remap table
...
In the NIR linker we were not resizing the remap table correctly
for explicit locations when it was needed.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
190a1ed170
glsl: set the correct number of images in a shader
...
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
b232a54df1
glsl: set the correct number of samplers in a shader
...
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Timothy Arceri
7dafc3050d
glsl: fix possible memory leak in nir uniform linker
...
Use UniformDataSlots for the context of UniformDataDefaults rather
than UniformStorage as in some cause UniformStorage may be NULL.
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992 >
2020-02-28 23:48:46 +00:00
Icecream95
574b03eebf
nir: Allow nir_format conversions to work on 32-bit values
...
The constant has to changed to unsigned long long, as shifting a
32-bit value by 32 is undefined behaviour.
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3943 >
2020-02-28 11:52:40 +00:00
Marek Olšák
6d7b076166
nir: fix 5 warnings
...
Reviewed-by: Eric Anholt <eric@anholt.net >
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3970 >
2020-02-27 22:53:12 -05:00
Marek Olšák
d18d07c9d7
nir: replace GCC unroll with an option that works on GCC < 8.0
...
Reviewed-by: Eric Anholt <eric@anholt.net >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3970 >
2020-02-27 22:53:12 -05:00
Albert Astals Cid
d988061172
cube_face_index: Use fabsf instead of fabs since we know it's floats
...
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3933 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3933 >
2020-02-26 21:47:01 +00:00
Albert Astals Cid
6db7467b59
cube_face_coord: Use fabsf instead of fabs since we know it's floats
...
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3933 >
2020-02-26 21:47:01 +00:00
Jason Ekstrand
349898a967
nir: Drop nir_tex_instr::texture_array_size
...
It's set by lots of things and we spend a lot of time maintaining it but
no one actually uses the value for anything useful.
Reviewed-by: Dave Airlie <airlied@redhat.com >
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3940 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3940 >
2020-02-26 18:29:49 +00:00
Juan A. Suarez Romero
784c454607
nir/lower_double_ops: add note for lowering mod
...
Add a note to clarify that while Vulkan allows mod(x,y) to be in [0, y]
range, OpenGL does not allow it, so the lowering ensures the result is
always in [0, y) range, as this lowering is shared by the Vulkan and
OpenGL implementation.
Reviewed-by: Elie Tournier <elie.tournier@collabora.com >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3315 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3315 >
2020-02-26 10:46:06 +00:00
Marek Olšák
5ab94df0f6
nir: fix gl_nir_lower_images for bindless images
...
Fixes: 7342b859af
Reviewed-by: Eric Anholt <eric@anholt.net >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3938 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3938 >
2020-02-25 02:30:08 +00:00
Caio Marcelo de Oliveira Filho
956e4b2d37
nir, intel: Move use_scoped_memory_barrier to nir_options
...
This option will be used later by GLSL, so move to a common struct.
Because nir_options is filled in the compiler instead of the Vulkan
driver, fix that up. GLSL will ignore that for now.
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net >
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3913 >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3913 >
2020-02-24 19:12:11 +00:00
Caio Marcelo de Oliveira Filho
6be766336a
nir/tests: Use nir_scoped_memory_barrier() helper
...
Most of the vars tests already had a local helper, so just drop it in
favor of the one in nir_builder. Remaining two tests changed to use
the helper.
The load_store_vectorizer tests were using the specific memory
barriers, but since scoped barriers are also handled, prefer that.
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3913 >
2020-02-24 19:12:11 +00:00
Caio Marcelo de Oliveira Filho
6ff898a653
nir: Add the alias NIR_MEMORY_ACQ_REL
...
This will help upcoming C++ code that will have to combine those two
semantics. In C++ it is not possible to do this without a cast or
adding an operator| to the enum. Since having the short form will
also be convient to C, we picked the former solution.
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3913 >
2020-02-24 19:12:11 +00:00
Caio Marcelo de Oliveira Filho
424737da3e
nir/builder: Add nir_scoped_memory_barrier()
...
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net >
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3913 >
2020-02-24 19:12:11 +00:00