Skip to content

Commit 0e17e5e

Browse files
committed
wrong answer with no speed up,abort.
1 parent 629ea67 commit 0e17e5e

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

Model.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ void Model::RTPrepare()
392392
for (Vertex &v : borders)
393393
bboxs.push_back(v + position);
394394
newparts.clear();
395-
int cur = 0;
395+
ampparts.clear();
396+
396397
vector<ampTri> tpart;
397398
vector<Triangle> tmppart;
398399
for (vector<Triangle> &part : parts)
@@ -410,11 +411,11 @@ void Model::RTPrepare()
410411
tpart.push_back(newt);
411412
}
412413
newparts.push_back(move(tmppart));
413-
tmppart.reserve(2000);
414+
tmppart.reserve(3000);
414415

415416
tpart.shrink_to_fit();
416-
gpuParts[cur++] = array_view<const ampTri, 1>(tpart.size(), tpart);
417-
tpart.clear();
417+
ampparts.push_back(move(tpart));
418+
tpart.reserve(3000);
418419
}
419420

420421

@@ -438,10 +439,7 @@ HitRes Model::intersect(const Ray &ray, const HitRes &hr, const float min)
438439

439440
ampRes ampres[5000];
440441
float resdis[5000];
441-
array_view<ampRes, 1> ares(4000, ampres);
442-
array_view<float, 1> adis(4000, resdis);
443-
ares.discard_data(); adis.discard_data();
444-
442+
445443
ans = hr.distance;
446444
int objpart = -1;
447445
Triangle *objt = nullptr;
@@ -450,30 +448,33 @@ HitRes Model::intersect(const Ray &ray, const HitRes &hr, const float min)
450448
if (BorderTest(ray, bboxs[a * 2], bboxs[a * 2 + 1]) < hr.distance)
451449
{
452450
size_t size = newparts[a].size();
453-
454-
parallel_for_each(gpuParts[a].extent, [=](index<1> idx) restrict(amp)
451+
array_view<ampRes, 1> ares(4000, ampres);
452+
array_view<float, 1> adis(4000, resdis);
453+
ares.discard_data(); adis.discard_data();
454+
array_view<ampTri, 1> apart(size, ampparts[a]);
455+
parallel_for_each(apart.extent, [=](index<1> idx) restrict(amp)
455456
{
456-
VEC3 tmp1 = ampray.dir * gpuParts[a][idx].v;
457-
float tmpa = gpuParts[a][idx].u & tmp1;
457+
VEC3 tmp1 = ampray.dir * apart[idx].v;
458+
float tmpa = apart[idx].u & tmp1;
458459
if (fast_math::fabs(tmpa) < 1e-6f)
459460
{
460461
adis[idx] = 1e20f; return;
461462
}
462463
float f = 1 / a;
463-
VEC3 t2r = ampray.ori - gpuParts[a][idx].p0;
464+
VEC3 t2r = ampray.ori - apart[idx].p0;
464465
float u = (t2r & tmp1) * f;
465466
if (u < 0.0f || u > 1.0f)
466467
{
467468
adis[idx] = 1e20f; return;
468469
}
469-
VEC3 tmp2 = t2r * gpuParts[a][idx].u;
470+
VEC3 tmp2 = t2r * apart[idx].u;
470471
float v = (ampray.dir & tmp2) * f,
471472
duv = 1 - u - v;
472473
if (v < 0.0f || duv < 0.0f)
473474
{
474475
adis[idx] = 1e20f; return;
475476
}
476-
float t = (gpuParts[a][idx].v & tmp2) * f;
477+
float t = (apart[idx].v & tmp2) * f;
477478
if (t > 1e-5f)
478479
{
479480
ares[idx].u = u, ares[idx].v = v;

Model.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Model : public DrawObject
3535
vector<Coord2D> txcs;
3636
vector<vector<Triangle>> parts;
3737
vector<vector<Triangle>> newparts;
38-
array_view<const ampTri, 1> gpuParts[64];
38+
vector<vector<ampTri>> ampparts;
3939
vector<Vertex> borders;
4040
vector<Vertex> bboxs;
4141
vector<Material> mtls;

0 commit comments

Comments
 (0)