pica: correct bit field length for some registers
This commit is contained in:
		
							parent
							
								
									db22b88fea
								
							
						
					
					
						commit
						86ee1f6101
					
				@ -211,13 +211,14 @@ struct FramebufferRegs {
 | 
				
			|||||||
            BitField<0, 2, u32> allow_depth_stencil_write; // 0 = disable, else enable
 | 
					            BitField<0, 2, u32> allow_depth_stencil_write; // 0 = disable, else enable
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DepthFormat depth_format; // TODO: Should be a BitField!
 | 
					        BitField<0, 2, DepthFormat> depth_format;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        BitField<16, 3, ColorFormat> color_format;
 | 
					        BitField<16, 3, ColorFormat> color_format;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        INSERT_PADDING_WORDS(0x4);
 | 
					        INSERT_PADDING_WORDS(0x4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        u32 depth_buffer_address;
 | 
					        BitField<0, 28, u32> depth_buffer_address;
 | 
				
			||||||
        u32 color_buffer_address;
 | 
					        BitField<0, 28, u32> color_buffer_address;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        union {
 | 
					        union {
 | 
				
			||||||
            // Apparently, the framebuffer width is stored as expected,
 | 
					            // Apparently, the framebuffer width is stored as expected,
 | 
				
			||||||
 | 
				
			|||||||
@ -22,10 +22,10 @@ struct PipelineRegs {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct {
 | 
					    struct {
 | 
				
			||||||
        BitField<0, 29, u32> base_address;
 | 
					        BitField<1, 28, u32> base_address;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        PAddr GetPhysicalBaseAddress() const {
 | 
					        PAddr GetPhysicalBaseAddress() const {
 | 
				
			||||||
            return base_address * 8;
 | 
					            return base_address * 16;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Descriptor for internal vertex attributes
 | 
					        // Descriptor for internal vertex attributes
 | 
				
			||||||
@ -99,7 +99,7 @@ struct PipelineRegs {
 | 
				
			|||||||
        // This e.g. allows to load different attributes from different memory locations
 | 
					        // This e.g. allows to load different attributes from different memory locations
 | 
				
			||||||
        struct {
 | 
					        struct {
 | 
				
			||||||
            // Source attribute data offset from the base address
 | 
					            // Source attribute data offset from the base address
 | 
				
			||||||
            u32 data_offset;
 | 
					            BitField<0, 28, u32> data_offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            union {
 | 
					            union {
 | 
				
			||||||
                BitField<0, 4, u32> comp0;
 | 
					                BitField<0, 4, u32> comp0;
 | 
				
			||||||
@ -180,6 +180,8 @@ struct PipelineRegs {
 | 
				
			|||||||
        //     kicked off.
 | 
					        //     kicked off.
 | 
				
			||||||
        //  2) Games can configure these registers to provide a command list subroutine mechanism.
 | 
					        //  2) Games can configure these registers to provide a command list subroutine mechanism.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: verify the bit length of these two fields
 | 
				
			||||||
 | 
					        // According to 3dbrew, the bit length of them are 21 and 29, respectively
 | 
				
			||||||
        BitField<0, 20, u32> size[2]; ///< Size (in bytes / 8) of each channel's command buffer
 | 
					        BitField<0, 20, u32> size[2]; ///< Size (in bytes / 8) of each channel's command buffer
 | 
				
			||||||
        BitField<0, 28, u32> addr[2]; ///< Physical address / 8 of each channel's command buffer
 | 
					        BitField<0, 28, u32> addr[2]; ///< Physical address / 8 of each channel's command buffer
 | 
				
			||||||
        u32 trigger[2]; ///< Triggers execution of the channel's command buffer when written to
 | 
					        u32 trigger[2]; ///< Triggers execution of the channel's command buffer when written to
 | 
				
			||||||
 | 
				
			|||||||
@ -92,13 +92,13 @@ struct RasterizerRegs {
 | 
				
			|||||||
        BitField<0, 2, ScissorMode> mode;
 | 
					        BitField<0, 2, ScissorMode> mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        union {
 | 
					        union {
 | 
				
			||||||
            BitField<0, 16, u32> x1;
 | 
					            BitField<0, 10, u32> x1;
 | 
				
			||||||
            BitField<16, 16, u32> y1;
 | 
					            BitField<16, 10, u32> y1;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        union {
 | 
					        union {
 | 
				
			||||||
            BitField<0, 16, u32> x2;
 | 
					            BitField<0, 10, u32> x2;
 | 
				
			||||||
            BitField<16, 16, u32> y2;
 | 
					            BitField<16, 10, u32> y2;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    } scissor_test;
 | 
					    } scissor_test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,11 @@ struct TexturingRegs {
 | 
				
			|||||||
            ClampToBorder = 1,
 | 
					            ClampToBorder = 1,
 | 
				
			||||||
            Repeat = 2,
 | 
					            Repeat = 2,
 | 
				
			||||||
            MirroredRepeat = 3,
 | 
					            MirroredRepeat = 3,
 | 
				
			||||||
 | 
					            // Mode 4-7 produces some weird result and may be just invalid:
 | 
				
			||||||
 | 
					            // 4: Positive coord: clamp to edge; negative coord: repeat
 | 
				
			||||||
 | 
					            // 5: Positive coord: clamp to border; negative coord: repeat
 | 
				
			||||||
 | 
					            // 6: Repeat
 | 
				
			||||||
 | 
					            // 7: Repeat
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        enum TextureFilter : u32 {
 | 
					        enum TextureFilter : u32 {
 | 
				
			||||||
@ -45,22 +50,22 @@ struct TexturingRegs {
 | 
				
			|||||||
        } border_color;
 | 
					        } border_color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        union {
 | 
					        union {
 | 
				
			||||||
            BitField<0, 16, u32> height;
 | 
					            BitField<0, 11, u32> height;
 | 
				
			||||||
            BitField<16, 16, u32> width;
 | 
					            BitField<16, 11, u32> width;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        union {
 | 
					        union {
 | 
				
			||||||
            BitField<1, 1, TextureFilter> mag_filter;
 | 
					            BitField<1, 1, TextureFilter> mag_filter;
 | 
				
			||||||
            BitField<2, 1, TextureFilter> min_filter;
 | 
					            BitField<2, 1, TextureFilter> min_filter;
 | 
				
			||||||
            BitField<8, 2, WrapMode> wrap_t;
 | 
					            BitField<8, 3, WrapMode> wrap_t;
 | 
				
			||||||
            BitField<12, 2, WrapMode> wrap_s;
 | 
					            BitField<12, 3, WrapMode> wrap_s;
 | 
				
			||||||
            BitField<28, 2, TextureType>
 | 
					            /// @note Only valid for texture 0 according to 3DBrew.
 | 
				
			||||||
                type; ///< @note Only valid for texture 0 according to 3DBrew.
 | 
					            BitField<28, 3, TextureType> type;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        INSERT_PADDING_WORDS(0x1);
 | 
					        INSERT_PADDING_WORDS(0x1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        u32 address;
 | 
					        BitField<0, 28, u32> address;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        PAddr GetPhysicalAddress() const {
 | 
					        PAddr GetPhysicalAddress() const {
 | 
				
			||||||
            return address * 8;
 | 
					            return address * 8;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user