src/tests/gl_tests/StateChangeTest.cpp


Log

Author Commit Date CI Message
Corentin Wallez 39f3ccda 2019-11-28T17:45:01 Suppress SimpleStateChange failure on Metal NVIDIA BUG=angleproject:4177 TBR=geofflang@chromium.org Change-Id: I642e4bd3650b5b6beb6d9b18106d787c5dbc14f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1942348 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Mohan Maiya c373dfd8 2019-11-22T08:48:22 Vulkan : Handle dirty state correctly when there are muiltiple VAOs If vertex array object binding is changed, we need to update the pipeline cache with the attribute information of the newly bound VAO. We cache the strides of attributes because emulated attributes will have strides that don't match the stride info cached in its binding struct. Also added a test case that switches between multiple VAOs. Bug: angleproject:4127 Test: angle_end2end_tests.exe --gtest_filter=SimpleStateChangeTestES31.MultipleVertexArrayObjectRendering Change-Id: I4f23aec33d5aa5988baa41f3c63db5534daf75ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1917453 Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Le Hoang Quyen 6fcc0bb8 2019-11-21T01:19:40 Metal: Re-add end2end test configs (running test is still disabled) angle_test_instantiate.cpp & angle_test_instantiate_apple.mm: - Disabled metal platform selection on pre-10.13 mac devices for Bug: angleproject:4153 Explicitly disabled tests on metal: - DifferentStencilMasksTest.DrawWithDifferentMask - PointSpritesTest.PointSizeAboveMaxIsClamped - WebGL2ReadOutsideFramebufferTest.CopyTexSubImage3D This requires the crash fix in http://crrev.com/c/1924101 Bug: angleproject:4153 Bug: angleproject:2634 Change-Id: I95046d731a8ba7414cf1a1f4b6f2940282725872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1926389 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Tobin Ehlis c1776c61 2019-11-13T11:36:35 Vulkan:Add Swiftshader configs Add Swiftshader configs to existing test instantiation macros for all ESX variants. This causes Swiftshader to be used to run end2end tests. Added detection code to know when tests are running on Swiftshader and skipping a number of fails initially. Note that when running ANGLE end2end tests within Chromium build on Win32 bots there were crashes with Swiftshader config for tests that should have been skipped. Due to this, just skipping Swiftshader configs on Win32 for now. Bug: angleproject:4081 Bug: angleproject:4092 Change-Id: I32527a62304c5fad90f645b372edf9411ca2b212 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1914126 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Courtney Goeltzenleuchter 8392b118 2019-11-20T16:57:08 Revert "Metal: Enable end2end tests." This reverts commit 0bb42e091b77f174632434a05789b2ce632bd902. Reason for revert: https://bugs.chromium.org/p/chromium/issues/detail?id=1026633 Causing failures on Mac bots. Original change's description: > Metal: Enable end2end tests. > > Explicitly disabled tests: > - DifferentStencilMasksTest.DrawWithDifferentMask > - PointSpritesTest.PointSizeAboveMaxIsClamped > - WebGL2ReadOutsideFramebufferTest.CopyTexSubImage3D > > Bug: angleproject:2634 > Change-Id: I76ab450c06d0e1be1e7469a8b9c6497684c3ca54 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1906607 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> TBR=geofflang@chromium.org,jonahr@google.com,jmadill@chromium.org,le.hoang.q@gmail.com Change-Id: Iaa4264834170a49c274f186d3d74f57714c84b32 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2634 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1926378 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Le Hoang Quyen 0bb42e09 2019-11-19T23:04:00 Metal: Enable end2end tests. Explicitly disabled tests: - DifferentStencilMasksTest.DrawWithDifferentMask - PointSpritesTest.PointSizeAboveMaxIsClamped - WebGL2ReadOutsideFramebufferTest.CopyTexSubImage3D Bug: angleproject:2634 Change-Id: I76ab450c06d0e1be1e7469a8b9c6497684c3ca54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1906607 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Courtney Goeltzenleuchter 377b8caf 2019-11-19T08:57:01 Add suppressions for failures on Intel/Linux The refactor to angle_end2end_tests added tests to OpenGL ES and some of these tests are failing on Intel/Linux. Skip those tests for now. Bug: angleproject:4121 Change-Id: I7a56099faac558a4e18d98eb5f0b25522d656e61 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1924061 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 1a01b4b3 2019-11-11T16:41:07 Refactor end2end test macros This is a foundational CL to enabling the end2end tests on swiftshader. Refactored infrastructure with new ANGLE_INSTANTIATE_TEST_ES* macros that will run tests over all various combinations of all platforms for different ES versions. Just skipping failing tests initially to get the refactor landed. Bug: angleproject:4081 Bug: angleproject:4092 Change-Id: I017f6c3267179e49b6ae08cc7488096b423dcdb5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1904635 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Shahbaz Youssefi b3c4dffd 2019-11-12T14:42:23 Vulkan: Fix glMemoryBarrier* implementation The indirect bit handling is no longer necessary, as setup*Indirect functions already add the barriers if necessary. The framebuffer bit is unnecessary as the image layout transition from storage image to framebuffer attachment would already add the necessary barrier. Image access bit was indeed necessary, but so is shader storage bit which is added. Bug: angleproject:3574 Bug: angleproject:3879 Bug: angleproject:3934 Change-Id: I9da722e7a34941932731335af2313783295031ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1913080 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 4f023f56 2019-11-11T15:46:02 Enable passing end2end test Bug: angleproject:3361 Change-Id: Ie488f77a7baa0ce66d192c651e826c2fee597af2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1912139 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 77fba58c 2019-10-24T19:29:24 Fix improper vertex array assignment in ANGLE test. Test: StateChangeTestES3.VertexArrayObjectAndDisabledAttributes Bug: angleproject:4049 Change-Id: Ibda86585e9117686283081a76df213b2b2db0b6e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1879582 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis b2885bc4 2019-10-23T13:33:48 Vulkan:Enable UpdateBufferInUse test on AMD Re-tested this and it's now passing so turning it on. Bug: angleproject:3255 Change-Id: Iccf63cfaa4386dfda5628e189362631e655953f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1876081 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Mohan Maiya 5549ef04 2019-10-02T09:38:03 Vulkan: Fix content synchronization for textures bound to images Added state tracking back for images bound with glBindImageTexture This fixes a bug where updating a texture with glTexSubImage2D would not trigger a content update when the same image was re-used in a dispatch Bug: angleproject:3887 Test: SimpleStateChangeTestES31.DispatchWithImageTextureTexSubImageThenDispatchAgain/ES3_1_Vulkan Change-Id: I030ec52f1c470f9e9ff7c14f1c24fe213000a3ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1835943 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 912e52d8 2019-08-23T00:25:09 Vulkan: Storage image support Image bindings are placed after atomic counters in the "resources" descriptor set. There are two issues yet to be addressed: - GL can create a 2D (array) view of a 3D image, but this is not allowed in Vulkan. If this cannot be made possible, emulation needs to be done. https://github.com/KhronosGroup/Vulkan-Docs/issues/1033 - GL can create an image view of a texture with a different format and have the data reinterpreted. This is not currently done. Bug: angleproject:3563 Change-Id: I95c4d92c50bb033212a9a67f3f2d6f97c074c7bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1767366 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 2a19c59f 2019-08-23T14:10:24 GL: Check for errors around GL calls. Add a macro to check for GL errors after each GL call to catch errors as they happen even if the debug callbacks are unavailable. GL errors are only checked when asserts are enabled unless explicitly requested with the ANGLE_GL_TRY_ALWAYS_CHECK macro to verify GL calls that may allocate memory. Updated TextureGL to use the macro. BUG=angleproject:3020 Change-Id: I7678b204899e940824b010ab4be7e7f159bee6de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1764476 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Tobin Ehlis 4c833efb 2019-07-11T11:29:35 Vulkan: Enable sampler objects This is the initial implementation to get GLES3.0 Sampler Objects working on the Vulkan backend. When samplers are dirty, a corresponding Vulkan sampler object will be created with associated state and textures are flagged as dirty anytime sampler bindings change. Then when handling textures dirty, any bound sampler objects are pulled from active texture units. When sampler objects are bound, their state is used instead of the built-in texture's sampler state. This change also adds a test that uses the same texture object with different sampler objects to test a corner case that dEQP misses. Bug: angleproject:3208 Change-Id: I643d9c9d5cb92fecc02dad815a07bcf349534c70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1706897 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jiacheng Lu 7c8928d0 2019-07-24T10:39:40 Add more tests covering gl::vertexAttribPointer 1. Add tests ensuring VBO binding with format requiring conversion in vulkan backend is converted correctly after binding and offset changes. 2. Add tests ensuring VBO binding switching between CPU and GPU handles correctly in vulkan. As for vulkan, it transfers CPU side memory into tightly packed buffer and may causing a stride change. Bug: angleproject:3256 Change-Id: I5d9d78670b28bec286b96d3b6a9c6211da3f3d9b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1716614 Commit-Queue: Jiacheng Lu <lujc@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Xinghua Cao e995d7fb 2019-06-26T17:59:27 Use memoryBarrier to sync image load and store Image load and store are incoherent memory access operations, so need to use memoryBarrier to ensure the visibility of incoherent memory access operations with other operations. Bug: angleproject:3044 Change-Id: I4d474d260a3199c026911de8d20878cd327d16c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1677420 Commit-Queue: Xinghua Cao <xinghua.cao@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi da904484 2019-07-02T10:49:14 Vulkan: Implement glInvalidate[Sub]Framebuffer Additionally, fixes an issue where the read framebuffer was affecting the render pass desc given to the pipeline. This fix is included with this CL as its test depends on glInvalidateFramebuffer. This issue was revealed by 071d2a44 changing the order in which read and draw framebuffers were synced. Previously, read was synced first, dirtying the pipeline and then draw was synced fixing it. With the order reversed, the read framebuffer is the last to changes the pipeline, leaving it in an invalid state. Bug: angleproject:3201 Bug: angleproject:3202 Change-Id: Ibebf732a3e3cc081e4865f79dcbaedb467fd9038 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1682468 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Courtney Goeltzenleuchter b867bc6f 2019-06-19T12:11:13 Vulkan: Fix dirty element array buffer updates. The issue occurs that binds the same buffer and calls glDrawElements with the same indices. The offset has been reset in the VertexArrayVk::syncState(), but it doesn't check the actual value in the ContextVk::setupIndexedDraw(). Also corrected case where update via BufferSubData wasn't being sent to the HW. Bug: angleproject:3362 Change-Id: I0f7d2fc162bc8f1c36cb09ba689fd27b482b9035 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1666345 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 44168468 2019-06-20T09:50:23 Vulkan: Sync image in TextureVk::syncState. We can use the DIRTY_BIT_IMPLEMENTATION internal dirty bit in the gl::Texture class to force calls to ContextVk::syncState. In syncState we can ensure we call ensureImageInitialized before we get to the ContextVk. This in turn means we can remove some of the command graph breaks from TextureVk. We need to make sure the dirty bits are propagated to EGL Image siblings with this method. This fixes a potential implementation issue with EGL images with the GL back-end. Also makes a state change test a little better by removing some of the VAO and program init calls before the draw. Improves perf on the texture change microbenchmark by 12.5%. Bug: angleproject:3539 Bug: angleproject:3117 Change-Id: I2b5481690801fa98f859a6c02e3f4b974590cd3d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1663839 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 88596bea 2019-06-13T14:17:48 Vulkan: Implement a texture descriptor cache. We noticed a significant hotspot in vkAllocateDesctiptorSets. The app was repeatedly cycling through a few combinations of active textures. For each state change in ANGLE we were allocating a new desctiptor set. This in turn would trigger internal driver memory allocation and cause jank. Using a cache avoids allocations entirely since the application is rotating through a stable set of textures. The descriptor cache is stored in each program. It is indexed by a set of 32-bit serials. Each texture generates a unique serial for every combination of VkImage and VkSampler that the texture owns. The texture descriptor is refreshed every time a texture changes or is rebound. The descriptor cache is accessed via an unoredered map with the texture serial sets as the hash key. We also store the maximum active texture index in the cache key so we don't need to hash and memcmp on all 64 active textures. This will currently fail if more than MAX_UINT serials are generated. But that number is high enough that it shouldn't be possible to hit in practice in a practical amount of time. Requires shifting the texture sync to ContextVk so we can get the new serial after the textures are updated. And to make sure to update the image layouts even if the descriptors are not dirty. Improves performance of the T-Rex demo. Also improves the score of the texture state change microbenchmark by about 40%. Bug: angleproject:3117 Change-Id: Ieb9bec1e8c1a7619814afab767a1980b959a8241 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1642226 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 70642e42 2019-06-05T14:55:49 Vulkan: Implement ES 3.0 rasterizer discard Rasterizer discard is a feature that allows the graphics pipeline to skip the fragment shader stage. Implementing rasterizer discard in Vulkan is as easy as not binding a fragment shader binary. Tests for rasterizer discard live in dEQP-GLES3.functional.rasterizer_discard.*. Bug: angleproject:3214 Test: dEQP-GLES3.functional.rasterizer_discard.* Change-Id: I0815df3b70f6f9cdc6c8c87ec4813bb629d8bd5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1646692 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 0a56f0e3 2019-05-14T17:07:27 Vulkan: Update front face mode during syncState() When handling DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING in syncState(), the call to update the front face was missing, so culling could be enabled for the wrong front faces. Bug: angleproject:3237 Test: Verify 3D apps render (more) correctly Test: New SimpleStateChangeTest end2end tests Change-Id: I1d94a977bea9e48d90b5346861e5565d2371cadd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1611753 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 6722009e 2019-05-20T11:12:53 Vulkan: Handle dirty RTs with state messages. Prior to this CL we were handling dirty state change notifications by flushing the RT Images just prior to use or just after they were changed. This could lead to a few redundant checks in several places. It also meant we needed an owner pointer from the RT to the parent Image. This pointer would be null for Surfaces and Renderbuffers. This cleans up the image flushing logic to be handled by dirty bit notifications. When an app updates an attached Texture with TexSubImage or related calls it will send a notification to the Framebuffer. The Framebuffer then sets a dirty contents bit that is handled in the implementation. In Vulkan this means flushing the dirty bits. Requires adding a flag to the FramebufferImpl class to determine if we need to syncState before we checkStatus. Adding the option allows us to only call syncState for the GL back-end. Not calling syncState allows the robust resource init operation to happen *before* we syncState. Which in turn allows FramebuffeVk to initialize the VkImages in one go. Added new regression tests for Texture updates. This might not cover all cases. I found it was very hard to trigger some of the resource update staging in TextureVk. Bug: angleproject:3427 Change-Id: Idfa177436ba7fcb9d398f2b67922e085f778f82a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1601552 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
shrekshao 3dbe480b 2019-05-06T15:59:07 Validating draw buffers now also considers color mask settings It will always return true if all 4 channels of color mask are set to false. This should only apply to WebGL. Will fix this in a later patch. Bug: chromium:958374 Change-Id: I46befaf3ae1b63027dfbb309ac32724c616025d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1594629 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 5cbaa3f8 2019-05-07T15:49:22 Don't inherit ANGLETest SetUp and TearDown. Instead of inheriting from testing::Test's SetUp and TearDown we add new methods 'testSetUp' and 'testTearDown'. This helps prevent a common error of forgetting to call the base class method. Also add a check in the ANGLETest destructor that SetUp and TearDown have been called. Bug: angleproject:3393 Change-Id: Iab211305cc06ffea9ca649e864ddc9b180f2cba0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1593960 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill ddc4d33a 2019-05-01T15:11:46 Remove several underused platform configs. * Removes D3D11 Warp and Reference configs from tests. * Removes several permutations of OpenGL back-end specific configs. * Removes FL 9_3 since it is no longer supported. * Removes present path "Copy" since it's redundant with normal D3D11. Reduces number of configs from over 60 to 25. Bug: angleproject:3393 Change-Id: Ia5a23de3c4865b17ee50673a4066757b901a4b5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1574675 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill b8149075 2019-04-30T16:14:44 Clean up ANGLE test extension functions. None of these functions needed to be member functions. Also make the naming more consistent. Bug: angleproject:3393 Change-Id: I7aafe2269a48af703a87bd9a8cf4cfab9e177dd3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1574673 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yuly Novikov d18c048a 2019-04-04T19:56:43 Remove Nexus 5X Vulkan test suppressions. SimpleStateChangeTest.DrawArraysThenDrawElements TextureUploadFormatTest.All VertexAttributeTest.UnsignedByteNormalized VertexAttributeTest.ByteNormalized EXTMultisampleCompatibilityTest.DrawAlphaOneAndResolve was skipped on all Android for unspecified reason in https://chromium-review.googlesource.com/c/angle/angle/+/451877 seems to be passing now. Make some suppressions OpenGL ES specific: MultisampleCompatibilityTest.DrawCoverageAndResolve RobustResourceInitTest.TexImageThenSubImage RobustResourceInitTest.ReadingPartiallyInitializedTexture RobustResourceInitTestES3.MultisampledDepthInitializedCorrectly RobustResourceInitTest.MaskedDepthClear RobustResourceInitTestES3.MaskedDepthClearBuffer RobustResourceInitTest.MaskedStencilClear RobustResourceInitTestES3.MaskedStencilClearBuffer TransformFeedbackTest.OffsetResetOnBeginTransformFeedback Bug: angleproject:3262 Bug: angleproject:3124, angleproject:2657, angleproject:2797 Change-Id: I3ed7a3f0ebbb4598bff75e2b3bd8b3b0630779f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1572484 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Qin Jiajia e7da32f1 2018-12-27T15:31:47 Fix the failure in UpdateImageTextureInUse If we update the texture data between two dispatch calls, ReadPixels can't get right result after the second dispatch call. The failure reason is that after the first dispatch, ReadPixels will sync framebufer state which will update color render target. Finally, TextureD3D::ensureRenderTarget is reached. However, we are in compute pipeline. mTexStorage->isRenderTarget() will be false. That results the current texture will create a new render target storage. But the UAV is still bound with the previous texture storage. If there is no texture dirty bit between these two dispatch calls, applyTexturesForCompute won't be called. After the second dispatch, readPixels will read data from the new texture storage which is not updated. Bug: angleproject:3015 Change-Id: Ib2494ab8bf6e12faefc0a7370719d383526c36ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1390710 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Shahbaz Youssefi d3ec341d 2019-04-10T11:37:07 Fix LineLoopStateChangeTest to actually draw square and hourglass The test claimed to be drawing an hourglass followed by a square. That is: ---- \/ /\ ---- followed by: ---- | | | | ---- With the end result being: ---- |\/| |/\| ---- However, in reality it was drawing two hour glasses with the same result. That is: ---- \/ /\ ---- followed by: |\/| |/\| Bug: angleproject:3361 Change-Id: I59a2930f78e6e448b6ccb2e5f70c73ff0f15a2ea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1561650 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 4877ef35 2019-04-12T10:36:00 Ensure deleteTexture preserves correct texture cache. Also adds a test contributed by jgilbert@mozilla.com. Bug: angleproject:3375 Change-Id: Ibd52daa074bf53b2b213193ccf5a612705a89c67 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1565052 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yuly Novikov 0086a8ac 2019-04-09T09:15:59 Skip LineLoopStateChangeTest.DrawElementsThenDrawArrays on Win Vulkan AMD Bug: angleproject:3361 Change-Id: I39c595e1b8ab73520422e2dd3433cd007a1415a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1559789 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuly Novikov d02c17f9 2019-03-28T16:49:39 Mark vertex attributes dirty during context switches gl::State::mDirtyCurrentValues is a second tier of gl::State::DIRTY_BIT_CURRENT_VALUES bit. Marking mDirtyCurrentValues dirty during context switches treats them in the same way as other gl::State::mDirtyBits are treated. This has regressed in https://chromium-review.googlesource.com/c/angle/angle/+/722423 where individual current values bits were squashed into one. Bug: chromium:920033 Change-Id: I778515f11c975f8d88bd2d8c08c49160fd011497 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545009 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 9cce3cd9 2019-03-27T15:24:12 Update texure cache after teleting bound texture. The texture cache could become out of sync. And we could end up dereferencing an invalid pointer. Bug: chromium:943538 Change-Id: I6a99a04e80fc551b6177e25b7bee09c6ae226340 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1541718 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
James Darpinian 5fd08af4 2019-03-13T19:35:36 Sampler state overrides texture state if set The new validation added in http://crbug.com/809237 failed to consider that sampler object state overrides texture object state if a sampler object is bound. State caching makes this complicated to fix. Fixes WebGL conformance test incompatible-texture-type-for-sampler.html https://github.com/KhronosGroup/WebGL/pull/2823 Bug: 940080, 809237 Change-Id: I26b0fb35c5630c36248edae80f0298a0cb7e14b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1522364 Commit-Queue: James Darpinian <jdarpinian@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tobin Ehlis a8ff8814 2019-03-05T07:06:32 Vulkan:Optimize SecondaryCommandBuffers RELAND of this commit. Had to fix fuzzer build errors. Optimize performance of SecondaryCommandBuffers and enable them as the default build option. To disable this set angle_enable_custom_vulkan_cmd_buffers=false in your build args. This CL enhances the PoolAllocator to have a "fast" mode that can be enabled at class creation. This mode uses an alignment of 1 byte and enables a fastAllocation() call that avoids some bookkeeping overhead. The SecondaryCommandBuffer uses this fastAllocation() function. Furthermore the fast path of fast allocate, using the current page, is inlined for maximum speed. Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate blocks so that the commands occur linearly in memory. This speeds up processing with improved cache coherency and minimizes overhead when recording commands. Also the core Draw functions and their state updates are all inlined as well as the common functions to initialize commands and to copy command pointer data. This change also includes some new, custom commands. One is imageBarrier that is a specialized version of pipelineBarrier that only performs a single image layout transition. There are customized versions of various Draw commands to minimize copying of parameters. There are also specialized commands to bind[Graphics|Compute]Pipeline that have the pipeline type built in to the command. More custom commands and command data size optimizations will be made in follow-on commits. Bug: angleproject:3136 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Change-Id: I621d8f8893308fca240b32390928e8ba0036cf06 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535385 Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 896e7811 2019-03-22T14:56:33 Revert "Vulkan:Optimize SecondaryCommandBuffers" This reverts commit 2219b18c984ed69251f3db3c7b5fd69a2fa68c77. Reason for revert: Failing to compile on ASAN builders: https://ci.chromium.org/p/chromium/builders/try/linux-libfuzzer-asan-rel/134782 Currently blocking roll. Original change's description: > Vulkan:Optimize SecondaryCommandBuffers > > Optimize performance of SecondaryCommandBuffers and enable them as the > default build option. > To disable this set angle_enable_custom_vulkan_cmd_buffers=false in > your build args. > > This CL enhances the PoolAllocator to have a "fast" mode that can > be enabled at class creation. This mode uses an alignment of 1 byte and > enables a fastAllocation() call that avoids some bookkeeping overhead. > The SecondaryCommandBuffer uses this fastAllocation() function. > Furthermore the fast path of fast allocate, using the current page, > is inlined for maximum speed. > Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate > blocks so that the commands occur linearly in memory. This speeds up > processing with improved cache coherency and minimizes overhead when > recording commands. > Also the core Draw functions and their state updates are all inlined > as well as the common functions to initialize commands and to copy > command pointer data. > > This change also includes some new, custom commands. One is > imageBarrier that is a specialized version of pipelineBarrier that only > performs a single image layout transition. > There are customized versions of various Draw commands to minimize > copying of parameters. > There are also specialized commands to bind[Graphics|Compute]Pipeline > that have the pipeline type built in to the command. > More custom commands and command data size optimizations will be made > in follow-on commits. > > Bug: angleproject:3136 > Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 > Commit-Queue: Tobin Ehlis <tobine@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=tobine@google.com,syoussefi@chromium.org,jmadill@chromium.org Change-Id: I1c0bfe864ff343eb8ea6c88556523f8715c981d5 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:3136 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535998 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 2219b18c 2019-03-05T07:06:32 Vulkan:Optimize SecondaryCommandBuffers Optimize performance of SecondaryCommandBuffers and enable them as the default build option. To disable this set angle_enable_custom_vulkan_cmd_buffers=false in your build args. This CL enhances the PoolAllocator to have a "fast" mode that can be enabled at class creation. This mode uses an alignment of 1 byte and enables a fastAllocation() call that avoids some bookkeeping overhead. The SecondaryCommandBuffer uses this fastAllocation() function. Furthermore the fast path of fast allocate, using the current page, is inlined for maximum speed. Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate blocks so that the commands occur linearly in memory. This speeds up processing with improved cache coherency and minimizes overhead when recording commands. Also the core Draw functions and their state updates are all inlined as well as the common functions to initialize commands and to copy command pointer data. This change also includes some new, custom commands. One is imageBarrier that is a specialized version of pipelineBarrier that only performs a single image layout transition. There are customized versions of various Draw commands to minimize copying of parameters. There are also specialized commands to bind[Graphics|Compute]Pipeline that have the pipeline type built in to the command. More custom commands and command data size optimizations will be made in follow-on commits. Bug: angleproject:3136 Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
James Darpinian 3ce7f960 2019-03-14T16:09:05 Disable sampler/texture type validation The sampler/texture type validation validation added in https://chromium-review.googlesource.com/c/1377611 did not correctly consider sampler objects. This is a minimal change to disable the validation temporarily, which I intend to merge back to 74. A fix for the validation is in progress at: https://chromium-review.googlesource.com/c/angle/angle/+/1522364 Bug: 940080, 809237 Change-Id: If8a1ae46af7daf23cd92ccb8a985329dfd404dc9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1524475 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Yuly Novikov 559aaca5 2019-02-14T18:24:07 Fix texture and buffer data bugs in tests found by ASAN. Bug: angleproject:3153 Change-Id: Iacb7b2b97b9fc5c68fbee03c66d71eb72a53b4d6 Reviewed-on: https://chromium-review.googlesource.com/c/1474342 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 088e5217 2019-02-06T17:07:57 Vulkan: Suppress flaky test on Nexus5X Bug: angleproject:3124 Change-Id: Idfcd84f92126eb7548f86f8c327887a34e3218a9 Reviewed-on: https://chromium-review.googlesource.com/c/1457025 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill d51fbe34 2019-01-25T15:03:39 Fold buffer access validation into extensions. We only need to perform vertex array buffer validation if the WebGL compatiblity extension is enabled and robust access is not available. Although sometimes the range checks are useful for determining undefined behaviour they are not required by the OpenGL spec. They also slow down state updates significantly. This migrates the OOR tests into specific WebGL tests. It also requires a change to a Chromium test on the passthrough decoder. Improves perf by about 10% in the Vulkan VBO state change test. Also fixes some robust resource access cases for D3D11. Bug: angleproject:3000 Change-Id: Ice37f38f01c2f27bf32ed55657a30e69d8508335 Reviewed-on: https://chromium-review.googlesource.com/c/1390362 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
James Darpinian e4109f27 2018-12-13T16:25:53 WebGL: validate texture format matches sampler type WebGL requires that drawing produces INVALID_OPERATION if a texture's format doesn't match the sampler type it is bound to. This is a little confusing because samplers have two attributes that could be called "type": addressing mode (2D/3D/Cube), and component format (float/signed/unsigned/shadow). ANGLE already handled checking the addressing mode; this change adds checking for the component format. Fixes WebGL conformance test conformance2/uniforms/incompatible-texture-type-for-sampler.html Bug: chromium:809237 Change-Id: I52ebfecd92625e3ee10274cb5f548d7e53de72dd Reviewed-on: https://chromium-review.googlesource.com/c/1377611 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Shahbaz Youssefi 441649f7 2019-01-02T14:09:13 Suppress flaky Linux/Intel/OpenGL test. SimpleStateChangeTestES31.DispatchImageTextureAThenTextureBThenTextureA/ES3_1_OPENGL Bug: angleproject:3044 Change-Id: I21a4e4dadcb1dea23d3a7b2e9089e395e33dc1cd Reviewed-on: https://chromium-review.googlesource.com/c/1392398 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Qin Jiajia 3f01f53c 2018-12-11T15:13:51 ES31: Add state change tests for image This change adds dirty bit state change tests for image textures. Meanwhile, syncImages related codes are removed since syncTextures will do all texture states sync. Bug: angleproject:3015 Change-Id: I9b299c86af1d589e72c08c5d7c55ac74cc7833aa Reviewed-on: https://chromium-review.googlesource.com/c/1390596 Commit-Queue: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 1e853266 2018-12-21T09:07:38 Cache common DrawElements states. Similar to how we cache the base common draw states. This will improve DrawElements performance. Several state checks are optimized into a single 'if' check of a cached value. Also includes a regression test for mapping the element array buffer. Bug: angleproject:2966 Change-Id: Ia6e524a58ad6b7df2e455d67733e15d324b1b893 Reviewed-on: https://chromium-review.googlesource.com/c/1357150 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9b02506c 2018-12-12T15:44:12 Cache valid draw modes with transform feedback. Enabling transform feedback can affect which draw modes are valid. We can use the exiting draw modes cache to save having to check the draw modes twice. We update the cached draw modes on any change to the transform feedback activity state. e.g. when transform feedback is started, or resumed. There are also spec changes that comes into effect in ES 3.2 or when EXT_geometry_shader is enabled. Again we cache these draw modes in the packed valid draw modes map. Will allow for faster validation for draw calls once the other checks for transform feedback are optimized. Also adds a new regression test. Bug: angleproject:2966 Change-Id: Iab901e45aab70980b9e631ec8383fdeadbd32368 Reviewed-on: https://chromium-review.googlesource.com/c/1357149 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 7ef08391 2018-12-07T16:38:21 Vulkan: add test to verify attrib default value dirty handling Companion test to 0c2dc8c378bb288ab9ccfff078fc222d2b99b1a4. Bug: angleproject:2786 Change-Id: Idfbd557dcf6b6bf7e62821ec554bdb3138b616ab Reviewed-on: https://chromium-review.googlesource.com/c/1367750 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 35cd7332 2018-12-02T12:03:33 Refactor test shader style. This change enforces a lot more consistency. We pass const char * to the Compile functions instead of std::string. Also fixes the indentation of C++11 block comments to be more consistent. Bug: angleproject:2995 Change-Id: Id6e5ea94055d8cbd420df4ea2e81b2d96cb5ce78 Reviewed-on: https://chromium-review.googlesource.com/c/1357103 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill b980c563 2018-11-27T11:34:27 Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 5ddbdbf7 2018-10-01T10:15:37 Vulkan: Fix bugs in glGenerateMipmaps. We had two separate minor bugs. 1) missing a flush of the image data and 2) missing an initial barrier to set the image to TRANSFER_DST. Bug: angleproject:2652 Bug: angleproject:2653 Change-Id: I485aafc5c9055b5efb101cb2bc3ebab0588d2639 Reviewed-on: https://chromium-review.googlesource.com/1249564 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Jiawei Shao af0f31d3 2018-09-27T15:42:31 Enable several end2end tests on Windows Intel drivers Bug: angleproject:1388 angleproject:1706 Change-Id: Ic6c62b0a85756bf36b6d345610a77ffd5c4665e3 Reviewed-on: https://chromium-review.googlesource.com/1248442 Commit-Queue: Jiawei Shao <jiawei.shao@intel.com> Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 50e6eaae 2018-09-27T08:24:32 Vulkan: Move LineLoopHelper graph work into BufferVk. Bug: angleproject:2828 Change-Id: Ie6bcdd10e2de415615db2bfb0b6fa17c392455b0 Reviewed-on: https://chromium-review.googlesource.com/1235655 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 74c179bb 2018-09-24T10:53:23 Vulkan: Refresh descriptor sets on driver uniform change. In some state change scenarios the driver uniforms would be updated but not reapplied to the current state. Fix this by setting the descriptor sets dirty when we dirty the driver uniforms. Includes a test using gl_DepthRange. Also fixes a bug with the upcoming line segment rasterization emulation. Bug: angleproject:2598 Bug: angleproject:2845 Change-Id: Ia66f3c86f9770ceb145069eec879fd8725111a76 Reviewed-on: https://chromium-review.googlesource.com/1240413 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e25b8006 2018-09-20T13:39:49 Move sampler sync out of syncProgramTextures. We only need to call the syncState for samplers when they are dirty. Also includes changes to refactor out the sampler sync in GL. Adds observer bindings so sampler sync is handled correctly in resource sharing scenarios. Bug: angleproject:2763 Change-Id: I762f0738ee7572ae29ce6bd5384a30aa9588c848 Reviewed-on: https://chromium-review.googlesource.com/1227797 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Frank Henigman 6c6be2ce 2018-09-10T14:23:57 Vulkan: add S8_UINT texture fallbacks. Add two fallbacks for S8_UINT. Enable tests. BUG=angleproject:2655 Change-Id: If7df23745a8de8a01d86ab6efa3bca67b5227d76 Reviewed-on: https://chromium-review.googlesource.com/1217282 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Jamie Madill d84b6737 2018-09-06T15:54:35 Cache ValidateDrawStates. This improves performance of all draw call validation. The error that should be generated on the draw call is cached in the Context. The cache is updated in several places. Bug: angleproject:2747 Change-Id: I178617623731608e2e7166b53ab6489d8b742ff5 Reviewed-on: https://chromium-review.googlesource.com/1158612 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 3e29cf31 2018-08-31T17:19:17 Vulkan: Fix redefining TexStorage after TexImage. This can be easily implemented via a release call. Bug: angleproject:2651 Change-Id: I0adb3ed385284c6342716cd7c347de9966a81bab Reviewed-on: https://chromium-review.googlesource.com/1200368 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill a792193e 2018-08-31T17:19:18 Vulkan: Enable StateChangeTest.DisablingBufferedVertexAttribute. This was likely fixed with default vertex attribute support. Bug: angleproject:2650 Change-Id: Ibbc19013ed8227c6fe32ae186b0fa88e5c837589 Reviewed-on: https://chromium-review.googlesource.com/1200369 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 4e877ad3 2018-08-28T00:18:47 Suppress TransformFeedbackNegativeAPI test on Mac AMD. Seems to be failing on Mac Pro FYI Release (AMD). Unclear exactly the scope of the problem so suppress it on all Mac AMD for now. Bug: angleproject:2747 Change-Id: I7a5da00b9056839f3ed01fc4c83fa7993019bda7 Reviewed-on: https://chromium-review.googlesource.com/1192550 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 33dab025 2018-08-24T10:00:16 Add test for transform feedback state change validation. This test covers several validation edge cases with detecting feedback loops and buffers bound to multiple types of binding. Bug: angleproject:2747 Change-Id: I612a4fcf1870667a821ebcba2d3948695b3cabd5 Reviewed-on: https://chromium-review.googlesource.com/1174094 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill eef9de68 2018-08-23T11:03:22 Add validation state change test for draw framebuffer. This test covers feedback loops and invalid component types. Bug: angleproject:2747 Change-Id: I3e3c762c5457afef59311f7c5843e464fa386cd6 Reviewed-on: https://chromium-review.googlesource.com/1174093 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 5fea1b76 2018-08-22T10:05:07 Add state change test for uniform buffer validation. Bug: angleproject:2747 Change-Id: Ia808e26a48ecf432cc29ebd8514f265ff3e15ce8 Reviewed-on: https://chromium-review.googlesource.com/1169825 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill d69a5f12 2018-08-01T11:34:48 Cache VertexArray::hasMappedBuffer. This can be updated in several places. Also adds a test which covers some of the paths. Bug: angleproject:2746 Change-Id: Id119e527fd0064998d7ad5011a9d8376e7b9dab0 Reviewed-on: https://chromium-review.googlesource.com/1153569 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
jchen10 2b06054d 2018-07-03T14:48:13 Vulkan: Insert a barrier after buffer copy According to the spec(section 18.1), all copy commands are treated as transfer operations for the purposes of synchronization barriers. Some tests are flaky on Intel platform without such barriers. Bug: angleproject:2663 Bug: angleproject:2664 Change-Id: Ic8bc9a0eb000670342c0df0449257324f04ad1f8 Reviewed-on: https://chromium-review.googlesource.com/1124103 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill caaff169 2018-06-22T08:55:37 Vulkan: Fix releasing Programs that are in use. The bug would only manifest after a glUseProgram(0) at a specific time. Fix the bug by releasing the uniform buffer to the Renderer instead. Bug: angleproject:2397 Change-Id: Ia071da5af00dfc740e0fc20864d41f7b3e0afda4 Reviewed-on: https://chromium-review.googlesource.com/1110712 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Luc Ferron <lucferron@chromium.org>
Luc Ferron 448da49c 2018-06-14T10:49:40 Vulkan Intel: Flaky test suppression Bug: angleproject:2664 Change-Id: Id6f563fae520cec47d9b5d34da79b08d649863c3 Reviewed-on: https://chromium-review.googlesource.com/1101062 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>
Luc Ferron af883628 2018-06-08T15:57:31 Vulkan: enable as many end2end tests as possible Bug: angleproject:2615 Change-Id: I918cc18984b2e5b22b5e13398355a2fd60e4eb00 Reviewed-on: https://chromium-review.googlesource.com/1093564 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Luc Ferron 61859817 2018-05-09T14:17:39 Vulkan: Fix use-after-free with DynamicBuffer. The implementation of DynamicBuffer before my changes could have some issues in the following use case: - Allocate buffer 1 for Texture 1 (with size as big as the full buffer size) - Allocate buffer 2 for Texture 2 (triggers creation of a new underlying BufferVk and releases the buffer 1 to the Renderer) - Render with Texture 2 (texture 1 hasn't been flushed yet) - swap buffers (causes garbage in the renderer to be cleaned up) - Try rendering with Texture 1, and you'll get an error stating that the buffer we're trying to copy is not valid (because its already been freed). This set of changes: - Add a new test that specifically triggers this case. - enables the texture.filtering.cube* tests in dEQP. - Fixes the issue by adding a manual releasing pattern of the buffers in DynamicBuffer. Bug: angleproject:2505 Change-Id: I207ce4a694016766f008cca67d82b252f460e0df Reviewed-on: https://chromium-review.googlesource.com/1052551 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>
Luc Ferron 41529e5e 2018-05-01T10:06:04 Refactor StateChangeTests to use essl1_shaders instead Bug: angleproject:2474 Change-Id: Ia558c2e266422f8f8b55523c9542379688a7058d Reviewed-on: https://chromium-review.googlesource.com/1037164 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Luc Ferron 94ae660d 2018-04-23T13:58:59 Vulkan: Create tests to validate we created the pipeline when needed 1- Link program with a shader and draw with it, relink with another shader and draw again. 2- Release program that is reading from a uniform. Bug: angleproject:2397 Change-Id: Icb4211c5cf71efaf41833d9d5afd83ce8410c598 Reviewed-on: https://chromium-review.googlesource.com/1028580 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill b221486a 2018-04-26T07:25:48 Vulkan: Fix TexSubImage2D state change test. Was simply a matter of triggering a new write node in the subImage call. Bug: angleproject:2495 Change-Id: I06334ba6ee816f671e5c599c8e8f079f56adb25e Reviewed-on: https://chromium-review.googlesource.com/1028729 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Luc Ferron <lucferron@chromium.org>
Luc Ferron 0086de17 2018-04-25T11:41:32 Vulkan: Add test to reproduce graph issue when draw->subImage->draw Bug: angleproject:2495 Change-Id: Ibc6c060e8924f19562da62ce15d48d9f6820b372 Reviewed-on: https://chromium-review.googlesource.com/1028228 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Luc Ferron 10434f67 2018-04-24T10:06:37 Vulkan: Issue when drawing with a texture and rebinding after. Added 2 tests in StateChangeTest.cpp to validate the behavior and reproduce the issue I saw in dEQP. Bug: angleproject:2479 Change-Id: I29c3da0474ec2b13a10fc266284cb19a07675da2 Reviewed-on: https://chromium-review.googlesource.com/1025951 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Luc Ferron 20610901 2018-04-19T14:41:13 Vulkan: Implement Texture wrap modes and non-mipmapped filtering modes Also added a test to validate we can change the filter mode between two draws successfully. Bug: angleproject:2478 Change-Id: I80730cdafc6bbdbf61839c6c8eb98d85f7423d92 Reviewed-on: https://chromium-review.googlesource.com/1020084 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Luc Ferron a912046d 2018-04-12T13:11:03 Vulkan: DrawElements with line loops client side memory support - Also enables 6 new tests in LineLoopTests.cpp in angle_end2end Bug: angleproject:2458 Change-Id: I4aec12b0ac780e81e6811f1199a5acaf17d9b982 Reviewed-on: https://chromium-review.googlesource.com/1010411 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>
Luc Ferron 983c429f 2018-04-10T13:05:45 Vulkan: Lineloops edge base bugfix and new tests The dynamic buffer we are using in the LineLoopHelper wasn't able to support switching between different allocation sizes. Fix this by simply using a min alignment of the maximum allocation size we can reach. Adds 2 new tests to validate these calls in StateChangeTest.cpp Bug: angleproject:2458 Change-Id: I9d224e7dcfcd7627010832ca30dd9e1b9eceea4e Reviewed-on: https://chromium-review.googlesource.com/1007335 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Luc Ferron c1e0268a 2018-04-11T11:02:55 Vulkan: drawArrays followed by drawElements bugfix Also add a test in StateChangeTest.cpp to validate the behavior. Bug: angleproject:2458 Change-Id: I58848772c0b4f71aaa3ee187778e49fa08e6800d Reviewed-on: https://chromium-review.googlesource.com/1007320 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Luc Ferron <lucferron@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>
Luc Ferron 14f4817c 2018-04-11T08:43:28 Vulkan: Simplify viewport / scissor updates Stop tying the viewport and the scissor together. Instead, we simply use a very large (0->maxInt) scissor when scissor isn't enabled and we use the clipped scissor to the renderArea size when its enabled. Bug: angleproject:2443 Change-Id: If7454793a050b1833c7d3166ea6b380192085c8f Reviewed-on: https://chromium-review.googlesource.com/1006996 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Luc Ferron 7a06ac1b 2018-03-15T10:17:04 Vulkan: Dynamic update of uniforms - This change enables us to update uniforms indefintely using VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC descriptor types. - Enables 219 new dEQP tests in the uniform_api namespace. - Creates a new white box test to validate new buffer allocation. Bug: angleproject:2392 Change-Id: I8146e6104a6b7727f63265a4671577d251a8fca8 Reviewed-on: https://chromium-review.googlesource.com/965929 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill d7518622 2018-03-27T09:44:31 Buffer11: Refactor Subject/Observer pattern. Instead of having a direct/static observer distinction, add two messages for 'Contents Changed' and 'Storage Changed'. This makes Buffer11 itself the subject with two different message handling cases in the onSubjectStateChange methods. Bug: angleproject:2389 Change-Id: I645cd4b7cc7ce51cb7f48a01c7fc72939cbe89fe Reviewed-on: https://chromium-review.googlesource.com/957940 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill dfebe9b2 2018-03-14T10:08:12 D3D11: Add dirty bits for Transform Feedback. After testing, it seems practially impossible to trigger a dependent state change in a Buffer that would affect XFB. Any buffer change would have to happen between a pause or begin/end of XFB, which would trigger a state update. Bug: angleproject:1155 Bug: angleproject:2389 Change-Id: Ic3c1dc7cec661a826909bb5647ddabda1d6fb7fc Reviewed-on: https://chromium-review.googlesource.com/948795 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Dzmitry Malyshau b3b177d7 2018-03-09T16:37:22 Update driver constants on program change. Comes with a new SamplerMetadataUpdateOnSetProgram test. This is a fix for a graphics problem we've been seeing for a while with WebRender+Angle on Nvidia/Windows. The sampler metadata doesn't get updated properly for some of the draw calls, since it's not invalidated on program change (this is what the CL is fixing). Extra entries get filled with garbage data because the constant buffer is updated with `MAP_WRITE_DISCARD`, and only those samplers are updated that the current program has. This may generally occur undetected, if not for our `textureSize` calls that appear to go the NV-specific Angle workaround path that ignores our `baseLevel = 0` and instead picks the one from the driver constants (which contains garbage), leading to either zeroes returned or even crashing the driver sometimes... BUG=angleproject:2399 Change-Id: Ie2bef32184e2305c7255299933b899eb3fffb7ab Reviewed-on: https://chromium-review.googlesource.com/949412 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 7b21381e 2018-03-06T10:13:13 Vulkan: Support changing in-flight Renderbuffers. Bug: angleproject:2347 Change-Id: I9bb1494a960969bb6e7c8656c27c7c180ddba069 Reviewed-on: https://chromium-review.googlesource.com/922458 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill dc0cdba8 2018-02-28T00:42:20 Vulkan: Fix Texture attachment state changes. This implements a notification to the Framebuffer that an attachment had a state change that might require recreating the VkFramebuffer. This implementation is much simpler than the prior method with signal notifications. Only currently implemented for TextureVk but will also be implemented for RenderbufferVk. Bug: angleproject:2347 Change-Id: I05f7da4132f6ed2bda02671e8ba5ee9805252928 Reviewed-on: https://chromium-review.googlesource.com/930024 Reviewed-by: Luc Ferron <lucferron@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yunchao He 9550c603 2018-02-13T14:47:05 Code refactoring for end2end tests. This change: 1) uses the new style ANGLE_SKIP_TEST_IF to skip tests. 2) replaces compile-time definition for OSX to skip tests by run-time function IsOSX() to skip tests, in order to align with ANGLE_SKIP_TEST_IF. 3) fixes a couple of typos. BUG=angleproject:2005 Change-Id: I5af77d82257536b9eb79e26afa502f5b91ff6d31 Reviewed-on: https://chromium-review.googlesource.com/915861 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Luc Ferron 2900c3be 2018-02-09T16:02:41 Vulkan: Add culling rasterization states tests and invert front face Bug: angleproject:2352 Change-Id: I0ac83f3173d22a2ee8bc98d2fd7bfa1875d46b8c Reviewed-on: https://chromium-review.googlesource.com/912358 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>
Luc Ferron 00155d58 2018-02-06T10:48:47 Vulkan: Implement scissor test and add a simple test for it Bug: angleproject:2338 Change-Id: I699189fcd41feca1656c8553fdf4c1078421524d Reviewed-on: https://chromium-review.googlesource.com/904861 Commit-Queue: Luc Ferron <lucferron@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Yunchao He 14cb42c0 2018-01-24T14:11:19 Clean up passed end2end tests on Intel Linux platforms. Only one end2end test still fail for ANGLE issue 1346. BUG=angleproject:1346 Change-Id: Ibeefe600b21b6ae2056e304d18a8fc4071a48cbe Reviewed-on: https://chromium-review.googlesource.com/882294 Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 5b18f487 2017-11-30T17:24:22 Vulkan: Implement basic TexSubImage2D. This also adds a test for updating a Texture that is in-use. This will ensure our Texture updates occur at the right time when we're implementing command re-ordering. Bug: angleproject:2264 Bug: angleproject:2200 Change-Id: Id6040d7238eca031e3cc7b27564d8ea815bf3d73 Reviewed-on: https://chromium-review.googlesource.com/801031 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Jiawei Shao c622833c 2017-11-16T21:21:56 Re-enable SimpleStateChangeTest.RedefineBufferInUse on Win/Intel Now SimpleStateChangeTest.RedefineBufferInUse can pass on Win/Intel with https://chromium-review.googlesource.com/756959 BUG=angleproject:2221 TEST=angle_end2end_test Change-Id: Ibdb619a61fcaa35c72ff5a22dc6905edf9f0ec7b Reviewed-on: https://chromium-review.googlesource.com/774679 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9776035d 2017-11-09T13:08:29 Vulkan: Implement Buffer updates. This allows the app to update Buffer data while the data is in use by the GPU. For instance, uploading new vertex attribute data after a draw call. It introduces a StagingBuffer helper class, similar to StagingImage. These classes are somewhat temporary and could be redesigned. BUG=angleproject:2200 Change-Id: If8634b1411779b16c2bd22cce18a5f37ed958d1c Reviewed-on: https://chromium-review.googlesource.com/756959 Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 5b09d90d 2017-11-06T12:06:24 Skip RedefineBufferInUse Vulkan test on Win/Intel. Also cleans up GenerateWorkarounds a bit for D3D11. BUG=angleproject:2221 Change-Id: I01667f850051045006d3439406aac3f4d094a374 Reviewed-on: https://chromium-review.googlesource.com/754915 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 7bd16666 2017-10-28T19:40:50 Vulkan: Allow in-flight Framebuffer changes. This allows the app to alter Framebuffer attachments while there are existing command buffers using the resources and attachments. BUG=angleproject:2200 Change-Id: I3298dafef5e3bd2c6efda8e8a32a6cf7febc13dc Reviewed-on: https://chromium-review.googlesource.com/742370 Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 526543cb 2017-10-28T10:59:16 Vulkan: Fix deleting in-use Framebuffer. BUG=angleproject:2200 Change-Id: I13d661b690a6a9e67b3e8a27f9d7bd4126dca87f Reviewed-on: https://chromium-review.googlesource.com/742749 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Jamie Madill 1b038241 2017-11-01T15:14:36 Vulkan: Support Texture redefinition. Because initializing the texture can queue a copy from a staging vk::Image, we must ensure we're not in a render pass. To make this easier we move the current render pass tracking into the RendererVk from the FramebufferVk class. (Note: in the future we will have deferred command submission and this will become unnecessary.) BUG=angleproject:2200 Change-Id: Ide8d4d70b50efbd79bbfa7006ad75cbc57cdf4c7 Reviewed-on: https://chromium-review.googlesource.com/741549 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 8724e254 2017-10-28T10:44:40 Vulkan: Fix re-creating buffer storage. BUG=angleproject:2200 Change-Id: Id60e857517cce9c0bfa272e4e6a399f236e395f7 Reviewed-on: https://chromium-review.googlesource.com/741548 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 096f278e 2017-10-28T10:44:40 Introduce SimpleStateChangeTests. BUG=angleproject:2200 Change-Id: I5bf2305a6d98f16c3c2677d1c81b8285fa7ba3f9 Reviewed-on: https://chromium-review.googlesource.com/737559 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>