Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: gpu/vulkan/vulkan_command_buffer.cc

Issue 1829163003: Added initial implementation of the Vulkan Context Provider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@vk_surface_patch
Patch Set: Block off vulkan_cc with enable_vulkan (not relevant in future patch) Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/vulkan/vulkan_command_buffer.h ('k') | gpu/vulkan/vulkan_command_pool.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/vulkan/vulkan_command_buffer.cc
diff --git a/gpu/vulkan/vulkan_command_buffer.cc b/gpu/vulkan/vulkan_command_buffer.cc
index 3dad8d628c9c0c88f73b3f84cbe2eb9212ff4635..5f345256e34b515e7b1692b59ba5dd007a21174c 100644
--- a/gpu/vulkan/vulkan_command_buffer.cc
+++ b/gpu/vulkan/vulkan_command_buffer.cc
@@ -6,13 +6,17 @@
#include "base/logging.h"
#include "gpu/vulkan/vulkan_command_pool.h"
+#include "gpu/vulkan/vulkan_device_queue.h"
#include "gpu/vulkan/vulkan_implementation.h"
namespace gpu {
-VulkanCommandBuffer::VulkanCommandBuffer(VulkanCommandPool* command_pool,
+VulkanCommandBuffer::VulkanCommandBuffer(VulkanDeviceQueue* device_queue,
+ VulkanCommandPool* command_pool,
bool primary)
- : primary_(primary), command_pool_(command_pool) {
+ : primary_(primary),
+ device_queue_(device_queue),
+ command_pool_(command_pool) {
command_pool_->IncrementCommandBufferCount();
}
@@ -25,7 +29,7 @@ VulkanCommandBuffer::~VulkanCommandBuffer() {
bool VulkanCommandBuffer::Initialize() {
VkResult result = VK_SUCCESS;
- VkDevice device = GetVulkanDevice();
+ VkDevice device = device_queue_->GetVulkanDevice();
VkCommandBufferAllocateInfo command_buffer_info = {};
command_buffer_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
@@ -57,7 +61,7 @@ bool VulkanCommandBuffer::Initialize() {
}
void VulkanCommandBuffer::Destroy() {
- VkDevice device = GetVulkanDevice();
+ VkDevice device = device_queue_->GetVulkanDevice();
if (VK_NULL_HANDLE != submission_fence_) {
DCHECK(SubmissionFinished());
vkDestroyFence(device, submission_fence_, nullptr);
@@ -70,8 +74,7 @@ void VulkanCommandBuffer::Destroy() {
}
}
-bool VulkanCommandBuffer::Submit(VkQueue queue,
- uint32_t num_wait_semaphores,
+bool VulkanCommandBuffer::Submit(uint32_t num_wait_semaphores,
VkSemaphore* wait_semaphores,
uint32_t num_signal_semaphores,
VkSemaphore* signal_semaphores) {
@@ -85,8 +88,18 @@ bool VulkanCommandBuffer::Submit(VkQueue queue,
submit_info.signalSemaphoreCount = num_signal_semaphores;
submit_info.pSignalSemaphores = signal_semaphores;
- vkResetFences(GetVulkanDevice(), 1, &submission_fence_);
- VkResult result = vkQueueSubmit(queue, 1, &submit_info, submission_fence_);
+ VkResult result = VK_SUCCESS;
+
+ result =
+ vkResetFences(device_queue_->GetVulkanDevice(), 1, &submission_fence_);
+ if (VK_SUCCESS != result) {
+ DLOG(ERROR) << "vkResetFences() failed: " << result;
+ return false;
+ }
+
+ result = vkQueueSubmit(device_queue_->GetVulkanQueue(), 1, &submit_info,
+ submission_fence_);
+
PostExecution();
if (VK_SUCCESS != result) {
DLOG(ERROR) << "vkQueueSubmit() failed: " << result;
@@ -109,11 +122,13 @@ void VulkanCommandBuffer::Clear() {
}
void VulkanCommandBuffer::Wait(uint64_t timeout) {
- vkWaitForFences(GetVulkanDevice(), 1, &submission_fence_, true, timeout);
+ VkDevice device = device_queue_->GetVulkanDevice();
+ vkWaitForFences(device, 1, &submission_fence_, true, timeout);
}
bool VulkanCommandBuffer::SubmissionFinished() {
- return VK_SUCCESS == vkGetFenceStatus(GetVulkanDevice(), submission_fence_);
+ VkDevice device = device_queue_->GetVulkanDevice();
+ return VK_SUCCESS == vkGetFenceStatus(device, submission_fence_);
}
void VulkanCommandBuffer::PostExecution() {
@@ -131,7 +146,8 @@ void VulkanCommandBuffer::ResetIfDirty() {
if (record_type_ == RECORD_TYPE_DIRTY) {
// Block if command buffer is still in use. This can be externally avoided
// using the asynchronous SubmissionFinished() function.
- vkWaitForFences(GetVulkanDevice(), 1, &submission_fence_, true, UINT64_MAX);
+ VkDevice device = device_queue_->GetVulkanDevice();
+ vkWaitForFences(device, 1, &submission_fence_, true, UINT64_MAX);
vkResetCommandBuffer(command_buffer_, 0);
record_type_ = RECORD_TYPE_EMPTY;
« no previous file with comments | « gpu/vulkan/vulkan_command_buffer.h ('k') | gpu/vulkan/vulkan_command_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698