@ -40,9 +40,9 @@ constexpr u32 ASTC_BINDING_ENC_BUFFER = 1;
constexpr u32 ASTC_BINDING_6_TO_8_BUFFER = 2 ;
constexpr u32 ASTC_BINDING_6_TO_8_BUFFER = 2 ;
constexpr u32 ASTC_BINDING_7_TO_8_BUFFER = 3 ;
constexpr u32 ASTC_BINDING_7_TO_8_BUFFER = 3 ;
constexpr u32 ASTC_BINDING_8_TO_8_BUFFER = 4 ;
constexpr u32 ASTC_BINDING_8_TO_8_BUFFER = 4 ;
constexpr u32 ASTC_BINDING_ BYTE_TO_16 _BUFFER = 5 ;
constexpr u32 ASTC_BINDING_ SWIZZLE _BUFFER = 5 ;
constexpr u32 ASTC_BINDING_ SWIZZLE_BUFFER = 6 ;
constexpr u32 ASTC_BINDING_ OUTPUT_IMAGE = 6 ;
constexpr u32 ASTC_BINDING_OUTPUT_IMAGE = 7 ;
constexpr size_t ASTC_NUM_BINDINGS = 7 ;
VkPushConstantRange BuildComputePushConstantRange ( std : : size_t size ) {
VkPushConstantRange BuildComputePushConstantRange ( std : : size_t size ) {
return {
return {
@ -71,7 +71,7 @@ std::array<VkDescriptorSetLayoutBinding, 2> BuildInputOutputDescriptorSetBinding
} } ;
} } ;
}
}
std : : array < VkDescriptorSetLayoutBinding , 8 > BuildASTCDescriptorSetBindings ( ) {
std : : array < VkDescriptorSetLayoutBinding , ASTC_NUM_BINDINGS > BuildASTCDescriptorSetBindings ( ) {
return { {
return { {
{
{
. binding = ASTC_BINDING_INPUT_BUFFER ,
. binding = ASTC_BINDING_INPUT_BUFFER ,
@ -108,13 +108,6 @@ std::array<VkDescriptorSetLayoutBinding, 8> BuildASTCDescriptorSetBindings() {
. stageFlags = VK_SHADER_STAGE_COMPUTE_BIT ,
. stageFlags = VK_SHADER_STAGE_COMPUTE_BIT ,
. pImmutableSamplers = nullptr ,
. pImmutableSamplers = nullptr ,
} ,
} ,
{
. binding = ASTC_BINDING_BYTE_TO_16_BUFFER ,
. descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ,
. descriptorCount = 1 ,
. stageFlags = VK_SHADER_STAGE_COMPUTE_BIT ,
. pImmutableSamplers = nullptr ,
} ,
{
{
. binding = ASTC_BINDING_SWIZZLE_BUFFER ,
. binding = ASTC_BINDING_SWIZZLE_BUFFER ,
. descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ,
. descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ,
@ -143,7 +136,8 @@ VkDescriptorUpdateTemplateEntryKHR BuildInputOutputDescriptorUpdateTemplate() {
} ;
} ;
}
}
std : : array < VkDescriptorUpdateTemplateEntryKHR , 8 > BuildASTCPassDescriptorUpdateTemplateEntry ( ) {
std : : array < VkDescriptorUpdateTemplateEntryKHR , ASTC_NUM_BINDINGS >
BuildASTCPassDescriptorUpdateTemplateEntry ( ) {
return { {
return { {
{
{
. dstBinding = ASTC_BINDING_INPUT_BUFFER ,
. dstBinding = ASTC_BINDING_INPUT_BUFFER ,
@ -185,14 +179,6 @@ std::array<VkDescriptorUpdateTemplateEntryKHR, 8> BuildASTCPassDescriptorUpdateT
. offset = ASTC_BINDING_8_TO_8_BUFFER * sizeof ( DescriptorUpdateEntry ) ,
. offset = ASTC_BINDING_8_TO_8_BUFFER * sizeof ( DescriptorUpdateEntry ) ,
. stride = sizeof ( DescriptorUpdateEntry ) ,
. stride = sizeof ( DescriptorUpdateEntry ) ,
} ,
} ,
{
. dstBinding = ASTC_BINDING_BYTE_TO_16_BUFFER ,
. dstArrayElement = 0 ,
. descriptorCount = 1 ,
. descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER ,
. offset = ASTC_BINDING_BYTE_TO_16_BUFFER * sizeof ( DescriptorUpdateEntry ) ,
. stride = sizeof ( DescriptorUpdateEntry ) ,
} ,
{
{
. dstBinding = ASTC_BINDING_SWIZZLE_BUFFER ,
. dstBinding = ASTC_BINDING_SWIZZLE_BUFFER ,
. dstArrayElement = 0 ,
. dstArrayElement = 0 ,
@ -222,15 +208,6 @@ struct AstcPushConstants {
u32 block_height_mask ;
u32 block_height_mask ;
} ;
} ;
struct AstcBufferData {
decltype ( SWIZZLE_TABLE ) swizzle_table_buffer = SWIZZLE_TABLE ;
decltype ( EncodingsValues ) encoding_values = EncodingsValues ;
decltype ( REPLICATE_6_BIT_TO_8_TABLE ) replicate_6_to_8 = REPLICATE_6_BIT_TO_8_TABLE ;
decltype ( REPLICATE_7_BIT_TO_8_TABLE ) replicate_7_to_8 = REPLICATE_7_BIT_TO_8_TABLE ;
decltype ( REPLICATE_8_BIT_TO_8_TABLE ) replicate_8_to_8 = REPLICATE_8_BIT_TO_8_TABLE ;
decltype ( REPLICATE_BYTE_TO_16_TABLE ) replicate_byte_to_16 = REPLICATE_BYTE_TO_16_TABLE ;
} constexpr ASTC_BUFFER_DATA ;
} // Anonymous namespace
} // Anonymous namespace
VKComputePass : : VKComputePass ( const Device & device , VKDescriptorPool & descriptor_pool ,
VKComputePass : : VKComputePass ( const Device & device , VKDescriptorPool & descriptor_pool ,
@ -517,9 +494,6 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
sizeof ( AstcBufferData : : replicate_7_to_8 ) ) ;
sizeof ( AstcBufferData : : replicate_7_to_8 ) ) ;
update_descriptor_queue . AddBuffer ( * data_buffer , offsetof ( AstcBufferData , replicate_8_to_8 ) ,
update_descriptor_queue . AddBuffer ( * data_buffer , offsetof ( AstcBufferData , replicate_8_to_8 ) ,
sizeof ( AstcBufferData : : replicate_8_to_8 ) ) ;
sizeof ( AstcBufferData : : replicate_8_to_8 ) ) ;
update_descriptor_queue . AddBuffer ( * data_buffer ,
offsetof ( AstcBufferData , replicate_byte_to_16 ) ,
sizeof ( AstcBufferData : : replicate_byte_to_16 ) ) ;
update_descriptor_queue . AddBuffer ( * data_buffer , sizeof ( AstcBufferData ) ,
update_descriptor_queue . AddBuffer ( * data_buffer , sizeof ( AstcBufferData ) ,
sizeof ( SWIZZLE_TABLE ) ) ;
sizeof ( SWIZZLE_TABLE ) ) ;
update_descriptor_queue . AddImage ( image . StorageImageView ( swizzle . level ) ) ;
update_descriptor_queue . AddImage ( image . StorageImageView ( swizzle . level ) ) ;
@ -569,6 +543,7 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
cmdbuf . PipelineBarrier ( VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT ,
cmdbuf . PipelineBarrier ( VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT ,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT , 0 , image_barrier ) ;
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT , 0 , image_barrier ) ;
} ) ;
} ) ;
scheduler . Finish ( ) ;
}
}
} // namespace Vulkan
} // namespace Vulkan