Add a 2x2 downsampled version of 4xBRZ as 2xBRZ (save memory bandwidth)

fmt
This commit is contained in:
Henrik Rydgård 2021-12-12 18:18:09 +01:00
parent 7e097084a6
commit 10db19efc4
5 changed files with 156 additions and 78 deletions

View File

@ -15,7 +15,8 @@
// Mostly useful for profiling texture uploads currently, but could be useful for
// other things as well. We also have a nice integrated render pass profiler in the queue
// runner, but this one is more convenient for transient events.
// #define VULKAN_PROFILER_ENABLED
#define VULKAN_PROFILER_ENABLED
#if defined(VULKAN_PROFILER_ENABLED)
#define VK_PROFILE_BEGIN(vulkan, cmd, stage, message) vulkan->GetProfiler()->Begin(cmd, stage, message);

View File

@ -664,6 +664,50 @@
<Project>{4328a62c-f1e9-47ed-b816-a1a81daf4363}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<FxCompile Include="..\assets\shaders\tex_2xbrz.csh">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</FxCompile>
<FxCompile Include="..\assets\shaders\tex_4xbrz.csh">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</FxCompile>
<FxCompile Include="..\assets\shaders\tex_mmpx.csh">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</FxCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\assets\shaders\defaultshaders.ini">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</None>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@ -22,6 +22,9 @@
<Filter Include="D3D11">
<UniqueIdentifier>{88eb5cea-ec25-4881-89da-02f9f2fa8f3f}</UniqueIdentifier>
</Filter>
<Filter Include="Shaders">
<UniqueIdentifier>{3a7618ae-e254-406a-8ae5-590bb077d8a1}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Math3D.h">
@ -552,4 +555,20 @@
<Filter>Software</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<FxCompile Include="..\assets\shaders\tex_4xbrz.csh">
<Filter>Shaders</Filter>
</FxCompile>
<FxCompile Include="..\assets\shaders\tex_mmpx.csh">
<Filter>Shaders</Filter>
</FxCompile>
<FxCompile Include="..\assets\shaders\tex_2xbrz.csh">
<Filter>Shaders</Filter>
</FxCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\assets\shaders\defaultshaders.ini">
<Filter>Shaders</Filter>
</None>
</ItemGroup>
</Project>

View File

@ -154,6 +154,12 @@ Name=PSP Color
Author=hunterk, Pokefan531 (ported by jdgleaver)
Fragment=psp_color.fsh
Vertex=fxaa.vsh
[Tex2xBRZ]
Type=Texture
Name=2xBRZ (2x)
Author=Hyllian
Compute=tex_2xbrz.csh
Scale=2
[Tex4xBRZ]
Type=Texture
Name=4xBRZ (4x)

View File

@ -260,10 +260,18 @@ void applyScaling(uvec2 origxy) {
// 15|14|13|12
const int order[16] = int[16](6, 7, 8, 9, 5, 0, 1, 10, 4, 3, 2, 11, 15, 14, 13, 12);
// Write all 16 output pixels.
ivec2 destXY = ivec2(origxy) * 4;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
writeColorf(destXY + ivec2(x, y), dst[order[y * 4 + x]]);
ivec2 destXY = ivec2(origxy) * 2;
for (int y = 0; y < 2; y++) {
for (int x = 0; x < 2; x++) {
vec4 sum = vec4(0.0);
int index = y * 4 + x * 2;
for (int iy = 0; iy < 2; iy++) {
for (int ix = 0; ix < 2; ix++) {
sum += dst[order[index + iy * 4 + ix]];
}
}
sum *= 0.25;
writeColorf(destXY + ivec2(x, y), sum);
}
}
}