Adding ability to dirty the allocation and notify shaders using it.
Change-Id: Id5ac8dbba5185cb1f43bedcf4098fcef9f477c51
diff --git a/java/Samples/src/com/android/samples/rsrenderstates.rs b/java/Samples/src/com/android/samples/rsrenderstates.rs
index 91613cf..4bcf7f5 100644
--- a/java/Samples/src/com/android/samples/rsrenderstates.rs
+++ b/java/Samples/src/com/android/samples/rsrenderstates.rs
@@ -369,6 +369,7 @@
gVSConstants->light1_Diffuse = 1.0f;
gVSConstants->light1_Specular = 0.7f;
gVSConstants->light1_CosinePower = 50.0f;
+ rsAllocationMarkDirty(rsGetAllocation(gVSConstants));
// Update fragmetn shader constants
// Set light 0 colors
@@ -377,6 +378,7 @@
// Set light 1 colors
gFSConstants->light1_DiffuseColor = light1DiffCol;
gFSConstants->light1_SpecularColor = light1SpecCol;
+ rsAllocationMarkDirty(rsGetAllocation(gFSConstants));
}
void displayCustomShaderSamples() {
diff --git a/rsAllocation.h b/rsAllocation.h
index 967f220..b6b5d2f 100644
--- a/rsAllocation.h
+++ b/rsAllocation.h
@@ -89,9 +89,9 @@
void incRefs(const void *ptr, size_t ct) const;
void decRefs(const void *ptr, size_t ct) const;
-protected:
void sendDirty() const;
+protected:
ObjectBaseRef<const Type> mType;
void * mPtr;
diff --git a/rsScriptC_Lib.cpp b/rsScriptC_Lib.cpp
index b4b32bb..41828dc 100644
--- a/rsScriptC_Lib.cpp
+++ b/rsScriptC_Lib.cpp
@@ -356,6 +356,11 @@
return (int)alloc;
}
+void SC_allocationMarkDirty(RsAllocation a)
+{
+ Allocation *alloc = static_cast<Allocation *>(a);
+ alloc->sendDirty();
+}
void SC_ForEach(RsScript vs,
RsAllocation vin,
@@ -422,6 +427,8 @@
{ "_Z13rsClearObjectP13rs_allocation", (void *)&SC_clearObject },
{ "_Z10rsIsObject13rs_allocation", (void *)&SC_isObject },
+ { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_allocationMarkDirty },
+
// Debug
{ "_Z7rsDebugPKcf", (void *)&SC_debugF },
diff --git a/scriptc/rs_math.rsh b/scriptc/rs_math.rsh
index c842ef1..5720b05 100644
--- a/scriptc/rs_math.rsh
+++ b/scriptc/rs_math.rsh
@@ -107,6 +107,10 @@
extern rs_allocation __attribute__((overloadable))
rsGetAllocation(const void *);
+// Mark the allocation dirty and notify those using it
+extern void __attribute__((overloadable))
+ rsAllocationMarkDirty(rs_allocation);
+
// Return the dimensions associated with an allocation.
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimX(rs_allocation);