diff --git a/src/xenia/gpu/spirv_shader_translator.cc b/src/xenia/gpu/spirv_shader_translator.cc index 78fed7d12..dcba1598c 100644 --- a/src/xenia/gpu/spirv_shader_translator.cc +++ b/src/xenia/gpu/spirv_shader_translator.cc @@ -467,12 +467,10 @@ std::vector SpirvShaderTranslator::CompleteTranslation() { std::vector({b.makeUintConstant(2)})); auto alpha_test = b.createLoad(alpha_test_ptr); - auto alpha_test_enabled = b.createCompositeExtract( - alpha_test, float_type_, std::vector{0}); - auto alpha_test_func = b.createCompositeExtract(alpha_test, float_type_, - std::vector{1}); - auto alpha_test_ref = b.createCompositeExtract(alpha_test, float_type_, - std::vector{2}); + auto alpha_test_enabled = + b.createCompositeExtract(alpha_test, float_type_, 0); + auto alpha_test_func = b.createCompositeExtract(alpha_test, float_type_, 1); + auto alpha_test_ref = b.createCompositeExtract(alpha_test, float_type_, 2); alpha_test_func = b.createUnaryOp(spv::Op::OpConvertFToU, uint_type_, alpha_test_func); @@ -2455,13 +2453,18 @@ void SpirvShaderTranslator::StoreToResult(Id source_value_id, auto n_el = b.getNumComponents(source_value_id); auto n_dst = b.getNumTypeComponents(storage_type); - std::vector channels; - for (int i = 0; i < n_dst; i++) { - channels.push_back(i % n_el); - } + if (n_el != 1) { + std::vector channels; + for (int i = 0; i < n_dst; i++) { + channels.push_back(i % n_el); + } - source_value_id = b.createRvalueSwizzle(spv::NoPrecision, storage_type, - source_value_id, channels); + source_value_id = b.createRvalueSwizzle(spv::NoPrecision, storage_type, + source_value_id, channels); + } else { + source_value_id = + b.smearScalar(spv::NoPrecision, source_value_id, storage_type); + } } // swizzle