diff options
| author | Triang3l <triang3l@yandex.ru> | 2022-07-26 17:04:22 +0300 |
|---|---|---|
| committer | Triang3l <triang3l@yandex.ru> | 2022-07-26 17:04:22 +0300 |
| commit | 66c995f3aa26cb3e860144d9cf38883fadf6e4e3 (patch) | |
| tree | 6e10b5348444cb93f627cb99f3b2c7ddd85cab27 /src | |
| parent | 8fb5da18eaa8f9d96d556fb67fd090e0fc055ab8 (diff) | |
[SPIR-V] Saturate point sprite coordinates
Diffstat (limited to 'src')
| -rw-r--r-- | src/xenia/gpu/spirv_shader_translator.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/xenia/gpu/spirv_shader_translator.cc b/src/xenia/gpu/spirv_shader_translator.cc index 452ac1450..199d0f99c 100644 --- a/src/xenia/gpu/spirv_shader_translator.cc +++ b/src/xenia/gpu/spirv_shader_translator.cc @@ -1619,8 +1619,17 @@ void SpirvShaderTranslator::StartFragmentShaderInMain() { spv::Id param_gen_z, param_gen_w; if (modification.pixel.param_gen_point) { assert_true(input_point_coordinates_ != spv::NoResult); + // Saturate to avoid negative point coordinates if the center of the pixel + // is not covered, and extrapolation is done. + id_vector_temp_.clear(); + id_vector_temp_.reserve(3); + id_vector_temp_.push_back( + builder_->createLoad(input_point_coordinates_, spv::NoPrecision)); + id_vector_temp_.push_back(const_float2_0_); + id_vector_temp_.push_back(const_float2_1_); spv::Id param_gen_point_coordinates = - builder_->createLoad(input_point_coordinates_, spv::NoPrecision); + builder_->createBuiltinCall(type_float2_, ext_inst_glsl_std_450_, + GLSLstd450NClamp, id_vector_temp_); param_gen_z = builder_->createCompositeExtract( param_gen_point_coordinates, type_float_, 0); param_gen_w = builder_->createCompositeExtract( |
