Beispiel #1
0
        public bool Setup(RawMemoryBlock _block, ResourceViewParamReader paramReader)
        {
            // load source data
            var words = _block.LoadAllDataAs32BE();

            if (words == null)
            {
                return(false);
            }

            // source memory block
            _MemoryBlock = _block;

            // shader type
            var isPixelShader = (paramReader.Param(0) == "pixelshader");

            // decompile shader
            _Shader = GPUShader.Decompile(isPixelShader, words);
            if (_Shader == null)
            {
                return(false);
            }

            // valid shader
            ShowCode();
            return(true);
        }
Beispiel #2
0
        public GPUShader DecompileShader(bool pixel, RawMemoryBlock block)
        {
            // local search
            foreach (var entry in _Entries)
            {
                if (entry._Pixel == pixel && entry._RawMemory == block)
                {
                    return(entry._Shader);
                }
            }

            // convert memory
            GPUShader shader = null;
            {
                var words = block.LoadAllDataAs32BE();

                try
                {
                    shader = GPUShader.Decompile(pixel, words);
                }
                catch (Exception)
                {
                }
            }

            // create new entry
            GPUShaderCacheEntry newEntry = new GPUShaderCacheEntry();

            newEntry._Pixel     = pixel;
            newEntry._RawMemory = block;
            newEntry._Shader    = shader;
            _Entries.Add(newEntry);

            return(shader);
        }
Beispiel #3
0
        public GPUStateCapture(GPUState captureFrom)
        {
            _RegValues = new UInt32[captureFrom.RegValues.Length];
            for (UInt32 i = 0; i < _RegValues.Length; ++i)
            {
                _RegValues[i] = captureFrom.RegValues[i];
            }

            _PixelShader  = captureFrom.PixelShader;
            _VertexShader = captureFrom.VertexShader;
        }
Beispiel #4
0
        private void RefreshUsedConsts(GPUShader shader, GPUStateCapture state, ListView view)
        {
            view.BeginUpdate();
            view.Items.Clear();

            foreach (UInt32 baseRegIndex in shader.UsedRegisters)
            {
                var item = new ListViewItem();
                item.Text = baseRegIndex.ToString();

                var stateRegOffset = baseRegIndex + (shader.PixelShader ? 256U : 0);
                var stateRegIndex  = (UInt32)GPURegisterName.SHADER_CONSTANT_000_X + (4 * stateRegOffset);

                var varR = GPUExecutor.ToFloat(state.Reg(stateRegIndex + 0));
                var varG = GPUExecutor.ToFloat(state.Reg(stateRegIndex + 1));
                var varB = GPUExecutor.ToFloat(state.Reg(stateRegIndex + 2));
                var varA = GPUExecutor.ToFloat(state.Reg(stateRegIndex + 3));

                item.SubItems.Add(varR.ToString());
                item.SubItems.Add(varG.ToString());
                item.SubItems.Add(varB.ToString());
                item.SubItems.Add(varA.ToString());

                if (((varR >= 0.0f) && (varR <= 1.0f)) && ((varG >= 0.0f) && (varG <= 1.0f)) && ((varB >= 0.0f) && (varB <= 1.0f)) && ((varA >= 0.0f) && (varA <= 1.0f)))
                {
                    string txt = String.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", (int)(varR * 255.0f), (int)(varG * 255.0f), (int)(varB * 255.0f), (int)(varA * 255.0f));
                    item.SubItems.Add(txt);

                    var colorItem = item.SubItems.Add(" ");
                    colorItem.BackColor          = Color.FromArgb((int)(varR * 255.0f), (int)(varG * 255.0f), (int)(varB * 255.0f));
                    item.UseItemStyleForSubItems = false;
                }
                else
                {
                    item.SubItems.Add("-");
                    item.SubItems.Add("-");
                }

                view.Items.Add(item);
            }

            view.EndUpdate();
            view.Refresh();
        }