diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index 2393a78c..2ec0ac8e 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -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); diff --git a/inc/hgl/graph/VKDeviceCreater.h b/inc/hgl/graph/VKDeviceCreater.h index 970925c8..607543e0 100644 --- a/inc/hgl/graph/VKDeviceCreater.h +++ b/inc/hgl/graph/VKDeviceCreater.h @@ -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; } }; diff --git a/src/SceneGraph/InlineGeometry.cpp b/src/SceneGraph/InlineGeometry.cpp index 141dd8a8..2c8cd17b 100644 --- a/src/SceneGraph/InlineGeometry.cpp +++ b/src/SceneGraph/InlineGeometry.cpp @@ -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 vertex=rc.AccessVBO(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 vertex=rc.AccessVBO(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 vertex=rc.AccessVBO(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 vertex=rc.AccessVBO(VAN::Position); @@ -1190,7 +1189,7 @@ namespace hgl PrimitiveCreater rc(db,vil); - if(!rc.Init(8)) + if(!rc.Init(8,24)) return(nullptr); AutoDelete vertex=rc.AccessVBO(VAN::Position); diff --git a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp index 7b970063..5a960e10 100644 --- a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp @@ -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