diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 2708b0fe084..cf485bf476a 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -191,8 +191,10 @@ set(VULKAN_SRC vulkan/vk_batch.cc vulkan/vk_context.cc vulkan/vk_drawlist.cc + vulkan/vk_fence.cc vulkan/vk_framebuffer.cc vulkan/vk_index_buffer.cc + vulkan/vk_pixel_buffer.cc vulkan/vk_query.cc vulkan/vk_shader.cc vulkan/vk_storage_buffer.cc @@ -204,8 +206,10 @@ set(VULKAN_SRC vulkan/vk_batch.hh vulkan/vk_context.hh vulkan/vk_drawlist.hh + vulkan/vk_fence.hh vulkan/vk_framebuffer.hh vulkan/vk_index_buffer.hh + vulkan/vk_pixel_buffer.hh vulkan/vk_query.hh vulkan/vk_shader.hh vulkan/vk_storage_buffer.hh diff --git a/source/blender/gpu/vulkan/vk_backend.cc b/source/blender/gpu/vulkan/vk_backend.cc index 7e8d08f9ca9..b0212012fdf 100644 --- a/source/blender/gpu/vulkan/vk_backend.cc +++ b/source/blender/gpu/vulkan/vk_backend.cc @@ -10,8 +10,10 @@ #include "vk_batch.hh" #include "vk_context.hh" #include "vk_drawlist.hh" +#include "vk_fence.hh" #include "vk_framebuffer.hh" #include "vk_index_buffer.hh" +#include "vk_pixel_buffer.hh" #include "vk_query.hh" #include "vk_shader.hh" #include "vk_storage_buffer.hh" @@ -80,6 +82,11 @@ DrawList *VKBackend::drawlist_alloc(int /*list_length*/) return new VKDrawList(); } +Fence *VKBackend::fence_alloc() +{ + return new VKFence(); +} + FrameBuffer *VKBackend::framebuffer_alloc(const char *name) { return new VKFrameBuffer(name); @@ -90,6 +97,11 @@ IndexBuf *VKBackend::indexbuf_alloc() return new VKIndexBuffer(); } +PixelBuffer *VKBackend::pixelbuf_alloc(uint size) +{ + return new VKPixelBuffer(size); +} + QueryPool *VKBackend::querypool_alloc() { return new VKQueryPool(); diff --git a/source/blender/gpu/vulkan/vk_backend.hh b/source/blender/gpu/vulkan/vk_backend.hh index 55b528bfa00..c78788298a5 100644 --- a/source/blender/gpu/vulkan/vk_backend.hh +++ b/source/blender/gpu/vulkan/vk_backend.hh @@ -33,8 +33,10 @@ class VKBackend : public GPUBackend { Batch *batch_alloc() override; DrawList *drawlist_alloc(int list_length) override; + Fence *fence_alloc() override; FrameBuffer *framebuffer_alloc(const char *name) override; IndexBuf *indexbuf_alloc() override; + PixelBuffer *pixelbuf_alloc(uint size) override; QueryPool *querypool_alloc() override; Shader *shader_alloc(const char *name) override; Texture *texture_alloc(const char *name) override; diff --git a/source/blender/gpu/vulkan/vk_fence.cc b/source/blender/gpu/vulkan/vk_fence.cc new file mode 100644 index 00000000000..3acd94d3050 --- /dev/null +++ b/source/blender/gpu/vulkan/vk_fence.cc @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2022 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#include "vk_fence.hh" + +namespace blender::gpu { + +void VKFence::signal() +{ +} + +void VKFence::wait() +{ +} + +} // namespace blender::gpu \ No newline at end of file diff --git a/source/blender/gpu/vulkan/vk_fence.hh b/source/blender/gpu/vulkan/vk_fence.hh new file mode 100644 index 00000000000..ff382ae54e3 --- /dev/null +++ b/source/blender/gpu/vulkan/vk_fence.hh @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2022 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#pragma once + +#include "gpu_state_private.hh" + +namespace blender::gpu { + +class VKFence : public Fence { + public: + void signal() override; + void wait() override; +}; + +} // namespace blender::gpu \ No newline at end of file diff --git a/source/blender/gpu/vulkan/vk_pixel_buffer.cc b/source/blender/gpu/vulkan/vk_pixel_buffer.cc new file mode 100644 index 00000000000..65780778d59 --- /dev/null +++ b/source/blender/gpu/vulkan/vk_pixel_buffer.cc @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2022 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#include "vk_pixel_buffer.hh" + +namespace blender::gpu { + +VKPixelBuffer::VKPixelBuffer(int64_t size): PixelBuffer(size) +{ +} + +void *VKPixelBuffer::map() +{ + return nullptr; +} + +void VKPixelBuffer::unmap() +{ +} + +int64_t VKPixelBuffer::get_native_handle() +{ + return -1; +} + +uint VKPixelBuffer::get_size() +{ + return size_; +} + +} // namespace blender::gpu \ No newline at end of file diff --git a/source/blender/gpu/vulkan/vk_pixel_buffer.hh b/source/blender/gpu/vulkan/vk_pixel_buffer.hh new file mode 100644 index 00000000000..8ba8243428f --- /dev/null +++ b/source/blender/gpu/vulkan/vk_pixel_buffer.hh @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2022 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup gpu + */ + +#pragma once + +#include "gpu_texture_private.hh" + +namespace blender::gpu { + +class VKPixelBuffer : public PixelBuffer { + public: + VKPixelBuffer(int64_t size); + void *map() override; + void unmap() override; + int64_t get_native_handle() override; + uint get_size() override; +}; + +} // namespace blender::gpu \ No newline at end of file diff --git a/source/blender/gpu/vulkan/vk_texture.cc b/source/blender/gpu/vulkan/vk_texture.cc index ea5379e6572..a6c59ea35af 100644 --- a/source/blender/gpu/vulkan/vk_texture.cc +++ b/source/blender/gpu/vulkan/vk_texture.cc @@ -46,6 +46,13 @@ void VKTexture::update_sub(int /*mip*/, { } +void VKTexture::update_sub(int /*offset*/[3], + int /*extent*/[3], + eGPUDataFormat /*format*/, + GPUPixelBuffer * /*pixbuf*/) +{ +} + /* TODO(fclem): Legacy. Should be removed at some point. */ uint VKTexture::gl_bindcode_get() const { diff --git a/source/blender/gpu/vulkan/vk_texture.hh b/source/blender/gpu/vulkan/vk_texture.hh index 93094b7e540..fd38cf403e2 100644 --- a/source/blender/gpu/vulkan/vk_texture.hh +++ b/source/blender/gpu/vulkan/vk_texture.hh @@ -26,6 +26,10 @@ class VKTexture : public Texture { void *read(int mip, eGPUDataFormat format) override; void update_sub( int mip, int offset[3], int extent[3], eGPUDataFormat format, const void *data) override; + void update_sub(int offset[3], + int extent[3], + eGPUDataFormat format, + GPUPixelBuffer *pixbuf) override; /* TODO(fclem): Legacy. Should be removed at some point. */ uint gl_bindcode_get() const override;