mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-23 06:40:49 +00:00
rsx/fp: Improvements
- Export some debug information in the free texture register space components zw Very useful when analysing renderdoc captures - Enable shadow comparison on depth as long as compare function is active and texture is uploaded for depth read Some engines (UE3) read all the components in the shader and use mul/mad with the result
This commit is contained in:
parent
5817f9fe3f
commit
27552891ad
@ -644,10 +644,10 @@ bool FragmentProgramDecompiler::handle_tex_srb(u32 opcode)
|
|||||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE1D));
|
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE1D));
|
||||||
return true;
|
return true;
|
||||||
case rsx::texture_dimension_extended::texture_dimension_2d:
|
case rsx::texture_dimension_extended::texture_dimension_2d:
|
||||||
if (DstExpectsSca() && (m_prog.shadow_textures & (1 << dst.tex_num)))
|
if (m_prog.shadow_textures & (1 << dst.tex_num))
|
||||||
{
|
{
|
||||||
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
||||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D) + ".r", false); //No swizzle mask on shadow lookup
|
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D) + ".xxxx");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (m_prog.redirected_textures & (1 << dst.tex_num))
|
if (m_prog.redirected_textures & (1 << dst.tex_num))
|
||||||
@ -676,10 +676,10 @@ bool FragmentProgramDecompiler::handle_tex_srb(u32 opcode)
|
|||||||
return true;
|
return true;
|
||||||
case rsx::texture_dimension_extended::texture_dimension_2d:
|
case rsx::texture_dimension_extended::texture_dimension_2d:
|
||||||
//Note shadow comparison only returns a true/false result!
|
//Note shadow comparison only returns a true/false result!
|
||||||
if (DstExpectsSca() && (m_prog.shadow_textures & (1 << dst.tex_num)))
|
if (m_prog.shadow_textures & (1 << dst.tex_num))
|
||||||
{
|
{
|
||||||
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
||||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ) + ".r", false); //No swizzle mask on shadow lookup
|
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ) + ".xxxx");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ));
|
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ));
|
||||||
|
@ -349,9 +349,10 @@ public:
|
|||||||
}
|
}
|
||||||
else if (sanitize)
|
else if (sanitize)
|
||||||
{
|
{
|
||||||
//Lower NaNs to 0
|
//Convert NaNs and Infs to 0
|
||||||
const auto mask = _mm_cmpunord_ps((__m128&)shuffled_vector, _mm_set1_ps(1.f));
|
const auto masked = _mm_and_si128((__m128i&)shuffled_vector, _mm_set1_epi32(0x7fffffff));
|
||||||
const auto result = _mm_andnot_ps(mask, (__m128&)shuffled_vector);
|
const auto valid = _mm_cmplt_epi32(masked, _mm_set1_epi32(0x7f800000));
|
||||||
|
const auto result = _mm_and_si128((__m128i&)shuffled_vector, valid);
|
||||||
_mm_stream_si128((__m128i*)dst, (__m128i&)result);
|
_mm_stream_si128((__m128i*)dst, (__m128i&)result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1517,6 +1517,8 @@ namespace rsx
|
|||||||
auto &tex = rsx::method_registers.fragment_textures[i];
|
auto &tex = rsx::method_registers.fragment_textures[i];
|
||||||
result.texture_scale[i][0] = sampler_descriptors[i]->scale_x;
|
result.texture_scale[i][0] = sampler_descriptors[i]->scale_x;
|
||||||
result.texture_scale[i][1] = sampler_descriptors[i]->scale_y;
|
result.texture_scale[i][1] = sampler_descriptors[i]->scale_y;
|
||||||
|
result.texture_scale[i][2] = (f32)tex.remap(); //Debug value
|
||||||
|
result.texture_scale[i][3] = (f32)tex.format(); //Debug value
|
||||||
result.textures_alpha_kill[i] = 0;
|
result.textures_alpha_kill[i] = 0;
|
||||||
result.textures_zfunc[i] = 0;
|
result.textures_zfunc[i] = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user