Skip to content

Commit 2d69442

Browse files
committed
finish pipeline debug
1 parent aee3643 commit 2d69442

File tree

4 files changed

+57
-58
lines changed

4 files changed

+57
-58
lines changed

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
44

55
[project]
66
name = "luisarender-python"
7-
version = "0.0.4"
7+
version = "0.0.5"
88
description = "A High-Performance Rendering Framework with Layered and Unified Interfaces on Stream Architectures"
99
readme = "README.md"
1010
authors = [

src/base/differentiation.cpp

+30-29
Original file line numberDiff line numberDiff line change
@@ -386,38 +386,39 @@ void Differentiation::add_geom_gradients(Float3 grad_v, Float3 grad_n, Float3 we
386386
return;
387387
};
388388
UInt real_grad_offset = gradient_offset-1;
389-
device_log("instance_id is {} grad {}",inst_id, real_grad_offset);
389+
//device_log("instance_id is {} grad {}",inst_id, real_grad_offset);
390390

391391
auto instance = pipeline().geometry()->instance(inst_id);
392392
auto triangle = pipeline().geometry()->triangle(instance, triangle_id);
393-
394-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 0).fetch_add(grad_v[0] * weight[0]);
395-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 1).fetch_add(grad_v[1] * weight[0]);
396-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 2).fetch_add(grad_v[2] * weight[0]);
397-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 3).fetch_add(grad_n[0] * weight[0]);
398-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 4).fetch_add(grad_n[1] * weight[0]);
399-
_grad_buffer.value()->atomic(gradient_offset + triangle.i0 * 8 + 5).fetch_add(grad_n[2] * weight[0]);
393+
//device_log("triangle {} {} {}",triangle.i0, triangle.i1,triangle.i2);
394+
395+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 0).fetch_add(grad_v[0] * weight[0]);
396+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 1).fetch_add(grad_v[1] * weight[0]);
397+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 2).fetch_add(grad_v[2] * weight[0]);
398+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 3).fetch_add(grad_n[0] * weight[0]);
399+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 4).fetch_add(grad_n[1] * weight[0]);
400+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i0 * 8 + 5).fetch_add(grad_n[2] * weight[0]);
400401

401-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 0).fetch_add(grad_v[0] * weight[1]);
402-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 1).fetch_add(grad_v[1] * weight[1]);
403-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 2).fetch_add(grad_v[2] * weight[1]);
404-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 3).fetch_add(grad_n[0] * weight[1]);
405-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 4).fetch_add(grad_n[1] * weight[1]);
406-
_grad_buffer.value()->atomic(gradient_offset + triangle.i1 * 8 + 5).fetch_add(grad_n[2] * weight[1]);
407-
408-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 0).fetch_add(grad_v[0] * weight[2]);
409-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 1).fetch_add(grad_v[1] * weight[2]);
410-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 2).fetch_add(grad_v[2] * weight[2]);
411-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 3).fetch_add(grad_n[0] * weight[2]);
412-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 4).fetch_add(grad_n[1] * weight[2]);
413-
_grad_buffer.value()->atomic(gradient_offset + triangle.i2 * 8 + 5).fetch_add(grad_n[2] * weight[2]);
402+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 0).fetch_add(grad_v[0] * weight[1]);
403+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 1).fetch_add(grad_v[1] * weight[1]);
404+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 2).fetch_add(grad_v[2] * weight[1]);
405+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 3).fetch_add(grad_n[0] * weight[1]);
406+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 4).fetch_add(grad_n[1] * weight[1]);
407+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i1 * 8 + 5).fetch_add(grad_n[2] * weight[1]);
408+
409+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 0).fetch_add(grad_v[0] * weight[2]);
410+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 1).fetch_add(grad_v[1] * weight[2]);
411+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 2).fetch_add(grad_v[2] * weight[2]);
412+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 3).fetch_add(grad_n[0] * weight[2]);
413+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 4).fetch_add(grad_n[1] * weight[2]);
414+
_grad_buffer.value()->atomic(real_grad_offset + triangle.i2 * 8 + 5).fetch_add(grad_n[2] * weight[2]);
414415

415-
for(uint i=0;i<6;i++)
416-
{
417-
_counter.value()->atomic(gradient_offset + triangle.i0 * 8 + i).fetch_add(UInt(1));
418-
_counter.value()->atomic(gradient_offset + triangle.i1 * 8 + i).fetch_add(UInt(1));
419-
_counter.value()->atomic(gradient_offset + triangle.i2 * 8 + i).fetch_add(UInt(1));
420-
}
416+
// for(uint i=0;i<6;i++)
417+
// {
418+
// _counter.value()->atomic(real_grad_offset + triangle.i0 * 8 + i).fetch_add(UInt(1));
419+
// _counter.value()->atomic(real_grad_offset + triangle.i1 * 8 + i).fetch_add(UInt(1));
420+
// _counter.value()->atomic(real_grad_offset + triangle.i2 * 8 + i).fetch_add(UInt(1));
421+
// }
421422
}
422423

423424
void Differentiation::step(CommandBuffer &command_buffer) noexcept {
@@ -548,11 +549,11 @@ std::tuple<luisa::vector<void *>, luisa::vector<void *>> Differentiation::get_gr
548549
}
549550
// apply geometry parameters
550551
for (auto &&p : _geometry_params) {
551-
auto param_offset = p.param_offset();
552+
auto grad_offset = p.gradient_buffer_offset();
552553
auto buffer_view = p.buffer();
553554
auto length = buffer_view.size();
554555
LUISA_INFO("here length is {}",length);
555-
auto geom_grad_buf_view = _param_grad_buffer->subview(param_offset, length);
556+
auto geom_grad_buf_view = _grad_buffer->subview(grad_offset, length);
556557
geom_res.push_back(reinterpret_cast<void*>(reinterpret_cast<uint64_t>(geom_grad_buf_view.native_handle())+geom_grad_buf_view.offset_bytes()));
557558
}
558559
return std::make_tuple(texture_res, geom_res);

src/integrators/megappm_diff.cpp

+25-27
Original file line numberDiff line numberDiff line change
@@ -1361,10 +1361,9 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
13611361
//path_size = depth;
13621362
auto wi = -ray->direction();
13631363
auto it = pipeline().geometry()->intersect(ray);
1364-
13651364
// miss
13661365
$if(!it->valid()) {
1367-
$if(photon_id_1d<1)
1366+
$if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon())
13681367
{
13691368
device_log("break it unvalid at size {} id {}", path_size, photon_id_1d);
13701369
device_log("ray {} {}", ray->origin(), ray->direction());
@@ -1373,14 +1372,12 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
13731372
};
13741373

13751374
$if(!it->shape().has_surface()) {
1376-
$if(photon_id_1d<1)
1375+
$if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon())
13771376
{
13781377
device_log("break it non surface {} ", photon_id_1d);
13791378
};
13801379
$break;
13811380
};
1382-
1383-
13841381
// generate uniform samples
13851382
auto u_lobe = sampler()->generate_1d();
13861383
auto u_bsdf = sampler()->generate_2d();
@@ -1444,7 +1441,6 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
14441441
auto grad_b = grad(bary).xy();
14451442
grad_bary += grad_b;
14461443
grad_beta += grad(beta_diff);
1447-
14481444
};
14491445
count_neighbors+=1;
14501446
};
@@ -1488,7 +1484,7 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
14881484
});
14891485
beta = zero_if_any_nan(beta);
14901486
$if(beta.all([](auto b) noexcept { return b <= 0.f; })) {
1491-
$if(photon_id_1d<1)
1487+
$if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon())
14921488
{
14931489
device_log("break beta negative {}",photon_id_1d);
14941490
};
@@ -1498,7 +1494,7 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
14981494
auto q = max(eta_scale, .05f);
14991495
$if(depth + 1u >= rr_depth) {
15001496
$if(q < rr_threshold & u_rr >= q) {
1501-
$if(photon_id_1d<1)
1497+
$if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon())
15021498
{
15031499
device_log("break rr {}",photon_id_1d);
15041500
};
@@ -1511,20 +1507,19 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
15111507
bary_coords[path_size] = it->bary_coord();
15121508
points[path_size] = it->p();
15131509
normals[path_size] = it->ng();
1514-
// $if(photon_id_1d<1)
1510+
// $if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon())
15151511
// {
15161512
// device_log("adding path size {} id is {}",path_size,photon_id_1d);
15171513
// };
15181514
path_size = path_size+1u;
15191515
};
1520-
$if(photon_id_1d<1){
1521-
device_log("path size is {} id is {}",path_size,photon_id_1d);
1522-
$for(i,path_size)
1523-
{
1524-
device_log("{} point {} normal {} eta {}, bary {}",i, points[i], normals[i], etas[i], bary_coords[i]);
1525-
};
1526-
EPSM_photon(path_size, points, normals, inst_ids, triangle_ids, bary_coords, etas, light_sample, grad_betas, grad_barys, mat_bary, mat_param);
1527-
};
1516+
// $if(photon_id_1d==node<MegakernelPhotonMappingDiff>()->debug_photon()){
1517+
// device_log("path size is {} id is {}",path_size,photon_id_1d);
1518+
// $for(i,path_size)
1519+
// {
1520+
// device_log("{} point {} normal {} eta {}, bary {}",i, points[i], normals[i], etas[i], bary_coords[i]);
1521+
// };
1522+
// };
15281523
// $if(path_size>=2u)
15291524
// {
15301525
// device_log("path size is {}",path_size);
@@ -1536,20 +1531,16 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
15361531
// return;
15371532
// EPSM_photon(path_size, points, normals, inst_ids, triangle_ids, bary_coords, etas, light_sample, grad_betas, grad_barys, mat_bary, mat_param);
15381533
// };
1539-
$if(tot_neighbors>0)
1534+
$if(photon_id_1d<node<MegakernelPhotonMappingDiff>()->debug_photon())
15401535
{
1541-
1536+
$if(path_size>=2&path_size<=4) {
1537+
EPSM_photon(path_size, points, normals, inst_ids, triangle_ids, bary_coords, etas, light_sample, grad_betas, grad_barys, mat_bary, mat_param);
1538+
};
15421539
};
15431540
}
15441541
void EPSM_photon(UInt path_size, ArrayFloat3<4> &points, ArrayFloat3<4> &normals, ArrayUInt<4> &inst_ids, ArrayUInt<4> &triangle_ids, ArrayFloat3<4> &bary_coords,
15451542
ArrayFloat<4> &etas, LightSampler::Sample &light_sample, ArrayFloat3<4> grad_beta, ArrayFloat2<4> grad_bary, ArrayFloat<8 * 8 * 2> &mat_bary, ArrayFloat3<8 * 4> &mat_param){
15461543
{
1547-
$if(path_size<2|path_size>4) {
1548-
return;
1549-
};
1550-
// Shared<float> *mat_bary = new Shared<float>(16*16);
1551-
// Shared<float3> *mat_param = new Shared<float3>(32);
1552-
15531544
auto locate = [&](UInt i, UInt j) {
15541545
return (i<<4|j);
15551546
};
@@ -1618,8 +1609,11 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
16181609
tmp[i] -= grad_bary[j][0] * mat_bary[locate_adj(j * 2, i)] + grad_bary[j][1] * mat_bary[locate_adj(j * 2 + 1, i)];
16191610
};
16201611
};
1621-
$for (i,8) {
1622-
device_log("mat_param {} {} {} {}",mat_param[i*4+0],mat_param[i*4+1],mat_param[i*4+2],mat_param[i*4+3]);
1612+
$if(node<MegakernelPhotonMappingDiff>()->debug())
1613+
{
1614+
$for (i,8) {
1615+
device_log("mat_param {} {} {} {}",mat_param[i*4+0],mat_param[i*4+1],mat_param[i*4+2],mat_param[i*4+3]);
1616+
};
16231617
};
16241618
$for(i, n/2) {
16251619
Float3 grad_vertex = make_float3(0.0f), grad_normal = make_float3(0.0f);
@@ -1631,6 +1625,10 @@ class MegakernelPhotonMappingDiffInstance : public DifferentiableIntegrator::Ins
16311625
$if(i<n/2-2){
16321626
grad_vertex += tmp[i*2+2]*mat_param[((i*2+2)<<2)] + tmp[i*2+3]*mat_param[((i*2+3)<<2)];
16331627
};
1628+
$if(node<MegakernelPhotonMappingDiff>()->debug())
1629+
{
1630+
device_log("grad_vertex {} grad_normal {}",grad_vertex, grad_normal);
1631+
};
16341632
$if(inst_ids[i]==0)
16351633
{
16361634
pipeline().differentiation()->add_geom_gradients(grad_vertex, grad_normal, bary_coords[i], inst_ids[i], triangle_ids[i]);

src/tests/test_ad_torch.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def torch_ensure_grad_shape(a, b):
138138
tex_grad, geom_grad = luisarender.get_gradients()
139139
geom_grad_torch = cu_device_ptr_to_torch_tensor(geom_grad[0], vertex_pos.shape, dtype=cupy.float32)
140140
print(loss, torch.max(geom_grad_torch), torch.min(geom_grad_torch), geom_grad_torch.shape)
141-
exit()
141+
#exit()
142142
luisarender.update_scene([x])
143143

144144
#exit()

0 commit comments

Comments
 (0)