Bug 1176214 - Part 12: Changes to WebGL. r=bz, r=clb

This commit is contained in:
Lars T Hansen 2015-11-26 12:47:53 +01:00
parent 9b1b20914c
commit 58943231b6
13 changed files with 78 additions and 126 deletions

View File

@ -18,7 +18,6 @@ class WebGLVertexArrayObject;
namespace dom {
class OwningUnsignedLongOrUint32ArrayOrBoolean;
class OwningWebGLBufferOrLongLong;
class ArrayBufferViewOrSharedArrayBufferView;
} // namespace dom
class WebGL2Context
@ -97,11 +96,11 @@ public:
void TexImage3D(GLenum target, GLint level, GLenum internalFormat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& pixels);
const dom::Nullable<dom::ArrayBufferView>& pixels);
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
GLint zOffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum unpackFormat, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& pixels,
const dom::Nullable<dom::ArrayBufferView>& pixels,
ErrorResult& out_rv);
void TexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
GLint zOffset, GLenum unpackFormat, GLenum unpackType,
@ -126,11 +125,11 @@ public:
void CompressedTexImage3D(GLenum target, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth,
GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& data);
const dom::ArrayBufferView& data);
void CompressedTexSubImage3D(GLenum target, GLint level, GLint xOffset, GLint yOffset,
GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum sizedUnpackFormat,
const dom::ArrayBufferViewOrSharedArrayBufferView& data);
const dom::ArrayBufferView& data);
// -------------------------------------------------------------------------

View File

@ -171,7 +171,7 @@ WebGL2Context::GetBufferSubDataT(GLenum target, GLintptr offset, const BufferT&
// of the buffer an INVALID_VALUE error is generated.
data.ComputeLengthAndData();
CheckedInt<WebGLsizeiptr> neededByteLength = CheckedInt<WebGLsizeiptr>(offset) + data.Length();
CheckedInt<WebGLsizeiptr> neededByteLength = CheckedInt<WebGLsizeiptr>(offset) + data.LengthAllowShared();
if (!neededByteLength.isValid()) {
ErrorInvalidValue("getBufferSubData: Integer overflow computing the needed"
" byte length.");
@ -213,8 +213,9 @@ WebGL2Context::GetBufferSubDataT(GLenum target, GLintptr offset, const BufferT&
* bound to a transform feedback binding point.
*/
void* ptr = gl->fMapBufferRange(target, offset, data.Length(), LOCAL_GL_MAP_READ_BIT);
memcpy(data.Data(), ptr, data.Length());
void* ptr = gl->fMapBufferRange(target, offset, data.LengthAllowShared(), LOCAL_GL_MAP_READ_BIT);
// Warning: Possibly shared memory. See bug 1225033.
memcpy(data.DataAllowShared(), ptr, data.LengthAllowShared());
gl->fUnmapBuffer(target);
if (target == LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER && currentTF) {

View File

@ -45,7 +45,7 @@ void
WebGL2Context::TexImage3D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLenum unpackFormat, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView)
const dom::Nullable<dom::ArrayBufferView>& maybeView)
{
const char funcName[] = "texImage3D";
const uint8_t funcDims = 3;
@ -71,7 +71,7 @@ void
WebGL2Context::TexSubImage3D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum unpackFormat, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
ErrorResult& /*out_rv*/)
{
const char funcName[] = "texSubImage3D";
@ -143,7 +143,7 @@ void
WebGL2Context::CompressedTexImage3D(GLenum rawTexImageTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLsizei depth, GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
const char funcName[] = "compressedTexImage3D";
const uint8_t funcDims = 3;
@ -165,7 +165,7 @@ WebGL2Context::CompressedTexSubImage3D(GLenum rawTexImageTarget, GLint level,
GLint xOffset, GLint yOffset, GLint zOffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum sizedUnpackFormat,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
const char funcName[] = "compressedTexSubImage3D";
const uint8_t funcDims = 3;

View File

@ -48,7 +48,6 @@
#include "mozilla/dom/HTMLCanvasElement.h"
#include "nsWrapperCache.h"
#include "nsLayoutUtils.h"
#include "mozilla/dom/UnionTypes.h"
class nsIDocShell;
@ -111,7 +110,6 @@ class Element;
class ImageData;
class OwningHTMLCanvasElementOrOffscreenCanvas;
struct WebGLContextAttributes;
class ArrayBufferViewOrSharedArrayBufferView;
template<typename> struct Nullable;
} // namespace dom
@ -545,7 +543,7 @@ protected:
public:
void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& pixels,
const dom::Nullable<dom::ArrayBufferView>& pixels,
ErrorResult& rv);
void RenderbufferStorage(GLenum target, GLenum internalFormat,
GLsizei width, GLsizei height);
@ -777,8 +775,6 @@ public:
GLenum usage);
void BufferData(GLenum target, const dom::SharedArrayBuffer& data,
GLenum usage);
void BufferData(GLenum target, const dom::SharedArrayBufferView& data,
GLenum usage);
private:
template<typename BufferT>
@ -792,8 +788,6 @@ public:
const dom::Nullable<dom::ArrayBuffer>& maybeData);
void BufferSubData(GLenum target, WebGLsizeiptr byteOffset,
const dom::SharedArrayBuffer& data);
void BufferSubData(GLenum target, WebGLsizeiptr byteOffset,
const dom::SharedArrayBufferView& data);
already_AddRefed<WebGLBuffer> CreateBuffer();
void DeleteBuffer(WebGLBuffer* buf);
bool IsBuffer(WebGLBuffer* buf);
@ -890,10 +884,10 @@ protected:
public:
void CompressedTexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& view);
const dom::ArrayBufferView& view);
void CompressedTexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLsizei width, GLsizei height,
GLenum unpackFormat, const dom::ArrayBufferViewOrSharedArrayBufferView& view);
GLenum unpackFormat, const dom::ArrayBufferView& view);
void CopyTexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
@ -904,7 +898,7 @@ public:
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
ErrorResult&);
void TexImage2D(GLenum texImageTarget, GLint level, GLenum internalFormat,
GLenum unpackFormat, GLenum unpackType, dom::ImageData* imageData,
@ -916,7 +910,7 @@ public:
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
GLsizei width, GLsizei height, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
ErrorResult&);
void TexSubImage2D(GLenum texImageTarget, GLint level, GLint xOffset, GLint yOffset,
GLenum unpackFormat, GLenum unpackType, dom::ImageData* imageData,

View File

@ -186,7 +186,6 @@ WebGLContext::BufferData(GLenum target, WebGLsizeiptr size, GLenum usage)
// const dom::ArrayBuffer&
// const dom::SharedArrayBuffer&
// const dom::ArrayBufferView&
// const dom::SharedArrayBufferView&
template<typename BufferT>
void
WebGLContext::BufferDataT(GLenum target,
@ -205,7 +204,7 @@ WebGLContext::BufferDataT(GLenum target,
// Careful: data.Length() could conceivably be any uint32_t, but GLsizeiptr
// is like intptr_t.
if (!CheckedInt<GLsizeiptr>(data.Length()).isValid())
if (!CheckedInt<GLsizeiptr>(data.LengthAllowShared()).isValid())
return ErrorOutOfMemory("bufferData: bad size");
if (!ValidateBufferUsageEnum(usage, "bufferData: usage"))
@ -219,15 +218,17 @@ WebGLContext::BufferDataT(GLenum target,
MakeContextCurrent();
InvalidateBufferFetching();
GLenum error = CheckedBufferData(target, data.Length(), data.Data(), usage);
// Warning: Possibly shared memory. See bug 1225033.
GLenum error = CheckedBufferData(target, data.LengthAllowShared(), data.DataAllowShared(), usage);
if (error) {
GenerateWarning("bufferData generated error %s", ErrorName(error));
return;
}
boundBuffer->SetByteLength(data.Length());
if (!boundBuffer->ElementArrayCacheBufferData(data.Data(), data.Length()))
boundBuffer->SetByteLength(data.LengthAllowShared());
// Warning: Possibly shared memory. See bug 1225033.
if (!boundBuffer->ElementArrayCacheBufferData(data.DataAllowShared(), data.LengthAllowShared()))
return ErrorOutOfMemory("bufferData: out of memory");
}
@ -258,18 +259,10 @@ WebGLContext::BufferData(GLenum target, const dom::ArrayBufferView& data,
BufferDataT(target, data, usage);
}
void
WebGLContext::BufferData(GLenum target, const dom::SharedArrayBufferView& data,
GLenum usage)
{
BufferDataT(target, data, usage);
}
// BufferT may be one of
// const dom::ArrayBuffer&
// const dom::SharedArrayBuffer&
// const dom::ArrayBufferView&
// const dom::SharedArrayBufferView&
template<typename BufferT>
void
WebGLContext::BufferSubDataT(GLenum target,
@ -294,7 +287,7 @@ WebGLContext::BufferSubDataT(GLenum target,
data.ComputeLengthAndData();
CheckedInt<WebGLsizeiptr> checked_neededByteLength =
CheckedInt<WebGLsizeiptr>(byteOffset) + data.Length();
CheckedInt<WebGLsizeiptr>(byteOffset) + data.LengthAllowShared();
if (!checked_neededByteLength.isValid()) {
ErrorInvalidValue("bufferSubData: Integer overflow computing the needed"
@ -310,11 +303,13 @@ WebGLContext::BufferSubDataT(GLenum target,
return;
}
boundBuffer->ElementArrayCacheBufferSubData(byteOffset, data.Data(),
data.Length());
// Warning: Possibly shared memory. See bug 1225033.
boundBuffer->ElementArrayCacheBufferSubData(byteOffset, data.DataAllowShared(),
data.LengthAllowShared());
MakeContextCurrent();
gl->fBufferSubData(target, byteOffset, data.Length(), data.Data());
// Warning: Possibly shared memory. See bug 1225033.
gl->fBufferSubData(target, byteOffset, data.LengthAllowShared(), data.DataAllowShared());
}
void
@ -342,13 +337,6 @@ WebGLContext::BufferSubData(GLenum target, WebGLsizeiptr byteOffset,
BufferSubDataT(target, byteOffset, data);
}
void
WebGLContext::BufferSubData(GLenum target, WebGLsizeiptr byteOffset,
const dom::SharedArrayBufferView& data)
{
BufferSubDataT(target, byteOffset, data);
}
already_AddRefed<WebGLBuffer>
WebGLContext::CreateBuffer()
{

View File

@ -1369,33 +1369,10 @@ WebGLContext::GetPackSize(uint32_t width, uint32_t height, uint8_t bytesPerPixel
return bytesNeeded;
}
// This function is temporary, and will be removed once https://bugzilla.mozilla.org/show_bug.cgi?id=1176214 lands, which will
// collapse the SharedArrayBufferView and ArrayBufferView into one.
void
ComputeLengthAndData(const dom::ArrayBufferViewOrSharedArrayBufferView& view,
void** const out_data, size_t* const out_length,
js::Scalar::Type* const out_type)
{
if (view.IsArrayBufferView()) {
const auto& view2 = view.GetAsArrayBufferView();
view2.ComputeLengthAndData();
*out_length = view2.Length();
*out_data = view2.Data();
*out_type = JS_GetArrayBufferViewType(view2.Obj());
} else {
const auto& view2 = view.GetAsSharedArrayBufferView();
view2.ComputeLengthAndData();
*out_length = view2.Length();
*out_data = view2.Data();
*out_type = JS_GetSharedArrayBufferViewType(view2.Obj());
}
}
void
WebGLContext::ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& pixels,
const dom::Nullable<dom::ArrayBufferView>& pixels,
ErrorResult& out_error)
{
if (IsContextLost())
@ -1469,12 +1446,13 @@ WebGLContext::ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum
}
const auto& view = pixels.Value();
// Compute length and data. Don't reenter after this point, lest the
// precomputed go out of sync with the instant length/data.
void* data;
size_t bytesAvailable;
js::Scalar::Type dataType;
ComputeLengthAndData(view, &data, &bytesAvailable, &dataType);
view.ComputeLengthAndData();
void* data = view.DataAllowShared();
size_t bytesAvailable = view.LengthAllowShared();
js::Scalar::Type dataType = JS_GetArrayBufferViewType(view.Obj());
// Check the pixels param type
if (dataType != requiredDataType)
@ -1545,6 +1523,7 @@ WebGLContext::ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum
Intersect(srcHeight, y, height, &readY, &writeY, &rwHeight);
if (rwWidth == uint32_t(width) && rwHeight == uint32_t(height)) {
// Warning: Possibly shared memory. See bug 1225033.
DoReadPixelsAndConvert(x, y, width, height, format, type, data, auxReadFormat,
auxReadType);
return;

View File

@ -315,7 +315,7 @@ void
WebGLContext::TexImage2D(GLenum rawTexImageTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
ErrorResult&)
{
const char funcName[] = "texImage2D";
@ -394,7 +394,7 @@ void
WebGLContext::TexSubImage2D(GLenum rawTexImageTarget, GLint level, GLint xOffset,
GLint yOffset, GLsizei width, GLsizei height,
GLenum unpackFormat, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView,
const dom::Nullable<dom::ArrayBufferView>& maybeView,
ErrorResult&)
{
const char funcName[] = "texSubImage2D";
@ -471,7 +471,7 @@ void
WebGLContext::CompressedTexImage2D(GLenum rawTexImageTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
const char funcName[] = "compressedTexImage2D";
const uint8_t funcDims = 2;
@ -494,7 +494,7 @@ void
WebGLContext::CompressedTexSubImage2D(GLenum rawTexImageTarget, GLint level,
GLint xOffset, GLint yOffset, GLsizei width,
GLsizei height, GLenum sizedUnpackFormat,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
const char funcName[] = "compressedTexSubImage2D";
const uint8_t funcDims = 2;

View File

@ -488,6 +488,9 @@ WebGLElementArrayCache::BufferSubData(size_t pos, const void* ptr,
if (!updateByteLength)
return true;
// Note, using memcpy on shared racy data is not well-defined, this
// will need to use safe-for-races operations when those become available.
// See bug 1225033.
if (ptr)
memcpy(mBytes.Elements() + pos, ptr, updateByteLength);
else

View File

@ -224,7 +224,7 @@ public:
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
GLint zOffset, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLenum unpackFormat, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView);
const dom::Nullable<dom::ArrayBufferView>& maybeView);
void TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarget target,
GLint level, GLenum internalFormat, GLint xOffset, GLint yOffset,
@ -266,11 +266,11 @@ public:
void CompressedTexImage(const char* funcName, TexImageTarget target, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLsizei depth, GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& view);
const dom::ArrayBufferView& view);
void CompressedTexSubImage(const char* funcName, TexImageTarget target, GLint level,
GLint xOffset, GLint yOffset, GLint zOffset, GLsizei width,
GLsizei height, GLsizei depth, GLenum sizedUnpackFormat,
const dom::ArrayBufferViewOrSharedArrayBufferView& view);
const dom::ArrayBufferView& view);
void CopyTexImage2D(TexImageTarget target, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
void CopyTexSubImage(const char* funcName, TexImageTarget target, GLint level,

View File

@ -119,7 +119,7 @@ ValidateUnpackArrayType(WebGLContext* webgl, const char* funcName, GLenum unpack
static UniquePtr<webgl::TexUnpackBlob>
UnpackBlobFromMaybeView(WebGLContext* webgl, const char* funcName, GLsizei width,
GLsizei height, GLsizei depth, GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView)
const dom::Nullable<dom::ArrayBufferView>& maybeView)
{
size_t dataSize;
const void* data;
@ -128,16 +128,16 @@ UnpackBlobFromMaybeView(WebGLContext* webgl, const char* funcName, GLsizei width
data = nullptr;
} else {
const auto& view = maybeView.Value();
void* mutData;
js::Scalar::Type jsType;
ComputeLengthAndData(view, &mutData, &dataSize, &jsType);
data = mutData;
view.ComputeLengthAndData();
data = view.DataAllowShared();
dataSize = view.LengthAllowShared();
js::Scalar::Type jsType = JS_GetArrayBufferViewType(view.Obj());
if (!ValidateUnpackArrayType(webgl, funcName, unpackType, jsType))
return nullptr;
}
UniquePtr<webgl::TexUnpackBlob> ret;
// Warning: Possibly shared memory. See bug 1225033.
ret.reset(new webgl::TexUnpackBytes(width, height, depth, dataSize, data));
return Move(ret);
}
@ -148,7 +148,7 @@ WebGLTexture::TexOrSubImage(bool isSubImage, const char* funcName, TexImageTarge
GLint yOffset, GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum unpackFormat,
GLenum unpackType,
const dom::Nullable<dom::ArrayBufferViewOrSharedArrayBufferView>& maybeView)
const dom::Nullable<dom::ArrayBufferView>& maybeView)
{
UniquePtr<webgl::TexUnpackBlob> blob;
blob = UnpackBlobFromMaybeView(mContext, funcName, width, height, depth, unpackType,
@ -1246,7 +1246,7 @@ void
WebGLTexture::CompressedTexImage(const char* funcName, TexImageTarget target, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLsizei depth, GLint border,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
////////////////////////////////////
// Get dest info
@ -1279,11 +1279,9 @@ WebGLTexture::CompressedTexImage(const char* funcName, TexImageTarget target, GL
////////////////////////////////////
// Get source info
void* mutData;
size_t dataSize;
js::Scalar::Type jsType;
ComputeLengthAndData(view, &mutData, &dataSize, &jsType);
const void* data = mutData;
view.ComputeLengthAndData();
const void* data = view.DataAllowShared();
size_t dataSize = view.LengthAllowShared();
if (!ValidateCompressedTexUnpack(mContext, funcName, width, height, depth, format,
dataSize))
@ -1305,6 +1303,7 @@ WebGLTexture::CompressedTexImage(const char* funcName, TexImageTarget target, GL
mContext->gl->MakeCurrent();
// Warning: Possibly shared memory. See bug 1225033.
GLenum error = DoCompressedTexImage(mContext->gl, target, level, internalFormat,
width, height, depth, border, dataSize, data);
if (error == LOCAL_GL_OUT_OF_MEMORY) {
@ -1353,7 +1352,7 @@ WebGLTexture::CompressedTexSubImage(const char* funcName, TexImageTarget target,
GLint level, GLint xOffset, GLint yOffset,
GLint zOffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum sizedUnpackFormat,
const dom::ArrayBufferViewOrSharedArrayBufferView& view)
const dom::ArrayBufferView& view)
{
////////////////////////////////////
// Get dest info
@ -1372,11 +1371,9 @@ WebGLTexture::CompressedTexSubImage(const char* funcName, TexImageTarget target,
////////////////////////////////////
// Get source info
void* mutData;
size_t dataSize;
js::Scalar::Type jsType;
ComputeLengthAndData(view, &mutData, &dataSize, &jsType);
const void* data = mutData;
view.ComputeLengthAndData();
size_t dataSize = view.LengthAllowShared();
const void* data = view.DataAllowShared();
auto srcUsage = mContext->mFormatUsage->GetSizedTexUsage(sizedUnpackFormat);
if (!srcUsage->format->compression) {
@ -1450,6 +1447,7 @@ WebGLTexture::CompressedTexSubImage(const char* funcName, TexImageTarget target,
return;
}
// Warning: Possibly shared memory. See bug 1225033.
GLenum error = DoCompressedTexSubImage(mContext->gl, target, level, xOffset, yOffset,
zOffset, width, height, depth,
sizedUnpackFormat, dataSize, data);

View File

@ -21,7 +21,7 @@ function RGBAToString(arr) {
function TestScreenColor(gl, r, g, b, a) {
var arr = new SharedArrayBuffer(4);
var view = new SharedUint8Array(arr);
var view = new Uint8Array(arr);
gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, view);
var err = gl.getError();
@ -64,10 +64,6 @@ function TestScreenColor(gl, r, g, b, a) {
todo(false, 'SharedArrayBuffer is unavailable.');
return;
}
if (SharedFloat32Array === 'undefined') {
todo(false, 'SharedFloat32Array is unavailable.');
return;
}
var vs = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vs, "attribute vec2 aVertCoord; void main(void) { gl_Position = vec4(aVertCoord, 0.0, 1.0); }");
@ -99,7 +95,7 @@ function TestScreenColor(gl, r, g, b, a) {
// Test gl.bufferData(), gl.bufferSubData() and gl.readPixels() APIs with SAB as input.
var arr = new SharedArrayBuffer(8*4);
var view = new SharedFloat32Array(arr);
var view = new Float32Array(arr);
view.set(new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]));
var vb = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vb);
@ -123,7 +119,7 @@ function TestScreenColor(gl, r, g, b, a) {
var height = 4;
var numChannels = 4;
var sab = new SharedArrayBuffer(width * height * numChannels);
var data = new SharedUint8Array(sab);
var data = new Uint8Array(sab);
for (var i = 0; i < data.length; ++i) {
data[i] = i;
}
@ -151,13 +147,9 @@ function TestScreenColor(gl, r, g, b, a) {
todo(false, 'SharedArrayBuffer is unavailable.');
return;
}
if (SharedFloat32Array === 'undefined') {
todo(false, 'SharedFloat32Array is unavailable.');
return;
}
var arr = new SharedArrayBuffer(8*4);
var view = new SharedFloat32Array(arr);
var view = new Float32Array(arr);
view.set(new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]));
var vb = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vb);
@ -165,7 +157,7 @@ function TestScreenColor(gl, r, g, b, a) {
var arr2 = new SharedArrayBuffer(8*4);
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, arr2);
var view2 = new SharedFloat32Array(arr2);
var view2 = new Float32Array(arr2);
var equal = true;
for(var i = 0; i < 8; ++i) {
if (view[i] != view2[i]) equal = false;
@ -180,7 +172,7 @@ function TestScreenColor(gl, r, g, b, a) {
var depth = 4;
var numChannels = 4;
var sab = new SharedArrayBuffer(width * height * depth* numChannels);
var data = new SharedUint8Array(sab);
var data = new Uint8Array(sab);
for (var i = 0; i < data.length; ++i) {
data[i] = i;
}

View File

@ -347,12 +347,12 @@ interface WebGL2RenderingContext : WebGLRenderingContext
void texImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, GLenum format,
GLenum type, (ArrayBufferView or SharedArrayBufferView)? pixels);
GLenum type, ArrayBufferView? pixels);
[Throws] // Can't actually throw.
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLenum type,
(ArrayBufferView or SharedArrayBufferView)? pixels);
ArrayBufferView? pixels);
[Throws] // Can't actually throw.
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLenum format, GLenum type, ImageData? data);
@ -373,11 +373,11 @@ interface WebGL2RenderingContext : WebGLRenderingContext
void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
(ArrayBufferView or SharedArrayBufferView) data);
ArrayBufferView data);
void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height,
GLsizei depth, GLenum format,
(ArrayBufferView or SharedArrayBufferView) data);
ArrayBufferView data);
/* Programs and shaders */
[WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram? program, DOMString name);

View File

@ -552,11 +552,9 @@ interface WebGLRenderingContext {
void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
void bufferData(GLenum target, ArrayBufferView data, GLenum usage);
void bufferData(GLenum target, SharedArrayBufferView data, GLenum usage);
void bufferData(GLenum target, ArrayBuffer? data, GLenum usage);
void bufferData(GLenum target, SharedArrayBuffer data, GLenum usage);
void bufferSubData(GLenum target, GLintptr offset, ArrayBufferView data);
void bufferSubData(GLenum target, GLintptr offset, SharedArrayBufferView data);
void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer? data);
void bufferSubData(GLenum target, GLintptr offset, SharedArrayBuffer data);
@ -570,11 +568,11 @@ interface WebGLRenderingContext {
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border,
(ArrayBufferView or SharedArrayBufferView) data);
ArrayBufferView data);
void compressedTexSubImage2D(GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format,
(ArrayBufferView or SharedArrayBufferView) data);
ArrayBufferView data);
void copyTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height,
@ -677,7 +675,7 @@ interface WebGLRenderingContext {
[Throws]
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, (ArrayBufferView or SharedArrayBufferView)? pixels);
GLenum format, GLenum type, ArrayBufferView? pixels);
void renderbufferStorage(GLenum target, GLenum internalformat,
GLsizei width, GLsizei height);
@ -698,7 +696,7 @@ interface WebGLRenderingContext {
[Throws] // Can't actually throw.
void texImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum type, (ArrayBufferView or SharedArrayBufferView)? pixels);
GLenum type, ArrayBufferView? pixels);
[Throws] // Can't actually throw.
void texImage2D(GLenum target, GLint level, GLenum internalformat,
GLenum format, GLenum type, ImageData? pixels);
@ -718,7 +716,7 @@ interface WebGLRenderingContext {
[Throws] // Can't actually throw.
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type,
(ArrayBufferView or SharedArrayBufferView)? pixels);
ArrayBufferView? pixels);
[Throws] // Can't actually throw.
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLenum format, GLenum type, ImageData? pixels);