updated vulkan device
This commit is contained in:
@@ -216,6 +216,324 @@ namespace wiGraphicsTypes
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Converters:
|
||||
inline VkFormat _ConvertFormat(FORMAT value)
|
||||
{
|
||||
// _TYPELESS is converted to _UINT or _FLOAT or _UNORM in that order depending on availability!
|
||||
// X channel is converted to regular missing channel (eg. FORMAT_B8G8R8X8_UNORM -> VK_FORMAT_B8G8R8A8_UNORM)
|
||||
switch (value)
|
||||
{
|
||||
case FORMAT_UNKNOWN:
|
||||
return VK_FORMAT_UNDEFINED;
|
||||
break;
|
||||
case FORMAT_R32G32B32A32_TYPELESS:
|
||||
return VK_FORMAT_R32G32B32A32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32B32A32_FLOAT:
|
||||
return VK_FORMAT_R32G32B32A32_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R32G32B32A32_UINT:
|
||||
return VK_FORMAT_R32G32B32A32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32B32A32_SINT:
|
||||
return VK_FORMAT_R32G32B32A32_SINT;
|
||||
break;
|
||||
case FORMAT_R32G32B32_TYPELESS:
|
||||
return VK_FORMAT_R32G32B32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32B32_FLOAT:
|
||||
return VK_FORMAT_R32G32B32_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R32G32B32_UINT:
|
||||
return VK_FORMAT_R32G32B32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32B32_SINT:
|
||||
return VK_FORMAT_R32G32B32_SINT;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_TYPELESS:
|
||||
return VK_FORMAT_R16G16B16A16_UINT;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_FLOAT:
|
||||
return VK_FORMAT_R16G16B16A16_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_UNORM:
|
||||
return VK_FORMAT_R16G16B16A16_UNORM;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_UINT:
|
||||
return VK_FORMAT_R16G16B16A16_UINT;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_SNORM:
|
||||
return VK_FORMAT_R16G16B16A16_SNORM;
|
||||
break;
|
||||
case FORMAT_R16G16B16A16_SINT:
|
||||
return VK_FORMAT_R16G16B16A16_SINT;
|
||||
break;
|
||||
case FORMAT_R32G32_TYPELESS:
|
||||
return VK_FORMAT_R32G32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32_FLOAT:
|
||||
return VK_FORMAT_R32G32_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R32G32_UINT:
|
||||
return VK_FORMAT_R32G32_UINT;
|
||||
break;
|
||||
case FORMAT_R32G32_SINT:
|
||||
return VK_FORMAT_R32G32_SINT;
|
||||
break;
|
||||
case FORMAT_R32G8X24_TYPELESS:
|
||||
return VK_FORMAT_R32G32_UINT; // possible mismatch!
|
||||
break;
|
||||
case FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
return VK_FORMAT_D32_SFLOAT_S8_UINT;
|
||||
break;
|
||||
case FORMAT_R32_FLOAT_X8X24_TYPELESS:
|
||||
return VK_FORMAT_R32G32_SFLOAT; // possible mismatch!
|
||||
break;
|
||||
case FORMAT_X32_TYPELESS_G8X24_UINT:
|
||||
return VK_FORMAT_R32G32_UINT; // possible mismatch!
|
||||
break;
|
||||
case FORMAT_R10G10B10A2_TYPELESS:
|
||||
return VK_FORMAT_A2B10G10R10_UINT_PACK32;
|
||||
break;
|
||||
case FORMAT_R10G10B10A2_UNORM:
|
||||
return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
|
||||
break;
|
||||
case FORMAT_R10G10B10A2_UINT:
|
||||
return VK_FORMAT_A2B10G10R10_UINT_PACK32;
|
||||
break;
|
||||
case FORMAT_R11G11B10_FLOAT:
|
||||
return VK_FORMAT_B10G11R11_UFLOAT_PACK32;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_TYPELESS:
|
||||
return VK_FORMAT_R8G8B8A8_UINT;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_UNORM:
|
||||
return VK_FORMAT_R8G8B8A8_UNORM;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
return VK_FORMAT_R8G8B8A8_SRGB;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_UINT:
|
||||
return VK_FORMAT_R8G8B8A8_UINT;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_SNORM:
|
||||
return VK_FORMAT_R8G8B8A8_SNORM;
|
||||
break;
|
||||
case FORMAT_R8G8B8A8_SINT:
|
||||
return VK_FORMAT_R8G8B8A8_SINT;
|
||||
break;
|
||||
case FORMAT_R16G16_TYPELESS:
|
||||
return VK_FORMAT_R16G16_UINT;
|
||||
break;
|
||||
case FORMAT_R16G16_FLOAT:
|
||||
return VK_FORMAT_R16G16_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R16G16_UNORM:
|
||||
return VK_FORMAT_R16G16_UNORM;
|
||||
break;
|
||||
case FORMAT_R16G16_UINT:
|
||||
return VK_FORMAT_R16G16_UINT;
|
||||
break;
|
||||
case FORMAT_R16G16_SNORM:
|
||||
return VK_FORMAT_R16G16_SNORM;
|
||||
break;
|
||||
case FORMAT_R16G16_SINT:
|
||||
return VK_FORMAT_R16G16_SINT;
|
||||
break;
|
||||
case FORMAT_R32_TYPELESS:
|
||||
return VK_FORMAT_R32_UINT;
|
||||
break;
|
||||
case FORMAT_D32_FLOAT:
|
||||
return VK_FORMAT_D32_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R32_FLOAT:
|
||||
return VK_FORMAT_R32_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R32_UINT:
|
||||
return VK_FORMAT_R32_UINT;
|
||||
break;
|
||||
case FORMAT_R32_SINT:
|
||||
return VK_FORMAT_R32_SINT;
|
||||
break;
|
||||
case FORMAT_R24G8_TYPELESS:
|
||||
return VK_FORMAT_R32_UINT;
|
||||
break;
|
||||
case FORMAT_D24_UNORM_S8_UINT:
|
||||
return VK_FORMAT_D24_UNORM_S8_UINT;
|
||||
break;
|
||||
case FORMAT_R24_UNORM_X8_TYPELESS:
|
||||
return VK_FORMAT_D24_UNORM_S8_UINT;
|
||||
break;
|
||||
case FORMAT_X24_TYPELESS_G8_UINT:
|
||||
return VK_FORMAT_D24_UNORM_S8_UINT;
|
||||
break;
|
||||
case FORMAT_R8G8_TYPELESS:
|
||||
return VK_FORMAT_R8G8_UINT;
|
||||
break;
|
||||
case FORMAT_R8G8_UNORM:
|
||||
return VK_FORMAT_R8G8_UNORM;
|
||||
break;
|
||||
case FORMAT_R8G8_UINT:
|
||||
return VK_FORMAT_R8G8_UINT;
|
||||
break;
|
||||
case FORMAT_R8G8_SNORM:
|
||||
return VK_FORMAT_R8G8_SNORM;
|
||||
break;
|
||||
case FORMAT_R8G8_SINT:
|
||||
return VK_FORMAT_R8G8_SINT;
|
||||
break;
|
||||
case FORMAT_R16_TYPELESS:
|
||||
return VK_FORMAT_R16_SFLOAT;
|
||||
break;
|
||||
case FORMAT_R16_FLOAT:
|
||||
return VK_FORMAT_R16_SFLOAT;
|
||||
break;
|
||||
case FORMAT_D16_UNORM:
|
||||
return VK_FORMAT_D16_UNORM;
|
||||
break;
|
||||
case FORMAT_R16_UNORM:
|
||||
return VK_FORMAT_R16_UNORM;
|
||||
break;
|
||||
case FORMAT_R16_UINT:
|
||||
return VK_FORMAT_R16_UINT;
|
||||
break;
|
||||
case FORMAT_R16_SNORM:
|
||||
return VK_FORMAT_R16_SNORM;
|
||||
break;
|
||||
case FORMAT_R16_SINT:
|
||||
return VK_FORMAT_R16_SINT;
|
||||
break;
|
||||
case FORMAT_R8_TYPELESS:
|
||||
return VK_FORMAT_R8_UINT;
|
||||
break;
|
||||
case FORMAT_R8_UNORM:
|
||||
return VK_FORMAT_R8_UNORM;
|
||||
break;
|
||||
case FORMAT_R8_UINT:
|
||||
return VK_FORMAT_R8_UINT;
|
||||
break;
|
||||
case FORMAT_R8_SNORM:
|
||||
return VK_FORMAT_R8_SNORM;
|
||||
break;
|
||||
case FORMAT_R8_SINT:
|
||||
return VK_FORMAT_R8_SINT;
|
||||
break;
|
||||
case FORMAT_A8_UNORM:
|
||||
return VK_FORMAT_R8_UNORM; // mismatch!
|
||||
break;
|
||||
case FORMAT_R1_UNORM:
|
||||
return VK_FORMAT_R8_UNORM; // mismatch!
|
||||
break;
|
||||
case FORMAT_R9G9B9E5_SHAREDEXP:
|
||||
return VK_FORMAT_E5B9G9R9_UFLOAT_PACK32; // maybe ok
|
||||
break;
|
||||
case FORMAT_R8G8_B8G8_UNORM:
|
||||
return VK_FORMAT_R8G8B8A8_UNORM; // mismatch
|
||||
break;
|
||||
case FORMAT_G8R8_G8B8_UNORM:
|
||||
return VK_FORMAT_R8G8B8A8_UNORM; // mismatch
|
||||
break;
|
||||
case FORMAT_BC1_TYPELESS:
|
||||
return VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC1_UNORM:
|
||||
return VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC1_UNORM_SRGB:
|
||||
return VK_FORMAT_BC1_RGBA_SRGB_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC2_TYPELESS:
|
||||
return VK_FORMAT_BC2_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC2_UNORM:
|
||||
return VK_FORMAT_BC2_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC2_UNORM_SRGB:
|
||||
return VK_FORMAT_BC2_SRGB_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC3_TYPELESS:
|
||||
return VK_FORMAT_BC3_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC3_UNORM:
|
||||
return VK_FORMAT_BC3_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC3_UNORM_SRGB:
|
||||
return VK_FORMAT_BC3_SRGB_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC4_TYPELESS:
|
||||
return VK_FORMAT_BC4_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC4_UNORM:
|
||||
return VK_FORMAT_BC4_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC4_SNORM:
|
||||
return VK_FORMAT_BC4_SNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC5_TYPELESS:
|
||||
return VK_FORMAT_BC5_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC5_UNORM:
|
||||
return VK_FORMAT_BC5_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC5_SNORM:
|
||||
return VK_FORMAT_BC5_SNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_B5G6R5_UNORM:
|
||||
return VK_FORMAT_B5G6R5_UNORM_PACK16;
|
||||
break;
|
||||
case FORMAT_B5G5R5A1_UNORM:
|
||||
return VK_FORMAT_A1R5G5B5_UNORM_PACK16;
|
||||
break;
|
||||
case FORMAT_B8G8R8A8_UNORM:
|
||||
return VK_FORMAT_B8G8R8A8_UNORM;
|
||||
break;
|
||||
case FORMAT_B8G8R8X8_UNORM:
|
||||
return VK_FORMAT_B8G8R8A8_UNORM;
|
||||
break;
|
||||
case FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
|
||||
return VK_FORMAT_B10G11R11_UFLOAT_PACK32; // mismatch
|
||||
break;
|
||||
case FORMAT_B8G8R8A8_TYPELESS:
|
||||
return VK_FORMAT_B8G8R8A8_UINT;
|
||||
break;
|
||||
case FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
return VK_FORMAT_B8G8R8A8_SRGB;
|
||||
break;
|
||||
case FORMAT_B8G8R8X8_TYPELESS:
|
||||
return VK_FORMAT_B8G8R8A8_UINT;
|
||||
break;
|
||||
case FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
return VK_FORMAT_B8G8R8A8_SRGB;
|
||||
break;
|
||||
case FORMAT_BC6H_TYPELESS:
|
||||
return VK_FORMAT_BC6H_SFLOAT_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC6H_UF16:
|
||||
return VK_FORMAT_BC6H_UFLOAT_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC6H_SF16:
|
||||
return VK_FORMAT_BC6H_SFLOAT_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC7_TYPELESS:
|
||||
return VK_FORMAT_BC7_UNORM_BLOCK; // maybe mismatch
|
||||
break;
|
||||
case FORMAT_BC7_UNORM:
|
||||
return VK_FORMAT_BC7_UNORM_BLOCK;
|
||||
break;
|
||||
case FORMAT_BC7_UNORM_SRGB:
|
||||
return VK_FORMAT_BC7_SRGB_BLOCK;
|
||||
break;
|
||||
case FORMAT_B4G4R4A4_UNORM:
|
||||
return VK_FORMAT_B4G4R4A4_UNORM_PACK16;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return VK_FORMAT_UNDEFINED;
|
||||
}
|
||||
|
||||
|
||||
// Engine functions
|
||||
GraphicsDevice_Vulkan::GraphicsDevice_Vulkan(wiWindowRegistration::window_type window, bool fullscreen) : GraphicsDevice()
|
||||
{
|
||||
@@ -624,11 +942,129 @@ namespace wiGraphicsTypes
|
||||
}
|
||||
HRESULT GraphicsDevice_Vulkan::CreateGraphicsPSO(const GraphicsPSODesc* pDesc, GraphicsPSO* pso)
|
||||
{
|
||||
return E_FAIL;
|
||||
pso->desc = *pDesc;
|
||||
|
||||
pso->renderPass_Vulkan = new VkRenderPass;
|
||||
pso->pipeline_Vulkan = new VkPipeline;
|
||||
|
||||
|
||||
std::vector<VkAttachmentDescription> attachments;
|
||||
std::vector<VkAttachmentReference> colorAttachmentRefs;
|
||||
|
||||
attachments.reserve(pDesc->numRTs);
|
||||
colorAttachmentRefs.reserve(pDesc->numRTs);
|
||||
|
||||
for (UINT i = 0; i < pDesc->numRTs; ++i)
|
||||
{
|
||||
VkAttachmentDescription attachment = {};
|
||||
attachment.format = _ConvertFormat(pDesc->RTFormats[i]);
|
||||
attachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
attachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
attachment.finalLayout = VK_IMAGE_LAYOUT_GENERAL;
|
||||
attachments.push_back(attachment);
|
||||
|
||||
VkAttachmentReference ref = {};
|
||||
ref.attachment = i;
|
||||
ref.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
colorAttachmentRefs.push_back(ref);
|
||||
}
|
||||
|
||||
|
||||
VkSubpassDescription subpass = {};
|
||||
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpass.colorAttachmentCount = pDesc->numRTs;
|
||||
subpass.pColorAttachments = colorAttachmentRefs.data();
|
||||
|
||||
if (pDesc->DSFormat != FORMAT_UNKNOWN && pDesc->dss != nullptr)
|
||||
{
|
||||
const bool depth_read_only = pDesc->dss->GetDesc().DepthWriteMask == DEPTH_WRITE_MASK_ZERO;
|
||||
const bool stencil_read_only = pDesc->dss->GetDesc().StencilWriteMask == 0;
|
||||
const bool all_read_only = depth_read_only && stencil_read_only;
|
||||
|
||||
VkAttachmentDescription attachment = {};
|
||||
attachment.format = _ConvertFormat(pDesc->DSFormat);
|
||||
attachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
attachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; // hmmm...
|
||||
attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; // hmmm...
|
||||
attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
attachment.finalLayout = VK_IMAGE_LAYOUT_GENERAL;
|
||||
attachments.push_back(attachment);
|
||||
|
||||
VkAttachmentReference depthAttachmentRef = {};
|
||||
depthAttachmentRef.attachment = static_cast<uint32_t>(attachments.size() - 1);
|
||||
depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
//if (all_read_only)
|
||||
//{
|
||||
// depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if (depth_read_only)
|
||||
// {
|
||||
// depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR;
|
||||
// }
|
||||
// else if (stencil_read_only)
|
||||
// {
|
||||
// depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// depthAttachmentRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
// }
|
||||
//}
|
||||
|
||||
subpass.pDepthStencilAttachment = &depthAttachmentRef;
|
||||
}
|
||||
|
||||
VkRenderPassCreateInfo renderPassInfo = {};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
renderPassInfo.attachmentCount = static_cast<uint32_t>(attachments.size());
|
||||
renderPassInfo.pAttachments = attachments.data();
|
||||
renderPassInfo.subpassCount = 1;
|
||||
renderPassInfo.pSubpasses = &subpass;
|
||||
|
||||
if (vkCreateRenderPass(device, &renderPassInfo, nullptr, &defaultRenderPass) != VK_SUCCESS) {
|
||||
throw std::runtime_error("failed to create render pass!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
VkGraphicsPipelineCreateInfo pipelineInfo = {};
|
||||
pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
pipelineInfo.layout = defaultPipelineLayout;
|
||||
pipelineInfo.renderPass = *static_cast<VkRenderPass*>(pso->renderPass_Vulkan);
|
||||
pipelineInfo.subpass = 0;
|
||||
pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
|
||||
// TODO...
|
||||
//pipelineInfo.stageCount;
|
||||
|
||||
if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, static_cast<VkPipeline*>(pso->pipeline_Vulkan)) != VK_SUCCESS) {
|
||||
throw std::runtime_error("failed to create graphics pipeline!");
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT GraphicsDevice_Vulkan::CreateComputePSO(const ComputePSODesc* pDesc, ComputePSO* pso)
|
||||
{
|
||||
return E_FAIL;
|
||||
pso->pipeline_Vulkan = new VkPipeline;
|
||||
|
||||
VkComputePipelineCreateInfo pipelineInfo = {};
|
||||
pipelineInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
|
||||
pipelineInfo.layout = defaultPipelineLayout;
|
||||
pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
|
||||
if (vkCreateComputePipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, static_cast<VkPipeline*>(pso->pipeline_Vulkan)) != VK_SUCCESS) {
|
||||
throw std::runtime_error("failed to create graphics pipeline!");
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "wiGraphicsResource.h"
|
||||
#include "Include_DX11.h"
|
||||
#include "Include_DX12.h"
|
||||
#include "Include_Vulkan.h"
|
||||
|
||||
namespace wiGraphicsTypes
|
||||
{
|
||||
@@ -262,18 +263,24 @@ namespace wiGraphicsTypes
|
||||
GraphicsPSO::GraphicsPSO()
|
||||
{
|
||||
SAFE_INIT(resource_DX12);
|
||||
SAFE_INIT(pipeline_Vulkan);
|
||||
SAFE_INIT(renderPass_Vulkan);
|
||||
}
|
||||
GraphicsPSO::~GraphicsPSO()
|
||||
{
|
||||
SAFE_DELETE(resource_DX12);
|
||||
SAFE_DELETE(pipeline_Vulkan);
|
||||
SAFE_DELETE(renderPass_Vulkan);
|
||||
}
|
||||
|
||||
ComputePSO::ComputePSO()
|
||||
{
|
||||
SAFE_INIT(resource_DX12);
|
||||
SAFE_INIT(pipeline_Vulkan);
|
||||
}
|
||||
ComputePSO::~ComputePSO()
|
||||
{
|
||||
SAFE_DELETE(resource_DX12);
|
||||
SAFE_DELETE(pipeline_Vulkan);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11VertexShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -60,6 +61,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11PixelShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -72,6 +74,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11GeometryShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -84,6 +87,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11HullShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -96,6 +100,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11DomainShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -108,6 +113,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11ComputeShader* resource_DX11;
|
||||
ShaderByteCode code;
|
||||
@@ -120,6 +126,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11SamplerState* resource_DX11;
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE* resource_DX12;
|
||||
@@ -136,6 +143,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
protected:
|
||||
ID3D11ShaderResourceView* SRV_DX11; // main resource SRV
|
||||
std::vector<ID3D11ShaderResourceView*> additionalSRVs_DX11; // can be used for sub-resources if requested
|
||||
@@ -157,6 +165,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11Buffer* resource_DX11;
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE* CBV_DX12;
|
||||
@@ -173,6 +182,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
size_t byteOffset;
|
||||
uint64_t residentFrame;
|
||||
@@ -188,6 +198,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11InputLayout* resource_DX11;
|
||||
|
||||
@@ -201,6 +212,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11BlendState* resource_DX11;
|
||||
BlendStateDesc desc;
|
||||
@@ -215,6 +227,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11DepthStencilState* resource_DX11;
|
||||
DepthStencilStateDesc desc;
|
||||
@@ -229,6 +242,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11RasterizerState* resource_DX11;
|
||||
RasterizerStateDesc desc;
|
||||
@@ -252,6 +266,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11RenderTargetView* RTV_DX11;
|
||||
std::vector<ID3D11RenderTargetView*> additionalRTVs_DX11;
|
||||
@@ -283,6 +298,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11Texture1D* texture1D_DX11;
|
||||
|
||||
@@ -298,6 +314,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11DepthStencilView* DSV_DX11;
|
||||
std::vector<ID3D11DepthStencilView*> additionalDSVs_DX11;
|
||||
@@ -317,6 +334,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D11Texture3D* texture3D_DX11;
|
||||
|
||||
@@ -335,6 +353,7 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
std::vector<ID3D11Query*> resource_DX11;
|
||||
std::vector<int> active;
|
||||
@@ -359,8 +378,11 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D12PipelineState* resource_DX12;
|
||||
void* renderPass_Vulkan;
|
||||
void* pipeline_Vulkan;
|
||||
GraphicsPSODesc desc;
|
||||
|
||||
public:
|
||||
@@ -373,8 +395,10 @@ namespace wiGraphicsTypes
|
||||
{
|
||||
friend class GraphicsDevice_DX11;
|
||||
friend class GraphicsDevice_DX12;
|
||||
friend class GraphicsDevice_Vulkan;
|
||||
private:
|
||||
ID3D12PipelineState* resource_DX12;
|
||||
void* pipeline_Vulkan;
|
||||
ComputePSODesc desc;
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user