File: MicrofacetAlbedoTables.cpp

package info (click to toggle)
ospray 3.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,048 kB
  • sloc: cpp: 80,569; ansic: 951; sh: 805; makefile: 170; python: 69
file content (81 lines) | stat: -rw-r--r-- 3,151 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "MicrofacetAlbedoTables.h"
#include "render/bsdfs/MicrofacetAlbedoTablesShared.h"
#ifndef OSPRAY_TARGET_SYCL
#include "render/bsdfs/MicrofacetAlbedoTables_ispc.h"
#else
namespace ispc {
void precomputeMicrofacetAlbedoTables(void *_tables);
}
#endif

namespace ospray {

MicrofacetAlbedoTables::MicrofacetAlbedoTables(api::ISPCDevice &device)
    : AddStructShared(device.getDRTDevice())
{
  albedo_dir = devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
      MICROFACET_ALBEDO_TABLE_SIZE * MICROFACET_ALBEDO_TABLE_SIZE);
  albedo_avg = devicert::make_buffer_shared_unique<float>(
      device.getDRTDevice(), MICROFACET_ALBEDO_TABLE_SIZE);

  dielectricAlbedo_dir =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);
  dielectricAlbedo_avg =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);

  dielectricRcpEtaAlbedo_dir =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);
  dielectricRcpEtaAlbedo_avg =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);

  dielectricReflectionAlbedo_dir =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);
  dielectricReflectionAlbedo_avg =
      devicert::make_buffer_shared_unique<float>(device.getDRTDevice(),
          MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE
              * MICROFACET_DIELECTRIC_ALBEDO_TABLE_SIZE);

  sheenAlbedo_dir = devicert::make_buffer_shared_unique<float>(
      device.getDRTDevice(),
      MICROFACET_SHEEN_ALBEDO_TABLE_SIZE * MICROFACET_SHEEN_ALBEDO_TABLE_SIZE);

  getSh()->albedo_dir = albedo_dir->data();
  getSh()->albedo_avg = albedo_avg->data();

  getSh()->dielectricAlbedo_dir = dielectricAlbedo_dir->data();
  getSh()->dielectricAlbedo_avg = dielectricAlbedo_avg->data();

  getSh()->dielectricRcpEtaAlbedo_dir = dielectricRcpEtaAlbedo_dir->data();
  getSh()->dielectricRcpEtaAlbedo_avg = dielectricRcpEtaAlbedo_avg->data();

  getSh()->dielectricReflectionAlbedo_dir =
      dielectricReflectionAlbedo_dir->data();
  getSh()->dielectricReflectionAlbedo_avg =
      dielectricReflectionAlbedo_avg->data();

  getSh()->sheenAlbedo_dir = sheenAlbedo_dir->data();

  // TODO: Could be a kernel dispatch for SYCL, right now it's run serially on
  // the host
  ispc::precomputeMicrofacetAlbedoTables(getSh());
}

std::string MicrofacetAlbedoTables::toString() const
{
  return "ospray::MicrofacetAlbedoTables";
}

} // namespace ospray