Replace imageAtomicExchange with imageAtomicCompSwap in vertex shader
authorAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 25 Sep 2019 08:15:36 +0000 (10:15 +0200)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 14 Nov 2019 10:42:12 +0000 (11:42 +0100)
commitf2c8914da99f845d3abd907414ae4fd4e29864df
tree8ac1a64b1385785b074cd02e007d23568ade02cb
parent5cd585defe3a2fad8c1ce0a8b11070b3cad747c7
Replace imageAtomicExchange with imageAtomicCompSwap in vertex shader

Recently the test was changed in order to replace a imageAtomicAdd for
a imageAtomicExchange, as the test can't assume that the vertex shader
will be executed exactly one per vertex shader (see VK-GL-CTS issue
1910).

But imageAtomicExchange is also problematic because in some
architecture/driver, specially tile-based, the test can't also assume
that all the vertex shader executions would finish before
rasterization starts (so fragment shader execution). So when using
imageAtomicExchange could happend that a vertex shader execution would
override the value that the fragment shader already started to update.

Due this two restrictions, this patch changes the atomic operation on
the vertex shader to imageAtomicCompSwap, that sets the value of the
image at the vertex shader only if it is the initial value (so
zero). That would prevent any possible execution when the
rasterization already started to override the value of such image.

This patch also adds a comment on the code explaining the situation,
to avoid any possible future change to a simpler atomic operation by
mistake.

Components: OpenGL ES

VK-GL-CTS issue: 1997

Affects:
KHR-GLES31.core.shader_image_load_store.advanced-allStages-oneImage

Change-Id: Icbc34662f33839a1ced9f728cee45a1198e4b495
external/openglcts/modules/gles31/es31cShaderImageLoadStoreTests.cpp