OWL
Loading...
Searching...
No Matches
RayGen.h
1// ======================================================================== //
2// Copyright 2019-2021 Ingo Wald //
3// //
4// Licensed under the Apache License, Version 2.0 (the "License"); //
5// you may not use this file except in compliance with the License. //
6// You may obtain a copy of the License at //
7// //
8// http://www.apache.org/licenses/LICENSE-2.0 //
9// //
10// Unless required by applicable law or agreed to in writing, software //
11// distributed under the License is distributed on an "AS IS" BASIS, //
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //
13// See the License for the specific language governing permissions and //
14// limitations under the License. //
15// ======================================================================== //
16
17#pragma once
18
19#include "SBTObject.h"
20#include "Module.h"
21#include "LaunchParams.h"
22
23namespace owl {
24
26 struct RayGenType : public SBTObjectType {
27 typedef std::shared_ptr<RayGenType> SP;
28
32 struct DeviceData : public RegisteredObject::DeviceData {
33 typedef std::shared_ptr<DeviceData> SP;
34
36 DeviceData(const DeviceContext::SP &device);
37
40 OptixProgramGroup pg = 0;
41 };
42
44 RayGenType(Context *const context,
45 Module::SP module,
46 const std::string &progName,
47 size_t varStructSize,
48 const std::vector<OWLVarDecl> &varDecls);
49
51 std::string toString() const override;
52
54 inline DeviceData &getDD(const DeviceContext::SP &device) const;
55
57 RegisteredObject::DeviceData::SP createOn(const DeviceContext::SP &device) override;
58
60 Module::SP module;
61
63 const std::string progName;
65 const std::string annotatedProgName;
66 };
67
70 struct RayGen : public SBTObject<RayGenType> {
71 typedef std::shared_ptr<RayGen> SP;
72
76 struct DeviceData : public RegisteredObject::DeviceData {
77 DeviceData(const DeviceContext::SP &device, size_t dataSize);
78
82
85 const size_t rayGenRecordSize;
86 };
87
89 RayGen(Context *const context,
90 RayGenType::SP type);
91
93 virtual ~RayGen();
94
96 std::string toString() const override;
97
100 void launch(const vec3i &dims);
101
105 void launchAsync(const vec3i &dims, const LaunchParams::SP &launchParams);
106
110 void launchAsyncOnDevice(const vec3i &dims,
111 uint32_t deviceID,
112 const LaunchParams::SP &launchParams);
113
116 void writeSBTRecord(uint8_t *const sbtRecord, const DeviceContext::SP &device);
117
119 RegisteredObject::DeviceData::SP createOn(const DeviceContext::SP &device) override;
120
122 inline DeviceData &getDD(const DeviceContext::SP &device) const;
123 };
124
125 // ------------------------------------------------------------------
126 // implementation section
127 // ------------------------------------------------------------------
128
131 RayGenType::getDD(const DeviceContext::SP &device) const
132 {
133 assert(device && device->ID >= 0 && device->ID < (int)deviceData.size());
134 return deviceData[device->ID]->as<RayGenType::DeviceData>();
135 }
136
138 inline RayGen::DeviceData &
139 RayGen::getDD(const DeviceContext::SP &device) const
140 {
141 assert(device && device->ID >= 0 && device->ID < (int)deviceData.size());
142 return deviceData[device->ID]->as<RayGen::DeviceData>();
143 }
144} // ::owl
145
Definition: Context.h:32
Definition: DeviceMemory.h:23
std::vector< DeviceData::SP > deviceData
Definition: Object.h:86
Definition: RayGen.h:32
OptixProgramGroup pg
Definition: RayGen.h:40
Definition: RayGen.h:26
const std::string annotatedProgName
Definition: RayGen.h:65
const std::string progName
Definition: RayGen.h:63
RegisteredObject::DeviceData::SP createOn(const DeviceContext::SP &device) override
Definition: RayGen.cpp:54
std::string toString() const override
Definition: RayGen.cpp:48
Module::SP module
Definition: RayGen.h:60
DeviceData & getDD(const DeviceContext::SP &device) const
Definition: RayGen.h:131
Definition: RayGen.h:76
DeviceMemory sbtRecordBuffer
Definition: RayGen.h:81
const size_t rayGenRecordSize
Definition: RayGen.h:85
Definition: RayGen.h:70
void writeSBTRecord(uint8_t *const sbtRecord, const DeviceContext::SP &device)
Definition: RayGen.cpp:112
void launch(const vec3i &dims)
Definition: RayGen.cpp:134
virtual ~RayGen()
Definition: RayGen.cpp:90
DeviceData & getDD(const DeviceContext::SP &device) const
Definition: RayGen.h:139
RegisteredObject::DeviceData::SP createOn(const DeviceContext::SP &device) override
Definition: RayGen.cpp:105
std::string toString() const override
Definition: RayGen.cpp:99
void launchAsync(const vec3i &dims, const LaunchParams::SP &launchParams)
Definition: RayGen.cpp:140
void launchAsyncOnDevice(const vec3i &dims, uint32_t deviceID, const LaunchParams::SP &launchParams)
Definition: RayGen.cpp:151
Definition: SBTObject.h:33
const std::vector< OWLVarDecl > varDecls
Definition: SBTObject.h:70
const size_t varStructSize
Definition: SBTObject.h:66
Definition: SBTObject.h:118
std::shared_ptr< RayGenType > const type
Definition: SBTObject.h:134