src


Log

Author Commit Date CI Message
Jamie Madill a139f01a 2018-10-10T16:13:03 Inline ValidateBindBuffer. This method is only called in one place. Inlining reduces the need to make a jump and push/pop variables from the stack. It also adds a specialized error handler for validation errors. This reduces the amount of code generated for errors. The prior method generates a lot of code when dealing with string streams. Improves performance of the binding performance test. Bug: angleproject:2763 Change-Id: I52af7046b398072975bf5bda583efac9a9b9a8cb Reviewed-on: https://chromium-review.googlesource.com/c/1270219 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 1c7f08c3 2018-10-10T16:13:02 Inline RefCountObject::release. Also don't return errors from the object release methods. Not returning errors reduces the amount of code generated. Also we shouldn't be exiting early from destructor type functions. Increases object binding performance. Bug: angleproject:2877 Change-Id: Ieb8120d885b946915e355419825e1f52f31d7b49 Reviewed-on: https://chromium-review.googlesource.com/c/1270218 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi f955bdac 2018-10-09T22:54:18 Fix vulkan_null perftests on Linux //build/config/gcc:rpath_for_built_shared_libraries was supposed to be used to add . to rpath (which affected only release. I didn't investigate how it was affecting debug). This resulted in libVkICD_mock_icd.so not being found and vulkan_null tests being ignored. Change-Id: I71fb8578f873e4bed602b2c3dcf6d93240dcf30e Reviewed-on: https://chromium-review.googlesource.com/c/1272496 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 9d0bb3d4 2018-10-09T20:29:13 Pass bit mask to ContextImpl::syncState. This can be used to mask out inappropriate local dirty bits. Bug: angleproject:2763 Change-Id: Ie46e464df0dc719c963ff9f7066d42eb5a028262 Reviewed-on: https://chromium-review.googlesource.com/c/1264062 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Jiawei Shao 32099370 2018-10-08T15:42:23 ES31: Enable dEQP cases on texture gathering on swizzled 2d array textures The following dEQP cases can pass with https://chromium-review.googlesource.com/c/1207216: dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.* Bug: angleproject:2826 Test: dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.texture_swizzle.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.texture_swizzle.* Change-Id: Iaf6c4ca5abff1a7ae97d47a0d323bead38a7d8c1 Reviewed-on: https://chromium-review.googlesource.com/c/1267659 Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Jamie Madill ac66f982 2018-10-09T18:30:01 Optimize ValidateBindTexture type check. This switch can be cached in a very fast packed map. The map contents only change if different extensions are exposed. This reduces the number of instructions we hit in ValidateBindTexture. Bug: angleproject:2763 Change-Id: I6ba8a4124d85e4c193d0dee3e03e50713d51b1f4 Reviewed-on: https://chromium-review.googlesource.com/c/1262739 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Jamie Madill 31116738 2018-10-09T18:30:01 Inline many more hotspots for the Texture draw test. Bug: angleproject:2763 Change-Id: Ib8193e7ff5ee7763b92f4775fb7e9adaa51c9305 Reviewed-on: https://chromium-review.googlesource.com/c/1262738 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Qin Jiajia fcf10b62 2018-09-19T12:53:18 Fix the regression bug for ComputeBoids The old implementation missed considering compute program would also enter into applyActiveAttribLocationsMask. However, there was no bindVertexArray before updateAttribEnabled which resulted the previous VAO state was modified in unknown. And that's why ComputeBoids example wouldn't work correctly. This change adds a checking to not enter propagateProgramToVAO if it's a compute program since compute shader doesn't have vertex attributes. And an ASSERT is added to make sure that the right VAO is bound when updateAttribEnabled is called in applyActiveAttribLocationsMask. Bug: angleproject:2810 Change-Id: I6e77853498a527ef3b755bbb1da5826a9134b164 Reviewed-on: https://chromium-review.googlesource.com/c/1226227 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Jamie Madill 6f755b21 2018-10-09T12:48:54 Use angle::Result in front-end. (Part 1) This covers most of the hot paths used in draw calls. Gives in the order of a 5% reduction in draw call overhead. Bug: angleproject:2491 Change-Id: I2d53afb1163eaceed61fb9cd9ce6c1267c85c0fa Reviewed-on: https://chromium-review.googlesource.com/c/1258149 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill abfbc0fe 2018-10-09T12:48:52 Use angle::Result in allocation and math check macros. Replace these with ANGLE_CHECK_*_ALLOC and ANGLE_CHECK_*_MATH depending on the specific error type. Bug: angleproject:2491 Change-Id: Ic4395101fe701c563ae2b92aa2c55c93b934a7de Reviewed-on: https://chromium-review.googlesource.com/c/1262737 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 563fbaa0 2018-10-02T11:22:01 Vulkan: Implement occlusion queries Begin and end queries insert an execution barrier in the command graph to ensure the commands around them are not reordered w.r.t to the query. Also, these commands cannot be recorded in separate secondary command buffers. Therefore, special-function nodes are created to perform the begin and end query calls on the final primary command buffer. Bug: angleproject:2855 Change-Id: Ie216dfdd6a2009deaaf744fd15d2db6899dd93e9 Reviewed-on: https://chromium-review.googlesource.com/c/1259762 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 120b13f8 2018-10-09T07:58:39 Add more draw buffer related tests. Some of these are targeting our workaround for a mac bug. The bug was that the driver was somehow modifying output attachments that the program wasn't writing to. A new test shows a bug where we wouldn't re-sync the state properly after a clear. Also adds more pretty printing for GLColor. Bug: angleproject:2872 Change-Id: I5485893b5f1b269c5407678db27978a789f7acc6 Reviewed-on: https://chromium-review.googlesource.com/c/1269255 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Courtney Goeltzenleuchter e7ece9e2 2018-10-08T16:43:43 Do not include ALOGV in release builds To match behavior of ALOGV in Android system code, disable output in release builds. Bug=angleproject:2418 Change-Id: I657ec366249f9d5defe9b05fe298099c47389580 Reviewed-on: https://chromium-review.googlesource.com/c/1269819 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Courtney Goeltzenleuchter 3f21fcb9 2018-09-17T17:21:44 Set ANGLE default backend to Vulkan If the Vulkan backend is available, use it on Android. This way ANGLE built for the ANGLE apk always uses Vulkan. ANGLE built for use in Chrome keeps GL. At least for now. Bug=angleproject:2418 Change-Id: Ic7796c74821a44b856a596d31b3de09e7ca47ede Reviewed-on: https://chromium-review.googlesource.com/c/1265504 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Olli Etuaho 6f591c97 2018-09-21T11:20:47 Clean up TCompiler members and style Some dead code and duplicate data are cleaned up from the compiler. Several parameters can be accessed directly from ShBuiltInResources instead of creating a copy in TCompiler. This also encapsulates some TCompiler member functions as private and changes the remaining unprefixed TCompiler member variable names to start with the m prefix. BUG=angleproject:2068 TEST=angle_unittests Change-Id: I6690aaf538b17e0f45460660272a21f82f1808a0 Reviewed-on: https://chromium-review.googlesource.com/c/1267503 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Qin Jiajia 6d765b07 2018-09-28T14:16:06 ES31: Fix some bugs in ShaderStorageBlockOutputHLSL When EOpIndexDirect/EOpIndexIndirect/EOpIndexDirectStruct/TIntermSwizzle appear in [] in ssbo access chain, we should transfer the process of them to OutputHLSL. For example: instance.v[gl_GlobalInvocationID.x] = data; // becomes float_Store(dx_instance, 0 + 16 * gl_GlobalInvocationID.x, _data); instance.v[s.index[0].x] = data; // becomes float_Store(dx_instance, 0 + 16 * _s.index[0].x, _data); Bug: angleproject:1951 Change-Id: I333e238400a10a799a6294f8759cf9c4ef2451c8 Reviewed-on: https://chromium-review.googlesource.com/c/1250661 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
Jiawei Shao 19b51d29 2018-09-19T15:14:45 ES31: Support textureGather[Offset] on shadow samplers This patch implements translating textureGather[Offset] into HLSL when the sampler is a shadow sampler. The related HLSL function should be GatherCmp(). According to the definition of textureGatherOffset(): ([ESSL 3.1] Chapter 8.9.3 Page 138) - gvec4 textureGatherOffset(gsampler2D sampler, vec2 P, ivec2 offset, [,int comp]) - vec4 textureGatherOffset(sampler2DShadow sampler, vec2 P, float refZ, ivec2 offset) We need to add parameter "refZ" before "offset" when the sampler is a shadow sampler. Bug: angleproject:2826 Test: dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.* dEQP-GLES31.functional.texture.gather.basic.2d_array.depth32f.* dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.* dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.depth32f.* dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.depth32f.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.depth32f.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.depth32f.* Change-Id: I9a7d095dd3cfa41aaefd14d012ed1f309abfc6d5 Reviewed-on: https://chromium-review.googlesource.com/c/1244081 Commit-Queue: Jiawei Shao <jiawei.shao@intel.com> Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Yuly Novikov 450bf36f 2018-10-05T12:44:37 Workaround Adreno driver not supporting unsized EXT_texture_rg formats Bug: angleproject:2567 Change-Id: Ia7dfa54f7201866b9d7c0ce5d9cccae06c785542 Reviewed-on: https://chromium-review.googlesource.com/c/1265500 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Yuly Novikov <ynovikov@google.com>
Olli Etuaho 78df3362 2018-10-05T16:43:27 Fix clearing out-of-range default FB drawbuffer The default framebuffer is initialized with just one drawbuffer slot so the number of drawbuffers needs to be validated before checking if a buffer is attached. BUG=angleproject:2831 TEST=angle_end2end_tests Change-Id: I960c39357853d1cd4575b06a992cff33223ab3df Reviewed-on: https://chromium-review.googlesource.com/c/1264518 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Geoff Lang 8efa3418 2018-10-05T10:24:07 Suppress EXTBlendFuncExtendedDrawTestES3.FragmentArrayOutputLocationsAP on MacOS Example failure: https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Mac%20FYI%20Experimental%20Retina%20Release%20(NVIDIA)/2115 BUG=angleproject:1085 Change-Id: Ifc07282b7ca586bd6346831e08cee963c9eaab54 Reviewed-on: https://chromium-review.googlesource.com/c/1263903 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill e39e8f46 2018-10-05T08:17:38 GL back-end error refactor. Adds explicit error handling to a few scoped state handler classes. Otherwise mostly mechanical refactoring. Bug: angleproject:2753 Change-Id: I2bf969a68f45880902b6e7902297c1340a76a1c4 Reviewed-on: https://chromium-review.googlesource.com/c/1255647 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 06270c9e 2018-10-03T17:00:25 Vulkan: Safer struct initialization Using x = {}; before filling out each field, we can be sure any missing field is 0 initialized. This in turn helps us not have to specify certain fields that are generally unused (at the moment), such as pNext. Bug: angleproject:2860 Change-Id: Ia1fa2db3ecfb316673a02ac0c5e13e47e055a19f Reviewed-on: https://chromium-review.googlesource.com/c/1259764 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Olli Etuaho 5476e805 2018-10-05T13:23:03 Fix constructing void array zero nodes Correctly sized void arrays can be needed after parsing has recovered from an error and the code is trying to evaluate the constant value of a node. Since now we just have a generic EOpConstruct op instead of different ops for different types, we can simply remove the special handling for void arrays in CreateZeroNode to create the arrays in the correct size. BUG=chromium:890581 TEST=angle_unittests Change-Id: I48d96c9ef1d695cd8583a845fd4bd24a7aaf535c Reviewed-on: https://chromium-review.googlesource.com/c/1264515 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Jamie Madill 2343836c 2018-10-04T17:42:00 Remove gl::ErrorOrResult. Bug: angleproject:2491 Change-Id: Ief728b9c50ee2e1925a9b286c52c8ccda6b14fd2 Reviewed-on: https://chromium-review.googlesource.com/c/1255646 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Jamie Madill 785e8a0b 2018-10-04T17:42:00 Remove gl::LinkResult. Instead of returning a small struct from LinkProgram calls we use angle::Result. Linking can have 3 cases: - the link was successful -> angle::Result::Continue - the link failed -> angle::Result::Incomplete - there was an internal error -> angle::Result::Stop Note that any unexpected Incomplete is still an error. Each function that accepts Incomplete must check explicitly. This is the last user of ErrorOrResult. Bug: angleproject:2491 Change-Id: Idba23be27efe4b561720a4bdd8fe486b40779497 Reviewed-on: https://chromium-review.googlesource.com/c/1255645 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Olli Etuaho 0ca09753 2018-09-24T11:00:50 Add GLES3 support for EXT_blend_func_extended This adds GLES3 API support for EXT_blend_func_extended. The patch includes the API entrypoints, validation and also implementation on the desktop GL backend. Instead of having built-in fragment color variables, ESSL 3.00 has custom output variables, which can now be bound to either primary or secondary output color locations. The "index" set to a custom output variable determines whether it's used a primary or secondary blending source color. The shader layout qualifier takes precedence over the bind call. This is not specified in the EXT spec, but is specified in desktop OpenGL specs. BUG=angleproject:1085 TEST=angle_end2end_tests Change-Id: Ia24e8e5dadcc165e5e8fbd7c653c7fab6217db88 Reviewed-on: https://chromium-review.googlesource.com/c/1249361 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 14246813 2018-10-03T17:51:16 Update sampler directly on Texture change. This saves a lot of extra work when updating a Texture. Bug: angleproject:2763 Change-Id: I87e310ef4f847713123bd24711e1166949ff95d2 Reviewed-on: https://chromium-review.googlesource.com/c/1254043 Reviewed-by: Yuly Novikov <ynovikov@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e3bb6b79 2018-10-03T17:51:15 Update Textures immediately on program change. Instead of deferring this work, we can process it immediately. We have access to the information we need in the prior and current states so can optimize the update more effectively. Bug: angleproject:2763 Change-Id: I77482b0ea490fddf403ccc4a4f32665301fd6e7a Reviewed-on: https://chromium-review.googlesource.com/c/1254042 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Frank Henigman 49b0f6eb 2018-10-03T23:15:29 Vulkan: read pixel buffer alignment must be 4. BUG=angleproject:2867 Change-Id: Ie14848bb464eea7f84d0ce523dff2cddf7a185d4 Reviewed-on: https://chromium-review.googlesource.com/c/1260256 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Brandon Jones 76dd2d6f 2018-10-04T09:35:08 Change capitilization mismatch in 2D array shaders to fix clang error In CL #1207216, the #include in blit11 and shader file name had capitilization mismatches, which caused a clang error. This fixes the issue. Bug: angleproject:2762 Change-Id: I4760843beedaabfb83228e40289efaa6a767dec3 Reviewed-on: https://chromium-review.googlesource.com/c/1262017 Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Brandon Jones 4e6f2aea 2018-09-19T11:09:51 Implement ANGLE_copy_texture_3d Extension Adds copyTexture3DANGLE and copySubTexture3DANGLE that adds copy operations on volumetric textures. Bug: angleproject:2762 Test: angle_end2end_tests Change-Id: I0076989c2b7ed69abfc73143c325065bdb06a360 Reviewed-on: https://chromium-review.googlesource.com/c/1207216 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 5541a6c8 2018-10-03T15:31:18 Change A4A opt-in/out log messages from DEBUG to VERBOSE. DEBUG was useful for developing and turning on the code, but it's too verbose to be used with the Android Q release. Bug: angleproject:2794 Change-Id: I092567c25414cbba7f36ab94e191b1dcfe39fbcb Reviewed-on: https://chromium-review.googlesource.com/c/1260102 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill 1395134c 2018-09-30T15:24:28 Remove more uses of gl::ErrorOrResult. Only gl::LinkResult remains. Bug: angleproject:2753 Change-Id: I5e9c68c11453e8ab9db4908451957d7b3db0b110 Reviewed-on: https://chromium-review.googlesource.com/c/1254044 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 4d422c29 2018-10-02T09:31:40 Vulkan: Move blit mipmap init to ImageHelper. This hides the logic for manipulating the current layout and barriers into the image helper. This will make it easier to implement implicit pipeline barriers. It allows us to remove the updateLayout() hack. Bug: angleproject:2828 Change-Id: I3e59872e66064e6b105c1f398b4212fb3a6be1a7 Reviewed-on: https://chromium-review.googlesource.com/1255506 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill c2116cd3 2018-10-02T09:31:40 Vulkan: Update pipeline barrier interface. This makes the vk::CommandBuffer class closer to an auto-generated wrapper class. Bug: angleproject:2828 Change-Id: I91ba03914a60d5612707dd240fcda25b86cf2c46 Reviewed-on: https://chromium-review.googlesource.com/1255505 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill c3bef3e7 2018-10-03T07:35:09 Allow 'defined' in define in non-WebGL. This is needed to pass dEQP conformance. Several of the harder dEQP tests around this behaviour are excluded from the mustpass list. This is presumably because the behaviours weren't implemented portably. Nevertheless we need to support conformant behaviour for GLES 2.0 Contexts for the most simple uses. This also leaves the error behaviour intact for WebGL specs. Bug: angleproject:1335 Change-Id: Ia80b4f71475efa928488ee6c2ee35c566d4602d4 Reviewed-on: https://chromium-review.googlesource.com/c/1242013 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 607f907d 2018-10-02T14:39:20 Vulkan: Add 565 configs for Android Generate GL_RGB565 internal format configs for Android VK. This allows apps requesting such formats to map to the appropriate corresponding Android internal pixel format. Bug: angleproject:2863 Change-Id: I18f119d6554a601037a40db27234bf33e0ada438 Reviewed-on: https://chromium-review.googlesource.com/c/1258083 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 44a6fbfd 2018-10-02T13:38:56 Optimize resolveLink. This changes the program query to resolve the link if required. If the validation layer is skipped the link is resolved in the gl::Context. Resolving the link on program query allows us to avoid resolving the link on most of the gl::Program query APIs. This improves inlining and particularly affects uniform update. It fixes a performance regression introduced by the parallel shader linking extension. Gives a 17% increased score on a uniform benchmark. Also fixes two missing cases of checking for the extension in our validation code. Note that some bugs might still exist when the validation layer is disabled. Bug: angleproject:2851 Change-Id: I5d725eede3fa147cedf2ce0129791b3412a97a61 Reviewed-on: https://chromium-review.googlesource.com/1255509 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Jamie Madill df836ff8 2018-10-01T10:36:24 Call onProgramExecutableChange in useProgram. This cleans up the code slightly and removes a few if checks. Also fixes a potential edge case with ProgramBinary called on a program that is in-use. Bug: angleproject:2763 Change-Id: Ibe0ab20ed44f593bb6c2b0612871680a7df1a15f Reviewed-on: https://chromium-review.googlesource.com/1254041 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 0da73fed 2018-10-02T09:31:39 Vulkan: Add dumping of the command graph to GraphViz. Dot files are a graph format that can be visualized with GraphViz. Giving a small visualization output can help diagnose problems with the graph. For example extra edges or incorrect dependencies. Bug: angleproject:2379 Change-Id: I544cba11c5e33579b06fef2fb41bad60066a64e4 Reviewed-on: https://chromium-review.googlesource.com/1254383 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Geoff Lang 38f24ee6 2018-10-01T13:04:59 Fix missing query for GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE. This enum was validated but not implemented. TEST=RequestExtensionTest.Queries BUG=890689 Change-Id: I7285e45cef53b197d61cd0dfa9d2bacb70e23e64 Reviewed-on: https://chromium-review.googlesource.com/1255142 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Yuly Novikov d082819c 2018-06-15T15:51:07 Fix format support conditions This fixes format support tables in formatutils.cpp and formatutilsgl.cpp to conform to the core and extension GLES specs, for a large portion of the formats. ExtsOnly SupportRequirement was enhanced to accept multiple sets of extensions. Format is supported if all the extensions in one of the sets are available. Also fixes determining support for extensions based on those formats. And some fixes to tests which fail due to more strict format support. Bug: angleproject:2567 Change-Id: I6050fff9c597f658fdcea2477bff59a603cdb7e8 Reviewed-on: https://chromium-review.googlesource.com/1105612 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@google.com>
jchen10 5dc0a6f9 2018-09-20T14:30:45 Vulkan: Vertex buffer should be format aligned. The address of each attribute in a vertex buffer must be aligned according to its format. See section 20.3 of vkspec. Currently we don't handle this when using DynamicBuffer as vertex input buffer. This loosely fixes the issue by using max alignment for all formats. BUG=angleproject:2797,angleproject:2405 Change-Id: I2b27950dacc8fda75dcb646ef4b4d66ff27d629a Reviewed-on: https://chromium-review.googlesource.com/1234281 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Geoff Lang 0f57d2e3 2018-10-01T15:38:28 Vulkan: Expose the unimplemented GL_EXT_occlusion_query_boolean extension. Chrome needs this extension to be exposed to load the query entry points, even for emulated query types. BUG=angleproject:2855 Change-Id: I09dbb45c391df64d67858f9131c45b164947a707 Reviewed-on: https://chromium-review.googlesource.com/1255507 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jeff Gilbert a8a9e12f 2018-09-25T14:18:35 Stream support for R16*_UNORM and P010/P016. Bug: angleproject:2850 Change-Id: Ib23b3012b5244c8e3edbdfa05d9b4e4869bbfed8 Reviewed-on: https://chromium-review.googlesource.com/1244080 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Frank Henigman 1ffad843 2018-09-24T23:40:45 Remove PixelPackState from PackPixelsParams. Only one flag ("reverseRowOrder") from PixelPackState was being used, so instead of including the entire struct in PackPixelsParams, just include the one flag. BUG=angleproject:2718 Change-Id: I32e8b30383d198ecba9bf1719c32dda0938fc969 Reviewed-on: https://chromium-review.googlesource.com/1242210 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com>
Olli Etuaho 1dfd8ae2 2018-10-01T15:59:59 Improve test coverage of constant folding Clean up some TODOs in the code as well as add tests to make sure that ANGLE treats expressions indexing into constant arrays as constant expressions in different contexts. This complements the existing tests in ConstantFoldingTest. BUG=angleproject:2298 TEST=angle_unittests Change-Id: I779bf03891f7d06f14d293e69101c05d7dbf57b6 Reviewed-on: https://chromium-review.googlesource.com/1254067 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Olli Etuaho 624fbdcf 2018-10-01T11:54:05 Refactor CompileProgram utility Tests often need to call gl functions to set up program related state after glCreateProgram has been called but prior to glLinkProgram is called. Add a callback function to the CompileProgram utility function to fulfill this need. This reduces code duplication considerably in several tests. An alternative way to improve CompileProgram would be to split it into several different utility functions. This might be slightly easier to read, but would also be a larger refactoring and require more checks at the call site. This will make it easier to implement EXT_blend_func_extended tests, which need to bind fragment outputs to different slots. BUG=angleproject:1085 TEST=angle_end2end_tests Change-Id: I3ac8b7bdc21c6a1f14517bc7df0cf6f35abd7612 Reviewed-on: https://chromium-review.googlesource.com/1254062 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Nico Weber 079a6bc3 2018-10-01T14:30:09 Remove an exit-time destructor from a frequently-included header. Bug: angleproject:1459 Change-Id: I2bfd7a34ef8ca6d367af7e1d9dd740c4e93727ac Reviewed-on: https://chromium-review.googlesource.com/1255382 Commit-Queue: Nico Weber <thakis@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 2fe5e1d3 2018-08-28T14:00:24 Vulkan: Implement robustness extensions. Device recovery is not possible but device loss can be tracked. BUG=angleproject:2787 Change-Id: Ib94dd557b6b005a560b7a64275b176f7b1777211 Reviewed-on: https://chromium-review.googlesource.com/1194458 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 16c20140 2018-10-01T13:58:19 Vulkan: Record blit commands inside blit methods. Instead of starting recording blit commands immediately we can record them closer to where we write to the Image directly. This makes it a bit easier to move towards hiding the command buffers. And easier to move to using implicitly generated barriers. Bug: angleproject:2828 Change-Id: Ida7d4081dd41c8ee19c7dc3fb234df1bb065794d Reviewed-on: https://chromium-review.googlesource.com/1254382 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Geoff Lang def1ba96 2018-09-28T13:43:41 Reland "D3D11: Resolve multisampled EGL surfaces at eglSwapBuffers" This reverts commit 799da6d18c5ac490e0cdfe9d4dedda26e10f6864. Reason for revert:Crashes have slowed down but there were two changes around the same time that may have caused it. Relanding this to see if things improve. Original change's description: > Revert "D3D11: Resolve multisampled EGL surfaces at eglSwapBuffers" > > An increased crash rate in rx::NativeWindow11Win32::createSwapChain has been > seen around the same time as this patch landed. Speculatively reverting. > > BUG=887403 > > This reverts commit a49f60fee74dfa1caed41ca2e010bc273a6c12cd. > > Change-Id: Id1b08efbf47196f17f4a5e509a29f7d628b07b49 > Reviewed-on: https://chromium-review.googlesource.com/1238884 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> TBR=geofflang@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Bug: 887403 Change-Id: Id862fbb1c0e764470f0b7f6bdb97bf6bab95d26b Reviewed-on: https://chromium-review.googlesource.com/1251701 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 9d597f8a 2018-10-01T10:15:36 Vulkan: Use copyImageDataToBuffer in Texture mipmap gen. There were two code paths using nearly identical code. Fix this by generalizing the helper method slightly. Refactoring change only. Bug: angleproject:2828 Change-Id: I39caccfaad4880e566e995483b8e8fb46d67d3da Reviewed-on: https://chromium-review.googlesource.com/1249563 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 996628a4 2018-09-24T16:39:26 Vulkan: Add support for VkPipelineCache The cache is initialized from the application's blob cache and is occasionally written back to it for disk storage. Bug: angleproject:2516 Change-Id: I4cba4b00a7b9641c2983ef07159bc62cd10a5519 Reviewed-on: https://chromium-review.googlesource.com/1241373 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: 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>
Olli Etuaho a78092cb 2018-09-26T14:16:13 Support ESSL 3.00 EXT_blend_func_extended shaders This adds support for the index layout qualifier that's used in EXT_blend_func_extended to set whether a fragment output should be bound to the primary or secondary blend source color. Output locations are now validated correctly so that two outputs can have the same location as long as they have a different index. Some tests are fixed to allow this. BUG=angleproject:1085 TEST=angle_unittests Change-Id: I1de3ad1406398952287791eca367562bed59d380 Reviewed-on: https://chromium-review.googlesource.com/1245982 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Yuly Novikov 79207e6e 2018-09-28T16:09:26 Skip tests failing on Pixel XL RobustBufferAccessBehaviorTest.NoBufferData/ES2_OPENGLES RobustBufferAccessBehaviorTest.NoBufferData/ES3_OPENGLES RobustBufferAccessBehaviorTest.NoBufferData/ES3_1_OPENGLES ClearTest.ChangeFramebufferAttachmentFromRGBAtoRGB/ES2_OPENGLES ClearTest.ChangeFramebufferAttachmentFromRGBAtoRGB/ES3_OPENGLES WebGLGLSLTest.InitUninitializedGlobals/ES2_OPENGLES Bug: angleproject:2861,angleproject:2689,angleproject:2862 Change-Id: I142594c952b6e7de24057784794b5725f3486212 Reviewed-on: https://chromium-review.googlesource.com/1252701 Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Yuly Novikov <ynovikov@google.com>
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>
Jeff Gilbert c0b82333 2018-09-26T18:04:05 Polyfill BitCount for ARM/ARM64 on MSVC. Also _WIN64 implies _WIN32. Bug: angleproject:2858 Change-Id: I63e2ffd2e9e304171ea6adb99836733981cc1813 Reviewed-on: https://chromium-review.googlesource.com/1248441 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill e8dd0796 2018-09-27T15:04:27 Vulkan: Make vk::FramebufferHelper the graph resource. It seems conceptually easier to understand that a vk::Framebuffer is the resource used in graph. Rather than making the GraphResource be integrated into the FramebufferVk class itself. This means that the only objects that are graph resources are Vulkan objects: Images, Buffers, and Framebuffers. Refactoring change only. Bug: angleproject:2828 Change-Id: I59d60643182287d4b1fcf9730a3c3a0da5b65973 Reviewed-on: https://chromium-review.googlesource.com/1249561 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Jamie Madill 2d03ff4a 2018-09-27T15:04:26 Vulkan: Make Buffer/Image be CommandGraphResources. Don't make TextureVk/RenderbufferVk/SurfaceVk/BufferVk own the manipulation of the command graph. Instead put the operations close to the buffers and images used to render. This will lead towards implementing implicit barriers on the command graph resources. Bug: angleproject:2828 Change-Id: I07b742b6792c60285b280d6454f90e963d667e0e Reviewed-on: https://chromium-review.googlesource.com/1246983 Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: 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>
Geoff Lang beb0c946 2018-09-27T11:22:23 Vulkan: Make sure the default uniform info arrays match indices. When inserting uniform layout info into the default uniform block, the array sizes need to match but insertion was skipped when the uniform was a sampler. This caused heap corruption when uniform data was written to the wrong offset in the buffer. BUG=angleproject:2859 Change-Id: Ia58a68870e2a4805391266dfe73fe8c8d238931d Reviewed-on: https://chromium-review.googlesource.com/1249562 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 115e8a26 2018-09-26T07:51:30 Vulkan: Store "is packed" in buffer formats. This more easily allows us to compute the format alignment for use with the vertex input stage. Bug: angleproject:2797 Change-Id: If15281ce18fbed743b6a0c843cece4626bc4ce72 Reviewed-on: https://chromium-review.googlesource.com/1245841 Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Jie A Chen <jie.a.chen@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Geoff Lang 3ddd6420 2018-09-26T11:10:51 Vulkan: Expose EXT_debug_marker and stub out the implementation. This extension is used by Chrome. BUG=angleproject:2853 Change-Id: Ie8d4ba07857c581a4ec3f90faabdf747b6b52445 Reviewed-on: https://chromium-review.googlesource.com/1246263 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Qin Jiajia a602f906 2018-09-11T14:40:24 ES31: Support shader storage buffer in D3D-API side. Bug: angleproject:1951 Test: angle_end2end_tests Change-Id: I0d8a4f8cf00fc7fd2d85315138e2b7457fd0b90c Reviewed-on: https://chromium-review.googlesource.com/1242846 Commit-Queue: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
jchen10 547edfe2 2018-09-25T21:17:56 Fix angle::Format::ID in gen_dxgi_format_table.py The dxgi_format_map_autogen.cpp was updated, but the generating script was missed to submit in https://crrev.com/c/1142299. Bug: angleproject:2729 Change-Id: I8d726854581d27881a737f12457482ac955e6312 Reviewed-on: https://chromium-review.googlesource.com/1242853 Commit-Queue: Jie A Chen <jie.a.chen@intel.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jiawei Shao cf8ad760 2018-09-21T09:11:35 ES31: Support translating textureGatherOffset into HLSL This patch implements the translation from GLSL texture function textureGatherOffset into HLSL by using the optional "offset" parameter of Texture2D.Gather[Red|Green|Blue|Alpha]. This patch also defines the implementation-dependent limit MIN_PROGRAM_TEXTURE_GATHER_OFFSET and MAX_PROGRAM_TEXTURE_GATHER_OFFSET on D3D11. According to MSDN, the valid range of "offset" used in Gather should be [-32, 31]. https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/gather4-po--sm5---asm- This patch also refactors OutputTextureGatherFunctionBody() so that some redundant code can be removed. BUG=angleproject:2826 TEST=dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d.rgba8.* dEQP-GLES31.functional.texture.gather.offset.min_required_offset.2d_array.rgba8.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d.rgba8.* dEQP-GLES31.functional.texture.gather.offset.implementation_offset.2d_array.rgba8.* (without texture_swizzle) Change-Id: Id0f411257b64c8a97428f16b1a86950ec6d36e2f Reviewed-on: https://chromium-review.googlesource.com/1237303 Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Jamie Madill 219ef05b 2018-09-25T20:16:37 Skip NoBufferData test on NVIDIA Shield TV. Bug: chromium:889303 Change-Id: Ie06ea7ff27e64d8b149a2200efd159f3a09780b7 Reviewed-on: https://chromium-review.googlesource.com/1244001 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Geoff Lang 95bba6e5 2018-08-29T11:02:49 Vulkan: Use automatic row length and image height for texture copies. CopyTextureChromium sometimes failed because of incorrect image dimensions being used in the image copy command. Simply use 0, the images are all tightly packed. BUG=angleproject:2723 Change-Id: I2332561bdc9ee70ba07101bcf2db7ea9f2355844 Reviewed-on: https://chromium-review.googlesource.com/1194907 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 8b57fae5 2018-09-20T12:48:29 Roll EGL headers. BUG=angleproject:2508 Change-Id: I28782e488495a31da885f35e9c37b0dd22d951a3 Reviewed-on: https://chromium-review.googlesource.com/1236754 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 299bdfe7 2018-09-25T11:44:19 Vulkan: Update AMD suppressions. Bug: angleproject:2463 Bug: angleproject:2847 Bug: angleproject:2848 Change-Id: I4036363c517dbe293566bb9d51a2470685d41ac2 Reviewed-on: https://chromium-review.googlesource.com/1240108 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill b36a4816 2018-09-25T10:15:11 Vulkan: Add OpenGL line segment rasterization. Line rasterization rules are implemented using a shader patch. The patch does a small test and discards pixels that are outside of the OpenGL line region. The feature is disabled on Android until we can determine the root cause of the test failures. Bug: angleproject:2598 Change-Id: Ic76c5e40fa3ceff7643e735e66f5a9050240c80b Reviewed-on: https://chromium-review.googlesource.com/1120153 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Frank Henigman beb669da 2018-09-21T16:25:52 Vulkan: work around vkCmdCopyBuffer bug. It seems that vkCmdCopyBuffer on Windows with Intel GPU neglects the last region when given more than one. Work around that in LineLoopHelper::getIndexBufferForElementArrayBuffer() by adding an unused region. Enable corresponding test. BUG=angleproject:2838 Change-Id: I8847c7b2cfdb94526d4d28ba5bf1f162da3a1ed4 Reviewed-on: https://chromium-review.googlesource.com/1238887 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@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>
Olli Etuaho 4ebd8f3d 2018-09-20T11:12:46 Fix issues with clearing deleted attachments Deleting an object that was acting as a framebuffer color attachment in the current framebuffer didn't previously update all of the framebuffer state correctly. Fix this by going through the usual resetAttachment path when any framebuffer attachment is deleted instead of having custom code that only updated part of the state. Also early out from clearbuffer calls in case of a missing color buffer - even now that the draw buffer mask is being updated correctly, some backend code doesn't take it into account. One example is querying attachment format when the SRGB clear for linear framebuffer attachments workaround is active. BUG=angleproject:2831 TEST=angle_end2end_tests Change-Id: I1071a60dc0251946fed00e88e43a244fe59f4863 Reviewed-on: https://chromium-review.googlesource.com/1235656 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Olli Etuaho 7620c739 2018-09-24T11:45:55 Prevent crash in robust access mode when buffer has no data This fixes a crash appearing in robust access mode when a buffer has no data by stopping the draw call. A better fix would be to ensure that fetches from an empty buffer result in zero, but this fix requires a lot more effort. This is not necessarily warranted since the client is either way doing something incorrect in this case. BUG=angleproject:2840 TEST=angle_end2end_tests Change-Id: Ie4ef5b1ca7c0091d7d26f91678d6e4768cc0c650 Reviewed-on: https://chromium-review.googlesource.com/1238622 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Frank Henigman 85c4b43e 2018-09-19T23:35:00 Vulkan: Translate line loop indices from buffer. When a line loop is drawn with byte indices from a buffer, translate to short. Enable test. BUG=angleproject:2802 Change-Id: Ie178ec866387be85b91291c28e1978db0a09c20a Reviewed-on: https://chromium-review.googlesource.com/1237293 Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Tobin Ehlis f5aad063 2018-09-19T14:39:00 Avoid flush/invalidate of host-coherent memory For DynamicBuffer avoid calling vkFlushMappedMemoryRanges() or vkInvalidateMappedMemoryRanges() if the underlying memory is host- coherent. These calls are not required for host-coherent memory and may negatively impact performance. When currently allocating HOST_VISIBLE memory it's possible to also get HOST_COHERENT memory even though it's not explicitly requested. Because of this, the change updates the memory allocaiton interfaces through the stack to pass back the actual allocated memory properties so that it can be checked to see if it's host-coherent. Bug: angleproject:2804 Change-Id: Ife95c4b98115b16d16c087dd72dba7d9661fdb46 Reviewed-on: https://chromium-review.googlesource.com/1234276 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill e2d2270a 2018-09-19T08:11:48 Vulkan: Merge append/beginWriteResource. The new API is named 'recordCommands'. These two APIs were basically doing the same thing. We don't need to have an understanding of creating a new graph node to know that we want to record some Vulkan commands to a command buffer. The prior design was actually masking a bug where we would allow appending commands to a command graph node that had already started a render pass. Fix this by adding a render pass check to recordCommands. Also removes 'hasStartedWriteResource' since this method wasn't used anywhere. Also renames 'onResourceChanged' to 'finishCurrentCommands'. Bug: angleproject:2828 Change-Id: I00bd5b893fcfc37172b6c1706cb2f5fc57e79f54 Reviewed-on: https://chromium-review.googlesource.com/1235654 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 5272a543 2018-09-24T13:09:09 Vulkan: Skip BufferDataTest.RepeatedDrawDynamicBug on Win/Intel. Bug: angleproject:2843 Change-Id: If86ed33f7fbc70e4f10580d2b52ff04454e95f52 Reviewed-on: https://chromium-review.googlesource.com/1240416 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill f668a4b5 2018-09-23T17:01:20 Skip Texture::syncState when no dirty bits. We sometimes generate local dirty bits in TextureGL. To make sure the local dirty bits don't get skipped we use a Subject/Observer pattern between the TextureGL and gl::Texture. This allows us to skip syncState in the hot path. Also inlines a couple of other texture functions. And fixes a stray header in EGLBlobCacheTest. Bug: angleproject:2763 Change-Id: Ie1d8a5865deaf2a563a358c31ae28bef6b2458b1 Reviewed-on: https://chromium-review.googlesource.com/1228374 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 77db6f4a 2018-09-23T17:28:55 Use global Context lookup in single-threaded cases. In single-threaded cases we don't need to use a TLS lookup for the current Context. Assume a global context has 3 states: unset, set, and multi-threaded: * global context unset -> set the global context * global context set, matches TLS context -> set the global context * global context set, doesn't match TLS -> set multi-threaded * global context multi-threaded -> leave it This also inlines the global context/TLS check into global_state.h. Increases performance of the binding perf overhead test by up to 25% and the draw call perf test by up to 3%. Bug: angleproject:2824 Change-Id: Ib95953ca918f2408fe72ca83061f4e2d1bd1adad Reviewed-on: https://chromium-review.googlesource.com/1231993 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 55e57f96 2018-09-18T11:32:43 Remove some redundant dirty bits notifications. These were already being signaled in the front end. Bug: angleproject:2763 Change-Id: Id78d3d764e80e687c29c08395b59048d314bfbe2 Reviewed-on: https://chromium-review.googlesource.com/1204490 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Bryan Bernhart c55aefe3 2018-08-28T19:59:00 ES31: Support atomic functions on D3D11 - Part III This patch is the third one to support atomic functions on D3D11. In this patch we enable support for atomic function returns outside of assignments (e.g. part of arithmetic operations or to index into arrays) and when used directly initialize a variable. Note that we are still missing the functionality to be tag loops with [allow_uav_condition] as required by InterlockedCompareExchange. BUG=angleproject:2682 TEST=angle_end2end_tests Change-Id: Ia409ebb10621fd5c514cf6c76f366a320a9d9fc1 Reviewed-on: https://chromium-review.googlesource.com/1208317 Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Geoff Lang 799da6d1 2018-09-21T15:10:57 Revert "D3D11: Resolve multisampled EGL surfaces at eglSwapBuffers" An increased crash rate in rx::NativeWindow11Win32::createSwapChain has been seen around the same time as this patch landed. Speculatively reverting. BUG=887403 This reverts commit a49f60fee74dfa1caed41ca2e010bc273a6c12cd. Change-Id: Id1b08efbf47196f17f4a5e509a29f7d628b07b49 Reviewed-on: https://chromium-review.googlesource.com/1238884 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Frank Henigman 9d84ccba 2018-09-12T18:09:02 Vulkan: renderer->finish() before reading buffers. Have to call renderer->finish() before reading a buffer otherwise you can get stale data. Enable IndexBufferOffsetTest.UInt8Index/ES2_VULKAN which now works. Disable LineLoopTest.LineLoopUShortIndexBuffer/ES2_VULKAN which stopped working on Windows with Intel GPU. BUG=angleproject:2659 Change-Id: I1e21b0e1dacd3368923caf18e767e34ab696eef6 Reviewed-on: https://chromium-review.googlesource.com/1227032 Commit-Queue: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Olli Etuaho ab5fb5ed 2018-09-18T17:23:28 Reland "Support EXT_blend_func_extended in the GLES2 context" This re-lands EXT_blend_func_extended implementation. A lot of the implementation has been rewritten on top of changes that have been done since the last attempt. For now we only expose the extension on desktop GL. To support GLES, we'd need to investigate what's the most robust way to handle the compiler output and make the binding of the fragment outputs conditional. The extension is disabled on AMD and Intel because of test failures. BUG=angleproject:1085 TEST=angle_end2end_tests Change-Id: I619ae3162769b90aad095ddec158ce6c57a114a8 Reviewed-on: https://chromium-review.googlesource.com/1233713 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Jamie Madill 38fe6840 2018-09-19T07:20:00 Remove secondary Texture rendering loop check. This check was not used. It applied only to rendering Feedback Loops. The behaviour is undefined in non-WebGL and for WebGL we have a separate validation check. Also update the feedback loop tests to ignore the current GL states. This change is based on feedback from the OpenGL ES working group. Bug: angleproject:2763 Bug: chromium:763695 Change-Id: I9882b4f9af2d43fc7b5604ff36dadcc79dfd378f Reviewed-on: https://chromium-review.googlesource.com/1228373 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Olli Etuaho 0131ff40 2018-09-20T13:20:50 Fix using a large vertex attrib divisor on D3D11 A divisor >= 256 used to trigger an assert on the D3D11 backend since it couldn't fit into the input layout cache. Increase the space reserved for the divisor in the input layout cache to make sure that the correct input layout will get used and to fix the assert. BUG=angleproject:2832 TEST=angle_end2end_tests Change-Id: I34eead6c4e8c4fea379bbafc8670b4e32a5b633b Reviewed-on: https://chromium-review.googlesource.com/1236293 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
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>
Jiawei Shao a977acc8 2018-09-19T12:46:05 ES31: Support translating textureGather into HLSL - Part I This patch is the first one in the series of supporting GLSL texture function textureGather/textureGatherOffset on D3D11. According to ESSL 3.1 SPEC (Chapter 8.9.3, Page 130), the definition of textureGather on sampler2D is: gvec4 textureGather (gsampler2D sampler, vec2 P[, int comp]) The parameter "comp" is optional, and if it is specified, the value of "comp" must be a constant integer expression with a value of 0, 1, 2, or 3, identifying the x, y, z, or w postswizzled component of the four-component vector lookup result for each texel, respectively. If comp is not specified, it is treated as 0. According to the definition above, textureGather is equivalent to Texture2D.Gather[Red|Green|Blue|Alpha] in HLSL, where we can use a switch-case expression to choose the right HLSL texture function. The features listed here will be implemented in the following patches: 1. Support textureGatherOffset 2. Support textureGather[Offset] on isamplers and usamplers 3. Support textureGather[Offset] on textures when swizzle is on 4. Support textureGather[Offset] on shadow samplers BUG=angleproject:2826 TEST=dEQP-GLES31.functional.texture.gather.basic.2d.rgba8.* dEQP-GLES31.functional.texture.gather.basic.cube.rgba8.* (without texture_swizzle) dEQP-GLES31.functional.texture.gather.basic.2d_array.rgba8.* (without texture_swizzle) Change-Id: Iff2ed4f8b65dad613cb0bafdfd19f8f0528e832c Reviewed-on: https://chromium-review.googlesource.com/1232980 Commit-Queue: Jiawei Shao <jiawei.shao@intel.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Ian Elliott 4ce287e0 2018-09-20T13:20:31 Change the name of the opt'ed-in app from maps to cubey. Since this is about to be used for the Q release, and we haven't receieved permission from the maps team to opt-in their app, we'll switch to our team's test app. Bug: angleproject:2794 Change-Id: Idbda050b1130c359cda68066f187aadeb8e949b5 Reviewed-on: https://chromium-review.googlesource.com/1236658 Commit-Queue: Ian Elliott <ianelliott@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 52ea4970 2018-09-19T08:58:58 Vulkan: Enable a few BufferDataTests. These are already passing. Bug: angleproject:2644 Change-Id: Iac3452547e319a709e010431eb8a45f5523bb5f7 Reviewed-on: https://chromium-review.googlesource.com/1235653 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill d511948b 2018-09-18T11:32:42 Use FastVector in angle::Subject. This improves object binding performance. We no longer need to check two containers when manipulating the bound subjects/observers. Bug: angleproject:2763 Change-Id: I0ccb2e76be47bd8a28fba5a0c3eff857aa166bb7 Reviewed-on: https://chromium-review.googlesource.com/1227795 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 20c01390 2018-09-19T15:43:28 Fix FastVector::resize when count < size. Also update a test to trigger the bug. Bug: angleproject:2763 Change-Id: I8e6735320a34dcc4cc8beee1b7a22b768912f24f Reviewed-on: https://chromium-review.googlesource.com/1234338 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Olli Etuaho dbce1f89 2018-09-19T15:32:17 Fix trying to clear nonexistent FBO attachments The D3D11 backend used to crash to a null pointer dereference if a glClearBuffer call was done on a nonexistent depth or stencil attachment. Validate for these conditions so that the backend can't crash in this case. BUG=angleproject:2827 TEST=angle_end2end_tests Change-Id: Iecee78d213d11d492d52f246b4b068e8b6f34244 Reviewed-on: https://chromium-review.googlesource.com/1233675 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Jamie Madill bf7cfbea 2018-09-19T03:56:20 Re-land "Add FastVector for simple dynamic vector cases." Re-land fixes memory leak and adds inline to a few more methods. This optimized vector keeps an initial fixed size storage but has unbounded growth like a normal std::vector. It operates like a FixedVector initially but then switches the storage to an allocated pool when the element count exceeds the array limit. This gives fast performance in the small case since no dynamic allocation is needed. It also handles the "slow" big case. Bug: angleproject:2763 Change-Id: Ib3cc7b652a14ed346528bf15820023ab0b5317ce Reviewed-on: https://chromium-review.googlesource.com/1233453 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Tobin Ehlis 2ec817bb 2018-09-19T07:55:38 Remove writeResource down readPixels path This is not needed and results in creating an empty command buffer. Bug: angleproject:2818 Change-Id: I06e5542cb3cd819c18758c909b8fcb624b074874 Reviewed-on: https://chromium-review.googlesource.com/1232981 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Olli Etuaho 2c8f0845 2018-09-12T14:44:55 Add ANGLE_multiview_multisample We add a novel multiview multisampling extension that includes the requirement to explicitly resolve the multisampled framebuffer. The explicit resolve is much more straightforward to implement on top of OpenGL and D3D11 than implicit resolve found in the native extension OVR_multiview_multisampled_render_to_texture. It also has predictable performance characteristics. The extension allows multiview drawing to 2D multisample texture arrays and is now enabled on both the GL backend and the D3D11 backend. The implementation is fairly simple, as it involves just small changes in validation to allow multisampled framebuffer attachments. The multiview rendering logic is exactly the same regardless of whether multisampling is enabled. For the most part the same tests are used to test both multisampled and non-multisampled rendering. The tests will use a different framebuffer setup depending on the test param. They resolve the multisampled framebuffer to a non-multisampled framebuffer prior to any readbacks from the framebuffer. Some of the tests are adjusted so that they have the correct sub-pixel positioning of multisampled quads, so there won't be any pixels that would be just partially covered. The tests don't have any tolerance for partially covered pixels - if we find any platforms where the tests run into a sub-pixel positioning corner case, tolerance may need to be added later. BUG=angleproject:2775 TEST=angle_end2end_tests Change-Id: I590d7f300a92ea5439f2720d9db14a7976db2e1d Reviewed-on: https://chromium-review.googlesource.com/1221214 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>