From 29e239203d427d977b298be7b68b75b6a4b29b51 Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Wed, 7 Mar 2012 15:59:24 -0800 Subject: [PATCH] Support for more vector types. Change-Id: I06d6e8814e75c0dcd726a3c95de82fd6f6267c4d --- .../SampleTest/res/drawable-nodpi/city.png | Bin 0 -> 23004 bytes .../android/rs/sample/SampleRSActivity.java | 24 ++- .../src/com/android/rs/sample/sample.rs | 163 +++++++++++------- 3 files changed, 117 insertions(+), 70 deletions(-) create mode 100644 tests/RenderScriptTests/SampleTest/res/drawable-nodpi/city.png diff --git a/tests/RenderScriptTests/SampleTest/res/drawable-nodpi/city.png b/tests/RenderScriptTests/SampleTest/res/drawable-nodpi/city.png new file mode 100644 index 0000000000000000000000000000000000000000..27c4618309d0d193d99cd980209616384cbf433c GIT binary patch literal 23004 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 literal 0 HcmV?d00001 diff --git a/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/SampleRSActivity.java b/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/SampleRSActivity.java index cd5d53f1c0869..77cbf8435910c 100644 --- a/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/SampleRSActivity.java +++ b/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/SampleRSActivity.java @@ -18,6 +18,7 @@ package com.android.rs.sample; import android.app.Activity; import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.SurfaceTexture; @@ -66,13 +67,14 @@ public class SampleRSActivity extends Activity { } private final String TAG = "Img"; - private Bitmap mBitmapIn; - private TextureView mDisplayView; + private Bitmap mBitmapTwoByTwo; + private Bitmap mBitmapCity; private TextView mBenchmarkResult; private RenderScript mRS; - private Allocation mInPixelsAllocation; + private Allocation mTwoByTwoAlloc; + private Allocation mCityAlloc; private ScriptC_sample mScript; public void onStartTrackingTouch(SeekBar seekBar) { @@ -86,14 +88,18 @@ public class SampleRSActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.rs); - mBitmapIn = loadBitmap(R.drawable.twobytwo); - mDisplayView = (TextureView) findViewById(R.id.display); + mBitmapTwoByTwo = loadBitmap(R.drawable.twobytwo); + mBitmapCity = loadBitmap(R.drawable.city); mBenchmarkResult = (TextView) findViewById(R.id.benchmarkText); mBenchmarkResult.setText("Result: not run"); mRS = RenderScript.create(this); - mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn, + mTwoByTwoAlloc = Allocation.createFromBitmap(mRS, mBitmapTwoByTwo, + Allocation.MipmapControl.MIPMAP_NONE, + Allocation.USAGE_SCRIPT); + + mCityAlloc = Allocation.createFromBitmap(mRS, mBitmapCity, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); @@ -101,8 +107,8 @@ public class SampleRSActivity extends Activity { int usage = Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_OUTPUT; - int outX = 32; - int outY = 32; + int outX = 256; + int outY = 256; // Wrap Linear Allocation outAlloc = Allocation.createTyped(mRS, b.setX(outX).setY(outY).create(), usage); @@ -144,7 +150,7 @@ public class SampleRSActivity extends Activity { private synchronized void filterAlloc(Allocation alloc, Sampler sampler) { long t = java.lang.System.currentTimeMillis(); - mScript.invoke_setSampleData(alloc, mInPixelsAllocation, sampler); + mScript.invoke_setSampleData(alloc, mTwoByTwoAlloc, sampler); mScript.forEach_root(alloc); alloc.ioSendOutput(); mRS.finish(); diff --git a/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/sample.rs b/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/sample.rs index 8a027b205b130..0f3c0a710ad3c 100644 --- a/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/sample.rs +++ b/tests/RenderScriptTests/SampleTest/src/com/android/rs/sample/sample.rs @@ -38,39 +38,113 @@ static int32_t wrapI(rs_sampler_value wrap, int32_t coord, int32_t size) { return max(0, min(coord, size - 1)); } -static float2 wrap(rs_sampler_value wrapS, rs_sampler_value wrapT, float2 coord) { - float2 wrappedCoord; - float temp; - if (wrapS == RS_SAMPLER_WRAP) { - wrappedCoord.x = fract(coord.x, &temp); - // Make sure that non zero integer uv's map to one - if (wrappedCoord.x == 0.0f && coord.x != 0.0f) { - wrappedCoord.x = 1.0f; +#define convert_float(v) (float)v +#define SAMPLE_1D_FUNC(vecsize) \ + static float##vecsize get1DSample##vecsize(rs_allocation a, float2 weights, \ + int iPixel, int next) { \ + uchar##vecsize *p0c = (uchar##vecsize*)rsGetElementAt(a, iPixel); \ + uchar##vecsize *p1c = (uchar##vecsize*)rsGetElementAt(a, next); \ + float##vecsize p0 = convert_float##vecsize(*p0c); \ + float##vecsize p1 = convert_float##vecsize(*p1c); \ + return p0 * weights.x + p1 * weights.y; \ } - if (wrappedCoord.x < 0.0f) { - wrappedCoord.x += 1.0f; +#define SAMPLE_2D_FUNC(vecsize) \ + static float##vecsize get2DSample##vecsize(rs_allocation a, float4 weights, \ + int2 iPixel, int nextX, int nextY) { \ + uchar##vecsize *p0c = (uchar##vecsize*)rsGetElementAt(a, iPixel.x, iPixel.y); \ + uchar##vecsize *p1c = (uchar##vecsize*)rsGetElementAt(a, nextX, iPixel.y); \ + uchar##vecsize *p2c = (uchar##vecsize*)rsGetElementAt(a, iPixel.x, nextY); \ + uchar##vecsize *p3c = (uchar##vecsize*)rsGetElementAt(a, nextX, nextY); \ + float##vecsize p0 = convert_float##vecsize(*p0c); \ + float##vecsize p1 = convert_float##vecsize(*p1c); \ + float##vecsize p2 = convert_float##vecsize(*p2c); \ + float##vecsize p3 = convert_float##vecsize(*p3c); \ + return p0 * weights.x + p1 * weights.y + p2 * weights.z + p3 * weights.w; \ } - } else { - wrappedCoord.x = max(0.0f, min(coord.x, 1.0f)); + +SAMPLE_1D_FUNC() +SAMPLE_1D_FUNC(2) +SAMPLE_1D_FUNC(3) +SAMPLE_1D_FUNC(4) + +SAMPLE_2D_FUNC() +SAMPLE_2D_FUNC(2) +SAMPLE_2D_FUNC(3) +SAMPLE_2D_FUNC(4) + +static float4 getBilinearSample565(rs_allocation a, float4 weights, + int2 iPixel, int nextX, int nextY) { + float4 zero = {0.0f, 0.0f, 0.0f, 0.0f}; + return zero; +} + +static float4 getBilinearSample(rs_allocation a, float4 weights, + int2 iPixel, int nextX, int nextY, + uint32_t vecSize, rs_data_type dt) { + if (dt == RS_TYPE_UNSIGNED_5_6_5) { + return getBilinearSample565(a, weights, iPixel, nextX, nextY); } - if (wrapT == RS_SAMPLER_WRAP) { - wrappedCoord.y = fract(coord.y, &temp); - // Make sure that non zero integer uv's map to one - if (wrappedCoord.y == 0.0f && coord.y != 0.0f) { - wrappedCoord.y = 1.0f; - } - if (wrappedCoord.y < 0.0f) { - wrappedCoord.y += 1.0f; - } - } else { - wrappedCoord.y = max(0.0f, min(coord.y, 1.0f)); + float4 result; + switch(vecSize) { + case 1: + result.x = get2DSample(a, weights, iPixel, nextX, nextY); + result.yzw = 0.0f; + break; + case 2: + result.xy = get2DSample2(a, weights, iPixel, nextX, nextY); + result.zw = 0.0f; + break; + case 3: + result.xyz = get2DSample3(a, weights, iPixel, nextX, nextY); + result.w = 0.0f; + break; + case 4: + result = get2DSample4(a, weights, iPixel, nextX, nextY); + break; } - return wrappedCoord; + + return result; } +static float4 getNearestSample(rs_allocation a, int2 iPixel, uint32_t vecSize, rs_data_type dt) { + if (dt == RS_TYPE_UNSIGNED_5_6_5) { + float4 zero = {0.0f, 0.0f, 0.0f, 0.0f}; + return zero; + } + + float4 result; + switch(vecSize) { + case 1: + result.x = convert_float(*((uchar*)rsGetElementAt(a, iPixel.x, iPixel.y))); + result.yzw = 0.0f; + case 2: + result.xy = convert_float2(*((uchar2*)rsGetElementAt(a, iPixel.x, iPixel.y))); + result.zw = 0.0f; + case 3: + result.xyz = convert_float3(*((uchar3*)rsGetElementAt(a, iPixel.x, iPixel.y))); + result.w = 0.0f; + case 4: + result = convert_float4(*((uchar4*)rsGetElementAt(a, iPixel.x, iPixel.y))); + } + + return result; +} + + // Naive implementation of texture filtering for prototyping purposes static float4 sample(rs_allocation a, rs_sampler s, float2 uv) { + + // Find out what kind of input data we are sampling + rs_element elem = rsAllocationGetElement(a); + uint32_t vecSize = rsElementGetVectorSize(elem); + rs_data_kind dk = rsElementGetDataKind(elem); + rs_data_type dt = rsElementGetDataType(elem); + + if (dk == RS_KIND_USER || (dt != RS_TYPE_UNSIGNED_8 && dt != RS_TYPE_UNSIGNED_5_6_5)) { + float4 zero = {0.0f, 0.0f, 0.0f, 0.0f}; + return zero; + } //rsDebug("*****************************************", 0); rs_sampler_value wrapS = rsgSamplerGetWrapS(s); rs_sampler_value wrapT = rsgSamplerGetWrapT(s); @@ -78,29 +152,20 @@ static float4 sample(rs_allocation a, rs_sampler s, float2 uv) { rs_sampler_value sampleMin = rsgSamplerGetMinification(s); rs_sampler_value sampleMag = rsgSamplerGetMagnification(s); - uv = wrap(wrapS, wrapT, uv); - int32_t sourceW = rsAllocationGetDimX(a); int32_t sourceH = rsAllocationGetDimY(a); - /*rsDebug("uv", uv); - rsDebug("sourceW", sourceW); - rsDebug("sourceH", sourceH);*/ - float2 dimF; dimF.x = (float)(sourceW); dimF.y = (float)(sourceH); float2 pixelUV = uv * dimF; int2 iPixel = convert_int2(pixelUV); - /*rsDebug("iPixelX initial", iPixel.x); - rsDebug("iPixelY initial", iPixel.y);*/ if (sampleMin == RS_SAMPLER_NEAREST || sampleMag == RS_SAMPLER_NEAREST) { iPixel.x = wrapI(wrapS, iPixel.x, sourceW); iPixel.y = wrapI(wrapT, iPixel.y, sourceH); - uchar4 *nearestSample = (uchar4*)rsGetElementAt(a, iPixel.x, iPixel.y); - return convert_float4(*nearestSample); + return getNearestSample(a, iPixel, vecSize, dt); } float2 frac = pixelUV - convert_float2(iPixel); @@ -125,36 +190,12 @@ static float4 sample(rs_allocation a, rs_sampler s, float2 uv) { weights.z = oneMinusFrac.x * frac.y; weights.w = frac.x * frac.y; - uint32_t nextX = wrapI(wrapS, iPixel.x + 1, sourceW); - uint32_t nextY = wrapI(wrapT, iPixel.y + 1, sourceH); + int32_t nextX = wrapI(wrapS, iPixel.x + 1, sourceW); + int32_t nextY = wrapI(wrapT, iPixel.y + 1, sourceH); iPixel.x = wrapI(wrapS, iPixel.x, sourceW); iPixel.y = wrapI(wrapT, iPixel.y, sourceH); - /*rsDebug("iPixelX wrapped", iPixel.x); - rsDebug("iPixelY wrapped", iPixel.y);*/ - uchar4 *p0c = (uchar4*)rsGetElementAt(a, iPixel.x, iPixel.y); - uchar4 *p1c = (uchar4*)rsGetElementAt(a, nextX, iPixel.y); - uchar4 *p2c = (uchar4*)rsGetElementAt(a, iPixel.x, nextY); - uchar4 *p3c = (uchar4*)rsGetElementAt(a, nextX, nextY); - - float4 p0 = convert_float4(*p0c); - float4 p1 = convert_float4(*p1c); - float4 p2 = convert_float4(*p2c); - float4 p3 = convert_float4(*p3c); - - float4 result = p0 * weights.x + p1 * weights.y + p2 * weights.z + p3 * weights.w; - - /*rsDebug("pixelUV", pixelUV); - rsDebug("frac", frac); - rsDebug("oneMinusFrac", oneMinusFrac); - rsDebug("p0", p0); - rsDebug("p1", p1); - rsDebug("p2", p2); - rsDebug("p3", p3); - rsDebug("w", weights); - rsDebug("result", result);*/ - - return result; + return getBilinearSample(a, weights, iPixel, nextX, nextY, vecSize, dt); } void root(uchar4 *out, uint32_t x, uint32_t y) {