fix vector stuff
This commit is contained in:
parent
3dfc8d8ee2
commit
526590d244
15
TODO
15
TODO
@ -1,12 +1,3 @@
|
|||||||
- we need to have separate sources for scanlines and for other sources
|
|
||||||
|
|
||||||
name scanlines sources as "sl0" onwards
|
|
||||||
|
|
||||||
name regular sources as "s1" onwards
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- nip2-7.22.3 on Windows is not adding the path you load from to the set of
|
- nip2-7.22.3 on Windows is not adding the path you load from to the set of
|
||||||
paths to search, breaking demo2 for Hamish
|
paths to search, breaking demo2 for Hamish
|
||||||
@ -18,9 +9,13 @@
|
|||||||
|
|
||||||
- try using a smaller norm factor in nip2 for sep conv gen there?
|
- try using a smaller norm factor in nip2 for sep conv gen there?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- Lan's c4_stats.ws is broken, I guess due to vector stuff
|
- Lan's c4_stats.ws is broken, I guess due to vector stuff
|
||||||
|
|
||||||
- how much time are we spending setting sources by name, profile!
|
|
||||||
|
|
||||||
|
|
||||||
- maybe im_draw_smudge() is too slow :-( also, we had a sanity failure with
|
- maybe im_draw_smudge() is too slow :-( also, we had a sanity failure with
|
||||||
it, argh
|
it, argh
|
||||||
|
@ -356,7 +356,8 @@ im__init_programs( VipsVector *vectors[IM_BANDFMT_LAST],
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
v = vectors[fmt] =
|
v = vectors[fmt] =
|
||||||
vips_vector_new_ds( "binary arith", osize, isize );
|
vips_vector_new( "binary arith", osize );
|
||||||
|
vips_vector_source_name( v, "s1", isize );
|
||||||
vips_vector_source_name( v, "s2", isize );
|
vips_vector_source_name( v, "s2", isize );
|
||||||
|
|
||||||
vips_vector_temporary( v, "t1", osize );
|
vips_vector_temporary( v, "t1", osize );
|
||||||
|
@ -255,9 +255,7 @@ conv_compile_convolution_u8s16( Conv *conv )
|
|||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start with a single source scanline, we add more as we need them.
|
conv->convolve = v = vips_vector_new( "conv", 2 );
|
||||||
*/
|
|
||||||
conv->convolve = v = vips_vector_new_ds( "conv", 2, 1 );
|
|
||||||
|
|
||||||
/* The value we fetch from the image, the product with the matrix
|
/* The value we fetch from the image, the product with the matrix
|
||||||
* value, the accumulated sum.
|
* value, the accumulated sum.
|
||||||
@ -356,7 +354,8 @@ conv_compile_scale_s16u8( Conv *conv )
|
|||||||
mask->offset < SHRT_MIN )
|
mask->offset < SHRT_MIN )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
conv->clip = v = vips_vector_new_ds( "clip", 1, 2 );
|
conv->clip = v = vips_vector_new( "clip", 1 );
|
||||||
|
vips_vector_source_name( v, "s1", 2 );
|
||||||
|
|
||||||
TEMP( "t1", 2 );
|
TEMP( "t1", 2 );
|
||||||
TEMP( "t2", 2 );
|
TEMP( "t2", 2 );
|
||||||
|
@ -104,7 +104,7 @@ gboolean vips_vector_get_enabled( void );
|
|||||||
void vips_vector_set_enabled( gboolean enabled );
|
void vips_vector_set_enabled( gboolean enabled );
|
||||||
|
|
||||||
void vips_vector_free( VipsVector *vector );
|
void vips_vector_free( VipsVector *vector );
|
||||||
VipsVector *vips_vector_new_ds( const char *name, int size1, int size2 );
|
VipsVector *vips_vector_new( const char *name, int dsize );
|
||||||
|
|
||||||
void vips_vector_constant( VipsVector *vector,
|
void vips_vector_constant( VipsVector *vector,
|
||||||
char *name, int value, int size );
|
char *name, int value, int size );
|
||||||
|
@ -51,6 +51,8 @@
|
|||||||
#endif /*HAVE_CONFIG_H*/
|
#endif /*HAVE_CONFIG_H*/
|
||||||
#include <vips/intl.h>
|
#include <vips/intl.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <vips/vips.h>
|
#include <vips/vips.h>
|
||||||
#include <vips/vector.h>
|
#include <vips/vector.h>
|
||||||
|
|
||||||
@ -105,7 +107,7 @@ vips_vector_free( VipsVector *vector )
|
|||||||
}
|
}
|
||||||
|
|
||||||
VipsVector *
|
VipsVector *
|
||||||
vips_vector_new_ds( const char *name, int size1, int size2 )
|
vips_vector_new( const char *name, int dsize )
|
||||||
{
|
{
|
||||||
VipsVector *vector;
|
VipsVector *vector;
|
||||||
int i;
|
int i;
|
||||||
@ -131,15 +133,15 @@ vips_vector_new_ds( const char *name, int size1, int size2 )
|
|||||||
vector->compiled = FALSE;
|
vector->compiled = FALSE;
|
||||||
|
|
||||||
#ifdef HAVE_ORC
|
#ifdef HAVE_ORC
|
||||||
vector->program = orc_program_new_ds( size1, size2 );
|
vector->program = orc_program_new();
|
||||||
|
|
||||||
/* We always make s1 / d1
|
/* We always make d1, our callers make either a single point source, or
|
||||||
|
* for area ops, a set of scanlines.
|
||||||
*/
|
*/
|
||||||
vector->s[0] = orc_program_find_var_by_name( vector->program, "s1" );
|
vector->d1 = orc_program_add_destination( vector->program,
|
||||||
vector->d1 = orc_program_find_var_by_name( vector->program, "d1" );
|
dsize, "d1" );
|
||||||
#endif /*HAVE_ORC*/
|
|
||||||
vector->n_source += 1;
|
|
||||||
vector->n_destination += 1;
|
vector->n_destination += 1;
|
||||||
|
#endif /*HAVE_ORC*/
|
||||||
|
|
||||||
return( vector );
|
return( vector );
|
||||||
}
|
}
|
||||||
@ -256,8 +258,13 @@ vips_vector_full( VipsVector *vector )
|
|||||||
*/
|
*/
|
||||||
if( vector->n_constant > 16 - 2 )
|
if( vector->n_constant > 16 - 2 )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
if( vector->n_source + vector->n_scanline > 8 - 1 )
|
|
||||||
|
/* You can have 8 parameters, and d1 counts as one of them, so +1
|
||||||
|
* there.
|
||||||
|
*/
|
||||||
|
if( vector->n_source + vector->n_scanline + 1 > 7 )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
|
|
||||||
if( vector->n_instruction > 50 )
|
if( vector->n_instruction > 50 )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
|
|
||||||
@ -321,38 +328,35 @@ vips_executor_set_program( VipsExecutor *executor, VipsVector *vector, int n )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
vips_executor_set_scanline( VipsExecutor *executor, REGION *ir, int x, int y )
|
vips_executor_set_array( VipsExecutor *executor, int var, void *value )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ORC
|
#ifdef HAVE_ORC
|
||||||
|
if( var != -1 )
|
||||||
|
orc_executor_set_array( &executor->executor, var, value );
|
||||||
|
#endif /*HAVE_ORC*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vips_executor_set_scanline( VipsExecutor *executor, REGION *ir, int x, int y )
|
||||||
|
{
|
||||||
VipsVector *vector = executor->vector;
|
VipsVector *vector = executor->vector;
|
||||||
PEL *base = (PEL *) IM_REGION_ADDR( ir, x, y );
|
PEL *base = (PEL *) IM_REGION_ADDR( ir, x, y );
|
||||||
int lsk = IM_REGION_LSKIP( ir );
|
int lsk = IM_REGION_LSKIP( ir );
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for( i = 0; i < vector->n_scanline; i++ )
|
for( i = 0; i < vector->n_scanline; i++ ) {
|
||||||
orc_executor_set_array( &executor->executor,
|
vips_executor_set_array( executor,
|
||||||
vector->sl[i], base + vector->line[i] * lsk );
|
vector->sl[i], base + vector->line[i] * lsk );
|
||||||
#endif /*HAVE_ORC*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
vips_executor_set_destination( VipsExecutor *executor, void *value )
|
vips_executor_set_destination( VipsExecutor *executor, void *value )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ORC
|
|
||||||
VipsVector *vector = executor->vector;
|
VipsVector *vector = executor->vector;
|
||||||
|
|
||||||
orc_executor_set_array( &executor->executor, vector->d1, value );
|
vips_executor_set_array( executor, vector->d1, value );
|
||||||
#endif /*HAVE_ORC*/
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
vips_executor_set_array( VipsExecutor *executor, int var, void *value )
|
|
||||||
{
|
|
||||||
#ifdef HAVE_ORC
|
|
||||||
if( var != -1 )
|
|
||||||
orc_executor_set_array( &executor->executor, var, value );
|
|
||||||
#endif /*HAVE_ORC*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -45,8 +45,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
|
||||||
#define DEBUG
|
#define DEBUG
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@ -155,7 +155,7 @@ pass_compile_section( Morph *morph, int first, int *last )
|
|||||||
morph->n_pass += 1;
|
morph->n_pass += 1;
|
||||||
pass->first = first;
|
pass->first = first;
|
||||||
|
|
||||||
pass->vector = v = vips_vector_new_ds( "morph", 1, 1 );
|
pass->vector = v = vips_vector_new( "morph", 1 );
|
||||||
|
|
||||||
/* The value we fetch from the image, the accumulated sum.
|
/* The value we fetch from the image, the accumulated sum.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user