|
|
|
@ -468,8 +468,9 @@ void RasterizerVulkan::DispatchCompute(GPUVAddr code_addr) { |
|
|
|
const auto& entries = pipeline.GetEntries(); |
|
|
|
SetupComputeConstBuffers(entries); |
|
|
|
SetupComputeGlobalBuffers(entries); |
|
|
|
SetupComputeTexelBuffers(entries); |
|
|
|
SetupComputeUniformTexels(entries); |
|
|
|
SetupComputeTextures(entries); |
|
|
|
SetupComputeStorageTexels(entries); |
|
|
|
SetupComputeImages(entries); |
|
|
|
|
|
|
|
buffer_cache.Unmap(); |
|
|
|
@ -787,8 +788,9 @@ void RasterizerVulkan::SetupShaderDescriptors( |
|
|
|
const auto& entries = shader->GetEntries(); |
|
|
|
SetupGraphicsConstBuffers(entries, stage); |
|
|
|
SetupGraphicsGlobalBuffers(entries, stage); |
|
|
|
SetupGraphicsTexelBuffers(entries, stage); |
|
|
|
SetupGraphicsUniformTexels(entries, stage); |
|
|
|
SetupGraphicsTextures(entries, stage); |
|
|
|
SetupGraphicsStorageTexels(entries, stage); |
|
|
|
SetupGraphicsImages(entries, stage); |
|
|
|
} |
|
|
|
texture_cache.GuardSamplers(false); |
|
|
|
@ -976,12 +978,12 @@ void RasterizerVulkan::SetupGraphicsGlobalBuffers(const ShaderEntries& entries, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupGraphicsTexelBuffers(const ShaderEntries& entries, std::size_t stage) { |
|
|
|
void RasterizerVulkan::SetupGraphicsUniformTexels(const ShaderEntries& entries, std::size_t stage) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Textures); |
|
|
|
const auto& gpu = system.GPU().Maxwell3D(); |
|
|
|
for (const auto& entry : entries.texel_buffers) { |
|
|
|
for (const auto& entry : entries.uniform_texels) { |
|
|
|
const auto image = GetTextureInfo(gpu, entry, stage).tic; |
|
|
|
SetupTexelBuffer(image, entry); |
|
|
|
SetupUniformTexels(image, entry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -996,6 +998,15 @@ void RasterizerVulkan::SetupGraphicsTextures(const ShaderEntries& entries, std:: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupGraphicsStorageTexels(const ShaderEntries& entries, std::size_t stage) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Textures); |
|
|
|
const auto& gpu = system.GPU().Maxwell3D(); |
|
|
|
for (const auto& entry : entries.storage_texels) { |
|
|
|
const auto image = GetTextureInfo(gpu, entry, stage).tic; |
|
|
|
SetupStorageTexel(image, entry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupGraphicsImages(const ShaderEntries& entries, std::size_t stage) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Images); |
|
|
|
const auto& gpu = system.GPU().Maxwell3D(); |
|
|
|
@ -1028,12 +1039,12 @@ void RasterizerVulkan::SetupComputeGlobalBuffers(const ShaderEntries& entries) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupComputeTexelBuffers(const ShaderEntries& entries) { |
|
|
|
void RasterizerVulkan::SetupComputeUniformTexels(const ShaderEntries& entries) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Textures); |
|
|
|
const auto& gpu = system.GPU().KeplerCompute(); |
|
|
|
for (const auto& entry : entries.texel_buffers) { |
|
|
|
for (const auto& entry : entries.uniform_texels) { |
|
|
|
const auto image = GetTextureInfo(gpu, entry, ComputeShaderIndex).tic; |
|
|
|
SetupTexelBuffer(image, entry); |
|
|
|
SetupUniformTexels(image, entry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1048,6 +1059,15 @@ void RasterizerVulkan::SetupComputeTextures(const ShaderEntries& entries) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupComputeStorageTexels(const ShaderEntries& entries) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Textures); |
|
|
|
const auto& gpu = system.GPU().KeplerCompute(); |
|
|
|
for (const auto& entry : entries.storage_texels) { |
|
|
|
const auto image = GetTextureInfo(gpu, entry, ComputeShaderIndex).tic; |
|
|
|
SetupStorageTexel(image, entry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupComputeImages(const ShaderEntries& entries) { |
|
|
|
MICROPROFILE_SCOPE(Vulkan_Images); |
|
|
|
const auto& gpu = system.GPU().KeplerCompute(); |
|
|
|
@ -1097,8 +1117,8 @@ void RasterizerVulkan::SetupGlobalBuffer(const GlobalBufferEntry& entry, GPUVAdd |
|
|
|
update_descriptor_queue.AddBuffer(buffer, offset, size); |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupTexelBuffer(const Tegra::Texture::TICEntry& tic, |
|
|
|
const TexelBufferEntry& entry) { |
|
|
|
void RasterizerVulkan::SetupUniformTexels(const Tegra::Texture::TICEntry& tic, |
|
|
|
const UniformTexelEntry& entry) { |
|
|
|
const auto view = texture_cache.GetTextureSurface(tic, entry); |
|
|
|
ASSERT(view->IsBufferView()); |
|
|
|
|
|
|
|
@ -1120,6 +1140,14 @@ void RasterizerVulkan::SetupTexture(const Tegra::Texture::FullTextureInfo& textu |
|
|
|
sampled_views.push_back(ImageView{std::move(view), image_layout}); |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupStorageTexel(const Tegra::Texture::TICEntry& tic, |
|
|
|
const StorageTexelEntry& entry) { |
|
|
|
const auto view = texture_cache.GetImageSurface(tic, entry); |
|
|
|
ASSERT(view->IsBufferView()); |
|
|
|
|
|
|
|
update_descriptor_queue.AddTexelBuffer(view->GetBufferView()); |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerVulkan::SetupImage(const Tegra::Texture::TICEntry& tic, const ImageEntry& entry) { |
|
|
|
auto view = texture_cache.GetImageSurface(tic, entry); |
|
|
|
|
|
|
|
|