mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-19 01:46:35 +00:00
Implement External Texture Binding Functionality
Adds functionality to BindGroupLayout and BindGroup to allow GPUExternalTexture bindings. Bug: dawn:728 Change-Id: I651b28606dceda15f0a944711ddba639df77c1a3 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47381 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
a9e39e11a8
commit
39633e2da2
@@ -26,7 +26,6 @@
|
||||
#include <sstream>
|
||||
|
||||
namespace utils {
|
||||
|
||||
wgpu::ShaderModule CreateShaderModuleFromASM(const wgpu::Device& device, const char* source) {
|
||||
// Use SPIRV-Tools's C API to assemble the SPIR-V assembly text to binary. Because the types
|
||||
// aren't RAII, we don't return directly on success and instead always go through the code
|
||||
@@ -296,6 +295,19 @@ namespace utils {
|
||||
storageTexture.viewDimension = textureViewDimension;
|
||||
}
|
||||
|
||||
// ExternalTextureBindingLayout never contains data, so just make one that can be reused instead
|
||||
// of declaring a new one every time it's needed.
|
||||
wgpu::ExternalTextureBindingLayout kExternalTextureBindingLayout = {};
|
||||
|
||||
BindingLayoutEntryInitializationHelper::BindingLayoutEntryInitializationHelper(
|
||||
uint32_t entryBinding,
|
||||
wgpu::ShaderStage entryVisibility,
|
||||
wgpu::ExternalTextureBindingLayout* bindingLayout) {
|
||||
binding = entryBinding;
|
||||
visibility = entryVisibility;
|
||||
nextInChain = bindingLayout;
|
||||
}
|
||||
|
||||
BindingLayoutEntryInitializationHelper::BindingLayoutEntryInitializationHelper(
|
||||
const wgpu::BindGroupLayoutEntry& entry)
|
||||
: wgpu::BindGroupLayoutEntry(entry) {
|
||||
@@ -311,6 +323,13 @@ namespace utils {
|
||||
: binding(binding), textureView(textureView) {
|
||||
}
|
||||
|
||||
BindingInitializationHelper::BindingInitializationHelper(
|
||||
uint32_t binding,
|
||||
const wgpu::ExternalTexture& externalTexture)
|
||||
: binding(binding) {
|
||||
externalTextureBindingEntry.externalTexture = externalTexture;
|
||||
}
|
||||
|
||||
BindingInitializationHelper::BindingInitializationHelper(uint32_t binding,
|
||||
const wgpu::Buffer& buffer,
|
||||
uint64_t offset,
|
||||
@@ -327,6 +346,9 @@ namespace utils {
|
||||
result.buffer = buffer;
|
||||
result.offset = offset;
|
||||
result.size = size;
|
||||
if (externalTextureBindingEntry.externalTexture != nullptr) {
|
||||
result.nextInChain = &externalTextureBindingEntry;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -97,6 +97,8 @@ namespace utils {
|
||||
wgpu::PipelineLayout MakePipelineLayout(const wgpu::Device& device,
|
||||
std::vector<wgpu::BindGroupLayout> bgls);
|
||||
|
||||
extern wgpu::ExternalTextureBindingLayout kExternalTextureBindingLayout;
|
||||
|
||||
// Helpers to make creating bind group layouts look nicer:
|
||||
//
|
||||
// utils::MakeBindGroupLayout(device, {
|
||||
@@ -126,6 +128,9 @@ namespace utils {
|
||||
wgpu::StorageTextureAccess storageTextureAccess,
|
||||
wgpu::TextureFormat format,
|
||||
wgpu::TextureViewDimension viewDimension = wgpu::TextureViewDimension::e2D);
|
||||
BindingLayoutEntryInitializationHelper(uint32_t entryBinding,
|
||||
wgpu::ShaderStage entryVisibility,
|
||||
wgpu::ExternalTextureBindingLayout* bindingLayout);
|
||||
|
||||
BindingLayoutEntryInitializationHelper(const wgpu::BindGroupLayoutEntry& entry);
|
||||
};
|
||||
@@ -147,6 +152,7 @@ namespace utils {
|
||||
struct BindingInitializationHelper {
|
||||
BindingInitializationHelper(uint32_t binding, const wgpu::Sampler& sampler);
|
||||
BindingInitializationHelper(uint32_t binding, const wgpu::TextureView& textureView);
|
||||
BindingInitializationHelper(uint32_t binding, const wgpu::ExternalTexture& externalTexture);
|
||||
BindingInitializationHelper(uint32_t binding,
|
||||
const wgpu::Buffer& buffer,
|
||||
uint64_t offset = 0,
|
||||
@@ -158,6 +164,7 @@ namespace utils {
|
||||
wgpu::Sampler sampler;
|
||||
wgpu::TextureView textureView;
|
||||
wgpu::Buffer buffer;
|
||||
wgpu::ExternalTextureBindingEntry externalTextureBindingEntry;
|
||||
uint64_t offset = 0;
|
||||
uint64_t size = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user