mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	vk_buffer_cache: Add transform feedback usage to buffers
This commit is contained in:
		@@ -60,6 +60,27 @@ std::array<T, 6> MakeQuadIndices(u32 quad, u32 first) {
 | 
			
		||||
    }
 | 
			
		||||
    return indices;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vk::Buffer CreateBuffer(const Device& device, u64 size) {
 | 
			
		||||
    VkBufferUsageFlags flags =
 | 
			
		||||
        VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
 | 
			
		||||
        VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
 | 
			
		||||
        VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
 | 
			
		||||
        VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
 | 
			
		||||
    if (device.IsExtTransformFeedbackSupported()) {
 | 
			
		||||
        flags |= VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT;
 | 
			
		||||
    }
 | 
			
		||||
    return device.GetLogical().CreateBuffer({
 | 
			
		||||
        .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
 | 
			
		||||
        .pNext = nullptr,
 | 
			
		||||
        .flags = 0,
 | 
			
		||||
        .size = size,
 | 
			
		||||
        .usage = flags,
 | 
			
		||||
        .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
 | 
			
		||||
        .queueFamilyIndexCount = 0,
 | 
			
		||||
        .pQueueFamilyIndices = nullptr,
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
} // Anonymous namespace
 | 
			
		||||
 | 
			
		||||
Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
 | 
			
		||||
@@ -68,21 +89,7 @@ Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
 | 
			
		||||
Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_,
 | 
			
		||||
               VAddr cpu_addr_, u64 size_bytes_)
 | 
			
		||||
    : VideoCommon::BufferBase<VideoCore::RasterizerInterface>(rasterizer_, cpu_addr_, size_bytes_),
 | 
			
		||||
      device{&runtime.device},
 | 
			
		||||
      buffer{device->GetLogical().CreateBuffer({
 | 
			
		||||
          .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
 | 
			
		||||
          .pNext = nullptr,
 | 
			
		||||
          .flags = 0,
 | 
			
		||||
          .size = SizeBytes(),
 | 
			
		||||
          .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
 | 
			
		||||
                   VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
 | 
			
		||||
                   VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
 | 
			
		||||
                   VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
 | 
			
		||||
                   VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
 | 
			
		||||
          .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
 | 
			
		||||
          .queueFamilyIndexCount = 0,
 | 
			
		||||
          .pQueueFamilyIndices = nullptr,
 | 
			
		||||
      })},
 | 
			
		||||
      device{&runtime.device}, buffer{CreateBuffer(*device, SizeBytes())},
 | 
			
		||||
      commit{runtime.memory_allocator.Commit(buffer, MemoryUsage::DeviceLocal)} {
 | 
			
		||||
    if (runtime.device.HasDebuggingToolAttached()) {
 | 
			
		||||
        buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user