@@ -22,7 +22,6 @@ namespace vr {
2222 }
2323
2424 DXGI_FORMAT TranslateTypelessFormats (DXGI_FORMAT format) {
25- Log () << " Mapping format " << std::hex << format << std::dec << std::endl;
2625 switch (format) {
2726 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
2827 return DXGI_FORMAT_R32G32B32A32_FLOAT;
@@ -82,6 +81,7 @@ namespace vr {
8281 }
8382 if (!initialized) {
8483 try {
84+ textureContainsOnlyOneEye = std::abs (pBounds->uMax - pBounds->uMin ) > .5f ;
8585 PrepareResources (texture, pTexture->eColorSpace );
8686 } catch (...) {
8787 Log () << " Resource creation failed, disabling\n " ;
@@ -90,7 +90,6 @@ namespace vr {
9090 }
9191 }
9292
93- bool textureContainsOnlyOneEye = std::abs (pBounds->uMax - pBounds->uMin ) > .5f ;
9493 // if a single shared texture is used for both eyes, only apply effects on the first Submit
9594 if (eyeCount == 0 || textureContainsOnlyOneEye || texture != lastSubmittedTexture) {
9695 ApplyPostProcess (texture);
@@ -191,6 +190,8 @@ namespace vr {
191190 AU1 const1[4 ];
192191 AU1 const2[4 ];
193192 AU1 const3[4 ];
193+ AU1 imageCentre[4 ];
194+ AU1 radius[4 ];
194195 };
195196
196197 void PostProcessor::PrepareUpscalingResources () {
@@ -199,6 +200,13 @@ namespace vr {
199200 UpscaleConstants constants;
200201 // create shader constants buffers
201202 FsrEasuCon (constants.const0 , constants.const1 , constants.const2 , constants.const3 , inputWidth, inputHeight, inputWidth, inputHeight, outputWidth, outputHeight);
203+ constants.imageCentre [1 ] = constants.imageCentre [3 ] = outputHeight / 2 ;
204+ constants.imageCentre [0 ] = textureContainsOnlyOneEye ? outputWidth / 2 : outputWidth / 4 ;
205+ constants.imageCentre [2 ] = textureContainsOnlyOneEye ? outputWidth / 2 : 3 * outputWidth / 4 ;
206+ constants.radius [0 ] = 0 .5f * Config::Instance ().radius * outputHeight;
207+ constants.radius [1 ] = constants.radius [0 ] * constants.radius [0 ];
208+ constants.radius [2 ] = outputWidth;
209+ constants.radius [3 ] = outputHeight;
202210 D3D11_BUFFER_DESC bd;
203211 bd.Usage = D3D11_USAGE_IMMUTABLE;
204212 bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
@@ -252,6 +260,8 @@ namespace vr {
252260
253261 struct SharpenConstants {
254262 AU1 const0[4 ];
263+ AU1 imageCentre[4 ];
264+ AU1 radius[4 ];
255265 };
256266
257267 void PostProcessor::PrepareSharpeningResources () {
@@ -260,6 +270,13 @@ namespace vr {
260270 SharpenConstants constants;
261271 float sharpness = AClampF1 ( Config::Instance ().sharpness , 0 , 1 );
262272 FsrRcasCon (constants.const0 , 2 .f - 2 *sharpness);
273+ constants.imageCentre [1 ] = constants.imageCentre [3 ] = outputHeight / 2 ;
274+ constants.imageCentre [0 ] = textureContainsOnlyOneEye ? outputWidth / 2 : outputWidth / 4 ;
275+ constants.imageCentre [2 ] = textureContainsOnlyOneEye ? outputWidth / 2 : 3 * outputWidth / 4 ;
276+ constants.radius [0 ] = 0 .5f * Config::Instance ().radius * outputHeight;
277+ constants.radius [1 ] = constants.radius [0 ] * constants.radius [0 ];
278+ constants.radius [2 ] = outputWidth;
279+ constants.radius [3 ] = outputHeight;
263280 D3D11_BUFFER_DESC bd;
264281 bd.Usage = D3D11_USAGE_IMMUTABLE;
265282 bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
0 commit comments