stdlib updates to take advantage of pointers

The packed_{load,store}_active now functions take a pointer to a
location at which to start loading/storing, rather than an array
base and a uniform index.

Variants of the prefetch functions that take varying pointers 
are now available.

There are now variants of the various atomic functions that take
varying pointers (issue #112).
This commit is contained in:
Matt Pharr
2011-11-29 15:41:38 -08:00
parent bbb32c0c5d
commit 11547cb950
12 changed files with 126 additions and 53 deletions

View File

@@ -5,7 +5,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform unsigned int a[programCount];
a[programIndex] = aFOO[programIndex];
unsigned int aa;
packed_load_active(a, 0, &aa);
packed_load_active(a, &aa);
RET[programIndex] = aa;
}

View File

@@ -7,7 +7,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
int aa = 15;
uniform int count = 0;
if (programIndex < 2)
count += packed_load_active(a, 0, &aa);
count += packed_load_active(a, &aa);
RET[programIndex] = aa;
}

View File

@@ -7,7 +7,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
int aa;
uniform int count = 0;
if (programIndex < 2)
count += packed_load_active(a, 0, &aa);
count += packed_load_active(a, &aa);
RET[programIndex] = count;
}

View File

@@ -8,7 +8,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
int aa = 32;
uniform int count = 0;
if (programIndex < 2)
count += packed_load_active(a, 5, &aa);
count += packed_load_active(&a[5], &aa);
RET[programIndex] = aa;
}

View File

@@ -8,9 +8,9 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
int aa = 32;
uniform int count = 0;
if (programIndex & 1)
count += packed_load_active(a, 10, &aa);
count += packed_load_active(&a[10], &aa);
if (!(programIndex & 1))
count += packed_load_active(a, 10+count, &aa);
count += packed_load_active(&a[10+count], &aa);
RET[programIndex] = aa;
}

View File

@@ -6,7 +6,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int pack[2+programCount];
for (uniform int i = 0; i < 2+programCount; ++i)
pack[i] = 0;
packed_store_active(pack, 2, a);
packed_store_active(&pack[2], a);
RET[programIndex] = pack[programIndex];
}

View File

@@ -7,7 +7,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
for (uniform int i = 0; i < 2+programCount; ++i)
pack[i] = 0;
if ((int)a & 1)
packed_store_active(pack, 2, a);
packed_store_active(&pack[2], a);
RET[programIndex] = pack[programIndex];
}

View File

@@ -8,7 +8,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
pack[i] = 0;
uniform int count = 0;
if ((int)a & 1)
count += packed_store_active(pack, 2, a);
count += packed_store_active(&pack[2], a);
RET[programIndex] = count;
}

View File

@@ -6,7 +6,7 @@ export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform unsigned int pack[programCount];
for (uniform int i = 0; i < programCount; ++i)
pack[i] = 0;
packed_store_active(pack, 0, (unsigned int)a);
packed_store_active(pack, (unsigned int)a);
RET[programIndex] = pack[programIndex];
}