示例#1
0
文件: fxPEF.c 项目: 1014511134/src
void fxPEF_lop(bool adj, bool add, int nb, int ndata, sf_complex* bb, sf_complex* data)
/*<linear operator>*/
{
	


	int nd1,nd2,id;
		
    nd1=ndata/2;
	nd2=ndata/2;

	dat1   =  sf_complexalloc(nd1);
	dat2   =  sf_complexalloc(nd2);	

	for (id=0;id<nd1;id++) {
		dat1[id]=data[id];
		dat2[id]=data[id+nd1];
	}

	sf_cadjnull(adj, add, nb, ndata, bb, data);

	cicaf1_init(nx, xx_up,lag); 
	cicaf1_dw_init(nx, xx_dw,lag); 
	carray(  cicaf1_lop,   cicaf1_dw_lop, adj, add, nb, nd1, nd2, bb, dat1, dat2);
	//sf_array_simple(adj, add, nb, nd1, nd2, bb, dat1, dat2);

	if (!adj){
		for (id=0;id<nd1;id++) {
			data[id]=dat1[id];
			data[id+nd1]=dat2[id];
		}	
	}
}
示例#2
0
static void cexp(JF, js_Ast *exp)
{
	int then, end;
	int n;

	switch (exp->type) {
	case EXP_STRING: emitstring(J, F, OP_STRING, exp->string); break;
	case EXP_NUMBER: emitnumber(J, F, exp->number); break;
	case EXP_UNDEF: emit(J, F, OP_UNDEF); break;
	case EXP_NULL: emit(J, F, OP_NULL); break;
	case EXP_TRUE: emit(J, F, OP_TRUE); break;
	case EXP_FALSE: emit(J, F, OP_FALSE); break;
	case EXP_THIS: emit(J, F, OP_THIS); break;

	case EXP_REGEXP:
		emit(J, F, OP_NEWREGEXP);
		emitraw(J, F, addstring(J, F, exp->string));
		emitraw(J, F, exp->number);
		break;

	case EXP_OBJECT:
		emit(J, F, OP_NEWOBJECT);
		cobject(J, F, exp->a);
		break;

	case EXP_ARRAY:
		emit(J, F, OP_NEWARRAY);
		carray(J, F, exp->a);
		break;

	case EXP_FUN:
		emitfunction(J, F, newfun(J, exp->a, exp->b, exp->c, 0));
		break;

	case EXP_IDENTIFIER:
		emitlocal(J, F, OP_GETLOCAL, OP_GETVAR, exp);
		break;

	case EXP_INDEX:
		cexp(J, F, exp->a);
		cexp(J, F, exp->b);
		emit(J, F, OP_GETPROP);
		break;

	case EXP_MEMBER:
		cexp(J, F, exp->a);
		emitstring(J, F, OP_GETPROP_S, exp->b->string);
		break;

	case EXP_CALL:
		ccall(J, F, exp->a, exp->b);
		break;

	case EXP_NEW:
		cexp(J, F, exp->a);
		n = cargs(J, F, exp->b);
		emit(J, F, OP_NEW);
		emitraw(J, F, n);
		break;

	case EXP_DELETE:
		cdelete(J, F, exp->a);
		break;

	case EXP_PREINC:
		cassignop1(J, F, exp->a);
		emit(J, F, OP_INC);
		cassignop2(J, F, exp->a, 0);
		break;

	case EXP_PREDEC:
		cassignop1(J, F, exp->a);
		emit(J, F, OP_DEC);
		cassignop2(J, F, exp->a, 0);
		break;

	case EXP_POSTINC:
		cassignop1(J, F, exp->a);
		emit(J, F, OP_POSTINC);
		cassignop2(J, F, exp->a, 1);
		emit(J, F, OP_POP);
		break;

	case EXP_POSTDEC:
		cassignop1(J, F, exp->a);
		emit(J, F, OP_POSTDEC);
		cassignop2(J, F, exp->a, 1);
		emit(J, F, OP_POP);
		break;

	case EXP_VOID:
		cexp(J, F, exp->a);
		emit(J, F, OP_POP);
		emit(J, F, OP_UNDEF);
		break;

	case EXP_TYPEOF: ctypeof(J, F, exp->a); break;
	case EXP_POS: cunary(J, F, exp, OP_POS); break;
	case EXP_NEG: cunary(J, F, exp, OP_NEG); break;
	case EXP_BITNOT: cunary(J, F, exp, OP_BITNOT); break;
	case EXP_LOGNOT: cunary(J, F, exp, OP_LOGNOT); break;

	case EXP_BITOR: cbinary(J, F, exp, OP_BITOR); break;
	case EXP_BITXOR: cbinary(J, F, exp, OP_BITXOR); break;
	case EXP_BITAND: cbinary(J, F, exp, OP_BITAND); break;
	case EXP_EQ: cbinary(J, F, exp, OP_EQ); break;
	case EXP_NE: cbinary(J, F, exp, OP_NE); break;
	case EXP_STRICTEQ: cbinary(J, F, exp, OP_STRICTEQ); break;
	case EXP_STRICTNE: cbinary(J, F, exp, OP_STRICTNE); break;
	case EXP_LT: cbinary(J, F, exp, OP_LT); break;
	case EXP_GT: cbinary(J, F, exp, OP_GT); break;
	case EXP_LE: cbinary(J, F, exp, OP_LE); break;
	case EXP_GE: cbinary(J, F, exp, OP_GE); break;
	case EXP_INSTANCEOF: cbinary(J, F, exp, OP_INSTANCEOF); break;
	case EXP_IN: cbinary(J, F, exp, OP_IN); break;
	case EXP_SHL: cbinary(J, F, exp, OP_SHL); break;
	case EXP_SHR: cbinary(J, F, exp, OP_SHR); break;
	case EXP_USHR: cbinary(J, F, exp, OP_USHR); break;
	case EXP_ADD: cbinary(J, F, exp, OP_ADD); break;
	case EXP_SUB: cbinary(J, F, exp, OP_SUB); break;
	case EXP_MUL: cbinary(J, F, exp, OP_MUL); break;
	case EXP_DIV: cbinary(J, F, exp, OP_DIV); break;
	case EXP_MOD: cbinary(J, F, exp, OP_MOD); break;

	case EXP_ASS: cassign(J, F, exp); break;
	case EXP_ASS_MUL: cassignop(J, F, exp, OP_MUL); break;
	case EXP_ASS_DIV: cassignop(J, F, exp, OP_DIV); break;
	case EXP_ASS_MOD: cassignop(J, F, exp, OP_MOD); break;
	case EXP_ASS_ADD: cassignop(J, F, exp, OP_ADD); break;
	case EXP_ASS_SUB: cassignop(J, F, exp, OP_SUB); break;
	case EXP_ASS_SHL: cassignop(J, F, exp, OP_SHL); break;
	case EXP_ASS_SHR: cassignop(J, F, exp, OP_SHR); break;
	case EXP_ASS_USHR: cassignop(J, F, exp, OP_USHR); break;
	case EXP_ASS_BITAND: cassignop(J, F, exp, OP_BITAND); break;
	case EXP_ASS_BITXOR: cassignop(J, F, exp, OP_BITXOR); break;
	case EXP_ASS_BITOR: cassignop(J, F, exp, OP_BITOR); break;

	case EXP_COMMA:
		cexp(J, F, exp->a);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		break;

	case EXP_LOGOR:
		cexp(J, F, exp->a);
		emit(J, F, OP_DUP);
		end = emitjump(J, F, OP_JTRUE);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	case EXP_LOGAND:
		cexp(J, F, exp->a);
		emit(J, F, OP_DUP);
		end = emitjump(J, F, OP_JFALSE);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	case EXP_COND:
		cexp(J, F, exp->a);
		then = emitjump(J, F, OP_JTRUE);
		cexp(J, F, exp->c);
		end = emitjump(J, F, OP_JUMP);
		label(J, F, then);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	default:
		jsC_error(J, exp, "unknown expression: (%s)", jsP_aststring(exp->type));
	}
}
示例#3
0
文件: bake.cpp 项目: cheind/gpu-bake
 bool bakeTextureMap(const Surface &src, const Surface &target) {
     OCL ocl;
     if (!initOpenCL(ocl, 2)) {
         BAKE_LOG("Failed to initialize OpenCL.");
         return false;
     }
     
     SurfaceVolume sv;
     if (!buildSurfaceVolume(src, Eigen::Vector3i::Constant(64), sv)) {
         BAKE_LOG("Failed to create surface volume.");
         return false;
     }
     
     
     // Target
     
     cl_int err;
     
     cl::Buffer bTargetVertexPositions(ocl.ctx,
                                       CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                       target.vertexPositions.array().size() * sizeof(float),
                                       const_cast<float*>(target.vertexPositions.data()),
                                       &err);
     ASSERT_OPENCL(err, "Failed to create vertex buffer for target.");
     
     
     cl::Buffer bTargetVertexUVs(ocl.ctx,
                                 CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                 target.vertexUVs.array().size() * sizeof(float),
                                 const_cast<float*>(target.vertexUVs.data()), &err);
     ASSERT_OPENCL(err, "Failed to create UV buffer for target.");
     
     cl::Buffer bTargetVertexNormals(ocl.ctx,
                                     CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                     target.vertexNormals.array().size() * sizeof(float),
                                     const_cast<float*>(target.vertexNormals.data()), &err);
     ASSERT_OPENCL(err, "Failed to create normals buffer for target.");
     
     // Source
     
     cl::Buffer bSrcVertexPositions(ocl.ctx,
                                    CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                    src.vertexPositions.array().size() * sizeof(float),
                                    const_cast<float*>(src.vertexPositions.data()),
                                    &err);
     ASSERT_OPENCL(err, "Failed to create vertex buffer for source.");
     
     cl::Buffer bSrcVertexNormals(ocl.ctx,
                                  CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                  src.vertexNormals.array().size() * sizeof(float),
                                  const_cast<float*>(src.vertexNormals.data()), &err);
     ASSERT_OPENCL(err, "Failed to create normals buffer for source.");
     
     
     cl::Buffer bSrcVertexColors(ocl.ctx,
                                 CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                 src.vertexColors.array().size() * sizeof(float),
                                 const_cast<float*>(src.vertexColors.data()), &err);
     ASSERT_OPENCL(err, "Failed to create color buffer for source.");
     
     // Volume
     
     cl::Buffer bSrcVoxels(ocl.ctx,
                           CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                           (int)sv.cells.size() * sizeof(int),
                           const_cast<int*>(sv.cells.data()),
                           &err);
     ASSERT_OPENCL(err, "Failed to create voxel buffer for source.");
     
     cl::Buffer bSrcTrianglesInVoxels(ocl.ctx,
                                      CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                      (int)sv.triangleIndices.size() * sizeof(int),
                                      const_cast<int*>(sv.triangleIndices.data()),
                                      &err);
     ASSERT_OPENCL(err, "Failed to triangle index buffer for source.");
     
     float minmax[8] = {
         sv.bounds.min().x(), sv.bounds.min().y(), sv.bounds.min().z(), 0.f,
         sv.bounds.max().x(), sv.bounds.max().y(), sv.bounds.max().z(), 0.f,
     };
     
     cl_float4 voxelSizes = {{sv.voxelSizes.x(), sv.voxelSizes.y(), sv.voxelSizes.z(), 0}};
     cl_float4 invVoxelSizes = {{1.f / sv.voxelSizes.x(), 1.f / sv.voxelSizes.y(), 1.f / sv.voxelSizes.z(), 0}};
     cl_int4 voxelsPerDim = {{sv.voxelsPerDimension.x(), sv.voxelsPerDimension.y(), sv.voxelsPerDimension.z(), 0}};
     
     // Texture
     
     const int imagesize = 512;
     
     Image<unsigned char> texture(imagesize, imagesize, 3);
     texture.toOpenCV().setTo(0);
     
     cl::Image2D bTexture(ocl.ctx,
                          CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR,
                          cl::ImageFormat(CL_RGB, CL_UNORM_INT8),
                          imagesize, imagesize, 0, texture.row(0), &err);
     ASSERT_OPENCL(err, "Failed to create texture image.");
     
     int argc = 0;
     ocl.kBakeTexture.setArg(0, bTargetVertexPositions);
     ocl.kBakeTexture.setArg(1, bTargetVertexNormals);
     ocl.kBakeTexture.setArg(2, bTargetVertexUVs);
     ocl.kBakeTexture.setArg(3, bSrcVertexPositions);
     ocl.kBakeTexture.setArg(4, bSrcVertexNormals);
     ocl.kBakeTexture.setArg(5, bSrcVertexColors);
     ocl.kBakeTexture.setArg(6, bSrcVoxels);
     ocl.kBakeTexture.setArg(7, bSrcTrianglesInVoxels);
     ocl.kBakeTexture.setArg(8, carray(minmax, 8));
     ocl.kBakeTexture.setArg(9, sizeof(cl_float4), voxelSizes.s);
     ocl.kBakeTexture.setArg(10, sizeof(cl_float4), invVoxelSizes.s);
     ocl.kBakeTexture.setArg(11, sizeof(cl_int4), voxelsPerDim.s);
     ocl.kBakeTexture.setArg(12, bTexture);
     ocl.kBakeTexture.setArg(13, imagesize);
     ocl.kBakeTexture.setArg(14, 0.5f);
     ocl.kBakeTexture.setArg(15, (int)target.vertexPositions.cols()/3);
     
     int nTrianglesDivisableBy2 = target.vertexPositions.cols()/3 + (target.vertexPositions.cols()/3) % 2;
     
     err = ocl.q.enqueueNDRangeKernel(ocl.kBakeTexture, cl::NullRange, cl::NDRange(nTrianglesDivisableBy2), cl::NullRange);
     ASSERT_OPENCL(err, "Failed to run bake kernel.");
     
     cl::size_t<3> origin;
     origin.push_back(0);
     origin.push_back(0);
     origin.push_back(0);
     
     cl::size_t<3> region;
     region.push_back(imagesize);
     region.push_back(imagesize);
     region.push_back(1);
     
     err = ocl.q.enqueueReadImage(bTexture, false, origin, region, 0, 0, texture.row(0));
     ASSERT_OPENCL(err, "Failed to read image.");
     ocl.q.finish();
     
     cv::Mat m = texture.toOpenCV();
     cv::flip(m, m, 0);
     
     cv::imwrite("input.png", m);
     cv::imshow("test", m);
     cv::waitKey();
     
     
     return false;
 }