Vulkan: Wrap vulkan queues
Former-commit-id: 9fff47e3efbb8ce7b2c70be9a468627b7e8a1340
This commit is contained in:
parent
5b7476eab7
commit
7e63e8fdb6
|
|
@ -1,71 +1,71 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<link rel="stylesheet" type="text/css" href="style.css">
|
<link rel="stylesheet" type="text/css" href="style.css">
|
||||||
<title>Avancement de Nazara</title>
|
<title>Avancement de Nazara</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="englob">
|
<div id="englob">
|
||||||
<img style="display: block;margin-left: auto;margin-right: auto;" src="https://github.com/DigitalPulseSoftware/NazaraEngine/raw/master/Logo.png" alt="Nazara Engine" />
|
<img style="display: block;margin-left: auto;margin-right: auto;" src="https://github.com/DigitalPulseSoftware/NazaraEngine/raw/master/Logo.png" alt="Nazara Engine" />
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
Retrouvez le moteur sur GitHub !<br>
|
Retrouvez le moteur sur GitHub !<br>
|
||||||
<a href="https://github.com/DigitalPulseSoftware/NazaraEngine">Dépôt GitHub</a><br><br>
|
<a href="https://github.com/DigitalPulseSoftware/NazaraEngine">Dépôt GitHub</a><br><br>
|
||||||
Venez vous renseigner sur les topics dédiés à Nazara présents sur plusieurs sites web :<br>
|
Venez vous renseigner sur les topics dédiés à Nazara présents sur plusieurs sites web :<br>
|
||||||
<a href="https://openclassrooms.com/forum/sujet/moteur-de-jeu-nazara-engine-69732">OpenClassrooms</a>, <a href="http://pdp.microjoe.org/forums/sujet/354/projet-nazara-engine-moteur-de-jeu">Progdupeupl</a> ou <a href="https://zestedesavoir.com/forums/sujet/1039/nazara-engine/">ZesteDeSavoir</a>
|
<a href="https://openclassrooms.com/forum/sujet/moteur-de-jeu-nazara-engine-69732">OpenClassrooms</a>, <a href="http://pdp.microjoe.org/forums/sujet/354/projet-nazara-engine-moteur-de-jeu">Progdupeupl</a> ou <a href="https://zestedesavoir.com/forums/sujet/1039/nazara-engine/">ZesteDeSavoir</a>
|
||||||
<br><br>
|
<br><br>
|
||||||
... ou pourquoi ne pas venir faire un tour sur <a href="http://forum.digitalpulsesoftware.net">le forum dédié au moteur</a> ?
|
... ou pourquoi ne pas venir faire un tour sur <a href="http://forum.digitalpulsesoftware.net">le forum dédié au moteur</a> ?
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<h1>Fonctionnalités de Nazara</h1>
|
<h1>Fonctionnalités de Nazara</h1>
|
||||||
|
|
||||||
<div>Dernière mise à jour : <span class="lastupdate">
|
<div>Dernière mise à jour : <span class="lastupdate">
|
||||||
%DATE%
|
%DATE%
|
||||||
</span></div>
|
</span></div>
|
||||||
|
|
||||||
<h2>Important:</h2>
|
<h2>Important:</h2>
|
||||||
<p>Afin de faciliter la mise à jour, la page que vous voyez ici a été générée automatiquement par un <i>script Lua</i>, ce qui m'oblige néanmoins à encoder les fonctionnalités de chaque module dans un premier temps.
|
<p>Afin de faciliter la mise à jour, la page que vous voyez ici a été générée automatiquement par un <i>script Lua</i>, ce qui m'oblige néanmoins à encoder les fonctionnalités de chaque module dans un premier temps.
|
||||||
C'est un travail assez long (pour vous donner une idée, les données du noyau représentent un fichier de 200 lignes), et il n'est pas encore complet, c'est pourquoi des modules manquent sur cette page.<br>
|
C'est un travail assez long (pour vous donner une idée, les données du noyau représentent un fichier de 200 lignes), et il n'est pas encore complet, c'est pourquoi des modules manquent sur cette page.<br>
|
||||||
Gardez donc à l'esprit que le moteur possède plus de fonctionnalités que ce qui est décrit actuellement sur cette page.</p>
|
Gardez donc à l'esprit que le moteur possède plus de fonctionnalités que ce qui est décrit actuellement sur cette page.</p>
|
||||||
|
|
||||||
<p>Oh et bien sûr je ne suis pas concepteur de site web, c'est pourquoi cette page est moche (j'ai <u>essayé</u> de minimiser les dégâts).<br>
|
<p>Oh et bien sûr je ne suis pas concepteur de site web, c'est pourquoi cette page est moche (j'ai <u>essayé</u> de minimiser les dégâts).<br>
|
||||||
Si vous sentez en vous l'irrésistible envie d'améliorer cette page, sachez que votre aide serait grandement appréciée (vous pouvez me contacter via le lien de votre choix plus haut).</p>
|
Si vous sentez en vous l'irrésistible envie d'améliorer cette page, sachez que votre aide serait grandement appréciée (vous pouvez me contacter via le lien de votre choix plus haut).</p>
|
||||||
|
|
||||||
<p>Le pourcentage indiqué est calculé automatiquement en fonction des <u>fonctionnalités</u>, cela signifie qu'une fonctionnalité présente sera comptée à 100% à partir du moment où son implémentation de base est considérée fonctionnelle, <u>cela n'est donc pas une assurance qu'aucun bug n'existe concernant cette fonctionnalité</u> (cependant cela signifie que la fonctionnalité est utilisable).<br>
|
<p>Le pourcentage indiqué est calculé automatiquement en fonction des <u>fonctionnalités</u>, cela signifie qu'une fonctionnalité présente sera comptée à 100% à partir du moment où son implémentation de base est considérée fonctionnelle, <u>cela n'est donc pas une assurance qu'aucun bug n'existe concernant cette fonctionnalité</u> (cependant cela signifie que la fonctionnalité est utilisable).<br>
|
||||||
Et bien entendu, un module ou une fonctionnalité ayant atteint les 100% peut toujours évoluer par la suite.</p>
|
Et bien entendu, un module ou une fonctionnalité ayant atteint les 100% peut toujours évoluer par la suite.</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<caption>Sommaire</caption>
|
<caption>Sommaire</caption>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Module</th>
|
<th>Module</th>
|
||||||
<th>Avancement</th>
|
<th>Avancement</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
%MODULELIST%
|
%MODULELIST%
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
%MODULEDESCRIPTION%
|
%MODULEDESCRIPTION%
|
||||||
<hr>
|
<hr>
|
||||||
<table>
|
<table>
|
||||||
<caption>Sommaire</caption>
|
<caption>Sommaire</caption>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Module</th>
|
<th>Module</th>
|
||||||
<th>Pourcentage</th>
|
<th>Pourcentage</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
%MODULELIST%
|
%MODULELIST%
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -1,121 +1,121 @@
|
||||||
/* Je ne suis pas développeur HTML/CSS, je dois y toucher une fois l'an, désolé pour les quelques atrocités que vous pourrez trouver ici */
|
/* Je ne suis pas développeur HTML/CSS, je dois y toucher une fois l'an, désolé pour les quelques atrocités que vous pourrez trouver ici */
|
||||||
|
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: #f1f1f1;
|
background-color: #f1f1f1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#englob {
|
#englob {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
min-width: 765px;
|
min-width: 765px;
|
||||||
padding: 0 20px;
|
padding: 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
height: 0;
|
height: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
a
|
a
|
||||||
{
|
{
|
||||||
color: #007ACC;
|
color: #007ACC;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover
|
a:hover
|
||||||
{
|
{
|
||||||
color: lightblue;
|
color: lightblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1
|
h1
|
||||||
{
|
{
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2
|
h2
|
||||||
{
|
{
|
||||||
display: inline;
|
display: inline;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4
|
h4
|
||||||
{
|
{
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
}
|
}
|
||||||
|
|
||||||
ol
|
ol
|
||||||
{
|
{
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
table
|
table
|
||||||
{
|
{
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border: white groove;
|
border: white groove;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
box-shadow: 0px 0px 10px lightblue;
|
box-shadow: 0px 0px 10px lightblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
th
|
th
|
||||||
{
|
{
|
||||||
text-shadow: 2px 2px 4px black;
|
text-shadow: 2px 2px 4px black;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr
|
tr
|
||||||
{
|
{
|
||||||
border: 1px solid white;
|
border: 1px solid white;
|
||||||
}
|
}
|
||||||
|
|
||||||
tbody tr:hover
|
tbody tr:hover
|
||||||
{
|
{
|
||||||
text-shadow: 0px 0px 4px white;
|
text-shadow: 0px 0px 4px white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.description
|
.description
|
||||||
{
|
{
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lastupdate
|
.lastupdate
|
||||||
{
|
{
|
||||||
font-size: x-large;
|
font-size: x-large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #f1c40f;
|
color: #f1c40f;
|
||||||
}
|
}
|
||||||
|
|
||||||
.modulename
|
.modulename
|
||||||
{
|
{
|
||||||
font-size: x-large;
|
font-size: x-large;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-shadow: 2px 2px 10px #007ACC;
|
text-shadow: 2px 2px 10px #007ACC;
|
||||||
}
|
}
|
||||||
|
|
||||||
.note
|
.note
|
||||||
{
|
{
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
color: #007ACC;
|
color: #007ACC;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notedesc
|
.notedesc
|
||||||
{
|
{
|
||||||
color: rgb(200, 200, 255);
|
color: rgb(200, 200, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
.portability
|
.portability
|
||||||
{
|
{
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
|
|
@ -19,6 +19,7 @@ namespace Nz
|
||||||
namespace Vk
|
namespace Vk
|
||||||
{
|
{
|
||||||
class Device;
|
class Device;
|
||||||
|
class Queue;
|
||||||
class Instance;
|
class Instance;
|
||||||
|
|
||||||
using DeviceHandle = ObjectHandle<Device>;
|
using DeviceHandle = ObjectHandle<Device>;
|
||||||
|
|
@ -34,7 +35,7 @@ namespace Nz
|
||||||
bool Create(VkPhysicalDevice device, const VkDeviceCreateInfo& createInfo, const VkAllocationCallbacks* allocator = nullptr);
|
bool Create(VkPhysicalDevice device, const VkDeviceCreateInfo& createInfo, const VkAllocationCallbacks* allocator = nullptr);
|
||||||
inline void Destroy();
|
inline void Destroy();
|
||||||
|
|
||||||
inline VkQueue GetQueue(UInt32 queueFamilyIndex, UInt32 queueIndex);
|
inline Queue GetQueue(UInt32 queueFamilyIndex, UInt32 queueIndex);
|
||||||
inline Instance& GetInstance();
|
inline Instance& GetInstance();
|
||||||
inline const Instance& GetInstance() const;
|
inline const Instance& GetInstance() const;
|
||||||
inline VkResult GetLastErrorCode() const;
|
inline VkResult GetLastErrorCode() const;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include <Nazara/Vulkan/VkDevice.hpp>
|
#include <Nazara/Vulkan/VkDevice.hpp>
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
#include <Nazara/Vulkan/VkInstance.hpp>
|
#include <Nazara/Vulkan/VkInstance.hpp>
|
||||||
|
#include <Nazara/Vulkan/VkQueue.hpp>
|
||||||
#include <Nazara/Vulkan/Debug.hpp>
|
#include <Nazara/Vulkan/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
|
|
@ -31,12 +32,12 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline VkQueue Device::GetQueue(UInt32 queueFamilyIndex, UInt32 queueIndex)
|
inline Queue Device::GetQueue(UInt32 queueFamilyIndex, UInt32 queueIndex)
|
||||||
{
|
{
|
||||||
VkQueue queue;
|
VkQueue queue;
|
||||||
vkGetDeviceQueue(m_device, queueFamilyIndex, queueIndex, &queue);
|
vkGetDeviceQueue(m_device, queueFamilyIndex, queueIndex, &queue);
|
||||||
|
|
||||||
return queue;
|
return Queue(*this, queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Instance& Device::GetInstance()
|
inline Instance& Device::GetInstance()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
// Copyright (C) 2016 Jérôme Leclercq
|
||||||
|
// This file is part of the "Nazara Engine - Vulkan"
|
||||||
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef NAZARA_VULKAN_VKQUEUE_HPP
|
||||||
|
#define NAZARA_VULKAN_VKQUEUE_HPP
|
||||||
|
|
||||||
|
#include <Nazara/Prerequesites.hpp>
|
||||||
|
#include <Nazara/Vulkan/VkDevice.hpp>
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
|
namespace Nz
|
||||||
|
{
|
||||||
|
namespace Vk
|
||||||
|
{
|
||||||
|
class Queue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline Queue(Device& device, VkQueue queue);
|
||||||
|
inline Queue(const Queue& queue);
|
||||||
|
inline Queue(Queue&& queue);
|
||||||
|
inline ~Queue() = default;
|
||||||
|
|
||||||
|
inline Device& GetDevice();
|
||||||
|
inline VkResult GetLastErrorCode() const;
|
||||||
|
|
||||||
|
inline bool Present(const VkPresentInfoKHR& presentInfo);
|
||||||
|
inline bool Present(VkSwapchainKHR swapchain, UInt32 imageIndex, VkSemaphore waitSemaphore = VK_NULL_HANDLE);
|
||||||
|
|
||||||
|
inline bool Submit(const VkSubmitInfo& submit, VkFence fence = VK_NULL_HANDLE);
|
||||||
|
inline bool Submit(UInt32 submitCount, const VkSubmitInfo* submits, VkFence fence = VK_NULL_HANDLE);
|
||||||
|
|
||||||
|
inline bool WaitIdle();
|
||||||
|
|
||||||
|
Queue& operator=(const Queue& queue) = delete;
|
||||||
|
Queue& operator=(Queue&&) = delete;
|
||||||
|
|
||||||
|
inline operator VkQueue();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Device& m_device;
|
||||||
|
VkQueue m_handle;
|
||||||
|
VkResult m_lastErrorCode;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <Nazara/Vulkan/VkQueue.inl>
|
||||||
|
|
||||||
|
#endif // NAZARA_VULKAN_VKQUEUE_HPP
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
// Copyright (C) 2016 Jérôme Leclercq
|
||||||
|
// This file is part of the "Nazara Engine - Vulkan"
|
||||||
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
#include <Nazara/Vulkan/VkCommandPool.hpp>
|
||||||
|
#include <Nazara/Core/Error.hpp>
|
||||||
|
#include <Nazara/Vulkan/VkDevice.hpp>
|
||||||
|
#include <Nazara/Vulkan/Debug.hpp>
|
||||||
|
|
||||||
|
namespace Nz
|
||||||
|
{
|
||||||
|
namespace Vk
|
||||||
|
{
|
||||||
|
inline Queue::Queue(Device& device, VkQueue queue) :
|
||||||
|
m_device(device),
|
||||||
|
m_handle(queue),
|
||||||
|
m_lastErrorCode(VkResult::VK_SUCCESS)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Queue::Queue(const Queue& queue) :
|
||||||
|
m_device(queue.m_device),
|
||||||
|
m_handle(queue.m_handle),
|
||||||
|
m_lastErrorCode(queue.m_lastErrorCode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Queue::Queue(Queue&& queue) :
|
||||||
|
m_device(queue.m_device),
|
||||||
|
m_handle(queue.m_handle),
|
||||||
|
m_lastErrorCode(queue.m_lastErrorCode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Device& Queue::GetDevice()
|
||||||
|
{
|
||||||
|
return m_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline VkResult Queue::GetLastErrorCode() const
|
||||||
|
{
|
||||||
|
return m_lastErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Queue::Present(const VkPresentInfoKHR& presentInfo)
|
||||||
|
{
|
||||||
|
m_lastErrorCode = m_device.vkQueuePresentKHR(m_handle, &presentInfo);
|
||||||
|
if (m_lastErrorCode != VkResult::VK_SUCCESS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Queue::Present(VkSwapchainKHR swapchain, UInt32 imageIndex, VkSemaphore waitSemaphore)
|
||||||
|
{
|
||||||
|
VkPresentInfoKHR presentInfo =
|
||||||
|
{
|
||||||
|
VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
|
||||||
|
nullptr,
|
||||||
|
(waitSemaphore) ? 1U : 0U,
|
||||||
|
&waitSemaphore,
|
||||||
|
1U,
|
||||||
|
&swapchain,
|
||||||
|
&imageIndex,
|
||||||
|
nullptr
|
||||||
|
};
|
||||||
|
|
||||||
|
return Present(presentInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Queue::Submit(const VkSubmitInfo& submit, VkFence fence)
|
||||||
|
{
|
||||||
|
return Submit(1, &submit, fence);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Queue::Submit(UInt32 submitCount, const VkSubmitInfo* submits, VkFence fence)
|
||||||
|
{
|
||||||
|
m_lastErrorCode = m_device.vkQueueSubmit(m_handle, submitCount, submits, fence);
|
||||||
|
if (m_lastErrorCode != VkResult::VK_SUCCESS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Queue::WaitIdle()
|
||||||
|
{
|
||||||
|
m_lastErrorCode = m_device.vkQueueWaitIdle(m_handle);
|
||||||
|
if (m_lastErrorCode != VkResult::VK_SUCCESS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Queue::operator VkQueue()
|
||||||
|
{
|
||||||
|
return m_handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <Nazara/Vulkan/DebugOff.hpp>
|
||||||
Loading…
Reference in New Issue