improved texture usage:
* use explicit extrapolation only for sub-matrixes * use built-in interpolation for INTER_NEAREST mode
This commit is contained in:
parent
241cc417f9
commit
d1f6a23abf
@ -220,17 +220,21 @@ namespace cv { namespace gpu { namespace device
|
|||||||
{ \
|
{ \
|
||||||
const dim3 block(32, 8); \
|
const dim3 block(32, 8); \
|
||||||
const dim3 grid(divUp(dst.cols, block.x), divUp(dst.rows, block.y)); \
|
const dim3 grid(divUp(dst.cols, block.x), divUp(dst.rows, block.y)); \
|
||||||
bindTexture(&tex_resize_ ## type, srcWhole); \
|
if (srcWhole.data == src.data) \
|
||||||
tex_resize_ ## type ## _reader texSrc; \
|
|
||||||
texSrc.xoff = xoff; \
|
|
||||||
texSrc.yoff = yoff; \
|
|
||||||
if (srcWhole.cols == src.cols && srcWhole.rows == src.rows) \
|
|
||||||
{ \
|
{ \
|
||||||
|
bindTexture(&tex_resize_ ## type, src); \
|
||||||
|
tex_resize_ ## type ## _reader texSrc; \
|
||||||
|
texSrc.xoff = 0; \
|
||||||
|
texSrc.yoff = 0; \
|
||||||
Filter<tex_resize_ ## type ## _reader> filteredSrc(texSrc); \
|
Filter<tex_resize_ ## type ## _reader> filteredSrc(texSrc); \
|
||||||
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
|
bindTexture(&tex_resize_ ## type, srcWhole); \
|
||||||
|
tex_resize_ ## type ## _reader texSrc; \
|
||||||
|
texSrc.xoff = xoff; \
|
||||||
|
texSrc.yoff = yoff; \
|
||||||
BrdReplicate< type > brd(src.rows, src.cols); \
|
BrdReplicate< type > brd(src.rows, src.cols); \
|
||||||
BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > brdSrc(texSrc, brd); \
|
BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > brdSrc(texSrc, brd); \
|
||||||
Filter< BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > > filteredSrc(brdSrc); \
|
Filter< BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > > filteredSrc(brdSrc); \
|
||||||
@ -250,18 +254,7 @@ namespace cv { namespace gpu { namespace device
|
|||||||
tex_resize_ ## type ## _reader texSrc; \
|
tex_resize_ ## type ## _reader texSrc; \
|
||||||
texSrc.xoff = xoff; \
|
texSrc.xoff = xoff; \
|
||||||
texSrc.yoff = yoff; \
|
texSrc.yoff = yoff; \
|
||||||
if (srcWhole.cols == src.cols && srcWhole.rows == src.rows) \
|
resize<<<grid, block>>>(texSrc, fx, fy, dst); \
|
||||||
{ \
|
|
||||||
PointFilter<tex_resize_ ## type ## _reader> filteredSrc(texSrc); \
|
|
||||||
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
|
||||||
} \
|
|
||||||
else \
|
|
||||||
{ \
|
|
||||||
BrdReplicate< type > brd(src.rows, src.cols); \
|
|
||||||
BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > brdSrc(texSrc, brd); \
|
|
||||||
PointFilter< BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > > filteredSrc(brdSrc); \
|
|
||||||
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
|
||||||
} \
|
|
||||||
cudaSafeCall( cudaGetLastError() ); \
|
cudaSafeCall( cudaGetLastError() ); \
|
||||||
cudaSafeCall( cudaDeviceSynchronize() ); \
|
cudaSafeCall( cudaDeviceSynchronize() ); \
|
||||||
} \
|
} \
|
||||||
@ -272,17 +265,21 @@ namespace cv { namespace gpu { namespace device
|
|||||||
{ \
|
{ \
|
||||||
const dim3 block(32, 8); \
|
const dim3 block(32, 8); \
|
||||||
const dim3 grid(divUp(dst.cols, block.x), divUp(dst.rows, block.y)); \
|
const dim3 grid(divUp(dst.cols, block.x), divUp(dst.rows, block.y)); \
|
||||||
bindTexture(&tex_resize_ ## type, srcWhole); \
|
if (srcWhole.data == src.data) \
|
||||||
tex_resize_ ## type ## _reader texSrc; \
|
|
||||||
texSrc.xoff = xoff; \
|
|
||||||
texSrc.yoff = yoff; \
|
|
||||||
if (srcWhole.cols == src.cols && srcWhole.rows == src.rows) \
|
|
||||||
{ \
|
{ \
|
||||||
|
bindTexture(&tex_resize_ ## type, src); \
|
||||||
|
tex_resize_ ## type ## _reader texSrc; \
|
||||||
|
texSrc.xoff = 0; \
|
||||||
|
texSrc.yoff = 0; \
|
||||||
LinearFilter<tex_resize_ ## type ## _reader> filteredSrc(texSrc); \
|
LinearFilter<tex_resize_ ## type ## _reader> filteredSrc(texSrc); \
|
||||||
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
resize<<<grid, block>>>(filteredSrc, fx, fy, dst); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
|
bindTexture(&tex_resize_ ## type, srcWhole); \
|
||||||
|
tex_resize_ ## type ## _reader texSrc; \
|
||||||
|
texSrc.xoff = xoff; \
|
||||||
|
texSrc.yoff = yoff; \
|
||||||
BrdReplicate< type > brd(src.rows, src.cols); \
|
BrdReplicate< type > brd(src.rows, src.cols); \
|
||||||
BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > brdSrc(texSrc, brd); \
|
BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > brdSrc(texSrc, brd); \
|
||||||
LinearFilter< BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > > filteredSrc(brdSrc); \
|
LinearFilter< BorderReader<tex_resize_ ## type ## _reader, BrdReplicate< type > > > filteredSrc(brdSrc); \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user