4 #ifndef vtkWebGPUComputePassTextureStorageInternals_h
5 #define vtkWebGPUComputePassTextureStorageInternals_h
18 #include <unordered_map>
19 #include <unordered_set>
21 VTK_ABI_NAMESPACE_BEGIN
209 void RebindTextureView(std::size_t group, uint32_t binding, std::size_t textureViewIndex);
225 void WriteTexture(std::size_t textureIndex,
const void* bytes, std::size_t numBytes)
232 const auto wgpuTexture = this->WebGPUTextures[textureIndex];
233 auto& texture = this->Textures[textureIndex];
235 if (numBytes > static_cast<std::size_t>(texture->GetByteSize()))
238 "The given data is larger than what the texture \""
239 << texture->GetLabel() <<
"\" with byte size: " << texture->GetByteSize());
245 const std::string textureLabel = texture->GetLabel();
246 const char* textureLabelCStr = textureLabel.c_str();
247 const uint32_t bytesPerRow = texture->GetBytesPerPixel() * texture->GetWidth();
248 this->ParentPassWGPUConfiguration->
WriteTexture(wgpuTexture, bytesPerRow, numBytes, bytes,
340 std::vector<vtkSmartPointer<vtkWebGPUComputeTexture>> Textures;
342 std::vector<vtkSmartPointer<vtkWebGPUComputeRenderTexture>> RenderTextures;
344 std::unordered_map<vtkSmartPointer<vtkWebGPUComputeRenderTexture>, wgpu::Texture>
345 RenderTexturesToWebGPUTexture;
347 std::vector<wgpu::Texture> WebGPUTextures;
351 std::unordered_map<vtkSmartPointer<vtkWebGPUComputeTexture>,
352 std::unordered_set<vtkSmartPointer<vtkWebGPUComputeTextureView>>>
353 ComputeTextureToViews;
356 std::vector<vtkSmartPointer<vtkWebGPUComputeTextureView>> TextureViews;
358 std::unordered_map<vtkSmartPointer<vtkWebGPUComputeTextureView>, wgpu::TextureView>
359 TextureViewsToWebGPUTextureViews;
362 VTK_ABI_NAMESPACE_END
static wgpu::TextureFormat ComputeTextureFormatToWebGPU(vtkWebGPUComputeTexture::TextureFormat format)
Internal method used to convert the user friendly TextureFormat enum to its wgpu::TextureFormat equiv...
void UpdateComputeTextureAndViews(vtkSmartPointer< vtkWebGPUComputeTexture > texture, wgpu::Texture newWgpuTexture)
Makes sure that the compute texture given in parameter internally points to the given newWgpuTexture...
void RecreateComputeTexture(std::size_t textureIndex)
Recreates a compute texture.
Internals of the vtkWebGPUComputePass.
std::function< void(const void *, int, void *)> TextureMapAsyncCallback
void ReleaseResources()
Releases the textures & resources held by this texture storage.
static wgpu::TextureAspect ComputeTextureViewAspectToWebGPU(vtkWebGPUComputeTextureView::TextureViewAspect aspect)
Internal method used to convert the user friendly TextureAspect enum to its wgpu::TextureAspect equiv...
vtkWebGPUComputePassTextureStorageInternals()=default
abstract base class for most VTK objects
void SetComputePass(vtkWeakPointer< vtkWebGPUComputePass > parentComputePass)
Sets the compute pass that uses the textures and texture views used by this storage.
void RecreateTexture(std::size_t textureIndex)
Destroys and recreates the texture with the given index.
TextureMode
How will the texture be used by the shader.
static wgpu::TextureSampleType ComputeTextureSampleTypeToWebGPU(vtkWebGPUComputeTexture::TextureSampleType sampleType)
Internal method used to convert the user friendly TextureSampleType enum to its wgpu::TextureSampleTy...
TextureViewAspect
What will the shader sample from the texture when calling a sampling function.
int AddTexture(vtkSmartPointer< vtkWebGPUComputeTexture > texture)
Adds a texture to the storage and upload its data to the device.
static vtkWebGPUComputePassTextureStorageInternals * New()
int AddTextureView(vtkSmartPointer< vtkWebGPUComputeTextureView > textureView)
Adds a texture view to the compute pass and returns its index.
void RecreateRenderTexture(vtkSmartPointer< vtkWebGPUComputeRenderTexture > renderTexture)
Recreates a render texture given a new textureView and possibly new parameters as specified in the 'r...
~vtkWebGPUComputePassTextureStorageInternals() override
vtkSmartPointer< vtkWebGPUComputeTextureView > GetTextureView(std::size_t textureViewIndex)
Retrieves the texture view associated with the given texture view index.
Hold a reference to a vtkObjectBase instance.
bool CheckParentComputePass(const std::string &callerFunctionName)
Checks whether or not the associated ParentComputePass and ParentPassDevice are non-null.
void RecreateTextureViews(std::size_t textureIndex)
Recreates all the texture views of a texture given its index.
void WriteTexture(wgpu::Texture texture, uint32_t bytesPerRow, uint32_t byteSize, const void *data, uint32_t srcOffset=0, wgpu::Origin3D dstOffset={0, 0, 0}, uint32_t dstMipLevel=0, const char *description=nullptr)
Upload byteSize of data from the data pointer to the given texture, assuming bytesPerRow bytes of dat...
wgpu::TextureView CreateWebGPUTextureView(vtkSmartPointer< vtkWebGPUComputeTextureView > textureView, wgpu::Texture wgpuTexture)
Utilitary method to create a wgpu::TextureView from a ComputeTextureView and the texture this wgpu::T...
bool CheckTextureIndex(std::size_t textureIndex, const std::string &callerFunctionName)
Checks if a given index is suitable for indexing this->Textures.
bool CheckTextureCorrectness(vtkWebGPUComputeTexture *texture)
Makes sure the texture is correct with regards to its properties (size, ...)
static wgpu::StorageTextureAccess ComputeTextureModeToShaderStorage(vtkWebGPUComputeTexture::TextureMode mode, const std::string &textureLabel)
Internal method used to get the StorageTextureAccess mode associated with a TextureMode.
void RebindTextureView(std::size_t group, uint32_t binding, std::size_t textureViewIndex)
This function allows the usage of multiple texture views on a single binding point (group / binding c...
#define vtkLog(verbosity_name, x)
Add to log given the verbosity level.
static wgpu::TextureUsage ComputeTextureModeToUsage(vtkWebGPUComputeTexture::TextureMode mode, const std::string &textureLabel)
Internal method used to convert the user friendly TextureMode enum to its wgpu::TextureUsage equivale...
vtkSmartPointer< vtkWebGPUComputeTextureView > CreateTextureView(std::size_t textureIndex)
Returns a new texture view on the given texture (given by the index) that can be configured and then ...
TextureFormat
RGBA8_UNORM: Uses RGB + alpha.
static wgpu::StorageTextureAccess ComputeTextureViewModeToShaderStorage(vtkWebGPUComputeTextureView::TextureViewMode mode, const std::string &textureViewLabel)
Internal method used to get the StorageTextureAccess mode associated with a TextureViewMode.
vtkSmartPointer< vtkWebGPUComputeTexture > GetComputeTexture(std::size_t textureIndex)
Retrieves the compute texture associated with the given texture index.
static wgpu::TextureDimension ComputeTextureDimensionToWebGPU(vtkWebGPUComputeTexture::TextureDimension dimension)
Internal method used to convert the user friendly Dimension enum to its wgpu::TextureDimension equiva...
TextureSampleType
Determines what kind of value is returned when reading from the texture in the compute shader...
TextureDimension
How the texture data is arranged.
bool CheckTextureViewIndex(std::size_t textureViewIndex, const std::string &callerFunctionName)
Checks if a given index is suitable for indexing this->TextureViews.
Create a webgpu device for use in rendering and compute pipelines.
Represents the set of parameters that will be used to create a compute shader texture on the device w...
This class manages the creation/deletion/recreation/ of compute textures used by a compute pass...
void ReadTextureFromGPU(std::size_t textureIndex, int mipLevel, vtkWebGPUComputePass::TextureMapAsyncCallback callback, void *userdata)
TextureViewMode
The mode of the texture view to define what operations will be doable on the texture in the shader...
static wgpu::TextureViewDimension ComputeTextureDimensionToViewDimension(vtkWebGPUComputeTexture::TextureDimension dimension)
This function does a simple mapping between the dimension of the texture (vtkWebGPUComputeTexture::Te...
bool CheckTextureViewCorrectness(vtkWebGPUComputeTextureView *textureView)
Makes sure the texture view is correct with regards to its properties (binding, group, ...)
void WriteTexture(std::size_t textureIndex, const void *bytes, std::size_t numBytes)
Uploads the given data to the texture starting at pixel (0, 0)
int AddRenderTexture(vtkSmartPointer< vtkWebGPUComputeRenderTexture > renderTexture)
Adds a render texture to the storage.
void RecreateTextureView(std::size_t textureViewIndex)
Recreates a compute texture view.
void DeleteTextureViews(std::size_t textureIndex)
Deletes all the texture views of a given texture (given by its index)
A compute pass is an abstraction for offloading computation from the CPU onto the GPU using WebGPU co...