mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
vk: Add workaround for broken format conversion in older GeForce cards
This commit is contained in:
parent
4f088a102c
commit
a6e143254a
2 changed files with 32 additions and 6 deletions
|
@ -61,7 +61,17 @@ namespace vk
|
|||
|
||||
if (!job)
|
||||
{
|
||||
job.reset(new vk::cs_resolve_task(get_format_prefix(src->format())));
|
||||
const char* format_prefix = get_format_prefix(src->format());
|
||||
bool require_bgra_swap = false;
|
||||
|
||||
if (vk::get_chip_family() == vk::chip_class::NV_kepler &&
|
||||
src->format() == VK_FORMAT_B8G8R8A8_UNORM)
|
||||
{
|
||||
// Workaround for NVIDIA kepler's broken image_load_store
|
||||
require_bgra_swap = true;
|
||||
}
|
||||
|
||||
job.reset(new vk::cs_resolve_task(format_prefix, require_bgra_swap));
|
||||
}
|
||||
|
||||
job->run(cmd, src, dst);
|
||||
|
@ -122,7 +132,17 @@ namespace vk
|
|||
|
||||
if (!job)
|
||||
{
|
||||
job.reset(new vk::cs_unresolve_task(get_format_prefix(src->format())));
|
||||
const char* format_prefix = get_format_prefix(src->format());
|
||||
bool require_bgra_swap = false;
|
||||
|
||||
if (vk::get_chip_family() == vk::chip_class::NV_kepler &&
|
||||
src->format() == VK_FORMAT_B8G8R8A8_UNORM)
|
||||
{
|
||||
// Workaround for NVIDIA kepler's broken image_load_store
|
||||
require_bgra_swap = true;
|
||||
}
|
||||
|
||||
job.reset(new vk::cs_unresolve_task(format_prefix, require_bgra_swap));
|
||||
}
|
||||
|
||||
job->run(cmd, dst, src);
|
||||
|
|
|
@ -139,11 +139,14 @@ namespace vk
|
|||
|
||||
struct cs_resolve_task : cs_resolve_base
|
||||
{
|
||||
cs_resolve_task(const std::string& format_prefix)
|
||||
cs_resolve_task(const std::string& format_prefix, bool bgra_swap = false)
|
||||
{
|
||||
// Allow rgba->bgra transformation for old GeForce cards
|
||||
const std::string swizzle = bgra_swap? ".bgra" : "";
|
||||
|
||||
std::string kernel =
|
||||
" vec4 aa_sample = imageLoad(multisampled, aa_coords, sample_index);\n"
|
||||
" imageStore(resolve, resolve_coords, aa_sample);\n";
|
||||
" imageStore(resolve, resolve_coords, aa_sample" + swizzle + ");\n";
|
||||
|
||||
build(kernel, format_prefix, 0);
|
||||
}
|
||||
|
@ -151,11 +154,14 @@ namespace vk
|
|||
|
||||
struct cs_unresolve_task : cs_resolve_base
|
||||
{
|
||||
cs_unresolve_task(const std::string& format_prefix)
|
||||
cs_unresolve_task(const std::string& format_prefix, bool bgra_swap = false)
|
||||
{
|
||||
// Allow rgba->bgra transformation for old GeForce cards
|
||||
const std::string swizzle = bgra_swap? ".bgra" : "";
|
||||
|
||||
std::string kernel =
|
||||
" vec4 resolved_sample = imageLoad(resolve, resolve_coords);\n"
|
||||
" imageStore(multisampled, aa_coords, sample_index, resolved_sample);\n";
|
||||
" imageStore(multisampled, aa_coords, sample_index, resolved_sample" + swizzle + ");\n";
|
||||
|
||||
build(kernel, format_prefix, 1);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue