diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js')
-rw-r--r-- | dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js b/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js new file mode 100644 index 0000000000..6de1ca2701 --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrMultisamplePixelBufferAccess.js @@ -0,0 +1,190 @@ +/*------------------------------------------------------------------------- + * drawElements Quality Program OpenGL ES Utilities + * ------------------------------------------------ + * + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +'use strict'; +goog.provide('framework.referencerenderer.rrMultisamplePixelBufferAccess'); +goog.require('framework.common.tcuTexture'); +goog.require('framework.common.tcuTextureUtil'); +goog.require('framework.delibs.debase.deMath'); + +goog.scope(function() { + +var rrMultisamplePixelBufferAccess = framework.referencerenderer.rrMultisamplePixelBufferAccess; +var tcuTexture = framework.common.tcuTexture; +var deMath = framework.delibs.debase.deMath; +var tcuTextureUtil = framework.common.tcuTextureUtil; + +var DE_ASSERT = function(x) { + if (!x) + throw new Error('Assert failed'); +}; + +/** + * \brief Read-write pixel data access to multisampled buffers. + * + * Multisampled data access follows the multisampled indexing convention. + * + * Prevents accidental usage of non-multisampled buffer as multisampled + * with PixelBufferAccess. + * @constructor + * @param {tcuTexture.PixelBufferAccess=} rawAccess + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess = function(rawAccess) { + this.m_access = rawAccess || new tcuTexture.PixelBufferAccess({ + width: 0, + height: 0}); +}; + +/** + * @return {tcuTexture.PixelBufferAccess} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.raw = function() { return this.m_access; }; + +/** + * @return {boolean} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.isEmpty = function() { return this.m_access.isEmpty(); }; + +/** + * @return {number} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.getNumSamples = function() { return this.raw().getWidth(); }; + +/** + * @return {tcuTexture.PixelBufferAccess} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.toSinglesampleAccess = function() { + DE_ASSERT(this.getNumSamples() == 1); + + return new tcuTexture.PixelBufferAccess({ + format: this.m_access.getFormat(), + width: this.m_access.getHeight(), + height: this.m_access.getDepth(), + depth: 1, + rowPitch: this.m_access.getSlicePitch(), + slicePitch: this.m_access.getSlicePitch() * this.m_access.getDepth(), + data: this.m_access.m_data, + offset: this.m_access.m_offset}); +}; + +/** + * @param {tcuTexture.PixelBufferAccess} original + * @return {rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.fromSinglesampleAccess = function(original) { + return new rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess( + new tcuTexture.PixelBufferAccess({ + format: original.getFormat(), + width: 1, + height: original.getWidth(), + depth: original.getHeight(), + rowPitch: original.getFormat().getPixelSize(), + slicePitch: original.getRowPitch(), + data: original.m_data, + offset: original.m_offset})); +}; + +/** + * @param {tcuTexture.PixelBufferAccess} multisampledAccess + * @return {rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.fromMultisampleAccess = function(multisampledAccess) { + return new rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess(multisampledAccess); +}; + +/** + * @param {Array<number>} region + * @return {rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.getSubregion = function(region) { + var x = region[0]; + var y = region[1]; + var width = region[2]; + var height = region[3]; + + return rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.fromMultisampleAccess(tcuTextureUtil.getSubregion(this.raw(), 0, x, y, this.getNumSamples(), width, height)); +}; + +/** + * @return {Array<number>} [x, y, width, height] + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.getBufferSize = function() { + return [0, 0, this.raw().getHeight(), this.raw().getDepth()]; +}; + +/** + * @param {tcuTexture.PixelBufferAccess} dst + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.resolveMultisampleColorBuffer = function(dst) { + var src = this; + DE_ASSERT(dst.getWidth() == src.raw().getHeight()); + DE_ASSERT(dst.getHeight() == src.raw().getDepth()); + + var numSamples = src.getNumSamples(); + var sum = [0, 0, 0, 0]; + for (var y = 0; y < dst.getHeight(); y++) { + for (var x = 0; x < dst.getWidth(); x++) { + sum[0] = 0; + sum[1] = 0; + sum[2] = 0; + sum[3] = 0; + + for (var s = 0; s < src.raw().getWidth(); s++) { + var pixel = src.raw().getPixel(s, x, y); + sum[0] += pixel[0]; + sum[1] += pixel[1]; + sum[2] += pixel[2]; + sum[3] += pixel[3]; + } + + sum[0] /= numSamples; + sum[1] /= numSamples; + sum[2] /= numSamples; + sum[3] /= numSamples; + + dst.setPixel(sum, x, y); + } + } +}; + +/** + * @param {number} x + * @param {number} y + * @return {Array<number>} + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.resolveMultisamplePixel = function(x, y) { + var sum = [0, 0, 0, 0]; + for (var s = 0; s < this.getNumSamples(); s++) + sum = deMath.add(sum, this.raw().getPixel(s, x, y)); + + for (var i = 0; i < sum.length; i++) + sum[i] = sum[i] / this.getNumSamples(); + + return sum; +}; + +/** + * @param {Array<number>} color + */ +rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess.prototype.clear = function(color) { + this.raw().clear(color); +}; + +}); |