minor TensorAccessor cleanup

This commit is contained in:
Attila Afra
2025-12-09 21:31:52 +02:00
parent d19c91d709
commit d24a560d4b
2 changed files with 28 additions and 12 deletions
+3 -3
View File
@@ -42,7 +42,7 @@ OIDN_NAMESPACE_BEGIN
{
if (layout != TensorLayout::x || dataType != DataTypeOf<T>::value)
throw std::logic_error("incompatible tensor accessor");
return TensorAccessor1D<T>(getPtr(), getPaddedX());
return TensorAccessor1D<T>(getPtr(), getDesc());
}
template<typename T, TensorLayout accessorLayout>
@@ -50,7 +50,7 @@ OIDN_NAMESPACE_BEGIN
{
if (layout != accessorLayout || dataType != DataTypeOf<T>::value)
throw std::logic_error("incompatible tensor accessor");
return TensorAccessor3D<T, accessorLayout>(getPtr(), getPaddedC(), getH(), getW());
return TensorAccessor3D<T, accessorLayout>(getPtr(), getDesc());
}
template<typename T, TensorLayout accessorLayout>
@@ -58,7 +58,7 @@ OIDN_NAMESPACE_BEGIN
{
if (layout != accessorLayout || dataType != DataTypeOf<T>::value)
throw std::logic_error("incompatible tensor accessor");
return TensorAccessor4D<T, accessorLayout>(getPtr(), getPaddedO(), getPaddedI(), getH(), getW());
return TensorAccessor4D<T, accessorLayout>(getPtr(), getDesc());
}
operator ispc::TensorAccessor1D();
+25 -9
View File
@@ -3,7 +3,7 @@
#pragma once
#include "tensor_layout.h"
#include "tensor_desc.h"
#include "vec.h"
// ISPC forward declarations
@@ -25,9 +25,12 @@ OIDN_NAMESPACE_BEGIN
TensorAccessor1D() = default;
oidn_host_device_inline TensorAccessor1D(oidn_global void* data, int X)
oidn_host_device_inline TensorAccessor1D(oidn_global void* data, const TensorDesc& desc)
: ptr(static_cast<oidn_global char*>(data)),
X(X) {}
X(desc.getPaddedX())
{
assert(desc.getRank() == 1);
}
oidn_host_device_inline oidn_global T& operator ()(int x) const
{
@@ -44,9 +47,15 @@ OIDN_NAMESPACE_BEGIN
TensorAccessor3D() = default;
oidn_host_device_inline TensorAccessor3D(oidn_global void* data, int C, int H, int W)
: getByteOffset(C, H, W),
ptr(static_cast<oidn_global char*>(data)), C(C), H(H), W(W) {}
oidn_host_device_inline TensorAccessor3D(oidn_global void* data, const TensorDesc& desc)
: getByteOffset(desc.getPaddedC(), desc.getH(), desc.getW()),
ptr(static_cast<oidn_global char*>(data)),
C(desc.getPaddedC()),
H(desc.getH()),
W(desc.getW())
{
assert(desc.getRank() == 3);
}
oidn_host_device_inline oidn_global T& operator ()(int c, int h, int w) const
{
@@ -77,9 +86,16 @@ OIDN_NAMESPACE_BEGIN
TensorAccessor4D() = default;
oidn_host_device_inline TensorAccessor4D(oidn_global void* data, int O, int I, int H, int W)
: getByteOffset(O, I, H, W),
ptr(static_cast<oidn_global char*>(data)), O(O), I(I), H(H), W(W) {}
oidn_host_device_inline TensorAccessor4D(oidn_global void* data, const TensorDesc& desc)
: getByteOffset(desc.getPaddedO(), desc.getPaddedI(), desc.getH(), desc.getW()),
ptr(static_cast<oidn_global char*>(data)),
O(desc.getPaddedO()),
I(desc.getPaddedI()),
H(desc.getH()),
W(desc.getW())
{
assert(desc.getRank() == 4);
}
oidn_host_device_inline oidn_global T& operator ()(int o, int i, int h, int w) const
{