Merge change 3485
* changes: Fix build issue and ref count bug with scripts.
This commit is contained in:
@@ -37,13 +37,9 @@ void Context::initEGL()
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
LOGE("EGL 1");
|
||||
mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||
LOGE("EGL 2 %p", mDisplay);
|
||||
eglInitialize(mDisplay, &mMajorVersion, &mMinorVersion);
|
||||
LOGE("EGL 3 %i %i", mMajorVersion, mMinorVersion);
|
||||
eglChooseConfig(mDisplay, s_configAttribs, &mConfig, 1, &mNumConfigs);
|
||||
LOGE("EGL 4 %p", mConfig);
|
||||
|
||||
if (mWndSurface) {
|
||||
mSurface = eglCreateWindowSurface(mDisplay, mConfig,
|
||||
@@ -55,13 +51,10 @@ void Context::initEGL()
|
||||
NULL);
|
||||
}
|
||||
|
||||
LOGE("EGL 5");
|
||||
mContext = eglCreateContext(mDisplay, mConfig, NULL, NULL);
|
||||
eglMakeCurrent(mDisplay, mSurface, mSurface, mContext);
|
||||
eglQuerySurface(mDisplay, mSurface, EGL_WIDTH, &mWidth);
|
||||
eglQuerySurface(mDisplay, mSurface, EGL_HEIGHT, &mHeight);
|
||||
LOGE("EGL 9");
|
||||
|
||||
}
|
||||
|
||||
bool Context::runRootScript()
|
||||
@@ -123,16 +116,11 @@ void * Context::threadProc(void *vrsc)
|
||||
{
|
||||
Context *rsc = static_cast<Context *>(vrsc);
|
||||
|
||||
LOGE("TP 1");
|
||||
gIO = new ThreadIO();
|
||||
|
||||
rsc->mServerCommands.init(128);
|
||||
rsc->mServerReturns.init(128);
|
||||
|
||||
rsc->initEGL();
|
||||
|
||||
LOGE("TP 2");
|
||||
|
||||
rsc->mRunning = true;
|
||||
bool mDraw = true;
|
||||
while (!rsc->mExit) {
|
||||
@@ -149,7 +137,6 @@ void * Context::threadProc(void *vrsc)
|
||||
}
|
||||
}
|
||||
|
||||
LOGE("TP 6");
|
||||
glClearColor(0,0,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(rsc->mDisplay, rsc->mSurface);
|
||||
@@ -159,7 +146,6 @@ void * Context::threadProc(void *vrsc)
|
||||
|
||||
Context::Context(Device *dev, Surface *sur)
|
||||
{
|
||||
LOGE("CC 1");
|
||||
dev->addContext(this);
|
||||
mDev = dev;
|
||||
mRunning = false;
|
||||
@@ -171,7 +157,6 @@ Context::Context(Device *dev, Surface *sur)
|
||||
// see comment in header
|
||||
gCon = this;
|
||||
|
||||
LOGE("CC 2");
|
||||
int status;
|
||||
pthread_attr_t threadAttr;
|
||||
|
||||
@@ -185,17 +170,16 @@ Context::Context(Device *dev, Surface *sur)
|
||||
sparam.sched_priority = ANDROID_PRIORITY_DISPLAY;
|
||||
pthread_attr_setschedparam(&threadAttr, &sparam);
|
||||
|
||||
LOGE("RS Launching thread");
|
||||
status = pthread_create(&mThreadId, &threadAttr, threadProc, this);
|
||||
if (status) {
|
||||
LOGE("Failed to start rs context thread.");
|
||||
}
|
||||
|
||||
LOGE("CC 3");
|
||||
mWndSurface = sur;
|
||||
while(!mRunning) {
|
||||
sleep(1);
|
||||
}
|
||||
LOGE("CC 4");
|
||||
|
||||
pthread_attr_destroy(&threadAttr);
|
||||
}
|
||||
@@ -205,14 +189,11 @@ Context::~Context()
|
||||
mExit = true;
|
||||
void *res;
|
||||
|
||||
LOGE("DES 1");
|
||||
int status = pthread_join(mThreadId, &res);
|
||||
LOGE("DES 2");
|
||||
|
||||
if (mDev) {
|
||||
mDev->removeContext(this);
|
||||
}
|
||||
LOGE("DES 3");
|
||||
}
|
||||
|
||||
void Context::swapBuffers()
|
||||
|
||||
@@ -27,9 +27,7 @@ using namespace android::renderscript;
|
||||
ScriptC::ScriptC()
|
||||
{
|
||||
mAccScript = NULL;
|
||||
mScript = NULL;
|
||||
mScriptText = NULL;
|
||||
mScriptTextLength = 0;
|
||||
memset(&mProgram, 0, sizeof(mProgram));
|
||||
}
|
||||
|
||||
ScriptC::~ScriptC()
|
||||
@@ -392,7 +390,7 @@ static rsc_FunctionTable scriptCPtrTable = {
|
||||
bool ScriptC::run(Context *rsc, uint32_t launchID)
|
||||
{
|
||||
Env e = {rsc, this};
|
||||
return mScript(&e, &scriptCPtrTable, launchID) != 0;
|
||||
return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0;
|
||||
}
|
||||
|
||||
ScriptCState::ScriptCState()
|
||||
@@ -409,32 +407,33 @@ ScriptCState::~ScriptCState()
|
||||
|
||||
void ScriptCState::clear()
|
||||
{
|
||||
memset(&mProgram, 0, sizeof(mProgram));
|
||||
|
||||
mConstantBufferTypes.clear();
|
||||
mClearColor[0] = 0;
|
||||
mClearColor[1] = 0;
|
||||
mClearColor[2] = 0;
|
||||
mClearColor[3] = 1;
|
||||
mClearDepth = 1;
|
||||
mClearStencil = 0;
|
||||
|
||||
memset(&mEnviroment, 0, sizeof(mEnviroment));
|
||||
mEnviroment.mClearColor[0] = 0;
|
||||
mEnviroment.mClearColor[1] = 0;
|
||||
mEnviroment.mClearColor[2] = 0;
|
||||
mEnviroment.mClearColor[3] = 1;
|
||||
mEnviroment.mClearDepth = 1;
|
||||
mEnviroment.mClearStencil = 0;
|
||||
mEnviroment.mIsRoot = false;
|
||||
mEnviroment.mIsOrtho = true;
|
||||
|
||||
mAccScript = NULL;
|
||||
mScript = NULL;
|
||||
mIsRoot = false;
|
||||
mIsOrtho = true;
|
||||
mScriptText = NULL;
|
||||
mScriptTextLength = 0;
|
||||
|
||||
}
|
||||
|
||||
void ScriptCState::runCompiler()
|
||||
{
|
||||
mAccScript = accCreateScript();
|
||||
|
||||
LOGE("Compiler 1");
|
||||
const char* scriptSource[] = {mScriptText};
|
||||
int scriptLength[] = {mScriptTextLength} ;
|
||||
const char* scriptSource[] = {mProgram.mScriptText};
|
||||
int scriptLength[] = {mProgram.mScriptTextLength} ;
|
||||
accScriptSource(mAccScript, 1, scriptSource, scriptLength);
|
||||
accCompileScript(mAccScript);
|
||||
accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mScript);
|
||||
LOGE("Compiler 1");
|
||||
accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
|
||||
}
|
||||
|
||||
namespace android {
|
||||
@@ -449,22 +448,22 @@ void rsi_ScriptCBegin(Context * rsc)
|
||||
void rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mClearColor[0] = r;
|
||||
ss->mClearColor[1] = g;
|
||||
ss->mClearColor[2] = b;
|
||||
ss->mClearColor[3] = a;
|
||||
ss->mEnviroment.mClearColor[0] = r;
|
||||
ss->mEnviroment.mClearColor[1] = g;
|
||||
ss->mEnviroment.mClearColor[2] = b;
|
||||
ss->mEnviroment.mClearColor[3] = a;
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetClearDepth(Context * rsc, float v)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mClearDepth = v;
|
||||
ss->mEnviroment.mClearDepth = v;
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mClearStencil = v;
|
||||
ss->mEnviroment.mClearStencil = v;
|
||||
}
|
||||
|
||||
void rsi_ScriptCAddType(Context * rsc, RsType vt)
|
||||
@@ -473,30 +472,29 @@ void rsi_ScriptCAddType(Context * rsc, RsType vt)
|
||||
ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
|
||||
void rsi_ScriptCSetScript(Context * rsc, void *vp)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
|
||||
ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
|
||||
ss->mProgram.mScript = reinterpret_cast<rsc_RunScript>(vp);
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mIsRoot = isRoot;
|
||||
ss->mEnviroment.mIsRoot = isRoot;
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mIsOrtho = isOrtho;
|
||||
ss->mEnviroment.mIsOrtho = isOrtho;
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mScriptText = text;
|
||||
ss->mScriptTextLength = len;
|
||||
ss->mProgram.mScriptText = text;
|
||||
ss->mProgram.mScriptTextLength = len;
|
||||
}
|
||||
|
||||
|
||||
@@ -507,19 +505,12 @@ RsScript rsi_ScriptCCreate(Context * rsc)
|
||||
ss->runCompiler();
|
||||
|
||||
ScriptC *s = new ScriptC();
|
||||
s->incRef();
|
||||
s->mAccScript = ss->mAccScript;
|
||||
ss->mAccScript = NULL;
|
||||
s->mScript = ss->mScript;
|
||||
s->mClearColor[0] = ss->mClearColor[0];
|
||||
s->mClearColor[1] = ss->mClearColor[1];
|
||||
s->mClearColor[2] = ss->mClearColor[2];
|
||||
s->mClearColor[3] = ss->mClearColor[3];
|
||||
s->mClearDepth = ss->mClearDepth;
|
||||
s->mClearStencil = ss->mClearStencil;
|
||||
s->mIsRoot = ss->mIsRoot;
|
||||
s->mIsOrtho = ss->mIsOrtho;
|
||||
s->mScriptText = ss->mScriptText;
|
||||
s->mScriptTextLength = ss->mScriptTextLength;
|
||||
s->mEnviroment = ss->mEnviroment;
|
||||
s->mProgram = ss->mProgram;
|
||||
ss->clear();
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,15 +36,32 @@ public:
|
||||
ScriptC();
|
||||
virtual ~ScriptC();
|
||||
|
||||
struct Program_t {
|
||||
const char * mScriptText;
|
||||
uint32_t mScriptTextLength;
|
||||
|
||||
virtual bool run(Context *, uint32_t launchID);
|
||||
bool useStateVertex;
|
||||
bool useStateRaster;
|
||||
bool useStateFragment;
|
||||
bool useStateStore;
|
||||
|
||||
const char * mScriptText;
|
||||
uint32_t mScriptTextLength;
|
||||
rsc_RunScript mScript;
|
||||
};
|
||||
|
||||
struct Enviroment_t {
|
||||
bool mIsRoot;
|
||||
bool mIsOrtho;
|
||||
float mClearColor[4];
|
||||
float mClearDepth;
|
||||
uint32_t mClearStencil;
|
||||
};
|
||||
|
||||
Program_t mProgram;
|
||||
Enviroment_t mEnviroment;
|
||||
|
||||
ACCscript* mAccScript;
|
||||
rsc_RunScript mScript;
|
||||
|
||||
virtual bool run(Context *, uint32_t launchID);
|
||||
|
||||
struct Env {
|
||||
Context *mContext;
|
||||
@@ -60,14 +77,9 @@ public:
|
||||
~ScriptCState();
|
||||
|
||||
ACCscript* mAccScript;
|
||||
const char * mScriptText;
|
||||
uint32_t mScriptTextLength;
|
||||
rsc_RunScript mScript;
|
||||
float mClearColor[4];
|
||||
float mClearDepth;
|
||||
uint32_t mClearStencil;
|
||||
bool mIsRoot;
|
||||
bool mIsOrtho;
|
||||
|
||||
ScriptC::Program_t mProgram;
|
||||
ScriptC::Enviroment_t mEnviroment;
|
||||
|
||||
Vector<const Type *> mConstantBufferTypes;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user