diff options
Diffstat (limited to 'chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h')
-rw-r--r-- | chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h b/chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h index 41cdf6d30a0..5d049e8cf1d 100644 --- a/chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h +++ b/chromium/third_party/dawn/src/dawn_native/vulkan/TextureVk.h @@ -18,18 +18,39 @@ #include "dawn_native/Texture.h" #include "common/vulkan_platform.h" +#include "dawn_native/vulkan/ExternalHandle.h" #include "dawn_native/vulkan/MemoryAllocator.h" namespace dawn_native { namespace vulkan { + struct CommandRecordingContext; + struct ExternalImageDescriptor; + VkFormat VulkanImageFormat(dawn::TextureFormat format); - VkImageUsageFlags VulkanImageUsage(dawn::TextureUsageBit usage, const Format& format); + VkImageUsageFlags VulkanImageUsage(dawn::TextureUsage usage, const Format& format); VkSampleCountFlagBits VulkanSampleCount(uint32_t sampleCount); + MaybeError ValidateVulkanImageCanBeWrapped(const DeviceBase* device, + const TextureDescriptor* descriptor); + class Texture : public TextureBase { public: + enum class ExternalState { + InternalOnly, + PendingAcquire, + Acquired, + PendingRelease, + Released + }; + Texture(Device* device, const TextureDescriptor* descriptor); Texture(Device* device, const TextureDescriptor* descriptor, VkImage nativeImage); + Texture(Device* device, + const ExternalImageDescriptor* descriptor, + const TextureDescriptor* textureDescriptor, + VkSemaphore signalSemaphore, + VkDeviceMemory externalMemoryAllocation, + std::vector<VkSemaphore> waitSemaphores); ~Texture(); VkImage GetHandle() const; @@ -38,27 +59,37 @@ namespace dawn_native { namespace vulkan { // Transitions the texture to be used as `usage`, recording any necessary barrier in // `commands`. // TODO(cwallez@chromium.org): coalesce barriers and do them early when possible. - void TransitionUsageNow(VkCommandBuffer commands, dawn::TextureUsageBit usage); - void EnsureSubresourceContentInitialized(VkCommandBuffer commands, + void TransitionUsageNow(CommandRecordingContext* recordingContext, + dawn::TextureUsage usage); + void EnsureSubresourceContentInitialized(CommandRecordingContext* recordingContext, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount); + MaybeError SignalAndDestroy(VkSemaphore* outSignalSemaphore); + private: void DestroyImpl() override; - void ClearTexture(VkCommandBuffer commands, - uint32_t baseMipLevel, - uint32_t levelCount, - uint32_t baseArrayLayer, - uint32_t layerCount); + MaybeError ClearTexture(CommandRecordingContext* recordingContext, + uint32_t baseMipLevel, + uint32_t levelCount, + uint32_t baseArrayLayer, + uint32_t layerCount, + TextureBase::ClearValue); VkImage mHandle = VK_NULL_HANDLE; DeviceMemoryAllocation mMemoryAllocation; + VkDeviceMemory mExternalAllocation = VK_NULL_HANDLE; + + ExternalState mExternalState = ExternalState::InternalOnly; + ExternalState mLastExternalState = ExternalState::InternalOnly; + VkSemaphore mSignalSemaphore = VK_NULL_HANDLE; + std::vector<VkSemaphore> mWaitRequirements; // A usage of none will make sure the texture is transitioned before its first use as // required by the spec. - dawn::TextureUsageBit mLastUsage = dawn::TextureUsageBit::None; + dawn::TextureUsage mLastUsage = dawn::TextureUsage::None; }; class TextureView : public TextureViewBase { |