simply feature copy/check
This commit is contained in:
parent
c32f56fbe2
commit
0a752446b0
@ -132,7 +132,7 @@ public:
|
||||
{
|
||||
VulkanHardwareRequirement vh_req;
|
||||
|
||||
vh_req.wide_lines=VulkanHardwareRequirement::SupportLevel::Want;
|
||||
vh_req.wideLines=VulkanHardwareRequirement::SupportLevel::Want;
|
||||
|
||||
device=CreateRenderDevice(inst,win,&vh_req);
|
||||
|
||||
|
@ -14,42 +14,42 @@ struct VulkanHardwareRequirement
|
||||
Must, ///<必须支持
|
||||
};
|
||||
|
||||
uint min_1d_image_size;
|
||||
uint min_2d_image_size;
|
||||
uint min_3d_image_size;
|
||||
uint min_cube_image_size;
|
||||
uint min_array_image_layers;
|
||||
uint maxImageDimension1D;
|
||||
uint maxImageDimension2D;
|
||||
uint maxImageDimension3D;
|
||||
uint maxImageDimensionCube;
|
||||
uint maxImageArrayLayers;
|
||||
|
||||
uint min_vertex_input_attribute; ///<最小顶点输入属性数量需求
|
||||
uint min_color_attachments; ///<最小颜色输出成份数量需求
|
||||
uint maxVertexInputAttributes; ///<最大顶点输入属性数量需求
|
||||
uint maxColorAttachments; ///<最大颜色输出成份数量需求
|
||||
|
||||
uint min_push_constant_size; ///<最小push constant大小
|
||||
uint min_ubo_range; ///<最小ubo range需求
|
||||
uint min_ssbo_range; ///<最小ssbo range需求
|
||||
uint maxPushConstantsSize; ///<最大push constant大小
|
||||
uint maxUniformBufferRange; ///<最大ubo range需求
|
||||
uint maxStorageBufferRange; ///<最大ssbo range需求
|
||||
|
||||
uint min_draw_indirect_count; ///<最小间接绘制次数需求
|
||||
uint maxDrawIndirectCount; ///<最大间接绘制次数需求
|
||||
|
||||
SupportLevel geometry_shader; ///<要求支持几何着色器
|
||||
SupportLevel tessellation_shader; ///<要求支持细分着色器
|
||||
SupportLevel geometryShader; ///<要求支持几何着色器
|
||||
SupportLevel tessellationShader; ///<要求支持细分着色器
|
||||
|
||||
SupportLevel sample_rate_shading; ///<要求支持采样率着色
|
||||
SupportLevel sampleRateShading; ///<要求支持采样率着色
|
||||
|
||||
SupportLevel multi_draw_indirect; ///<要求支持MultiDrawIndirect
|
||||
SupportLevel multiDrawIndirect; ///<要求支持MultiDrawIndirect
|
||||
|
||||
SupportLevel fill_mode_non_solid; ///<要求支持非实体填充模式
|
||||
SupportLevel fillModeNonSolid; ///<要求支持非实体填充模式
|
||||
|
||||
SupportLevel wide_lines; ///<要求支持宽线条
|
||||
SupportLevel line_rasterization; ///<要支持线条特性(这功能mac/ios平台不支持)
|
||||
SupportLevel large_points; ///<要求支持绘制大点
|
||||
SupportLevel wideLines; ///<要求支持宽线条
|
||||
SupportLevel lineRasterization; ///<要支持线条特性(这功能mac/ios平台不支持)
|
||||
SupportLevel largePoints; ///<要求支持绘制大点
|
||||
|
||||
SupportLevel texture_cube_array; ///<要求支持立方体数组纹理
|
||||
SupportLevel imageCubeArray; ///<要求支持立方体数组纹理
|
||||
|
||||
SupportLevel uint8_draw_index; ///<要求支持8位索引
|
||||
SupportLevel uint32_draw_index; ///<要求支持32位索引
|
||||
SupportLevel fullDrawIndexUint8; ///<要求支持8位索引
|
||||
SupportLevel fullDrawIndexUint32; ///<要求支持32位索引
|
||||
|
||||
struct
|
||||
{
|
||||
SupportLevel bc,etc2,astc_ldr,astc_hdr,pvrtc; ///<要求支持的压缩纹理格式
|
||||
SupportLevel BC,ETC2,ASTC_LDR,ASTC_HDR,PVRTC; ///<要求支持的压缩纹理格式
|
||||
}texture_compression;
|
||||
|
||||
//dynamic_state VK_EXT_extended_dynamic_state
|
||||
@ -89,12 +89,12 @@ struct VulkanHardwareRequirement
|
||||
// line stipple
|
||||
// depth clip -1 to 1
|
||||
// shading rate image enable
|
||||
SupportLevel dynamic_state[3]; ///<要求支持动态状态
|
||||
SupportLevel dynamicState[3]; ///<要求支持动态状态
|
||||
|
||||
// 1.3 特性
|
||||
SupportLevel dynamic_rendering; ///<要求支持动态渲染
|
||||
SupportLevel dynamicRendering; ///<要求支持动态渲染
|
||||
|
||||
uint32_t descriptor_pool; ///<描述符池大小(默认1024)
|
||||
uint32_t descriptor_pool; ///<描述符池大小(默认1024)
|
||||
|
||||
public:
|
||||
|
||||
@ -104,10 +104,10 @@ public:
|
||||
|
||||
descriptor_pool=1024;
|
||||
|
||||
geometry_shader=SupportLevel::Want;
|
||||
geometryShader=SupportLevel::Want;
|
||||
|
||||
uint8_draw_index=SupportLevel::Want;
|
||||
uint32_draw_index=SupportLevel::Want;
|
||||
fullDrawIndexUint8=SupportLevel::Want;
|
||||
fullDrawIndexUint32=SupportLevel::Want;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -303,7 +303,7 @@ namespace hgl
|
||||
|
||||
PrimitiveCreater rc(db,vil);
|
||||
|
||||
if(!rc.Init(24))
|
||||
if(!rc.Init(24,6*2*3))
|
||||
return(nullptr);
|
||||
|
||||
rc.WriteVBO(VAN::Position,positions,sizeof(positions));
|
||||
@ -456,7 +456,7 @@ namespace hgl
|
||||
float helpMatrix[16];
|
||||
float tex_x;
|
||||
|
||||
if(!rc.Init(numberVertices))
|
||||
if(!rc.Init(numberVertices,numberIndices))
|
||||
return(nullptr);
|
||||
|
||||
AutoDelete<VB3f> vertex=rc.AccessVBO<VB3f>(VAN::Position);
|
||||
@ -537,7 +537,7 @@ namespace hgl
|
||||
if (numberSlices < 3 || numberVertices > GLUS_MAX_VERTICES || numberIndices > GLUS_MAX_INDICES)
|
||||
return nullptr;
|
||||
|
||||
if(!rc.Init(numberVertices))
|
||||
if(!rc.Init(numberVertices,numberIndices))
|
||||
return(nullptr);
|
||||
|
||||
AutoDelete<VB3f> vertex=rc.AccessVBO<VB3f>(VAN::Position);
|
||||
@ -674,7 +674,7 @@ namespace hgl
|
||||
sIncr = 1.0f / (float) tci->numberSlices;
|
||||
tIncr = 1.0f / (float) tci->numberStacks;
|
||||
|
||||
if(!rc.Init(numberVertices))
|
||||
if(!rc.Init(numberVertices,numberIndices))
|
||||
return(nullptr);
|
||||
|
||||
AutoDelete<VB3f> vertex=rc.AccessVBO<VB3f>(VAN::Position);
|
||||
@ -804,7 +804,7 @@ namespace hgl
|
||||
|
||||
uint numberVertices = (cci->numberSlices + 2) * 2 + (cci->numberSlices + 1) * 2;
|
||||
|
||||
if(!rc.Init(numberVertices))
|
||||
if(!rc.Init(numberVertices,numberIndices))
|
||||
return(nullptr);
|
||||
|
||||
float angleStep = (2.0f * HGL_PI) / ((float) cci->numberSlices);
|
||||
@ -1019,12 +1019,11 @@ namespace hgl
|
||||
uint i, j;
|
||||
|
||||
uint numberVertices = (cci->numberSlices + 2) + (cci->numberSlices + 1) * (cci->numberStacks + 1);
|
||||
|
||||
if(!rc.Init(numberVertices))
|
||||
return(nullptr);
|
||||
|
||||
uint numberIndices = cci->numberSlices * 3 + cci->numberSlices * 6 * cci->numberStacks;
|
||||
|
||||
if(!rc.Init(numberVertices,numberIndices))
|
||||
return(nullptr);
|
||||
|
||||
float angleStep = (2.0f * HGL_PI) / ((float) cci->numberSlices);
|
||||
|
||||
float h = 2.0f * cci->halfExtend;
|
||||
@ -1145,7 +1144,7 @@ namespace hgl
|
||||
|
||||
PrimitiveCreater rc(db,vil);
|
||||
|
||||
if(!rc.Init(6))
|
||||
if(!rc.Init(6,0))
|
||||
return(nullptr);
|
||||
|
||||
AutoDelete<VB3f> vertex=rc.AccessVBO<VB3f>(VAN::Position);
|
||||
@ -1190,7 +1189,7 @@ namespace hgl
|
||||
|
||||
PrimitiveCreater rc(db,vil);
|
||||
|
||||
if(!rc.Init(8))
|
||||
if(!rc.Init(8,24))
|
||||
return(nullptr);
|
||||
|
||||
AutoDelete<VB3f> vertex=rc.AccessVBO<VB3f>(VAN::Position);
|
||||
|
@ -77,40 +77,42 @@ namespace
|
||||
if(physical_device->CheckExtensionSupport(ext_name))
|
||||
ext_list->Add(ext_name);
|
||||
|
||||
if(require.line_rasterization>=VulkanHardwareRequirement::SupportLevel::Want)
|
||||
if(require.lineRasterization>=VulkanHardwareRequirement::SupportLevel::Want)
|
||||
ext_list->Add(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME);
|
||||
|
||||
if(require.texture_compression.pvrtc>=VulkanHardwareRequirement::SupportLevel::Want) //前面检测过了,所以这里不用再次检测是否支持
|
||||
if(require.texture_compression.PVRTC>=VulkanHardwareRequirement::SupportLevel::Want) //前面检测过了,所以这里不用再次检测是否支持
|
||||
ext_list->Add(VK_IMG_FORMAT_PVRTC_EXTENSION_NAME);
|
||||
|
||||
if(require.uint8_draw_index>=VulkanHardwareRequirement::SupportLevel::Want)
|
||||
if(require.fullDrawIndexUint8>=VulkanHardwareRequirement::SupportLevel::Want)
|
||||
ext_list->Add(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
void SetDeviceFeatures(VkPhysicalDeviceFeatures *features,const VkPhysicalDeviceFeatures &pdf,const VulkanHardwareRequirement &require)
|
||||
{
|
||||
#define FEATURE_COPY(name) features->name=pdf.name;
|
||||
#define REQURE_FEATURE_COPY(rn,fn) if(require.rn>=VulkanHardwareRequirement::SupportLevel::Want)features->fn=pdf.fn;
|
||||
#define REQURE_FEATURE_COPY(name) if(require.name>=VulkanHardwareRequirement::SupportLevel::Want)features->name=pdf.name;
|
||||
#define REQURE_TEXTURE_FEATURE_COPY(name) if(require.texture_compression.name>=VulkanHardwareRequirement::SupportLevel::Want)features->textureCompression##name=pdf.textureCompression##name;
|
||||
|
||||
FEATURE_COPY(multiDrawIndirect);
|
||||
FEATURE_COPY(samplerAnisotropy);
|
||||
|
||||
REQURE_FEATURE_COPY(geometry_shader, geometryShader);
|
||||
REQURE_FEATURE_COPY(geometryShader);
|
||||
|
||||
REQURE_FEATURE_COPY(texture_cube_array, imageCubeArray);
|
||||
REQURE_FEATURE_COPY(imageCubeArray);
|
||||
|
||||
REQURE_FEATURE_COPY(uint32_draw_index, fullDrawIndexUint32);
|
||||
REQURE_FEATURE_COPY(sample_rate_shading, sampleRateShading);
|
||||
REQURE_FEATURE_COPY(fullDrawIndexUint32);
|
||||
REQURE_FEATURE_COPY(sampleRateShading);
|
||||
|
||||
REQURE_FEATURE_COPY(fill_mode_non_solid, fillModeNonSolid);
|
||||
REQURE_FEATURE_COPY(fillModeNonSolid);
|
||||
|
||||
REQURE_FEATURE_COPY(wide_lines, wideLines)
|
||||
REQURE_FEATURE_COPY(large_points, largePoints)
|
||||
REQURE_FEATURE_COPY(wideLines)
|
||||
REQURE_FEATURE_COPY(largePoints)
|
||||
|
||||
REQURE_FEATURE_COPY(texture_compression.bc, textureCompressionBC);
|
||||
REQURE_FEATURE_COPY(texture_compression.etc2, textureCompressionETC2);
|
||||
REQURE_FEATURE_COPY(texture_compression.astc_ldr, textureCompressionASTC_LDR);
|
||||
REQURE_TEXTURE_FEATURE_COPY(BC);
|
||||
REQURE_TEXTURE_FEATURE_COPY(ETC2);
|
||||
REQURE_TEXTURE_FEATURE_COPY(ASTC_LDR);
|
||||
|
||||
#undef REQURE_TEXTURE_FEATURE_COPY
|
||||
#undef REQURE_FEATURE_COPY
|
||||
#undef FEATURE_COPY
|
||||
}
|
||||
@ -371,22 +373,22 @@ bool VulkanDeviceCreater::RequirementCheck()
|
||||
{
|
||||
const VkPhysicalDeviceLimits &limits=physical_device->GetLimits();
|
||||
|
||||
#define VHR_MINCHECK(name,lname) if(require.name>0&&require.name>limits.lname)return(false);
|
||||
#define VHR_MINCHECK(name) if(require.name>0&&require.name>limits.name)return(false);
|
||||
|
||||
VHR_MINCHECK(min_1d_image_size ,maxImageDimension1D )
|
||||
VHR_MINCHECK(min_2d_image_size ,maxImageDimension2D )
|
||||
VHR_MINCHECK(min_3d_image_size ,maxImageDimension3D )
|
||||
VHR_MINCHECK(min_cube_image_size ,maxImageDimensionCube )
|
||||
VHR_MINCHECK(min_array_image_layers ,maxImageArrayLayers )
|
||||
VHR_MINCHECK(maxImageDimension1D )
|
||||
VHR_MINCHECK(maxImageDimension2D )
|
||||
VHR_MINCHECK(maxImageDimension3D )
|
||||
VHR_MINCHECK(maxImageDimensionCube )
|
||||
VHR_MINCHECK(maxImageArrayLayers )
|
||||
|
||||
VHR_MINCHECK(min_vertex_input_attribute ,maxVertexInputAttributes)
|
||||
VHR_MINCHECK(min_color_attachments ,maxColorAttachments )
|
||||
VHR_MINCHECK(maxVertexInputAttributes)
|
||||
VHR_MINCHECK(maxColorAttachments )
|
||||
|
||||
VHR_MINCHECK(min_push_constant_size ,maxPushConstantsSize )
|
||||
VHR_MINCHECK(min_ubo_range ,maxUniformBufferRange )
|
||||
VHR_MINCHECK(min_ssbo_range ,maxStorageBufferRange )
|
||||
VHR_MINCHECK(maxPushConstantsSize )
|
||||
VHR_MINCHECK(maxUniformBufferRange )
|
||||
VHR_MINCHECK(maxStorageBufferRange )
|
||||
|
||||
VHR_MINCHECK(min_draw_indirect_count ,maxDrawIndirectCount )
|
||||
VHR_MINCHECK(maxDrawIndirectCount )
|
||||
|
||||
#undef VHR_MINCHECK
|
||||
|
||||
@ -395,39 +397,45 @@ bool VulkanDeviceCreater::RequirementCheck()
|
||||
|
||||
#define VHRC(name,check) if(require.name>=VulkanHardwareRequirement::SupportLevel::Must&&(!check))return(false);
|
||||
|
||||
#define VHRC_F10(name,f10name) VHRC(name,features10.f10name)
|
||||
#define VHRC_F13(name,f13name) VHRC(name,features13.f13name)
|
||||
#define VHRC_F10(name) VHRC(name,features10.name)
|
||||
#define VHRC_F13(name) VHRC(name,features13.name)
|
||||
#define VHRC_PDE(name,pdename) VHRC(name,physical_device->CheckExtensionSupport(VK_##pdename##_EXTENSION_NAME))
|
||||
#define VHRC_TC10(name) VHRC(texture_compression.name,features10.textureCompression##name)
|
||||
#define VHRC_TC13(name) VHRC(texture_compression.name,features13.textureCompression##name)
|
||||
|
||||
VHRC_F10(geometry_shader, geometryShader);
|
||||
VHRC_F10(tessellation_shader, tessellationShader);
|
||||
VHRC_F10(geometryShader);
|
||||
VHRC_F10(tessellationShader);
|
||||
|
||||
VHRC_F10(multi_draw_indirect, multiDrawIndirect);
|
||||
VHRC_F10(multiDrawIndirect);
|
||||
|
||||
VHRC_F10(sample_rate_shading, sampleRateShading);
|
||||
VHRC_F10(sampleRateShading);
|
||||
|
||||
VHRC_F10(fill_mode_non_solid, fillModeNonSolid);
|
||||
VHRC_F10(fillModeNonSolid);
|
||||
|
||||
VHRC_F10(wide_lines, wideLines);
|
||||
VHRC_PDE(line_rasterization, EXT_LINE_RASTERIZATION);
|
||||
VHRC_F10(large_points, largePoints);
|
||||
VHRC_F10(wideLines);
|
||||
|
||||
VHRC_F10(texture_cube_array, imageCubeArray);
|
||||
#ifndef __APPLE__
|
||||
VHRC_PDE(lineRasterization, EXT_LINE_RASTERIZATION);
|
||||
#endif//__APPLE__
|
||||
|
||||
VHRC_PDE(uint8_draw_index, EXT_INDEX_TYPE_UINT8);
|
||||
VHRC_F10(uint32_draw_index, fullDrawIndexUint32);
|
||||
VHRC_F10(largePoints);
|
||||
|
||||
VHRC_F10(texture_compression.bc, textureCompressionBC);
|
||||
VHRC_F10(texture_compression.etc2, textureCompressionETC2);
|
||||
VHRC_F10(texture_compression.astc_ldr, textureCompressionASTC_LDR);
|
||||
VHRC_F13(texture_compression.astc_hdr, textureCompressionASTC_HDR);
|
||||
VHRC_PDE(texture_compression.pvrtc, IMG_FORMAT_PVRTC);
|
||||
VHRC_F10(imageCubeArray);
|
||||
|
||||
VHRC_F13(dynamic_rendering, dynamicRendering);
|
||||
VHRC_PDE(fullDrawIndexUint8, EXT_INDEX_TYPE_UINT8);
|
||||
VHRC_F10(fullDrawIndexUint32);
|
||||
|
||||
VHRC_PDE(dynamic_state[0], EXT_EXTENDED_DYNAMIC_STATE);
|
||||
VHRC_PDE(dynamic_state[1], EXT_EXTENDED_DYNAMIC_STATE_2);
|
||||
VHRC_PDE(dynamic_state[2], EXT_EXTENDED_DYNAMIC_STATE_3);
|
||||
VHRC_TC10(BC);
|
||||
VHRC_TC10(ETC2);
|
||||
VHRC_TC10(ASTC_LDR);
|
||||
VHRC_TC13(ASTC_HDR);
|
||||
VHRC_PDE(texture_compression.PVRTC, IMG_FORMAT_PVRTC);
|
||||
|
||||
VHRC_F13(dynamicRendering);
|
||||
|
||||
VHRC_PDE(dynamicState[0], EXT_EXTENDED_DYNAMIC_STATE);
|
||||
VHRC_PDE(dynamicState[1], EXT_EXTENDED_DYNAMIC_STATE_2);
|
||||
VHRC_PDE(dynamicState[2], EXT_EXTENDED_DYNAMIC_STATE_3);
|
||||
|
||||
#undef VHRC_PDE
|
||||
#undef VHRC_F13
|
||||
|
Loading…
x
Reference in New Issue
Block a user