35 void SetObjectName(
const VkDevice device,
const uint64_t
object,
const VkObjectType objectType,
const char* name )
39 VkDebugUtilsObjectNameInfoEXT nameInfo{};
40 nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
41 nameInfo.objectHandle = object;
42 nameInfo.objectType = objectType;
43 nameInfo.pObjectName = name;
48 void SetObjectTag(
const VkDevice device,
const uint64_t
object,
const VkObjectType objectType,
const size_t tagSize,
void* tagData,
const uint64_t tagName )
52 VkDebugUtilsObjectTagInfoEXT tagInfo{};
53 tagInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT;
54 tagInfo.objectHandle = object;
55 tagInfo.objectType = objectType;
56 tagInfo.tagSize = tagSize;
57 tagInfo.tagName = tagName;
58 tagInfo.pTag = tagData;
68 const VkCommandBuffer commandBuffer,
77 DIVIDE_UNEXPECTED_CALL_MSG(
"Multi-draw is incompatible with instancing as gl_DrawID will have the wrong value (base instance is also used for buffer indexing). Split the call into multiple draw commands with manual uniform-updates in-between!" );
81 if ( useIndirectBuffer )
93 if ( useIndirectBuffer )
229 "VKUtil::InternalFormat: Vulkan supports VK_FORMAT_R8(G8)_SRGB and BC1/2/3/7, but OpenGL doesn't, so for now we completely ignore these formats!" );
232 if ( isNormalized && !isDepth )
252 "VKUtil::InternalFormat: Vulkan only supports 8Bpp for BGR(A) formats.");
255 switch ( baseFormat )
324 return VK_FORMAT_B5G6R5_UNORM_PACK16;
330 case GFXDataFormat::UNSIGNED_BYTE:
return isNormalized ? (isSRGB ? VK_FORMAT_B8G8R8_SRGB : VK_FORMAT_B8G8R8_UNORM) : VK_FORMAT_B8G8R8_UINT;
340 return VK_FORMAT_R5G6B5_UNORM_PACK16;
346 case GFXDataFormat::UNSIGNED_BYTE:
return isNormalized ? (isSRGB ? VK_FORMAT_R8G8B8_SRGB : VK_FORMAT_R8G8B8_UNORM) : VK_FORMAT_R8G8B8_UINT;
362 return VK_FORMAT_B4G4R4A4_UNORM_PACK16;
368 case GFXDataFormat::UNSIGNED_BYTE:
return isNormalized ? (isSRGB ? VK_FORMAT_B8G8R8A8_SRGB : VK_FORMAT_B8G8R8A8_UNORM) : VK_FORMAT_B8G8R8A8_UINT;
378 return VK_FORMAT_R4G4B4A4_UNORM_PACK16;
384 case GFXDataFormat::UNSIGNED_BYTE:
return isNormalized ? (isSRGB ? VK_FORMAT_R8G8B8A8_SRGB : VK_FORMAT_R8G8B8A8_UNORM) : VK_FORMAT_R8G8B8A8_UINT;
401 case GFXImageFormat::BC7:
return isSRGB ? VK_FORMAT_BC7_SRGB_BLOCK : VK_FORMAT_BC7_UNORM_BLOCK;
413 return VK_FORMAT_MAX_ENUM;
422 switch ( componentCount )
424 case 1u:
return normalized ? VK_FORMAT_R8_UNORM : VK_FORMAT_R8_UINT;
425 case 2u:
return normalized ? VK_FORMAT_R8G8_UNORM : VK_FORMAT_R8G8_UINT;
426 case 3u:
return normalized ? VK_FORMAT_R8G8B8_UNORM : VK_FORMAT_R8G8B8_UINT;
427 case 4u:
return normalized ? VK_FORMAT_R8G8B8A8_UNORM : VK_FORMAT_R8G8B8A8_UINT;
433 switch ( componentCount )
435 case 1u:
return normalized ? VK_FORMAT_R16_UNORM : VK_FORMAT_R16_UINT;
436 case 2u:
return normalized ? VK_FORMAT_R16G16_UNORM : VK_FORMAT_R16G16_UINT;
437 case 3u:
return normalized ? VK_FORMAT_R16G16B16_UNORM : VK_FORMAT_R16G16B16_UINT;
438 case 4u:
return normalized ? VK_FORMAT_R16G16B16A16_UNORM : VK_FORMAT_R16G16B16A16_UINT;
444 switch ( componentCount )
446 case 1u:
return VK_FORMAT_R32_UINT;
447 case 2u:
return VK_FORMAT_R32G32_UINT;
448 case 3u:
return VK_FORMAT_R32G32B32_UINT;
449 case 4u:
return VK_FORMAT_R32G32B32A32_UINT;
455 switch ( componentCount )
457 case 1u:
return normalized ? VK_FORMAT_R8_SNORM : VK_FORMAT_R8_SINT;
458 case 2u:
return normalized ? VK_FORMAT_R8_SNORM : VK_FORMAT_R8_SINT;
459 case 3u:
return normalized ? VK_FORMAT_R8_SNORM : VK_FORMAT_R8_SINT;
460 case 4u:
return normalized ? VK_FORMAT_R8_SNORM : VK_FORMAT_R8_SINT;
466 switch ( componentCount )
468 case 1u:
return normalized ? VK_FORMAT_R16_SNORM : VK_FORMAT_R16_SINT;
469 case 2u:
return normalized ? VK_FORMAT_R16G16_SNORM : VK_FORMAT_R16G16_SINT;
470 case 3u:
return normalized ? VK_FORMAT_R16G16B16_SNORM : VK_FORMAT_R16G16B16_SINT;
471 case 4u:
return normalized ? VK_FORMAT_R16G16B16A16_SNORM : VK_FORMAT_R16G16B16A16_SINT;
477 switch ( componentCount )
479 case 1u:
return VK_FORMAT_R32_SINT;
480 case 2u:
return VK_FORMAT_R32G32_SINT;
481 case 3u:
return VK_FORMAT_R32G32B32_SINT;
482 case 4u:
return VK_FORMAT_R32G32B32A32_SINT;
488 switch ( componentCount )
490 case 1u:
return VK_FORMAT_R16_SFLOAT;
491 case 2u:
return VK_FORMAT_R16G16_SFLOAT;
492 case 3u:
return VK_FORMAT_R16G16B16_SFLOAT;
493 case 4u:
return VK_FORMAT_R16G16B16A16_SFLOAT;
499 switch ( componentCount )
501 case 1u:
return VK_FORMAT_R32_SFLOAT;
502 case 2u:
return VK_FORMAT_R32G32_SFLOAT;
503 case 3u:
return VK_FORMAT_R32G32B32_SFLOAT;
504 case 4u:
return VK_FORMAT_R32G32B32A32_SFLOAT;
513 return VK_FORMAT_MAX_ENUM;
528 return VK_DESCRIPTOR_TYPE_MAX_ENUM;
static DepthFormatInformation s_depthFormatInformation
static VKStateTracker & GetStateTracker() noexcept
static bool s_hasDebugMarkerSupport
void SetObjectName(VkDevice device, uint64_t object, VkObjectType objectType, const char *name)
PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT
PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT
PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT
PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT
void SetObjectTag(VkDevice device, uint64_t object, const VkObjectType objectType, size_t tagSize, void *tagData, uint64_t tagName)
VkDescriptorType vkDescriptorType(DescriptorSetBindingType type, bool isPushDescriptor) noexcept
VkFormat InternalFormat(GFXImageFormat baseFormat, GFXDataFormat dataType, GFXImagePacking packing) noexcept
void SubmitRenderCommand(const GenericDrawCommand &drawCommand, const VkCommandBuffer commandBuffer, bool indexed)
Note: If internal format is not GL_NONE, an indexed draw is issued!
void OnStartup(VkDevice device)
Handle console commands that start with a forward slash.
std::array< VkBlendFactor, to_base(BlendProperty::COUNT)> vkBlendTable
std::array< VkPolygonMode, to_base(FillMode::COUNT)> vkFillModeTable
bool isEnabledOption(const GenericDrawCommand &cmd, CmdRenderOptions option) noexcept
std::array< VkBlendOp, to_base(BlendOperation::COUNT)> vkBlendOpTable
std::array< VkImageViewType, to_base(TextureType::COUNT)> vkTextureViewTypeTable
@ TRIANGLE_STRIP_ADJACENCY
@ INV
Bitwise inverts the current stencil buffer value.
@ COUNT
Place all properties above this.
@ ZERO
Sets the stencil buffer value to 0.
@ REPLACE
Sets the stencil buffer value to ref, as specified by StencilFunc.
@ KEEP
Keeps the current value.
@ DECR
Decrements the current stencil buffer value. Clamps to 0.
std::array< VkCompareOp, to_base(ComparisonFunction::COUNT)> vkCompareFuncTable
@ COUNT
Place all properties above this.
@ COUNT
Place all properties above this.
bool IsDepthTexture(GFXImagePacking packing) noexcept
@ NEQUAL
Passes if the incoming YYY value is not equal to the stored YYY value.
@ LESS
Passes if the incoming YYY value is less than the stored YYY value.
@ COUNT
Place all properties above this.
@ EQUAL
Passes if the incoming YYY value is equal to the stored YYY value.
@ GREATER
Passes if the incoming YYY value is greater than the stored YYY value.
@ TESSELLATION_EVAL_INVOCATIONS
std::array< VkImageType, to_base(TextureType::COUNT)> vkTextureTypeTable
@ WIREFRAME
Boundary edges of the polygon are drawn as line segments.
@ COUNT
Place all properties above this.
@ SOLID
The interior of the polygon is filled.
constexpr U8 to_U8(const T value)
std::array< VkSamplerAddressMode, to_base(TextureWrap::COUNT)> vkWrapTable
std::array< VkPrimitiveTopology, to_base(PrimitiveTopology::COUNT)> vkPrimitiveTypeTable
std::array< VkCullModeFlags, to_base(CullMode::COUNT)> vkCullModeTable
@ BACK
Cull Back facing polygons (aka CW)
@ COUNT
Place all properties above this.
@ FRONT
Cull Front facing polygons (aka CCW)
std::array< VulkanQueryType, to_base(QueryType::COUNT)> vkQueryTypeTable
std::array< VkShaderStageFlagBits, to_base(ShaderType::COUNT)> vkShaderStageTable
std::array< VkStencilOp, to_base(StencilOperation::COUNT)> vkStencilOpTable
constexpr auto to_base(const Type value) -> Type
IndirectIndexedDrawCommand _cmd
size_t _drawIndirectBufferOffset