本文整理汇总了C++中VulkanDC::getDefaultQueue方法的典型用法代码示例。如果您正苦于以下问题:C++ VulkanDC::getDefaultQueue方法的具体用法?C++ VulkanDC::getDefaultQueue怎么用?C++ VulkanDC::getDefaultQueue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VulkanDC
的用法示例。
在下文中一共展示了VulkanDC::getDefaultQueue方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initDrawCommands
void VkeDrawCall::initDrawCommands(const uint32_t inCount, const uint32_t inCommandIndex){
VkPipelineLayout layout = m_renderer->getPipelineLayout();
VkPipeline pipeline = m_renderer->getPipeline();
VkDescriptorSet sceneDescriptor = m_renderer->getSceneDescriptorSet();
VkDescriptorSet *textureDescriptors = m_renderer->getTextureDescriptorSets();
VkBuffer sceneIndirectBuffer = m_renderer->getSceneIndirectBuffer();
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VulkanDC::Device::Queue *queue = dc->getDefaultQueue();
VulkanAppContext *ctxt = VulkanAppContext::GetInstance();
vkResetCommandBuffer(m_draw_command[inCommandIndex], 0);
VkCommandBufferBeginInfo cmdBeginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
cmdBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
VKA_CHECK_ERROR(vkBeginCommandBuffer(m_draw_command[inCommandIndex], &cmdBeginInfo), "Could not begin command buffer.\n");
vkCmdBindPipeline(m_draw_command[inCommandIndex], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
VkeVBO *theVBO = ctxt->getVBO();
VkeIBO *theIBO = ctxt->getIBO();
theVBO->bind(&m_draw_command[inCommandIndex]);
theIBO->bind(&m_draw_command[inCommandIndex]);
VkDescriptorSet sets[3] = { sceneDescriptor, textureDescriptors[0], m_transform_descriptor_set };
vkCmdBindDescriptorSets(m_draw_command[inCommandIndex], VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, 3, sets, 0, NULL);
vkCmdDrawIndexedIndirect(m_draw_command[inCommandIndex], sceneIndirectBuffer, 0, inCount, sizeof(VkDrawIndexedIndirectCommand));
vkCmdDraw(m_draw_command[inCommandIndex], 1, 1, 0, 0);
vkEndCommandBuffer(m_draw_command[inCommandIndex]);
/*
Lock mutex to update generated call count.
*/
//std::lock_guard<std::mutex> lk(m_renderer->getSecondaryCmdBufferMutex());
/*
Increment the generated call count
*/
m_renderer->incrementDrawCallsGenerated();
}
示例2: initTerrainCommand
void vkeGameRendererDynamic::initTerrainCommand(){
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VulkanDC::Device::Queue *queue = dc->getDefaultQueue();
uint32_t cmdID = 1021;
VkResult rslt;
for (uint32_t i = 0; i < 2; ++i){
if (m_terrain_command[i] != VK_NULL_HANDLE){
vkFreeCommandBuffers(device->getVKDevice(), queue->getCommandPool(), 1, &m_terrain_command[i]);
m_terrain_command[i] = VK_NULL_HANDLE;
}
{
VkCommandBufferAllocateInfo cmdBufInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO };
cmdBufInfo.commandBufferCount = 1;
cmdBufInfo.commandPool = queue->getCommandPool();
cmdBufInfo.level = VK_COMMAND_BUFFER_LEVEL_SECONDARY;
rslt = vkAllocateCommandBuffers(device->getVKDevice(), &cmdBufInfo, &m_terrain_command[i]);
VkCommandBufferBeginInfo cmdBeginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
cmdBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT;
rslt = vkBeginCommandBuffer(m_terrain_command[i], &cmdBeginInfo);
vkCmdBindPipeline(m_terrain_command[i], VK_PIPELINE_BIND_POINT_GRAPHICS, m_quad_pipeline);
vkCmdBindDescriptorSets(m_terrain_command[i], VK_PIPELINE_BIND_POINT_GRAPHICS, m_quad_pipeline_layout, 0, 1, &m_quad_descriptor_set, 0, NULL);
m_screen_quad.bind(&m_terrain_command[i]);
m_screen_quad.draw(&m_terrain_command[i]);
vkCmdBindPipeline(m_terrain_command[i], VK_PIPELINE_BIND_POINT_GRAPHICS, m_terrain_pipeline);
vkCmdBindDescriptorSets(m_terrain_command[i], VK_PIPELINE_BIND_POINT_GRAPHICS, m_terrain_pipeline_layout, 0, 1, &m_terrain_descriptor_set, 0, NULL);
m_terrain_quad.bind(&m_terrain_command[i]);
m_terrain_quad.draw(&m_terrain_command[i]);/**/
vkEndCommandBuffer(m_terrain_command[i]);
}
}
}
示例3: present
void vkeGameRendererDynamic::present(){
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VulkanDC::Device::Queue *queue = dc->getDefaultQueue();
glDisable(GL_DEPTH_TEST);
glWaitVkSemaphoreNV((GLuint64)m_render_done[m_current_buffer_index]);
glDrawVkImageNV((GLuint64)m_resolve_attachment[m_current_buffer_index].image, 0, 0, 0, m_width, m_height, 0, 0, 1, 1, 0);
glEnable(GL_DEPTH_TEST);
glSignalVkSemaphoreNV((GLuint64)m_present_done[m_current_buffer_index]);
}
示例4: update
void vkeGameRendererDynamic::update(){
VulkanAppContext *ctxt = VulkanAppContext::GetInstance();
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VkCommandBuffer cmd = VK_NULL_HANDLE;
VulkanDC::Device::Queue::CommandBufferID cmdID = INIT_COMMAND_ID + 300;
static float sTime = 0.0f;
static uint32_t *uniforms = NULL;
uint32_t cnt = m_node_data->count();
uint32_t sz = (sizeof(VkeNodeUniform) * cnt) + (m_instance_count * 64);
static bool ismapped(false);
nv_math::mat4f tempMatrix;
const float r2d = 180 / (3.14159265359);
static float xTheta(0.0f);
for (uint32_t i = 0; i < m_instance_count; ++i){
size_t pointerOffset = (sizeof(VkeNodeUniform) * cnt) + (64 * i);
nv_math::mat4f *matPtr = (nv_math::mat4f*)(((uint8_t*)m_uniforms_local) + pointerOffset);
m_flight_paths[i]->update(matPtr, sTime);
}
m_node_data->update((VkeNodeUniform*)m_uniforms_local, m_instance_count);
m_camera->setViewport(0, 0, (float)m_width, (float)m_height);
m_camera->update();
generateDrawCommands();
if (!m_is_first_frame){
vkResetFences(device->getVKDevice(), 1, &m_update_fence[m_current_buffer_index]);
const VkPipelineStageFlags waitStages = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
VkSubmitInfo subInfo = { VK_STRUCTURE_TYPE_SUBMIT_INFO };
subInfo.commandBufferCount = 1;
subInfo.waitSemaphoreCount = 1;
subInfo.pWaitSemaphores = &m_present_done[m_current_buffer_index];
subInfo.pWaitDstStageMask = &waitStages;
subInfo.signalSemaphoreCount = 1;
subInfo.pSignalSemaphores = &m_render_done[m_current_buffer_index];
subInfo.pCommandBuffers = &m_primary_commands[m_current_buffer_index];
vkQueueSubmit(dc->getDefaultQueue()->getVKQueue(), 1, &subInfo, m_update_fence[m_current_buffer_index]);
/*
Synchronise the next buffer.
This prevents the buffer from being reset when still in use
when we have more than 2 frames in flight.
*/
uint32_t nextBufferIndex = (m_current_buffer_index + 1) % 2;
present();
vkWaitForFences(device->getVKDevice(), 1, &m_update_fence[nextBufferIndex], VK_TRUE, 1000000);
}
else{
m_is_first_frame = false;
}
m_current_buffer_index++;
m_current_buffer_index %= 2;
sTime += 0.16;
}
示例5: initIndirectCommands
void vkeGameRendererDynamic::initIndirectCommands(){
if (!m_node_data) return;
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VulkanDC::Device::Queue *queue = dc->getDefaultQueue();
uint32_t cnt = m_node_data->count();
uint32_t sz = sizeof(VkDrawIndexedIndirectCommand)*cnt;
VkBuffer sceneIndirectStaging;
VkDeviceMemory sceneIndirectMemStaging;
VkBufferUsageFlags usageFlags = VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
bufferCreate(&m_scene_indirect_buffer, sz, (VkBufferUsageFlagBits)usageFlags);
bufferAlloc(&m_scene_indirect_buffer, &m_scene_indirect_memory, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
usageFlags = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
bufferCreate(&sceneIndirectStaging, sz, (VkBufferUsageFlagBits)usageFlags);
bufferAlloc(&sceneIndirectStaging, &sceneIndirectMemStaging, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
VkDrawIndexedIndirectCommand *commands = NULL;
VKA_CHECK_ERROR(vkMapMemory(device->getVKDevice(), sceneIndirectMemStaging, 0, sz, 0, (void **)&commands), "Could not map indirect buffer memory.\n");
for (uint32_t i = 0; i < cnt; ++i){
VkeMesh *mesh = m_node_data->getData(i)->getMesh();
commands[i].firstIndex = mesh->getFirstIndex();
commands[i].firstInstance = i*m_instance_count;
commands[i].vertexOffset = mesh->getFirstVertex();
commands[i].indexCount = mesh->getIndexCount();
commands[i].instanceCount = m_instance_count;
}
vkUnmapMemory(device->getVKDevice(), sceneIndirectMemStaging);
VkBufferCopy bufCpy;
bufCpy.dstOffset = 0;
bufCpy.srcOffset = 0;
bufCpy.size = sz;
VkCommandBuffer copyCmd;
VkCommandBufferAllocateInfo cmdBufInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO };
cmdBufInfo.commandBufferCount = 1;
cmdBufInfo.commandPool = queue->getCommandPool();
cmdBufInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
VKA_CHECK_ERROR(vkAllocateCommandBuffers(device->getVKDevice(), &cmdBufInfo, ©Cmd), "Could not allocate command buffers.\n");
VkCommandBufferBeginInfo cmdBeginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
cmdBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
VKA_CHECK_ERROR(vkBeginCommandBuffer(copyCmd, &cmdBeginInfo), "Could not begin commmand buffer.\n");
vkCmdCopyBuffer(copyCmd, sceneIndirectStaging, m_scene_indirect_buffer, 1, &bufCpy);
VKA_CHECK_ERROR(vkEndCommandBuffer(copyCmd), "Could not end command buffer.\n");
VkSubmitInfo subInfo = { VK_STRUCTURE_TYPE_SUBMIT_INFO };
subInfo.commandBufferCount = 1;
subInfo.pCommandBuffers = ©Cmd;
VkFence theFence;
VkFenceCreateInfo fenceInfo = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO };
VKA_CHECK_ERROR(vkCreateFence(device->getVKDevice(), &fenceInfo, NULL, &theFence), "Could not create fence.\n");
VKA_CHECK_ERROR(vkQueueSubmit(queue->getVKQueue(), 1, &subInfo, theFence), "Could not submit queue for indirect buffer copy.\n");
VKA_CHECK_ERROR(vkWaitForFences(device->getVKDevice(), 1, &theFence, VK_TRUE, UINT_MAX), "Could not wait for fence.\n");
vkFreeCommandBuffers(device->getVKDevice(), queue->getCommandPool(), 1, ©Cmd);
vkDestroyFence(device->getVKDevice(), theFence, NULL);
}
示例6: initFramebuffer
void vkeGameRendererDynamic::initFramebuffer(uint32_t inWidth, uint32_t inHeight){
/*----------------------------------------------------------
Create the framebuffer
----------------------------------------------------------*/
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VulkanDC::Device::Queue *queue = dc->getDefaultQueue();
const VkFormat depthFmt = VK_FORMAT_D24_UNORM_S8_UINT;
const VkFormat colorFmt = VK_FORMAT_R8G8B8A8_UNORM;
/*
If framebuffers already exist, release them.
*/
if (m_framebuffers[0] != VK_NULL_HANDLE){
releaseFramebuffer();
}
/*
Update the frame dimensions.
*/
m_width = inWidth;
m_height = inHeight;
/*
Specify usage for the frame buffer attachments.
*/
VkImageUsageFlagBits gBufferFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
VkImageUsageFlagBits sBufferFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
/*
Create the depth attachment image and image view.
*/
m_depth_attachment.format = depthFmt;
imageCreateAndBind(&m_depth_attachment.image, &m_depth_attachment.memory, depthFmt, VK_IMAGE_TYPE_2D, m_width, m_height, 1, 1, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL, getSamples());
imageViewCreate(&m_depth_attachment.view, m_depth_attachment.image, VK_IMAGE_VIEW_TYPE_2D, depthFmt);
/*
Create the color attachment image and image view.
*/
m_color_attachment.format = colorFmt;
imageCreateAndBind(&m_color_attachment.image, &m_color_attachment.memory, colorFmt, VK_IMAGE_TYPE_2D, m_width, m_height, 1, 1, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, gBufferFlags, VK_IMAGE_TILING_OPTIMAL, getSamples());
imageViewCreate(&m_color_attachment.view, m_color_attachment.image, VK_IMAGE_VIEW_TYPE_2D, colorFmt);
/*
Create the resolve attachment image and image view.
*/
for (uint32_t i = 0; i < 2; ++i){
m_resolve_attachment[i].format = colorFmt;
imageCreateAndBind(&m_resolve_attachment[i].image, &m_resolve_attachment[i].memory, colorFmt, VK_IMAGE_TYPE_2D, m_width, m_height, 1, 1, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, gBufferFlags, VK_IMAGE_TILING_OPTIMAL, VK_SAMPLE_COUNT_1_BIT);
imageViewCreate(&m_resolve_attachment[i].view, m_resolve_attachment[i].image, VK_IMAGE_VIEW_TYPE_2D, colorFmt);
}
/*
Put the image views into a temporary array
to pass to the framebuffer create info struct.
*/
/*
Setup the framebuffer create info struct.
*/
for (uint32_t i = 0; i < 2; ++i){
VkImageView views[] = { m_color_attachment.view, m_depth_attachment.view, m_resolve_attachment[i].view };
VkFramebufferCreateInfo fbInfo = { VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO };
fbInfo.renderPass = m_render_pass;
fbInfo.attachmentCount = 3;
fbInfo.pAttachments = views;
fbInfo.width = m_width;
fbInfo.height = m_height;
fbInfo.layers = 1;
/*
Create 2 framebuffers for ping pong.
*/
VKA_CHECK_ERROR(vkCreateFramebuffer(device->getVKDevice(), &fbInfo, NULL, &m_framebuffers[i]), "Could not create framebuffer.\n");
}
}
示例7: update
void vkeGameRendererDynamic::update(){
VulkanAppContext *ctxt = VulkanAppContext::GetInstance();
VulkanDC *dc = VulkanDC::Get();
VulkanDC::Device *device = dc->getDefaultDevice();
VkCommandBuffer cmd = VK_NULL_HANDLE;
VulkanDC::Device::Queue::CommandBufferID cmdID = INIT_COMMAND_ID + 300;
static float sTime = 0.0f;
static uint32_t *uniforms = NULL;
uint32_t sz = (sizeof(VkeNodeUniform) * 100) + (64 * 64);
static bool ismapped(false);
nv_math::mat4f tempMatrix;
const float r2d = 180 / (3.14159265359);
static float xTheta(0.0f);
//if (!ismapped){
VKA_CHECK_ERROR(vkMapMemory(getDefaultDevice(), m_uniforms_staging, 0, sz, 0, (void **)&uniforms), "Could not map buffer memory.\n");
//ismapped = true;
//}
for (uint32_t i = 0; i < 64; ++i){
size_t pointerOffset = (sizeof(VkeNodeUniform) * 100) + (64 * i);
nv_math::mat4f *matPtr = (nv_math::mat4f*)(((uint8_t*)uniforms) + pointerOffset);
m_flight_paths[i]->update(matPtr, sTime);
}
m_node_data->update((VkeNodeUniform*)uniforms);
m_camera->setViewport(0, 0, (float)m_width, (float)m_height);
m_camera->update();
VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
memRange.memory = m_uniforms_staging;
memRange.offset = 0;
memRange.size = sz;
vkFlushMappedMemoryRanges(device->getVKDevice(), 1, &memRange);
vkUnmapMemory(device->getVKDevice(), m_uniforms_staging);
if (!m_is_first_frame){
VkSubmitInfo subInfo;
memset(&subInfo, 0, sizeof(subInfo));
subInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
subInfo.commandBufferCount = 1;
subInfo.pCommandBuffers = &m_update_commands[m_current_buffer_index];
vkQueueSubmit(dc->getDefaultQueue()->getVKQueue(), 1, &subInfo, VK_NULL_HANDLE);
vkQueueWaitIdle(dc->getDefaultQueue()->getVKQueue());
#if defined(WIN32)
subInfo.waitSemaphoreCount = 1;
subInfo.pWaitSemaphores = &m_present_done;
subInfo.signalSemaphoreCount = 0;
subInfo.pSignalSemaphores = &m_render_done;
#endif
subInfo.pCommandBuffers = &m_primary_commands[m_current_buffer_index];
vkQueueSubmit(dc->getDefaultQueue()->getVKQueue(), 1, &subInfo, VK_NULL_HANDLE);
}
else{
m_is_first_frame = false;
}
present();
m_current_buffer_index++;
m_current_buffer_index %= 2;
sTime += 0.16;
generateDrawCommands();
}