Merge change 20586
* changes: Let java put #defines into renderscript
This commit is contained in:
@@ -68,6 +68,8 @@ public class RenderScript {
|
||||
native void nContextBindProgramFragmentStore(int pfs);
|
||||
native void nContextBindProgramFragment(int pf);
|
||||
native void nContextBindProgramVertex(int pf);
|
||||
native void nContextAddDefineI32(String name, int value);
|
||||
native void nContextAddDefineF(String name, float value);
|
||||
|
||||
native void nAssignName(int obj, byte[] name);
|
||||
native int nFileOpen(byte[] name);
|
||||
@@ -139,6 +141,8 @@ public class RenderScript {
|
||||
native void nScriptCSetRoot(boolean isRoot);
|
||||
native void nScriptCSetScript(byte[] script, int offset, int length);
|
||||
native int nScriptCCreate();
|
||||
native void nScriptCAddDefineI32(String name, int value);
|
||||
native void nScriptCAddDefineF(String name, float value);
|
||||
|
||||
native void nSamplerDestroy(int sampler);
|
||||
native void nSamplerBegin();
|
||||
|
||||
@@ -16,11 +16,13 @@
|
||||
|
||||
package android.renderscript;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import android.content.res.Resources;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
@@ -30,12 +32,11 @@ public class ScriptC extends Script {
|
||||
super(id, rs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static class Builder extends Script.Builder {
|
||||
byte[] mProgram;
|
||||
int mProgramLength;
|
||||
HashMap<String,Integer> mIntDefines = new HashMap();
|
||||
HashMap<String,Float> mFloatDefines = new HashMap();
|
||||
|
||||
public Builder(RenderScript rs) {
|
||||
super(rs);
|
||||
@@ -63,7 +64,7 @@ public class ScriptC extends Script {
|
||||
}
|
||||
}
|
||||
|
||||
public void setScript(InputStream is) throws IOException {
|
||||
public void setScript(InputStream is) throws IOException {
|
||||
byte[] buf = new byte[1024];
|
||||
int currentPos = 0;
|
||||
while(true) {
|
||||
@@ -88,19 +89,33 @@ public class ScriptC extends Script {
|
||||
b.mRS.nScriptCBegin();
|
||||
b.transferCreate();
|
||||
|
||||
b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength);
|
||||
for (Entry<String,Integer> e: b.mIntDefines.entrySet()) {
|
||||
b.mRS.nScriptCAddDefineI32(e.getKey(), e.getValue().intValue());
|
||||
}
|
||||
for (Entry<String,Float> e: b.mFloatDefines.entrySet()) {
|
||||
b.mRS.nScriptCAddDefineF(e.getKey(), e.getValue().floatValue());
|
||||
}
|
||||
|
||||
b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength);
|
||||
|
||||
int id = b.mRS.nScriptCCreate();
|
||||
ScriptC obj = new ScriptC(id, b.mRS);
|
||||
b.transferObject(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
public void addDefine(String name, int value) {
|
||||
mIntDefines.put(name, value);
|
||||
}
|
||||
|
||||
public void addDefine(String name, float value) {
|
||||
mFloatDefines.put(name, value);
|
||||
}
|
||||
|
||||
public ScriptC create() {
|
||||
return internalCreate(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -765,6 +765,26 @@ nScriptCCreate(JNIEnv *_env, jobject _this)
|
||||
return (jint)rsScriptCCreate();
|
||||
}
|
||||
|
||||
static void
|
||||
nScriptCAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
|
||||
{
|
||||
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
|
||||
const char* n = _env->GetStringUTFChars(name, NULL);
|
||||
LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
|
||||
rsScriptCSetDefineI32(n, value);
|
||||
_env->ReleaseStringUTFChars(name, n);
|
||||
}
|
||||
|
||||
static void
|
||||
nScriptCAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
|
||||
{
|
||||
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
|
||||
const char* n = _env->GetStringUTFChars(name, NULL);
|
||||
LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
|
||||
rsScriptCSetDefineF(n, value);
|
||||
_env->ReleaseStringUTFChars(name, n);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
static void
|
||||
@@ -985,6 +1005,27 @@ nContextBindProgramVertex(JNIEnv *_env, jobject _this, jint pf)
|
||||
rsContextBindProgramVertex((RsProgramVertex)pf);
|
||||
}
|
||||
|
||||
static void
|
||||
nContextAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
|
||||
{
|
||||
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
|
||||
const char* n = _env->GetStringUTFChars(name, NULL);
|
||||
LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
|
||||
rsContextSetDefineI32(n, value);
|
||||
_env->ReleaseStringUTFChars(name, n);
|
||||
}
|
||||
|
||||
static void
|
||||
nContextAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
|
||||
{
|
||||
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
|
||||
const char* n = _env->GetStringUTFChars(name, NULL);
|
||||
LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
|
||||
rsContextSetDefineF(n, value);
|
||||
_env->ReleaseStringUTFChars(name, n);
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
static void
|
||||
@@ -1197,6 +1238,8 @@ static JNINativeMethod methods[] = {
|
||||
{"nScriptCSetRoot", "(Z)V", (void*)nScriptCSetRoot },
|
||||
{"nScriptCSetScript", "([BII)V", (void*)nScriptCSetScript },
|
||||
{"nScriptCCreate", "()I", (void*)nScriptCCreate },
|
||||
{"nScriptCAddDefineI32", "(Ljava/lang/String;I)V", (void*)nScriptCAddDefineI32 },
|
||||
{"nScriptCAddDefineF", "(Ljava/lang/String;F)V", (void*)nScriptCAddDefineF },
|
||||
|
||||
{"nProgramFragmentStoreBegin", "(II)V", (void*)nProgramFragmentStoreBegin },
|
||||
{"nProgramFragmentStoreDepthFunc", "(I)V", (void*)nProgramFragmentStoreDepthFunc },
|
||||
|
||||
@@ -16,6 +16,16 @@ ContextBindProgramVertex {
|
||||
param RsProgramVertex pgm
|
||||
}
|
||||
|
||||
ContextSetDefineF {
|
||||
param const char* name
|
||||
param float value
|
||||
}
|
||||
|
||||
ContextSetDefineI32 {
|
||||
param const char* name
|
||||
param int32_t value
|
||||
}
|
||||
|
||||
AssignName {
|
||||
param void *obj
|
||||
param const char *name
|
||||
@@ -318,6 +328,15 @@ ScriptCCreate {
|
||||
ret RsScript
|
||||
}
|
||||
|
||||
ScriptCSetDefineF {
|
||||
param const char* name
|
||||
param float value
|
||||
}
|
||||
|
||||
ScriptCSetDefineI32 {
|
||||
param const char* name
|
||||
param int32_t value
|
||||
}
|
||||
|
||||
ProgramFragmentStoreBegin {
|
||||
param RsElement in
|
||||
|
||||
@@ -331,6 +331,26 @@ void Context::appendNameDefines(String8 *str) const
|
||||
}
|
||||
}
|
||||
|
||||
void Context::appendVarDefines(String8 *str) const
|
||||
{
|
||||
char buf[256];
|
||||
for (size_t ct=0; ct < mInt32Defines.size(); ct++) {
|
||||
str->append("#define ");
|
||||
str->append(mInt32Defines.keyAt(ct));
|
||||
str->append(" ");
|
||||
sprintf(buf, "%i\n", (int)mInt32Defines.valueAt(ct));
|
||||
str->append(buf);
|
||||
|
||||
}
|
||||
for (size_t ct=0; ct < mFloatDefines.size(); ct++) {
|
||||
str->append("#define ");
|
||||
str->append(mFloatDefines.keyAt(ct));
|
||||
str->append(" ");
|
||||
sprintf(buf, "%ff\n", mFloatDefines.valueAt(ct));
|
||||
str->append(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
@@ -381,6 +401,15 @@ void rsi_AssignName(Context *rsc, void * obj, const char *name, uint32_t len)
|
||||
rsc->assignName(ob, name, len);
|
||||
}
|
||||
|
||||
void rsi_ContextSetDefineF(Context *rsc, const char* name, float value)
|
||||
{
|
||||
rsc->addInt32Define(name, value);
|
||||
}
|
||||
|
||||
void rsi_ContextSetDefineI32(Context *rsc, const char* name, int32_t value)
|
||||
{
|
||||
rsc->addFloatDefine(name, value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
#include "rsUtils.h"
|
||||
|
||||
#include <utils/KeyedVector.h>
|
||||
#include <utils/String8.h>
|
||||
#include <utils/Vector.h>
|
||||
#include <ui/Surface.h>
|
||||
|
||||
@@ -93,7 +95,7 @@ public:
|
||||
void removeName(ObjectBase *obj);
|
||||
ObjectBase * lookupName(const char *name) const;
|
||||
void appendNameDefines(String8 *str) const;
|
||||
|
||||
void appendVarDefines(String8 *str) const;
|
||||
|
||||
ProgramFragment * getDefaultProgramFragment() const {
|
||||
return mStateFragment.mDefault.get();
|
||||
@@ -105,6 +107,14 @@ public:
|
||||
return mStateFragmentStore.mDefault.get();
|
||||
}
|
||||
|
||||
void addInt32Define(const char* name, int32_t value) {
|
||||
mInt32Defines.add(String8(name), value);
|
||||
}
|
||||
|
||||
void addFloatDefine(const char* name, float value) {
|
||||
mFloatDefines.add(String8(name), value);
|
||||
}
|
||||
|
||||
protected:
|
||||
Device *mDev;
|
||||
|
||||
@@ -143,6 +153,8 @@ private:
|
||||
Surface *mWndSurface;
|
||||
|
||||
Vector<ObjectBase *> mNames;
|
||||
KeyedVector<String8,int> mInt32Defines;
|
||||
KeyedVector<String8,float> mFloatDefines;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -104,6 +104,8 @@ void ScriptCState::clear()
|
||||
|
||||
mAccScript = NULL;
|
||||
|
||||
mInt32Defines.clear();
|
||||
mFloatDefines.clear();
|
||||
}
|
||||
|
||||
static ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name)
|
||||
@@ -123,6 +125,8 @@ void ScriptCState::runCompiler(Context *rsc)
|
||||
|
||||
rsc->appendNameDefines(&tmp);
|
||||
appendDecls(&tmp);
|
||||
rsc->appendVarDefines(&tmp);
|
||||
appendVarDefines(&tmp);
|
||||
tmp.append("#line 1\n");
|
||||
|
||||
const char* scriptSource[] = {tmp.string(), mProgram.mScriptText};
|
||||
@@ -138,7 +142,6 @@ void ScriptCState::runCompiler(Context *rsc)
|
||||
ACCsizei len;
|
||||
accGetScriptInfoLog(mAccScript, sizeof(buf), &len, buf);
|
||||
LOGE(buf);
|
||||
|
||||
}
|
||||
|
||||
mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
|
||||
@@ -215,9 +218,31 @@ void ScriptCState::runCompiler(Context *rsc)
|
||||
} else {
|
||||
// Deal with an error.
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ScriptCState::appendVarDefines(String8 *str)
|
||||
{
|
||||
char buf[256];
|
||||
LOGD("appendVarDefines mInt32Defines.size()=%d mFloatDefines.size()=%d\n",
|
||||
mInt32Defines.size(), mFloatDefines.size());
|
||||
for (size_t ct=0; ct < mInt32Defines.size(); ct++) {
|
||||
str->append("#define ");
|
||||
str->append(mInt32Defines.keyAt(ct));
|
||||
str->append(" ");
|
||||
sprintf(buf, "%i\n", (int)mInt32Defines.valueAt(ct));
|
||||
str->append(buf);
|
||||
}
|
||||
for (size_t ct=0; ct < mFloatDefines.size(); ct++) {
|
||||
str->append("#define ");
|
||||
str->append(mFloatDefines.keyAt(ct));
|
||||
str->append(" ");
|
||||
sprintf(buf, "%ff\n", mFloatDefines.valueAt(ct));
|
||||
str->append(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace android {
|
||||
namespace renderscript {
|
||||
|
||||
@@ -270,6 +295,18 @@ RsScript rsi_ScriptCCreate(Context * rsc)
|
||||
return s;
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetDefineF(Context *rsc, const char* name, float value)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mFloatDefines.add(String8(name), value);
|
||||
}
|
||||
|
||||
void rsi_ScriptCSetDefineI32(Context *rsc, const char* name, int32_t value)
|
||||
{
|
||||
ScriptCState *ss = &rsc->mScriptC;
|
||||
ss->mInt32Defines.add(String8(name), value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
#include "RenderScriptEnv.h"
|
||||
|
||||
#include <utils/KeyedVector.h>
|
||||
|
||||
struct ACCscript;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -70,6 +72,7 @@ public:
|
||||
|
||||
void clear();
|
||||
void runCompiler(Context *rsc);
|
||||
void appendVarDefines(String8 *str);
|
||||
|
||||
struct SymbolTable_t {
|
||||
const char * mName;
|
||||
@@ -80,6 +83,9 @@ public:
|
||||
static SymbolTable_t gSyms[];
|
||||
static const SymbolTable_t * lookupSymbol(const char *);
|
||||
static void appendDecls(String8 *str);
|
||||
|
||||
KeyedVector<String8,int> mInt32Defines;
|
||||
KeyedVector<String8,float> mFloatDefines;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user