Browse Source

constify vulkan device handle, use default local vulkan device if not specified

tags/20190320
nihui 7 years ago
parent
commit
b49cb56ad9
6 changed files with 36 additions and 19 deletions
  1. +3
    -3
      src/command.cpp
  2. +4
    -4
      src/command.h
  3. +1
    -1
      src/layer.cpp
  4. +1
    -0
      src/layer/concat.cpp
  5. +24
    -9
      src/net.cpp
  6. +3
    -2
      src/net.h

+ 3
- 3
src/command.cpp View File

@@ -20,7 +20,7 @@

namespace ncnn {

Command::Command(VulkanDevice* _vkdev, uint32_t _queue_index) : vkdev(_vkdev), queue_index(_queue_index)
Command::Command(const VulkanDevice* _vkdev, uint32_t _queue_index) : vkdev(_vkdev), queue_index(_queue_index)
{
// get queue
vkGetDeviceQueue(vkdev->vkdevice(), queue_index, 0, &queue);
@@ -161,7 +161,7 @@ int Command::wait_fence()
return 0;
}

VkCompute::VkCompute(VulkanDevice* _vkdev) : Command(_vkdev, _vkdev->info.compute_queue_index)
VkCompute::VkCompute(const VulkanDevice* _vkdev) : Command(_vkdev, _vkdev->info.compute_queue_index)
{
if (vkdev->info.support_VK_KHR_push_descriptor)
{
@@ -701,7 +701,7 @@ void VkCompute::transfer_transfer_barrier(VkBuffer buffer, size_t offset, size_t
vkCmdPipelineBarrier(command_buffer, srcStageMask, dstStageMask, 0, 0, 0, 1, &bufferBarrier, 0, 0);
}

VkTransfer::VkTransfer(VulkanDevice* _vkdev) : Command(_vkdev, _vkdev->info.transfer_queue_index)
VkTransfer::VkTransfer(const VulkanDevice* _vkdev) : Command(_vkdev, _vkdev->info.transfer_queue_index)
{
buffer_offset_alignment = vkdev->info.buffer_offset_alignment;
staging_data = 0;


+ 4
- 4
src/command.h View File

@@ -29,7 +29,7 @@ namespace ncnn {
class Command
{
public:
Command(VulkanDevice* vkdev, uint32_t queue_index);
Command(const VulkanDevice* vkdev, uint32_t queue_index);
~Command();

protected:
@@ -43,7 +43,7 @@ protected:
int wait_fence();

protected:
VulkanDevice* vkdev;
const VulkanDevice* vkdev;
uint32_t queue_index;

VkQueue queue;
@@ -57,7 +57,7 @@ protected:
class VkCompute : public Command
{
public:
VkCompute(VulkanDevice* vkdev);
VkCompute(const VulkanDevice* vkdev);
~VkCompute();

void record_upload(const VkMat& m);
@@ -153,7 +153,7 @@ protected:
class VkTransfer : public Command
{
public:
VkTransfer(VulkanDevice* vkdev);
VkTransfer(const VulkanDevice* vkdev);
~VkTransfer();

void record_upload(const Mat& src, VkMat& dst);


+ 1
- 1
src/layer.cpp View File

@@ -30,7 +30,7 @@ Option::Option()
workspace_allocator = 0;

#if NCNN_VULKAN
vulkan_compute = true;
vulkan_compute = false;
blob_vkallocator = 0;
workspace_vkallocator = 0;
staging_vkallocator = 0;


+ 1
- 0
src/layer/concat.cpp View File

@@ -13,6 +13,7 @@
// specific language governing permissions and limitations under the License.

#include "concat.h"
#include <algorithm>

namespace ncnn {



+ 24
- 9
src/net.cpp View File

@@ -44,6 +44,7 @@ Net::Net()

#if NCNN_VULKAN
vkdev = 0;
vkdev_local = 0;
weight_vkallocator = 0;
weight_staging_vkallocator = 0;
#endif // NCNN_VULKAN
@@ -52,6 +53,10 @@ Net::Net()
Net::~Net()
{
clear();

#if NCNN_VULKAN
delete vkdev_local;
#endif // NCNN_VULKAN
}

#if NCNN_STRING
@@ -142,8 +147,10 @@ int Net::load_param(FILE* fp)
#if NCNN_VULKAN
if (use_vulkan_compute && !vkdev)
{
fprintf(stderr, "vulkan device not set, vulkan compute disabled\n");
use_vulkan_compute = false;
// use default vulkan device
if (!vkdev_local)
vkdev_local = new VulkanDevice;
vkdev = vkdev_local;
}
#endif // NCNN_VULKAN

@@ -311,8 +318,10 @@ int Net::load_param_mem(const char* _mem)
#if NCNN_VULKAN
if (use_vulkan_compute && !vkdev)
{
fprintf(stderr, "vulkan device not set, vulkan compute disabled\n");
use_vulkan_compute = false;
// use default vulkan device
if (!vkdev_local)
vkdev_local = new VulkanDevice;
vkdev = vkdev_local;
}
#endif // NCNN_VULKAN

@@ -483,8 +492,10 @@ int Net::load_param_bin(FILE* fp)
#if NCNN_VULKAN
if (use_vulkan_compute && !vkdev)
{
fprintf(stderr, "vulkan device not set, vulkan compute disabled\n");
use_vulkan_compute = false;
// use default vulkan device
if (!vkdev_local)
vkdev_local = new VulkanDevice;
vkdev = vkdev_local;
}
#endif // NCNN_VULKAN

@@ -720,8 +731,10 @@ int Net::load_param(const unsigned char* _mem)
#if NCNN_VULKAN
if (use_vulkan_compute && !vkdev)
{
fprintf(stderr, "vulkan device not set, vulkan compute disabled\n");
use_vulkan_compute = false;
// use default vulkan device
if (!vkdev_local)
vkdev_local = new VulkanDevice;
vkdev = vkdev_local;
}
#endif // NCNN_VULKAN

@@ -918,7 +931,7 @@ Extractor Net::create_extractor() const
}

#if NCNN_VULKAN
void Net::set_vulkan_device(VulkanDevice* _vkdev)
void Net::set_vulkan_device(const VulkanDevice* _vkdev)
{
vkdev = _vkdev;
}
@@ -1592,6 +1605,8 @@ Extractor::Extractor(const Net* _net, int blob_count) : net(_net)
opt = get_default_option();

#if NCNN_VULKAN
opt.vulkan_compute = net->use_vulkan_compute;

if (net->use_vulkan_compute)
{
blob_mats_gpu.resize(blob_count);


+ 3
- 2
src/net.h View File

@@ -106,7 +106,7 @@ public:

#if NCNN_VULKAN

void set_vulkan_device(VulkanDevice* vkdev);
void set_vulkan_device(const VulkanDevice* vkdev);

#endif // NCNN_VULKAN

@@ -132,7 +132,8 @@ protected:
std::vector<layer_registry_entry> custom_layer_registry;

#if NCNN_VULKAN
VulkanDevice* vkdev;
const VulkanDevice* vkdev;
const VulkanDevice* vkdev_local;

VkAllocator* weight_vkallocator;
VkAllocator* weight_staging_vkallocator;


Loading…
Cancel
Save