|
067ace47
|
2022-12-21T00:00:00
|
|
Add ANGLE_clip_cull_distance extension
Added an extension spec.
Trivially exposed it on GL, Vulkan, and D3D11.
Adjusted tests and validation to allow no cull
distance support for this extension string.
Removed extra built-in variable definitions.
Bug: angleproject:7904
Change-Id: Ic60772dfe28132c316eaa29aadc1afd66e3b0fa7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114290
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
91a5635a
|
2022-12-16T00:00:00
|
|
Support arbitrary clip and cull distance array sizes
Removed limitSimultaneousClipAndCullDistanceUsage cap.
Enhanced HLSL translator to support all valid combinations
of clip and cull distances.
Validate that these arrays are sized explicitly or by using
only constant indices; adjusted link program error message.
Enhanced tests to cover all possible combinations of
implicit and explicit array sizes for both built-ins.
Bug: angleproject:4452
Change-Id: I704db6dc3c8951e5ba482a3e4dad09e5b0182f9c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4111645
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
7fefd230
|
2022-10-20T00:00:00
|
|
GL: Adjust APPLE_clip_distance exposure
Partial revert of
I458cad29c10b9d9193c5233e24bac53361ba104e
APPLE_clip_distance cannot be implemented on top of
EXT_clip_cull_distance because the former is defined both
for ES 2.0 and ES 3.0 while the latter is defined only for ES 3.0.
Although some ES 3.0+ drivers allow gl_ClipDistance built-in in
ESSL 1.00 shaders, this behavior is not specified so ANGLE should
not allow it.
Added independent ESSL 3.00 gl_ClipDistance and gl_MaxClipDistances
definitions.
Adjusted translator unit tests.
Bug: angleproject:4452
Change-Id: Ib582ce0ac7ccb65f0200ef1d17eaab0c83b228cf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3963745
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
ac5a9c53
|
2022-10-26T00:00:00
|
|
Metal: Optimize ReplaceClipCullDistanceVariable
The intermediate ANGLEClipDistance variable is
not needed when generating MSL output directly.
Bug: angleproject:6291
Change-Id: Ie3d32a903645be002f21c44a6233f9cd0155605a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3981716
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Kyle Piddington <kpiddington@apple.com>
|
|
c97edf51
|
2022-10-24T00:00:00
|
|
Metal: Enable APPLE_clip_distance
Adjusted direct-to-Metal shader translator to support
gl_ClipDistance built-in.
Bug: angleproject:6291
Change-Id: Ice4cc3e4d7c131cbaac9726e845a5c1e59787e69
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3976428
Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
4a636cdd
|
2022-07-20T22:44:30
|
|
Require all PLS formats to consume exactly 4 bytes of storage
D3D 11.0 UAVs only support R32_FLOAT, R32_UINT, R32_SINT formats.
EXT_shader_pixel_local_storage explicitly states that all PLS variables
consume exactly 4 bytes.
ESSL images can only have both read and write access if their format is
r32f, r32i, r32ui. (We were able to circumvent this via aliasing, but it
was a huge source of bugs.)
There is a large precedent for only supporting 4 bytes of storage in the
capabilities we use for PLS, so this CL removes support for all PLS
storage formats that are not 4 bytes. It also implements an "R32" mode
for PLS, that does manual packing and unpacking of r32* image formats.
If the application wants larger formats, it can always define multiple
PLS planes and piece them together.
Next up we ought to be able to support rg16* types with more
packing/unpacking.
With aliasing gone, and with a bit of tweaking, the PLS tests now pass
on the Pixel 4 GLES bot.
Bug: angleproject:7279
Bug: angleproject:7388
Bug: angleproject:7524
Bug: angleproject:7527
Change-Id: I6b8f62c2428ade6cb5413e33360d734e55dda0eb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3782579
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
8050079c
|
2022-08-08T16:35:10
|
|
Vulkan: Remove basicGLLineRasterization
* Removed basicGLLineRasterization from the ANGLE features.
* Removed "viewport" from the extended driver uniform classes.
Bug: angleproject:2830
Bug: angleproject:7558
Change-Id: I289b1e2b536a6bd0c1ab24844835221e617a296d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3818165
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6f80f0f0
|
2022-08-06T02:29:19
|
|
Translator: Clean up the compile flag passing interface
Historically, compile flags were sent to the translator as a bitmask.
Recently, we were getting close to running out of bits. Additionally,
direct-to-metal work had started to introduce constants to be passed to
the translator, which were misplaced in ShBuiltInResources and Caps.
Recent work on Pixel Local Storage adds even more constants, aggravating
the situation.
In this change, the interface to passing compile flags is reworked. A
struct is passed (instead of a bitmask) that has one bit for each flag.
This can be indefinitely extended. Additionally, the constants needed
by metal and PLS are also placed in this struct. In turn, the backends
can set these options directly, and don't have to hack them into Caps to
further get hacked into ShBuiltInResources.
Bug: angleproject:7559
Change-Id: If93f1e1b8818ad3a0ac708ab04ab93b4b397d114
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3812562
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7fe0694c
|
2022-07-14T16:42:30
|
|
Vulkan: Use push constants for driver uniforms
* Updated the driver uniforms so they would be defined as push
constants in SPIR-V. Their data would be updated via
pushConstants() when handling the driver uniform dirty bits.
* Updated TOutputVulkanGLSL to be able to generate the push
constants as required.
* When handling the driver uniform dirty bits, we no longer
allocate a buffer.
* Removed the driver uniform descriptor set from the pipeline
layout.
* Removed the binding-related functions and flags for the driver
uniforms.
* In invalidateGraphicsDescriptorSet(), DIRTY_BIT_DESCRIPTOR_SETS
is used instead of DIRTY_BIT_DRIVER_UNIFORMS_BINDING. (Same for
invalidateComputeDescriptorSet())
* DIRTY_BIT_DRIVER_UNIFORMS_BINDING is replaced with
DIRTY_BIT_DRIVER_UNIFORMS in other places.
* Removed mDriverUniform and DriverUniformsDescriptorSet from
ContextVk.
* Added mSupportedVulkanShaderStageMask to RendererVk, which is used
in creating the pipeline layout and updating the push constants.
* Added a TODO note for driverUniformsDescriptorSetIndex.
Bug: angleproject:6858
Change-Id: I91037d378528962a816b12ff3f21249ee17b7652
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3782570
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
861149c7
|
2022-08-03T15:43:29
|
|
Make PLS coherent on desktop OpenGL
Implements ANGLE_shader_pixel_local_storage_coherent using fragment
shader synchronization extensions:
NV_fragment_shader_interlock
INTEL_fragment_shader_ordering
ARB_fragment_shader_interlock
With these extensions combined, we get coherency all 3 big desktop
vendors: NVIDIA, Intel, and AMD.
Bug: angleproject:7279
Change-Id: Ie20b251fb772898e89994b799640f1f2806581eb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3773990
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c460c299
|
2022-06-21T11:20:45
|
|
Implement GLSL additions for ANGLE_shader_pixel_local_storage
Specs out, implements, and thoroughly tests the GLSL additions for
ANGLE_shader_pixel_local_storage. Adds a simple transformation that
rewrites PLS directly into shader images. Updates the existing PLS tests
to use the newly built-in PLS features and ensures they continue
passing.
For now, applications call glBindImageTexture to configure their pixel
local storage. The OpenGL ES API side of this extension will follow
shortly.
Bug: angleproject:7279
Change-Id: I141183069b5cbfcca01cbb77b5b36d3e5f834bf5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3761876
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
785353fd
|
2022-05-24T12:40:16
|
|
Support Desktop OpenGL context creation in end2end tests
Validation of Desktop GL versions and profile masks is unimplemented.
Bug: angleproject:7360
Change-Id: Ifae94215b6aada895c2b02318a1d05c9515e9b96
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3664916
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
91976352
|
2022-06-21T15:41:02
|
|
Use C++17 attributes instead of custom macros
Bug: angleproject:6747
Change-Id: Iad6c7cd8a18d028e01da49b647c5d01af11e0522
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3718999
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3b988fef
|
2022-06-01T10:54:03
|
|
Vulkan: Remove enableLineRasterEmulation
* Removed the Bresenham line raster emulation specialization
constant, along with related variables and functions.
Bug: angleproject:7366
Change-Id: If17c8ce9b459ad801bae8e887e5674bd9a3ff2bf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3680860
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
ce3c0fe9
|
2022-06-06T12:09:45
|
|
Vulkan: Make depth-correction uniform controlled
This change makes sure SPIR-V transformations are not required for depth
correction, having the number of potential pipelines.
Bug: angleproject:5881
Change-Id: If3f66b34bdd1127ae588cbc822ea7cf01fa8621f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3691801
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
23f213d1
|
2022-05-26T23:43:44
|
|
Vulkan: Make drawable size uniform
As a specialization constant, it's impossible to predict the value the
drawable size may take, which in turn makes it impossible to warm up the
Vulkan pipeline cache at link time.
Bug: angleproject:7366
Change-Id: Ia3d1860a4fcb8e3078fdcb8d02a2e0cd173ea028
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671976
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2df17a12
|
2022-05-25T16:18:37
|
|
Vulkan: Pack driver uniforms
Previously 5 vec4s were used for driver uniforms + 2 vec4s if
specialization constants couldn't be supported.
The driver uniforms are rearranged and packed such that only 2 vec4s are
normally used, which include fallback for specialization constants as
well. In the future, most of the specialization constants may turn into
uniforms, and this change prepares for that.
Additional uniforms are used (3 vec4s) only if common extensions are
missing; transform feedback and bresenham lines.
This change makes it more practical for driver uniforms to be turned
into push constants. Additionally, these uniforms could potentially be
loaded and cached at the beginning of the shader for more efficient
memory access.
On Pixel6, with this change, the traces show no difference in wall time.
On most traces, CPU time shows up to ~7% improvement.
Bug: angleproject:7366
Change-Id: I0f47f863955af06a19c69d1f1d7c45b97d95476e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3668151
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
98c2e169
|
2022-05-20T16:17:49
|
|
Vulkan: Reduce pre-rotation spec const to bool
The specialization constant now only dictates whether x and y should be
swapped. The complete 8 possible states of rotation and y-flip are
achieved by using this swap in combination with a driver uniform for x
and y flip.
Swapping is still a specialization constant to avoid degrading
performance of dFdx/dFdy which otherwise would need both to be evaluated
instead of one. On platforms which don't support pre-rotation, the
specialization constant will never change and driver uniforms entirely
govern y-flip. On platforms that do support pre-rotation, only two
variations of the pipeline are needed.
Bug: angleproject:7366
Change-Id: I73f84e89fa9349d2098fa5b21573aee57d93a30c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3663151
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Lingfeng Yang <lfy@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
4a7dd942
|
2022-05-12T12:34:29
|
|
Metal: Fix dangling pointer warning in IntermRebuild.cpp
I don't think anything was wrong with the original
code. This code is doing exactly the same thing but
maybe won't trigger the warning? I have another
version using std::vector if this fix is unacceptable.
Bug: angleproject:7288
Change-Id: I122b8fc6600f6860ba96339c93a4ab9791ec789a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3645992
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
c5271e8e
|
2022-04-04T23:28:35
|
|
Vulkan: Emulate GL_KHR_blend_equation_advanced
Based on a change by Brandon Schade <b.schade@samsung.com>
In the translator, when advanced blend is enabled, an input attachment
is added. Based on the listed advanced blend equations, emulation code
is added that performs those equations' functions. The blend equation
itself is passed through a driver uniform.
Note that the advanced blend extension only allows a single output to
use advanced blend, and that should be at location 0.
In the Vulkan backend, when advanced blend is used, the driver uniform
to select the equation is updated and normal blending is disabled.
Bug: angleproject:3586
Change-Id: Icc42e8be238d34fca149087eb9cfe616a7643a6b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3575738
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7a85d114
|
2022-03-25T15:01:17
|
|
Use [[nodiscard]] on RAII classes
Scoped* classes provide an RAII way of adding cleanup/restore state/etc
in a robust way. Unfortunatley, it's very easy to mistakenly leave the
variable name, leading to the destructor being called immediately
instead of at the end of the scope:
{
ScopedX(parameters); // instead of ScopedX x(parameters);
// Code here is run after destructor
}
The [[nodiscard]] attribute, if specified on the ScopedX class would
lead to a warning (turned to error with -Werror). This change does
that for classes named *Scoped* in ANGLE.
Bug: chromium:1103817
Change-Id: I65c9922c9b4eba1f9c033e093fe8fe534648ab62
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552092
Reviewed-by: Lingfeng Yang <lfy@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
40afbe4b
|
2022-03-20T23:39:57
|
|
Translator: Fix SimplifyLoopConditions producing dead code
This causes the tree to fail validation. Dead code could be generated
if the loop body ended in a branch. In such a case, no additional
instructions are added to the transformed loop body after the original
body.
Bug: chromium:1300782
Change-Id: I4ec46c170ab5a45fa9b9b73d4e2b62c9c4fa24a3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3539442
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8dc9e83e
|
2022-02-16T21:48:53
|
|
Translator: Fix RunAtTheEndOfShader w.r.t discard
RunAtTheEndOfShader wrapped main() if it ended in discard. However, it
didn't account for the fact that the discard instruction could be
wrapped in a block. This change makes RunAtTheEndOfShader more
conservative w.r.t discard and has it wrap main() on any encounter of
discard.
The change additionally adds AST validation to ensure transformations
don't generate dead code after branches.
Test credit to Cody Northrop.
Test: GLSLTest_ES3.ConstantConditionGuardingDiscard
Test: GLSLTest_ES3.NestedUnconditionalDiscards
Bug: angleproject:7033
Change-Id: Ie9d5210a5cfbb13449720a8a3f44666df9443d98
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3471014
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
72529c19
|
2022-01-31T14:37:42
|
|
Vulkan: Fix a few framebuffer fetch bugs
A few fixes to framebuffer fetch:
- The built-in symbol for coherent and non-coherent are now the same for
gl_LastFragData, so extension check can choose one or the other.
- The temporary variable used in a transformation is renamed to not be
gl_LastFragData.
- inout usage is now validated correctly for shader type and version.
Bug: angleproject:6951
Bug: angleproject:6905
Bug: angleproject:6907
Change-Id: I9af341a3e8e01ed375a8230618184494813d3ece
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3427577
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
38fada35
|
2022-01-27T18:16:18
|
|
Vulkan: Add support for OES_primitive_bounding_box
Add OES version of the primitive bound box extension
Bug: angleproject:3576
Test: dEQP-GLES31.functional.primitive_bounding_box.*
Change-Id: Ie44d952992a68dfffd5c124dda8dd11069f0c1e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3425086
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
|
|
665ddccd
|
2021-12-09T23:06:39
|
|
Vulkan: Emulate dithering
Dithering in OpenGL is vaguely defined, to the extent that no dithering
is also a valid dithering algorithm. Dithering is enabled by default,
but emulating it has a non-negligible cost. Similarly to some other
GLES drivers, ANGLE enables dithering only on low-bit formats where
visual banding is particularly common; namely RGBA4444, RGBA5551 and
RGB565.
Dithering is emulated in the fragment shader and is controlled by a spec
constant. Every 2 bits of the spec constant correspond to one
attachment, with the value indicating:
- 00: No dithering
- 01: Dither for RGBA4444
- 10: Dither for RGBA5551
- 11: Dither for RGB565
The translator appends code to the shader that, based on the format
specified by the specialization constant, adds dithering to each color
attachment output. A 2x2 Bayer matrix is used for dithering, indexed by
gl_FragCoord.xy % 2.
Bug: angleproject:6755
Change-Id: Ib45da5938e299b6626bff921119d63e7357dd353
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3374261
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cb96c236
|
2022-01-26T18:53:55
|
|
Revert "Vulkan: Enable framebuffer fetch on SwiftShader."
This reverts commit 5107231939b5e04d3d5e4376176db42c3ae60193.
Reason for revert: Fails new code paths in Chrome+Skia.
Bug: angleproject:6947
Original change's description:
> Vulkan: Enable framebuffer fetch on SwiftShader.
>
> This also fixes a bug with non-coherent fetch in the symbol table.
>
> Bug: angleproject:6947
> Bug: angleproject:6948
> Change-Id: I190b2e0cddf1bc1b53a79079d3e2f79ccbb40d15
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3412998
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Bug: angleproject:6947
Bug: angleproject:6948
Change-Id: I8bd6c55598552b733547e45c854f6d55768d2b65
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3417503
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
51072319
|
2022-01-25T10:41:25
|
|
Vulkan: Enable framebuffer fetch on SwiftShader.
This also fixes a bug with non-coherent fetch in the symbol table.
Bug: angleproject:6947
Bug: angleproject:6948
Change-Id: I190b2e0cddf1bc1b53a79079d3e2f79ccbb40d15
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3412998
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
0f00fbae
|
2022-01-21T00:28:48
|
|
Translator: Make vec/matrix size getters unsigned
TType stored type's primary and secondary sizes as `unsigned char`, but
the getters returned `int`. This caused unnecessary casts when the size
was passed from one TType to another, as well as comparisons with other
unsigned numbers.
This change specifies the type of these members as `uint8_t` and makes
the getters return the same type. The call sites are accordingly
adjusted to remove unnecessary casts, use the correct type in local
variables, and add casts when passed to ostream::operator<<.
Bug: angleproject:6755
Change-Id: Ia4d86bd4ccb5c1a2ae1e10a0085a5166c3a6bcf7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3402850
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
28f223ac
|
2022-01-14T16:11:32
|
|
Vulkan: Add missing ESSL 3.2 builtin functions
Builtin functions from the "OES_shader_image_atomic" and
"OES_texture_storage_multisample_2d_array" extensions were missing from
ESSL 3.2 builtins.
Bug: angleproject:3578
Bug: angleproject:3583
Change-Id: Id372f0dcffee1eb376c66b9e4886ed50a08b1b0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3391048
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Brandon Schade <b.schade@samsung.com>
|
|
095d7c0a
|
2022-01-06T01:20:53
|
|
Translator: Clean up spec const / driver uniform types
Bug: angleproject:6755
Change-Id: I8fb1557a5e29fcc28d5cb2f3aaa2c4a14b72583d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3369125
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
4114fe23
|
2021-11-20T22:05:56
|
|
Vulkan: Simplify transform feedback emulation logic
In [1], the program is transformed to not output transform feedback
logic when transform feedback is inactive. With that change, it's no
longer necessary to dedicate a driver uniform to indicate if transform
feedback is active.
[1]: https://chromium-review.googlesource.com/c/angle/angle/+/3294661
Bug: chromium:1209285
Change-Id: Ica725d0da08e2676f442fe6307962d367b443535
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3294702
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9ba5dcf6
|
2021-10-07T06:56:14
|
|
Vulkan: Fix inconsistency in half render area width/height
The half render area rotation matrix should be removed.
DrawableArea is constant over rotations.
The frag coord rotation matrix is still needed because
the frag coord generated by GPU is still rotated.
Test:
DISPLAY=:0 out/Debug/angle_deqp_gles3_rotate90_tests
Using test config with:
linux
nvidia
debug
vulkan
prerotation
prerotation270
Test: Cuttlefish SwANGLE
./cts-tradefed run cts -m CtsDeqpTestCases -t
dEQP-GLES3.functional.shaders.builtin_variable.fragcoord_xyz
Bug: angleproject:6504
Change-Id: I37a6308fdb7586200b19a6138affc78c2c329a96
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212427
Commit-Queue: Lingfeng Yang <lfy@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
32d6e806
|
2021-09-24T23:50:54
|
|
Vulkan: Fix rotation of interpolateAtOffset
interpolateAtOffset's offset was multiplied by flipXY*rotationMatrix,
which is a vector. This was unable to actually apply rotation to the
offset. The multiplier is changed to a matrix.
Can be tested by running interpolate_at_offset*default_framebuffer tests
in deqp gles3.1 together with pre-rotation:
./angle_deqp_gles31_tests
--deqp-case=dEQP.GLES31/functional_shaders_multisample_interpolation_interpolate_at_offset_no_qualifiers_default_framebuffer
--emulated-pre-rotation=90
Bug: angleproject:5843
Change-Id: I9727371375e999f07463b69153df3fd8b28c2a71
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3183108
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Ian Elliott <ianelliott@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
da3db87e
|
2021-07-06T14:00:58
|
|
Upstream latest changes to Metal backend from Apple to 7/1/2021
This CL merges in the ANGLE changes between these two WebKit commits:
https://git.webkit.org/?p=WebKit.git;a=commit;h=8648b353ab1d7730438c2e08319e1a4d64982c31
https://git.webkit.org/?p=WebKit.git;a=commit;h=166e4924a52971d6a32ad48247a439b16c00e062
Include provoking vertex buffer out of bounds fix
from https://bugs.webkit.org/show_bug.cgi?id=230107
Fix bad merge of resetting of dirty bits, breaking
DepthStencilFormatsTest.DepthTextureRender test and perhaps others.
Disable GL_APPLE_clip_distance when the direct-to-Metal compiler is
active. It can not yet handle the gl_ClipDistance array.
Disable use of rectangular textures for IOSurfaces. Metal can bind
IOSurfaces to 2D textures, and this was passing all tests in the
SPIR-V Metal backend. Introducing rectangular textures breaks the
SPIR-V Metal backend, and the tests currently fail on the
direct-to-Metal backend.
Fix several bugs with ProvokingVertex, which was causing
both the SpirV and Direct backends to incorrectly draw
indices.
(https://bugs.webkit.org/show_bug.cgi?id=230107)
Skip the following tests on the Metal backend which is still failing
RobustResourceInitTestES3.BlitDepthStencilAfterClearBuffer
GLSLTest_ES3.GLVertexIDIntegerTextureDrawArrays/ES3_Metal
With these changes, angle_end2end_tests again runs to completion.
Bug: angleproject:6395
Change-Id: I3cc58f531426a95fc8f177a4ad87f56c1855a546
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3167010
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kyle Piddington <kpiddington@apple.com>
|
|
6106da49
|
2021-09-22T16:18:21
|
|
Indent Generated GLSL
Before:
in vec4 _ua_position;
void main(){
(gl_Position = vec4(0.0, 0.0, 0.0, 0.0));
(gl_Position = _ua_position);
}
layout(shared) uniform _uG{
float _ufoobar;
} _ug;
struct _uS {
int _ufoo;
float _ubar;
};
layout(shared) uniform _uT{
_uS _us;
float _um;
} _ut;
float _ufunc(in _uS _ustructVar){
return _ustructVar._ubar;
}
out vec4 _uoutColor;
void main(){
float _uv = 0.0;
for (int _ui = 0; (_ui < _ut._us._ufoo); (++_ui))
{
int _uk = 0;
while ((_uk < _ut._us._ufoo))
{
(_uv += _ufunc(_ut._us));
if ((_uv > 100.0))
{
break;
}
else
{
(_uv += 5.0);
}
switch (_uk) {
case (0):
(_uv += 3.0);
break;
case (1):
(_uv += 1.0);
break;
default:
(_uv -= 2.0);
break;
}
}
}
(_uoutColor = (vec4(_uv) + vec4(_ug._ufoobar)));
}
After:
in vec4 _ua_position;
void main(){
(gl_Position = vec4(0.0, 0.0, 0.0, 0.0));
(gl_Position = _ua_position);
}
layout(shared) uniform _uG{
float _ufoobar;
} _ug;
struct _uS {
int _ufoo;
float _ubar;
};
layout(shared) uniform _uT{
_uS _us;
float _um;
} _ut;
float _ufunc(in _uS _ustructVar){
return _ustructVar._ubar;
}
out vec4 _uoutColor;
void main(){
float _uv = 0.0;
for (int _ui = 0; (_ui < _ut._us._ufoo); (++_ui))
{
int _uk = 0;
while ((_uk < _ut._us._ufoo))
{
(_uv += _ufunc(_ut._us));
if ((_uv > 100.0))
{
break;
}
else
{
(_uv += 5.0);
}
switch (_uk) {
case (0):
(_uv += 3.0);
break;
case (1):
(_uv += 1.0);
break;
default:
(_uv -= 2.0);
break;
}
}
}
(_uoutColor = (vec4(_uv) + vec4(_ug._ufoobar)));
}
Bug: angleproject:6428
Change-Id: Ica25151e68eb0defd85a3b6241db442d8eb84743
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3177339
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Gregg Tavares <gman@chromium.org>
|
|
46149c0e
|
2021-09-17T15:38:47
|
|
Translator: Fix pruning functions that declare a struct
When pruning unused functions, the entire declaration of the function is
removed. If the function declares a struct as part of its return value,
the declaration of that struct was lost. This change makes sure that
declaration survives the pruning. For example:
struct S { vec4 v; } unused_func() { ... }
is now replaced with:
struct S { vec4 v; };
This change also makes struct usage validation more stringent.
Bug: chromium:1248753
Change-Id: Idd9a87fd2e785135775cfea62995fd33adaf3c09
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3169691
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9c6f6c39
|
2021-09-10T14:46:18
|
|
nullptr_t to std::nullptr_t
The Skia build requires std::nullptr_t
Bug: angleproject:6377
Change-Id: Ic41955e1dfefcf24bc39240d164ad938f523717c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3154997
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Gregg Tavares <gman@chromium.org>
|
|
958dce52
|
2021-09-09T14:36:37
|
|
Move IntermRebuild.h/cpp to tree_util
Bug: angleproject:5505
Change-Id: I7b68057fff0a0eb0d86c1aed01599fa9dbb7db3b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3152167
Commit-Queue: Gregg Tavares <gman@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0bb3fcbb
|
2021-09-07T14:28:09
|
|
Translator: Fix precision of gl_PointSize on ES3+
In ESSL100, gl_PointSize is declared as mediump. In ESSL300+, it's
declared as highp.
Bug: angleproject:4889
Bug: angleproject:6132
Change-Id: Ie904a12fdaaca04e2507f1796d9d0fe34b154eab
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3145615
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9d0e2851
|
2021-09-01T00:42:58
|
|
Fix SeparateDeclarations vs struct specifiers
Bug: chromium:1237696
Change-Id: I3b00f3797800e814ca83226a8e4f25b2a43cc641
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3133824
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
a29b07d8
|
2021-08-26T13:11:29
|
|
InitializeVariables: Init shader IO block outputs.
These variables were not handled in the pass because we had no prior
test coverage of them. Some frame capture testing uncovered this gap.
The variables must be initialized field-by-field, since there seems
to be no defined way to initialize an entire block at once.
Bug: angleproject:6326
Change-Id: Ib7aecfb76b97b4236d786b44b3dfb706c573e221
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3123228
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3408ea3e
|
2021-08-24T11:41:42
|
|
Translator: Fix precision of gl_FragCoord on ES3+
In ESSL100, gl_FragCoord is declared as mediump. In ESSL300+, it's
declared as highp.
Bug: angleproject:4889
Bug: angleproject:6132
Change-Id: I42583d07fb745421f195be95fa404c617227b02e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3116307
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
800e82c6
|
2021-08-23T11:05:23
|
|
Translator: Validate precisions
When declaring a variable, a struct field, function parameter etc,
there's a precision necessarily applied to the entity being declared.
AST Validation is added to enforce this. Intermediate nodes derive
their precision from these entities automatically.
Consistency of intermediate nodes is not validated. This is because AST
transformations replace a node with a transformed one, and that may not
have the same precision. Take the following code:
mediump float x = ...;
mediump float y = ...;
... x + y ...
and assume is transformed as such:
highp float driver_uniform;
... (x * driver_uniform) + y ...
The addition was originally done in mediump, but would seemingly need to
be done in highp after transformation. There are a number of options
here:
- Make sure that when nodes are replaced, the precision is unaffected.
This can be intrusive, requiring temp variables.
- Bubble up the new precision
- Accept the discrepancy
ANGLE opts for the last option, which actually respects the original
shader's intended precision for operations, even if some transformation
needs to temporarily evaluate an expression at a higher precision.
Bug: angleproject:4889
Bug: angleproject:6132
Change-Id: Ibcde3a230de159157783b1c6d5ef1cd63ceb4d8f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3114027
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
210773db
|
2021-08-05T10:41:59
|
|
Translator: Be more explicit about precisions
GLSL ES requires that every symbol (variable, block member, function
parameter and return value) is appropriately qualified with a precision,
either individually or through the global precision specifier.
Some tree transformations however produced symbols with EbpUndefined
precision. In text GLSL output, these would produce unqualified symbols
which was often incorrect.
In this change, the transformations are made to produce explicit / more
consistent precisions. The validation (that caught these issues) is not
included in this change as there are still a few corner cases left to
address.
Bug: angleproject:4889
Bug: angleproject:6132
Change-Id: Icca8a0a5476f8646226e7243aa8f501f44acc164
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3075127
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
061188a7
|
2021-08-04T10:07:47
|
|
Translator: General clean up
General clean up done as part of other changes, split to simplify
review.
Bug: angleproject:4889
Bug: angleproject:6132
Change-Id: Iade9954d187a759be9edd0e3754be007f4133c56
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3071598
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
798c5200
|
2021-07-31T22:17:48
|
|
Translator: Make precise-ness a property of AST nodes
Instead of creating a "set of precise nodes", the nodes themselves are
marked precise. This change is preparation for another change that
overhauls precision propagation through the nodes, and which would also
be storing the promoted precision in the nodes.
Bug: angleproject:4889
Change-Id: Ieec8864be5cd2e95ed6fb4d90b367946d9f33fa1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3065569
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
217acac2
|
2021-07-21T12:42:56
|
|
Vulkan: Add support for EXT_primitive_bounding_box
1. Added support for EXT_primitive_bounding_box extension
2. Renamed shader variable gl_BoundingBoxEXT[] to ANGLEBoundingBox[]
Bug: angleproject:3576
Test: dEQP-GLES31.functional.primitive_bounding_box.*
Change-Id: I15fa9af50c6fd8e86d225670ddd8eb39f6e65d35
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3053618
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a65b4056
|
2021-07-30T23:00:57
|
|
Reland "Translator: Clean up type cloning"
This is a reland of f016c4352f5203c10511df078b1ed5359afc1b35
Original change's description:
> Translator: Clean up type cloning
>
> TType has a constructor that aids cloning + helpers to convert between
> types. A number of places where a type is constructed from the
> information gathered from another type is changed to clone the type and
> then use one of these helpers.
>
> This clean up is part of an ongoing work to improve precision handling.
> This change removes many references to TType::getPrecision().
>
> Bug: angleproject:4889
> Change-Id: Ib85659ab5363b56ad298f8648fca856edc1ebf8b
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3063944
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Tim Van Patten <timvp@google.com>
Bug: angleproject:4889
Change-Id: I35772f178eb4f6cf2b64bfeb37a4a144acdb4daf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3067802
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c5c8a25a
|
2021-08-03T14:40:33
|
|
Revert "Translator: Clean up type cloning"
This reverts commit f016c4352f5203c10511df078b1ed5359afc1b35.
Reason for revert: Suspect for crbug.com/1236060
Original change's description:
> Translator: Clean up type cloning
>
> TType has a constructor that aids cloning + helpers to convert between
> types. A number of places where a type is constructed from the
> information gathered from another type is changed to clone the type and
> then use one of these helpers.
>
> This clean up is part of an ongoing work to improve precision handling.
> This change removes many references to TType::getPrecision().
>
> Bug: angleproject:4889
> Change-Id: Ib85659ab5363b56ad298f8648fca856edc1ebf8b
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3063944
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Tim Van Patten <timvp@google.com>
Bug: angleproject:4889
Change-Id: I9b5ecacc410b41be382232292ceae2f7ea7906c7
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3064393
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Austin Eng <enga@chromium.org>
|
|
f016c435
|
2021-07-30T23:00:57
|
|
Translator: Clean up type cloning
TType has a constructor that aids cloning + helpers to convert between
types. A number of places where a type is constructed from the
information gathered from another type is changed to clone the type and
then use one of these helpers.
This clean up is part of an ongoing work to improve precision handling.
This change removes many references to TType::getPrecision().
Bug: angleproject:4889
Change-Id: Ib85659ab5363b56ad298f8648fca856edc1ebf8b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3063944
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
ebe943e2
|
2021-07-29T11:19:33
|
|
Vulkan: SPIR-V Gen: Fix gl_Clip/CullDistance
These built-ins can be redeclared in the shader. The translator took
these redeclarations (and gl_LastFragData) as UserDefined symbols.
There were a number of hacks such as in name generation and
CollectVariables, to special-case these redeclarations.
This change instead makes sure that these variables continue to be
considered built-ins with the appropriate qualifiers. A number of fixes
are made accordingly:
- Hacks are removed.
- In fragment shaders, ANGLEClipDistance was initialized with
gl_ClipDistance for further use by the shader. The code generation
however mistakenly produced `gl_ClipDistance[0] =
ANGLEClipDistance[0];`, which caused compilation failures by glslang,
but passed the tests accidentally because they expected link failures
(see next item).
- CollectVariables is fixed to correctly collect gl_Clip/CullDistance
in fragment shaders; previously they were collected as output
varyings, and therefore the aforementioned link error was not produced
in the tests after the compilation error was fixed.
Additional fixes:
- The transformation of gl_Clip/CullDistance was always ever done on one
of them due to misplaced breaks in the loop that detected their
presence.
- The transformation of gl_CullDistance was skipped when it was not
redeclared.
Validation is added to make sure these built-ins always have the correct
qualifier even when redeclared. SPIR-V gen support for these variables
have been fixed as well.
Bug: angleproject:4889
Change-Id: Ic8bf2c508357035cb937ef41a28ae22ffc533ebe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3059921
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3036e090
|
2021-07-29T15:55:39
|
|
Vulkan: Direct SPIR-V Gen: Support the precise keyword
The precise keyword is different in GLSL in that it defines what
arithmetic operations _that have led to the value being assigned to a
variable_ should be done precisely (i.e. not "contracted").
A tree traverser is implemented that detects precise access chains and
applies precise-ness to the right hand side of assignment expressions to
said access chains. This is only done if the shader uses the precise
keyword in the first place. The algorithm for this is inspired by the
implementation in glslang.
This change additionally:
- Fixes parser to allow precise on function parameters
- Fixes GLSL code generation to output precise on struct members and
function parameters.
Bug: angleproject:4889
Change-Id: Ie3808c3c8c08da308e88af20f5f90379d9d14d47
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3056369
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7c6da493
|
2021-07-26T21:24:25
|
|
Translator: Make sure built-in variables are consistent
Some transformations left the tree in an inconsistent state, for example
if it used gl_SampleMask from ES3.1+OES_sample_variables and the
transformation added a usage of gl_SampleMask from ES3.2. The offending
transformations are fixed and AST validation is improved to catch such
errors.
Bug: angleproject:4889
Change-Id: I9d9ea5bb43a9408dd4c6dc3e89ec20d60dfeff73
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3054613
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
dbe986d7
|
2021-07-26T01:43:44
|
|
Vulkan: SPIR-V Gen: Fixes to tessellation shader support
- TCS barrier() built-in is correctly looked up
- Patch decorations are fixed
Bug: angleproject:4889
Change-Id: I1befcaca85a965c9d46b1b41ec74597de44bf2b2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3052687
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
0e1c90cf
|
2021-07-21T10:24:26
|
|
Translator: Validate function parameter qualifiers
This change cleans up a confusion in EvqConst and EvqConstReadOnly,
where the former was frequently used instead of the latter for function
parameters.
The change makes the following renames to make the intent of the
relevant qualifiers clearer:
EvqIn -> EvqParamIn
EvqOut -> EvqParamOut
EvqInOut -> EvqParamInOut
EvqConstReadOnly -> EvqParamConst
Bug: angleproject:4889
Change-Id: Idedd32c08a91de069b91b1657d6b783dddece04a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3041622
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6e261453
|
2021-07-20T22:34:33
|
|
Vulkan: SPIR-V Gen: Fix I/O block arrays
Since the qualifier on intermediate nodes are EvqTemporary, the code
that autodeduced the block storage of I/O blocks was incorrectly
assigning them std140 when an indexed I/O block array was encountered.
This resulted in duplicate types in the SPIR-V. This is generally
benign (other than creating an unnecessary type) except for gl_PerVertex
as it adds BuiltIn decorations. gl_PerVertex may be an array in
geometry and tessellation shaders.
Bug: angleproject:4889
Change-Id: Iaa8e414ae01a4be127dc52df0e9406546b23d24c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3041621
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
05eb0a32
|
2021-07-19T16:14:34
|
|
Translator: Allow subpassLoad in AST in ESSL
subpassLoad is available to desktop GLSL, but not GLSL ES. With this
change, subpassLoad is made available internally to the AST so that
framebuffer fetch's use of this built-in can be simplified.
Additionally, this makes the tree more consistent in that there's no
function call without a corresponding function declaration.
A follow up change will add an AST validation to enforce this.
Bug: angleproject:4889
Bug: angleproject:5454
Change-Id: I3fa502dc4b29eab7f34940466e283cffd218d746
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3040118
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
b3cbfd55
|
2021-07-07T12:31:57
|
|
Fix multiple end2end crashes in direct-to-MSL compiler.
This set of changes:
- Adds a single place (CompilerMtl::useDirectToMSLCompiler) where the
direct-to-MSL compiler can be enabled, still at compile time rather
than run time. It is still disabled by default.
- Initializes MTLWaitableCompileEventImpl::mShader, without which all
shader compiles crash.
- Fixes a mismatch of the ANGLERasterizerDisabled variable name in
the generated MSL.
- Removes the transform feedback bindings as an argument to the
vertex shader's main0(). Transform feedback support needs to be
reimplemented in this compiler backend.
- Added an option to the DriverUniform class to emit as either an
interface block or a struct. The direct-to-MSL backend assumes it
is a struct.
- Disable variable reference validation when referencing either
sample mask or rasterizer discard functionality in the shader.
- Disable struct usage validation when inserting references to
ANGLE_TextureEnv. This occurs during pipeline rewriting and it's
infeasible to disable it at that point, so disable it during
pipeline rewriting - which means it's disabled for all shaders.
- For angle_end2end_tests, disable the file API hooking which
disables the Metal shader cache. This speeds up the tests
significantly - by roughly a factor of 5.
With these changes, several hundred angle_end2end_tests run without
any assertion failures, though still with many test failures. The next
crash is in:
GLSLTest.NamelessScopedStructs/ES2_Metal
and will likely require a larger bug fix, or more changes to be
upstreamed from WebKit's repository.
Bug: angleproject:5505
Change-Id: Ia1ea9a13867f00035d4aeccf907fd032255588e3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3010486
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
d33a2222
|
2021-04-26T16:56:15
|
|
Upstream Apple's direct-to-Metal backend: compile libANGLE.
This change is meant to merge the metal backend changes from Apple's
direct-to-Metal backend. Taken from Kyle Piddington's CL:
https://chromium-review.googlesource.com/c/angle/angle/+/2857366/
The goal of this CL is to merge the metal backend code in a state
that compiles, but not to switch the Metal backend over to using
the direct-to-metal backend yet.
Bug: angleproject:5505
Bug: angleproject:6127
Change-Id: If6783e06e0086b3a1dd25c6f53caca5cfc96cb86
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2950067
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
|
|
e2710f59
|
2021-07-06T17:29:08
|
|
Vulkan: SPIR-V Gen: Fix image atomic built-ins
The `imageAtomic*` built-ins additionally include coordinate and
sample parameters that need to be fed to OpImageTexelPointer before the
atomic operation can be generated.
This change passes all *image*atomic* GLES31 deqp tests as well as:
GLSLTest_ES31.ArraysOfArraysOfR32fImages/ES3_1_Vulkan_DirectSPIRVGen
Bug: angleproject:4889
Change-Id: I9ed729d09914cb01467d4de504de38c931a9196e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3011419
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e3e7447a
|
2021-07-08T22:22:19
|
|
Vulkan: Fix flipXY for 180 degree prerotation and spec consts
The multiplier used for flipXY in this configuration was incorrect.
Bug: angleproject:5348
Bug: angleproject:5349
Bug: angleproject:5350
Change-Id: I0b3771f6a9da6ab2af02ed5ee5fe7b49d0415410
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3016768
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
dc59772e
|
2021-06-22T22:37:26
|
|
Vulkan: SPIR-V Gen: Support switch
With the infrastructure to support this in place, switch is simply
implemented as a conditional with multiple blocks. Each block either
ends with a branch to the merge block or the next block, implementing
fallthrough.
Bug: angleproject:4889
Change-Id: I5831531d918ac06648cced7707d1d48ffeb6b1b0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2983559
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c3c934a3
|
2021-06-25T01:40:54
|
|
Translator: Better group ES100 texture builtins
The ES100 texture built-ins are now (similarly to ES300 ones) grouped
based on whether they include a Bias, or Lod.
Bug: angleproject:4889
Change-Id: I495af48644c68286b1b0cc2a5580566fdd22cfc9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2987859
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7d023dac
|
2021-06-10T00:13:41
|
|
Vulkan: SPIR-V Gen: Basic support for fragment shaders
Fragment shader built-ins are implemented in this change and direct
SPIR-V generation for fragment shaders is enabled.
Bug: angleproject:4889
Change-Id: I6f92a5585f242122a81c97a9b1aa2763009161a0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2951625
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
64ce506d
|
2021-06-18T14:48:29
|
|
Vulkan: SPIR-V Gen: Support most non-texture/image built-ins
Most GLSL built-ins map directly to some SPIR-V operation. texture*()
and image*() built-ins are not implemented as well as a handful of other
built-ins that require special-handling.
Bug: angleproject:4889
Change-Id: I72abfb4692c3d66a3c8be43ce44ba6808efe6255
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2971646
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
8b869a95
|
2021-06-13T01:09:27
|
|
Translator: Generate Ops for all built-in functions
EOpCallBuiltInFunction is removed in this change, as well as the
"op": "auto" property in builtin_function_declarations.txt. Instead,
gen_builtin_symbols.py automatically generates Ops for every built-in
function and generates the TOperator enum accordingly.
This simplifies SPIR-V code generation by allowing switches to be used
on operators instead of string comparisons.
Bug: angleproject:4589
Bug: angleproject:4889
Change-Id: Ia351524400b0e12a10a5572e27e9b88c6ec2e61c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2958869
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
3f9dcb00
|
2021-06-12T01:37:32
|
|
Translator: Prune trivial dead code
Code after discard, return, break and continue is discarded with this
change. This simplifies SPIR-V generation as no code is allowed after a
branch instruction and no special handling is necessary after this
change.
Bug: angleproject:4889
Change-Id: Ife9c8de8a6d0db9d682561daf44366aad9b1cf61
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2957811
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
31641b8e
|
2021-06-05T02:17:47
|
|
Declare specialization constants in the AST
A new qualifier (EvqSpecConst) is added so that specialization constants
can be declared in tree.
This enables TVariable references to specialization constants to be
validated, which were in fact invalid as every reference declared a new
variable. That is fixed.
Bug: angleproject:4889
Change-Id: I1711e41cbc5a1260843d2d004d3568bdae11e963
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2941451
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
77831a6d
|
2021-05-31T22:41:58
|
|
Vulkan: SPIR-V Gen: If-else blocks
This change implements if-else blocks as well as a few simple binary
operations (equality, less-than etc). It builds on prior work to
generate the function in separate blocks and introduces a "conditionals"
stack to support nesting of if-else blocks, switches and loops.
Bug: angleproject:4889
Change-Id: If7694000487811837ed5946753568b41d67199f0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2929660
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
be873929
|
2021-05-26T21:55:50
|
|
Vulkan: SPIR-V Gen: Handle constants and constructors
This change translates constants and constructors (minus type
casting). With this change, shaders such as
gl_Position = vec4(aposition, 0, 1);
are translated correctly.
Bug: angleproject:4889
Change-Id: I4463717cf880c6d05db179b98691d5cabc1a2d7c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2920192
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
d7aa0130
|
2021-04-26T16:56:15
|
|
Upstream Apple's direct-to-Metal backend: compile translator.
This change is meant to merge the translator changes from Apple's
direct-to-Metal backend. Taken from Kyle Piddington's CL:
https://chromium-review.googlesource.com/c/angle/angle/+/2857366/
The goal of this CL is to merge the translator code in a state that
compiles, but not to switch the Metal backend over to use this
translator backend yet.
Bug: angleproject:5505
Change-Id: I68a6354604498cd5fd1eb96c13fc56f3b38f2bd0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2897536
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
|
|
daeac238
|
2021-05-08T22:09:38
|
|
Translator: Ensure structs and blocks are uniquely defined
A new AST validation is added to ensure that the same TStructure or
TInterfaceBlock is not redundantly defined. This helps with SPIR-V
generation by allowing the id to be used as key in a hash map that looks
up the corresponding SPIR-V type id.
A bug is fixed where the Vulkan driver uniform declaration created two
identical declarations for ANGLEDepthRangeParams.
A number of other bugs are also fixed in this change, where if a
variable declaration is eliminated (for example due to constant folding,
or inactive interface variable removal) and it contained a struct
specifier, the struct declaration was also removed. OutputGLSLBase had
a hack where structs were declared on first encounter, which was
incorrect as the scope of the declaration could change. Those bugs are
fixed and this hack is removed.
Bug: angleproject:2733
Bug: angleproject:4889
Bug: angleproject:5936
Change-Id: I8e13748c0bf552ae8b052249282769a1f0775603
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2881942
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d469dcb1
|
2021-05-06T15:13:42
|
|
Translator: remove image2DRect
There is no such thing as image2DRect in GLSL. imageRect (the right
type) is present, but the code was mistakenly using image2DRect.
Bug: angleproject:4889
Change-Id: I42bacd2ad8866c715af0d9711bebc95897607354
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2878095
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6ec55494
|
2021-04-08T22:02:50
|
|
Vulkan: Use AST transformation for gathering default uniforms
... instead of generating text. This will keep the tree in a consistent
state, as previously the references to uniform values where to
TVariable's whose declarations were removed.
Bug: angleproject:2461
Bug: angleproject:4889
Change-Id: I2ef3787dede371514a5f495f4cc8fc67ea45f451
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2815564
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
58eabfd7
|
2021-04-08T23:57:04
|
|
Translator: Validate consistent variable references
Some transformations change variable declarations. This validation
ensures that all references to said variables are appropriately replaced
as well.
Bug: angleproject:2733
Change-Id: I6c2873968eeed4cba66e70069f84eb69a1f77074
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2818140
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
54294c9a
|
2021-03-02T22:15:05
|
|
Partially upgrade codegen to Python 3
Bug: angleproject:5707
Change-Id: I4e26c2c7ba4a36185b28ecd6e87be1161b60431a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2729567
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
77637f2d
|
2021-02-19T15:18:52
|
|
Vulkan: Generate xfb support code in SPIR-V for emulation path
This change moves the code generation at link time from source code to
SPIR-V. As a result, transform feedback extension and emulation paths
are more similarly handled before SPIR-V transformation (they both store
information identically in the ShaderInterfaceVariableInfoMap).
This change gets rid of the @@ XFB-OUT @@ marker. With no source code
generation at link time, shader compilation can be moved to
glCompileShader time.
Bug: angleproject:4888
Change-Id: I8cdb89c22b57ce48cf5d226b8e41622d9d550d46
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2713269
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
550f2a3e
|
2021-02-24T09:49:42
|
|
Vulkan: Shader support for EXT_shader_framebuffer_fetch_non_coherent
Translator can accept gl_LastFragData and 'inout' variable to gain
access to framebuffer attachment data. The Vulkan translator replaces
it with the SubpassInput type variable. Note that this works only for
the noncoherent version of the extension.
Bug: angleproject:5454
Test: *EXTShaderFramebufferFetchNoncoherent*.*
Change-Id: I392f84ee3ad3eb9fbd09d0b7ff83731a9a3f33f6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598060
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
|
|
b1deba2f
|
2021-01-28T16:06:51
|
|
Vulkan: Don't emit spec const declaration in compute shaders
Bug: angleproject:5070
Change-Id: I74becfeac88b4a8ff66dd36670792082d0b941cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2658882
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
5e0a8f9b
|
2021-01-27T13:46:08
|
|
Translator: Enable geometry and tessellation in ES3.2
Symbols that these extensions introduced were only accepted if the
extension directive was present. This is not necessary for es 320
shaders. This change adds a new tag to builtin variable and function
declarations in the translator, namely "essl_extension_becomes_core_in"
which makes gen_builtin_symbols.py automatically create two entries for
the builtin; one with the specified level and extension, one with the
core level and without extension. Entries in
builtin_function_declarations.txt can potentially be deduplicated as a
follow up to take advantage of this tag, though likely an anologous
"glsl_extension_becomes_core_in" needs to be introduced.
Bug: angleproject:5557
Bug: angleproject:5579
Change-Id: I84c19f48a3ccc89d82d80a4f35f7833205bbc88f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2649449
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9f4b159b
|
2021-01-19T12:48:15
|
|
Translator: Avoid vector copies with multi-replacement
Turns push_backs into emplace_backs and changes the TIntermSequence
constructor argument to &&.
Bug: angleproject:5535
Change-Id: I640ce879b6ade48a28dea6385ebb7a95cb8304ff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2636680
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
f0286e63
|
2021-01-19T12:38:46
|
|
Translator: Stop allocating TIntermSequence
The functions that take a TIntermSequence always copy out / Swap the
contents away. This change makes all TIntermSequences live on the stack
instead of being newed.
Bug: angleproject:5535
Change-Id: I942f1c5e57b00199d5308183f71bd9e18b0608bd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2636679
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2b242f53
|
2021-01-17T14:24:53
|
|
Vulkan: Simplify RewriteCubeMapSamplersAs2DArray
This change is mostly done to remove an unnecessary helper in
ReplaceVariable.cpp.
Tested locally, as the bots all support ES3.1+. There are a few
failures, with or without this change.
Bug: angleproject:5556
Change-Id: I7bd2d4294c9dc164146d713db6b45cbc73e59c16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633437
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
bd2954a9
|
2021-01-16T11:33:12
|
|
Reland "Cleanup translator option checks"
This reverts commit 9173e01730923823846348e513bb8cbe7eddbbe5.
Reason for revert: This was in a chain of reverts, but is unrelated to the issue.
Original change's description:
> Revert "Cleanup translator option checks"
>
> This reverts commit 9710c4e473c88a38f11eb10c600717181d6e24df.
>
> Reason for revert:
> Earlier CL breaks pre-rotation:
> https://chromium-review.googlesource.com/c/angle/angle/+/2598584
>
> Original change's description:
> > Cleanup translator option checks
> >
> > Use comparison with 0 for explicit conversion to bool.
> >
> > Bug: angleproject:3606
> > Change-Id: Ie0a76d7df829227c1376894535813b54e13491b4
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2631689
> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: Charlie Lao <cclao@google.com>
> > Reviewed-by: Jamie Madill <jmadill@chromium.org>
>
> TBR=syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
>
> Change-Id: Ib597a62f3c7078d28f7f5b79d1cc9f8d9e469c31
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: angleproject:3606
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2634047
> Reviewed-by: Tim Van Patten <timvp@google.com>
> Commit-Queue: Tim Van Patten <timvp@google.com>
TBR=timvp@google.com,syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
Bug: angleproject:3606
Change-Id: I10ecca63a3db6dbc3ddedf5bb7e5319a82a80a30
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633712
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
dfd9bdfd
|
2021-01-16T11:32:30
|
|
Reland "Vulkan: Generate gl_Position pre-rotation in SPIR-V"
This reverts commit 3d39b7c5eab88c420d982155ffbb6181c678ceea.
Reason for revert: Fixed interaction with the
`forceDriverUniformOverSpecConst` workaround.
Original change's description:
> Revert "Vulkan: Generate gl_Position pre-rotation in SPIR-V"
>
> This reverts commit 0f86b196ffaffeeee3460e3188f20a7ac120796d.
>
> Reason for revert:
> Breaks pre-rotation for all apps, so they are displayed in portrait instead of landscape.
>
> Original change's description:
> > Vulkan: Generate gl_Position pre-rotation in SPIR-V
> >
> > Instead of having the translator output pre-rotation code in the vertex
> > stage based on a specialization constant, this change makes the SPIR-V
> > transformer perform pre-rotation of gl_Position on the last geometry
> > stage.
> >
> > An alternative solution would be to generate pre-rotation code in the
> > translator in every geometry stage, each controlled by a separate
> > specialization constant. This change avoids unnecessary modifications
> > to earlier stages. The generated shaders are also smaller, as they
> > don't contain a mat2[8] pre-rotation constant matrix. The SPIR-V
> > transformer knows the pre-rotation at transformation time, so it can
> > simply use swizzles to achieve the same results.
> >
> > This also ties in with upcoming changes which move gl_Position.z
> > correction to the last geometry shader stage, which is trivially done
> > piggy-backing on the infrastructure in this change.
> >
> > Bug: angleproject:5478
> > Change-Id: I9d5d9d19f3ccda665f5504368ce5ddfa5f383faf
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598584
> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: Charlie Lao <cclao@google.com>
> > Reviewed-by: Jamie Madill <jmadill@chromium.org>
>
> TBR=syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
>
> Change-Id: I81f237fa6b10c7d59831363bee8999e7ad2f09be
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: angleproject:5478
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633694
> Reviewed-by: Tim Van Patten <timvp@google.com>
> Commit-Queue: Tim Van Patten <timvp@google.com>
TBR=timvp@google.com,syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
Bug: angleproject:5478
Change-Id: I7c5eaeef03d9520abd36a1c4a766b6abbf4fdb45
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633709
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9f09435b
|
2021-01-14T08:13:47
|
|
Vulkan: Rename ReplaceClipDistanceVariable files
With the addition of EXT_clip_cull_distance extension
the files are renamed like so -
ReplaceClipDistanceVariable.h -> ReplaceClipCullDistanceVariable.h
ReplaceClipDistanceVariable.cpp -> ReplaceClipCullDistanceVariable.cpp
Bug: angleproject:5458
Change-Id: I277b2d4b6eea6f2014e10acb251284a159292dbc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617572
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3d39b7c5
|
2021-01-16T00:15:14
|
|
Revert "Vulkan: Generate gl_Position pre-rotation in SPIR-V"
This reverts commit 0f86b196ffaffeeee3460e3188f20a7ac120796d.
Reason for revert:
Breaks pre-rotation for all apps, so they are displayed in portrait instead of landscape.
Original change's description:
> Vulkan: Generate gl_Position pre-rotation in SPIR-V
>
> Instead of having the translator output pre-rotation code in the vertex
> stage based on a specialization constant, this change makes the SPIR-V
> transformer perform pre-rotation of gl_Position on the last geometry
> stage.
>
> An alternative solution would be to generate pre-rotation code in the
> translator in every geometry stage, each controlled by a separate
> specialization constant. This change avoids unnecessary modifications
> to earlier stages. The generated shaders are also smaller, as they
> don't contain a mat2[8] pre-rotation constant matrix. The SPIR-V
> transformer knows the pre-rotation at transformation time, so it can
> simply use swizzles to achieve the same results.
>
> This also ties in with upcoming changes which move gl_Position.z
> correction to the last geometry shader stage, which is trivially done
> piggy-backing on the infrastructure in this change.
>
> Bug: angleproject:5478
> Change-Id: I9d5d9d19f3ccda665f5504368ce5ddfa5f383faf
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598584
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Charlie Lao <cclao@google.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
Change-Id: I81f237fa6b10c7d59831363bee8999e7ad2f09be
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:5478
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633694
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
9173e017
|
2021-01-16T00:10:34
|
|
Revert "Cleanup translator option checks"
This reverts commit 9710c4e473c88a38f11eb10c600717181d6e24df.
Reason for revert:
Earlier CL breaks pre-rotation:
https://chromium-review.googlesource.com/c/angle/angle/+/2598584
Original change's description:
> Cleanup translator option checks
>
> Use comparison with 0 for explicit conversion to bool.
>
> Bug: angleproject:3606
> Change-Id: Ie0a76d7df829227c1376894535813b54e13491b4
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2631689
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Charlie Lao <cclao@google.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
Change-Id: Ib597a62f3c7078d28f7f5b79d1cc9f8d9e469c31
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: angleproject:3606
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2634047
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
9710c4e4
|
2021-01-14T22:41:48
|
|
Cleanup translator option checks
Use comparison with 0 for explicit conversion to bool.
Bug: angleproject:3606
Change-Id: Ie0a76d7df829227c1376894535813b54e13491b4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2631689
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
cea86910
|
2021-01-14T08:13:00
|
|
Vulkan: Support EXT_clip_cull_distance extension
EXT_clip_cull_distance extension is supported except for
some features related to EXT_tessellation_shader and
EXT_geometry_shader. Also added a few compiler tests to validate
the transformation from ESSL to GLSL for Vulkan backend.
Bug: angleproject:5458
Tests: angle_end2end_tests --gtest_filter=Clip*DistanceTest*
angle_unittests --gtest_filter=*Clip*Distance*
Change-Id: Ie74e6b2b55112ad92ad111191d629b63506032ab
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2585987
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
|
|
dc99fc40
|
2021-01-13T00:21:41
|
|
Vulkan: Translator pass to monomorphize problematic functions
With array of array of samplers and images, we currently require the
shader*ArrayDynamicIndexing Vulkan features. With atomic counters, we
require the shaderStorageBufferArrayDynamicIndexing feature.
The above features are required to enable passing opaque uniforms to
functions. This change introduces a translator pass that monomorphizes
functions that receive atomic counters, or partially subscripted array
of array of samplers or images, etc by removing those arguments and
using the opaque uniform directly.
Follow up changes will include:
- Great simplification to RewriteStructSamplers, and removal of
RewriteStructSamplersOld. This will drop dependency to
shaderSampledImageArrayDynamicIndexing and
shaderStorageImageArrayDynamicIndexing.
- Great simplification to RewriteAtomicCounters. This will drop
dependency to shaderStorageBufferArrayDynamicIndexing.
- Emulation of imageAtomicExchange for r32f formats, but changing the
qualifier to r32ui.
Note that parts of RewriteStructSampler are obsolete with this change,
but will be refactored as a follow up.
Bug: angleproject:3881
Bug: angleproject:4071
Bug: angleproject:5535
Change-Id: Ifd1435b2a31ebf364815046886aeded60297da79
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2628127
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
|
|
0f86b196
|
2020-12-21T22:54:05
|
|
Vulkan: Generate gl_Position pre-rotation in SPIR-V
Instead of having the translator output pre-rotation code in the vertex
stage based on a specialization constant, this change makes the SPIR-V
transformer perform pre-rotation of gl_Position on the last geometry
stage.
An alternative solution would be to generate pre-rotation code in the
translator in every geometry stage, each controlled by a separate
specialization constant. This change avoids unnecessary modifications
to earlier stages. The generated shaders are also smaller, as they
don't contain a mat2[8] pre-rotation constant matrix. The SPIR-V
transformer knows the pre-rotation at transformation time, so it can
simply use swizzles to achieve the same results.
This also ties in with upcoming changes which move gl_Position.z
correction to the last geometry shader stage, which is trivially done
piggy-backing on the infrastructure in this change.
Bug: angleproject:5478
Change-Id: I9d5d9d19f3ccda665f5504368ce5ddfa5f383faf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598584
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e2a8a69a
|
2021-01-04T23:52:02
|
|
Vulkan: Move xfb emulation offset calculation to translator
A new function is added by the translator to calculate the transform
feedback offsets in the emulation path. This function makes the
generated code for transform feedback smaller.
Bug: angleproject:3606
Change-Id: I01460f907e20e2887cb720bddad96697fdcb0cf3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2607492
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
64508f44
|
2020-12-12T18:00:10
|
|
Vulkan: Reduce driver uniform data to minimum if specConst is used
If specialization constant is used, driver uniform data structure should
be reduced to minimum to increase cache locality.
Bug: b/175479076
Change-Id: I1fc50666542c6763c60bfe011cde5bc77ccc08e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2588549
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
8f9e17d5
|
2020-12-14T14:11:11
|
|
Add EXT_clip_cull_distance extension autogen code
Addition of shader autogen code for EXT_clip_cull_distance extension.
Bug: angleproject:5458
Change-Id: I299528957c0e747fd84987c420588c314f54aae0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2590989
Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c75473c2
|
2020-11-23T14:26:32
|
|
Vulkan: Generalize FlipRotationSpecConst to SpecializationConstant
Specialization constant are used not just for flip/rotation. It also
used for other things. This CL merges all specialization constant usage
(lineRasterEmulation, flip, rotation, halfRenderArea) into one class and
rename FlipRotationSpecConst to SpecConst.
Bug: b/173800146
Change-Id: I8dc3354b6caedbb183cec29855fc1c301ec8872a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2555812
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
067a12f0
|
2020-11-19T16:47:25
|
|
Reland "Vulkan: Use specialization constant for halfRenderAreaWidth"
This is a reland of ff38106d62fca2e36ec2db1cd580b546fd53ae43
Original change's description:
> Vulkan: Use specialization constant for halfRenderAreaWidth
>
> halfRenderArea is used by fragment shader to adjust gl_FragCoord for
> rotation and yflip compensation. This CL bakes halfRenderAreaWidth into
> shader via specialization constant, thus allow compiler to consolidate
> the calculation into one MAD instruction.
>
> Bug: b/173800146
> Change-Id: Id66301278e3389e2582369b695825e632bccecee
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2551541
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Tim Van Patten <timvp@google.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Bug: b/173800146
Change-Id: Ifc36086f4c5d6a44fb5456aa6e31bc8a783bba71
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2579648
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
c859c0ac
|
2020-11-24T17:21:38
|
|
Batch replace std::unordered_map with angle::HashMap in src/
There are a few places that will remain std::unordered_map due to build
or run-time errors, which will need to be evaluated more closely to
determine if they should remain std::unordered_map or if there is
another Abseil data structure that would be more efficient while still
working correctly.
Bug: angleproject:4873
Change-Id: Ib04253e3ad6398e63f4cc2bfe12c0f9e57cb112b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2558873
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
1ad5791d
|
2020-12-03T22:05:51
|
|
Revert "Vulkan: Use specialization constant for halfRenderAreaWidth"
This reverts commit ff38106d62fca2e36ec2db1cd580b546fd53ae43.
Reason for revert: Suspect that this CL may be causing win-angle-rel-32 bot failures
Original change's description:
> Vulkan: Use specialization constant for halfRenderAreaWidth
>
> halfRenderArea is used by fragment shader to adjust gl_FragCoord for
> rotation and yflip compensation. This CL bakes halfRenderAreaWidth into
> shader via specialization constant, thus allow compiler to consolidate
> the calculation into one MAD instruction.
>
> Bug: b/173800146
> Change-Id: Id66301278e3389e2582369b695825e632bccecee
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2551541
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Tim Van Patten <timvp@google.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
TBR=timvp@google.com,syoussefi@chromium.org,jmadill@chromium.org,cclao@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: b/173800146
Change-Id: I7bc9966ebbe949f3999d7927afa629dd2e3a4187
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2572801
Reviewed-by: Ian Elliott <ianelliott@google.com>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Ian Elliott <ianelliott@google.com>
|