Просмотр исходного кода

shader_decode: SULD.D avoid duplicate code block.

namkazy 6 лет назад
Родитель
Сommit
9efa51311f
1 измененных файлов с 2 добавлено и 39 удалено
  1. 2 39
      src/video_core/shader/decode/image.cpp

+ 2 - 39
src/video_core/shader/decode/image.cpp

@@ -272,7 +272,7 @@ std::size_t GetImageTypeNumCoordinates(Tegra::Shader::ImageType image_type) {
 } // Anonymous namespace
 } // Anonymous namespace
 
 
 Node ShaderIR::GetComponentValue(ComponentType component_type, u32 component_size,
 Node ShaderIR::GetComponentValue(ComponentType component_type, u32 component_size,
-                                 const Node original_value, bool* is_signed) {
+                                 Node original_value, bool* is_signed) {
     switch (component_type) {
     switch (component_type) {
     case ComponentType::SNORM: {
     case ComponentType::SNORM: {
         *is_signed = true;
         *is_signed = true;
@@ -366,38 +366,7 @@ u32 ShaderIR::DecodeImage(NodeBlock& bb, u32 pc) {
             const auto comp_mask = GetImageComponentMask(descriptor.format);
             const auto comp_mask = GetImageComponentMask(descriptor.format);
 
 
             switch (instr.suldst.GetStoreDataLayout()) {
             switch (instr.suldst.GetStoreDataLayout()) {
-            case StoreType::Bits32: {
-                u32 shifted_counter = 0;
-                Node value = Immediate(0);
-                for (u32 element = 0; element < 4; ++element) {
-                    if (!IsComponentEnabled(comp_mask, element)) {
-                        continue;
-                    }
-                    const auto component_type = GetComponentType(descriptor, element);
-                    const auto component_size = GetComponentSize(descriptor.format, element);
-                    bool is_signed = true;
-                    MetaImage meta{image, {}, element};
-
-                    Node converted_value = GetComponentValue(
-                        component_type, component_size,
-                        Operation(OperationCode::ImageLoad, meta, GetCoordinates(type)),
-                        &is_signed);
-
-                    // shift element to correct position
-                    const auto shifted = shifted_counter;
-                    if (shifted > 0) {
-                        converted_value =
-                            SignedOperation(OperationCode::ILogicalShiftLeft, is_signed,
-                                            std::move(converted_value), Immediate(shifted));
-                    }
-                    shifted_counter += component_size;
-
-                    // add value into result
-                    value = Operation(OperationCode::UBitwiseOr, value, std::move(converted_value));
-                }
-                SetRegister(bb, instr.gpr0.Value(), std::move(value));
-                break;
-            }
+            case StoreType::Bits32:
             case StoreType::Bits64: {
             case StoreType::Bits64: {
                 u32 indexer = 0;
                 u32 indexer = 0;
                 u32 shifted_counter = 0;
                 u32 shifted_counter = 0;
@@ -432,12 +401,6 @@ u32 ShaderIR::DecodeImage(NodeBlock& bb, u32 pc) {
                     // if we shifted enough for 1 byte -> we save it into temp
                     // if we shifted enough for 1 byte -> we save it into temp
                     if (shifted_counter >= 32) {
                     if (shifted_counter >= 32) {
                         SetTemporary(bb, indexer++, std::move(value));
                         SetTemporary(bb, indexer++, std::move(value));
-
-                        // we only use 2 bytes for bits64
-                        if (indexer >= 2) {
-                            break;
-                        }
-
                         // reset counter and value to prepare pack next byte
                         // reset counter and value to prepare pack next byte
                         value = Immediate(0);
                         value = Immediate(0);
                         shifted_counter = 0;
                         shifted_counter = 0;