mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 816181 - Split out WebGLShader into separate files - r=bjacob
This commit is contained in:
parent
1f8c9e91e5
commit
56368912e3
@ -8,6 +8,7 @@
|
||||
|
||||
#include "WebGLElementArrayCache.h"
|
||||
#include "WebGLObjectModel.h"
|
||||
#include "WebGLShader.h"
|
||||
#include "WebGLBuffer.h"
|
||||
#include "WebGLRenderbuffer.h"
|
||||
#include "WebGLVertexAttribData.h"
|
||||
@ -41,8 +42,6 @@
|
||||
#include "ForceDiscreteGPUHelperCGL.h"
|
||||
#endif
|
||||
|
||||
#include "angle/ShaderLang.h"
|
||||
|
||||
#include "mozilla/dom/TypedArray.h"
|
||||
#include "mozilla/dom/Nullable.h"
|
||||
#include "mozilla/ErrorResult.h"
|
||||
@ -72,7 +71,6 @@ namespace mozilla {
|
||||
|
||||
class WebGLTexture;
|
||||
class WebGLProgram;
|
||||
class WebGLShader;
|
||||
class WebGLFramebuffer;
|
||||
class WebGLUniformLocation;
|
||||
class WebGLMemoryPressureObserver;
|
||||
@ -1640,148 +1638,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
struct WebGLMappedIdentifier {
|
||||
nsCString original, mapped; // ASCII strings
|
||||
WebGLMappedIdentifier(const nsACString& o, const nsACString& m) : original(o), mapped(m) {}
|
||||
};
|
||||
|
||||
struct WebGLUniformInfo {
|
||||
uint32_t arraySize;
|
||||
bool isArray;
|
||||
ShDataType type;
|
||||
|
||||
WebGLUniformInfo(uint32_t s = 0, bool a = false, ShDataType t = SH_NONE)
|
||||
: arraySize(s), isArray(a), type(t) {}
|
||||
|
||||
int ElementSize() const {
|
||||
switch (type) {
|
||||
case SH_INT:
|
||||
case SH_FLOAT:
|
||||
case SH_BOOL:
|
||||
case SH_SAMPLER_2D:
|
||||
case SH_SAMPLER_CUBE:
|
||||
return 1;
|
||||
case SH_INT_VEC2:
|
||||
case SH_FLOAT_VEC2:
|
||||
case SH_BOOL_VEC2:
|
||||
return 2;
|
||||
case SH_INT_VEC3:
|
||||
case SH_FLOAT_VEC3:
|
||||
case SH_BOOL_VEC3:
|
||||
return 3;
|
||||
case SH_INT_VEC4:
|
||||
case SH_FLOAT_VEC4:
|
||||
case SH_BOOL_VEC4:
|
||||
case SH_FLOAT_MAT2:
|
||||
return 4;
|
||||
case SH_FLOAT_MAT3:
|
||||
return 9;
|
||||
case SH_FLOAT_MAT4:
|
||||
return 16;
|
||||
default:
|
||||
NS_ABORT(); // should never get here
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class WebGLShader MOZ_FINAL
|
||||
: public nsISupports
|
||||
, public WebGLRefCountedObject<WebGLShader>
|
||||
, public LinkedListElement<WebGLShader>
|
||||
, public WebGLContextBoundObject
|
||||
, public nsWrapperCache
|
||||
{
|
||||
friend class WebGLContext;
|
||||
friend class WebGLProgram;
|
||||
|
||||
public:
|
||||
WebGLShader(WebGLContext *context, WebGLenum stype)
|
||||
: WebGLContextBoundObject(context)
|
||||
, mType(stype)
|
||||
, mNeedsTranslation(true)
|
||||
, mAttribMaxNameLength(0)
|
||||
, mCompileStatus(false)
|
||||
{
|
||||
SetIsDOMBinding();
|
||||
mContext->MakeContextCurrent();
|
||||
mGLName = mContext->gl->fCreateShader(mType);
|
||||
mContext->mShaders.insertBack(this);
|
||||
}
|
||||
|
||||
~WebGLShader() {
|
||||
DeleteOnce();
|
||||
}
|
||||
|
||||
size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const {
|
||||
return aMallocSizeOf(this) +
|
||||
mSource.SizeOfExcludingThisIfUnshared(aMallocSizeOf) +
|
||||
mTranslationLog.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
|
||||
void Delete() {
|
||||
mSource.Truncate();
|
||||
mTranslationLog.Truncate();
|
||||
mContext->MakeContextCurrent();
|
||||
mContext->gl->fDeleteShader(mGLName);
|
||||
LinkedListElement<WebGLShader>::removeFrom(mContext->mShaders);
|
||||
}
|
||||
|
||||
WebGLuint GLName() { return mGLName; }
|
||||
WebGLenum ShaderType() { return mType; }
|
||||
|
||||
void SetSource(const nsAString& src) {
|
||||
// XXX do some quick gzip here maybe -- getting this will be very rare
|
||||
mSource.Assign(src);
|
||||
}
|
||||
|
||||
const nsString& Source() const { return mSource; }
|
||||
|
||||
void SetNeedsTranslation() { mNeedsTranslation = true; }
|
||||
bool NeedsTranslation() const { return mNeedsTranslation; }
|
||||
|
||||
void SetCompileStatus (bool status) {
|
||||
mCompileStatus = status;
|
||||
}
|
||||
|
||||
bool CompileStatus() const {
|
||||
return mCompileStatus;
|
||||
}
|
||||
|
||||
void SetTranslationSuccess() {
|
||||
mTranslationLog.SetIsVoid(true);
|
||||
mNeedsTranslation = false;
|
||||
}
|
||||
|
||||
void SetTranslationFailure(const nsCString& msg) {
|
||||
mTranslationLog.Assign(msg);
|
||||
}
|
||||
|
||||
const nsCString& TranslationLog() const { return mTranslationLog; }
|
||||
|
||||
WebGLContext *GetParentObject() const {
|
||||
return Context();
|
||||
}
|
||||
|
||||
virtual JSObject* WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap);
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WebGLShader)
|
||||
|
||||
protected:
|
||||
|
||||
WebGLuint mGLName;
|
||||
WebGLenum mType;
|
||||
nsString mSource;
|
||||
nsCString mTranslationLog; // The translation log should contain only ASCII characters
|
||||
bool mNeedsTranslation;
|
||||
nsTArray<WebGLMappedIdentifier> mAttributes;
|
||||
nsTArray<WebGLMappedIdentifier> mUniforms;
|
||||
nsTArray<WebGLUniformInfo> mUniformInfos;
|
||||
int mAttribMaxNameLength;
|
||||
bool mCompileStatus;
|
||||
};
|
||||
|
||||
/** Takes an ASCII string like "foo[i]", turns it into "foo" and returns "[i]" in bracketPart
|
||||
*
|
||||
* \param string input/output: the string to split, becomes the string without the bracket part
|
||||
|
@ -3,6 +3,7 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "WebGLShader.h"
|
||||
#include "WebGLContext.h"
|
||||
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
||||
|
||||
@ -13,6 +14,41 @@ WebGLShader::WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap) {
|
||||
return dom::WebGLShaderBinding::Wrap(cx, scope, this, triedToWrap);
|
||||
}
|
||||
|
||||
WebGLShader::WebGLShader(WebGLContext *context, WebGLenum stype)
|
||||
: WebGLContextBoundObject(context)
|
||||
, mType(stype)
|
||||
, mNeedsTranslation(true)
|
||||
, mAttribMaxNameLength(0)
|
||||
, mCompileStatus(false)
|
||||
{
|
||||
SetIsDOMBinding();
|
||||
mContext->MakeContextCurrent();
|
||||
mGLName = mContext->gl->fCreateShader(mType);
|
||||
mContext->mShaders.insertBack(this);
|
||||
}
|
||||
|
||||
void
|
||||
WebGLShader::Delete() {
|
||||
mSource.Truncate();
|
||||
mTranslationLog.Truncate();
|
||||
mContext->MakeContextCurrent();
|
||||
mContext->gl->fDeleteShader(mGLName);
|
||||
LinkedListElement<WebGLShader>::removeFrom(mContext->mShaders);
|
||||
}
|
||||
|
||||
size_t
|
||||
WebGLShader::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const {
|
||||
return aMallocSizeOf(this) +
|
||||
mSource.SizeOfExcludingThisIfUnshared(aMallocSizeOf) +
|
||||
mTranslationLog.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
|
||||
void
|
||||
WebGLShader::SetTranslationSuccess() {
|
||||
mTranslationLog.SetIsVoid(true);
|
||||
mNeedsTranslation = false;
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLShader)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLShader)
|
||||
|
138
content/canvas/src/WebGLShader.h
Normal file
138
content/canvas/src/WebGLShader.h
Normal file
@ -0,0 +1,138 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef WEBGLSHADER_H_
|
||||
#define WEBGLSHADER_H_
|
||||
|
||||
#include "WebGLObjectModel.h"
|
||||
|
||||
#include "nsWrapperCache.h"
|
||||
|
||||
#include "angle/ShaderLang.h"
|
||||
|
||||
#include "mozilla/LinkedList.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
struct WebGLMappedIdentifier {
|
||||
nsCString original, mapped; // ASCII strings
|
||||
WebGLMappedIdentifier(const nsACString& o, const nsACString& m) : original(o), mapped(m) {}
|
||||
};
|
||||
|
||||
struct WebGLUniformInfo {
|
||||
uint32_t arraySize;
|
||||
bool isArray;
|
||||
ShDataType type;
|
||||
|
||||
WebGLUniformInfo(uint32_t s = 0, bool a = false, ShDataType t = SH_NONE)
|
||||
: arraySize(s), isArray(a), type(t) {}
|
||||
|
||||
int ElementSize() const {
|
||||
switch (type) {
|
||||
case SH_INT:
|
||||
case SH_FLOAT:
|
||||
case SH_BOOL:
|
||||
case SH_SAMPLER_2D:
|
||||
case SH_SAMPLER_CUBE:
|
||||
return 1;
|
||||
case SH_INT_VEC2:
|
||||
case SH_FLOAT_VEC2:
|
||||
case SH_BOOL_VEC2:
|
||||
return 2;
|
||||
case SH_INT_VEC3:
|
||||
case SH_FLOAT_VEC3:
|
||||
case SH_BOOL_VEC3:
|
||||
return 3;
|
||||
case SH_INT_VEC4:
|
||||
case SH_FLOAT_VEC4:
|
||||
case SH_BOOL_VEC4:
|
||||
case SH_FLOAT_MAT2:
|
||||
return 4;
|
||||
case SH_FLOAT_MAT3:
|
||||
return 9;
|
||||
case SH_FLOAT_MAT4:
|
||||
return 16;
|
||||
default:
|
||||
NS_ABORT(); // should never get here
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class WebGLShader MOZ_FINAL
|
||||
: public nsISupports
|
||||
, public WebGLRefCountedObject<WebGLShader>
|
||||
, public LinkedListElement<WebGLShader>
|
||||
, public WebGLContextBoundObject
|
||||
, public nsWrapperCache
|
||||
{
|
||||
friend class WebGLContext;
|
||||
friend class WebGLProgram;
|
||||
|
||||
public:
|
||||
WebGLShader(WebGLContext *context, WebGLenum stype);
|
||||
|
||||
~WebGLShader() {
|
||||
DeleteOnce();
|
||||
}
|
||||
|
||||
size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
|
||||
|
||||
WebGLuint GLName() { return mGLName; }
|
||||
WebGLenum ShaderType() { return mType; }
|
||||
|
||||
void SetSource(const nsAString& src) {
|
||||
// XXX do some quick gzip here maybe -- getting this will be very rare
|
||||
mSource.Assign(src);
|
||||
}
|
||||
|
||||
const nsString& Source() const { return mSource; }
|
||||
|
||||
void SetNeedsTranslation() { mNeedsTranslation = true; }
|
||||
bool NeedsTranslation() const { return mNeedsTranslation; }
|
||||
|
||||
void SetCompileStatus (bool status) {
|
||||
mCompileStatus = status;
|
||||
}
|
||||
|
||||
void Delete();
|
||||
|
||||
bool CompileStatus() const {
|
||||
return mCompileStatus;
|
||||
}
|
||||
|
||||
void SetTranslationSuccess();
|
||||
|
||||
void SetTranslationFailure(const nsCString& msg) {
|
||||
mTranslationLog.Assign(msg);
|
||||
}
|
||||
|
||||
const nsCString& TranslationLog() const { return mTranslationLog; }
|
||||
|
||||
WebGLContext *GetParentObject() const {
|
||||
return Context();
|
||||
}
|
||||
|
||||
virtual JSObject* WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap);
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WebGLShader)
|
||||
|
||||
protected:
|
||||
|
||||
WebGLuint mGLName;
|
||||
WebGLenum mType;
|
||||
nsString mSource;
|
||||
nsCString mTranslationLog; // The translation log should contain only ASCII characters
|
||||
bool mNeedsTranslation;
|
||||
nsTArray<WebGLMappedIdentifier> mAttributes;
|
||||
nsTArray<WebGLMappedIdentifier> mUniforms;
|
||||
nsTArray<WebGLUniformInfo> mUniformInfos;
|
||||
int mAttribMaxNameLength;
|
||||
bool mCompileStatus;
|
||||
};
|
||||
} // namespace mozilla
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user