citra/src/core/hle/service/gsp.h

88 lines
2 KiB
C
Raw Normal View History

// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#pragma once
#include "common/bit_field.h"
#include "core/hle/service/service.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
2014-04-17 01:46:05 +01:00
// Namespace GSP_GPU
namespace GSP_GPU {
2014-05-17 21:26:45 +01:00
enum class GXCommandId : u32 {
REQUEST_DMA = 0x00,
SET_COMMAND_LIST_LAST = 0x01,
2014-07-22 12:04:16 +01:00
// Fills a given memory range with a particular value
SET_MEMORY_FILL = 0x02,
2014-07-22 12:04:16 +01:00
// Copies an image and optionally performs color-conversion or scaling.
// This is highly similar to the GameCube's EFB copy feature
SET_DISPLAY_TRANSFER = 0x03,
2014-07-22 12:04:16 +01:00
// Conceptionally similar to SET_DISPLAY_TRANSFER and presumable uses the same hardware path
SET_TEXTURE_COPY = 0x04,
2014-07-22 12:04:16 +01:00
SET_COMMAND_LIST_FIRST = 0x05,
2014-05-17 21:26:45 +01:00
};
struct GXCommand {
BitField<0, 8, GXCommandId> id;
union {
struct {
u32 source_address;
u32 dest_address;
u32 size;
} dma_request;
struct {
u32 address;
u32 size;
} set_command_list_last;
2014-05-17 21:26:45 +01:00
struct {
u32 start1;
u32 value1;
u32 end1;
u32 start2;
u32 value2;
u32 end2;
} memory_fill;
struct {
u32 in_buffer_address;
u32 out_buffer_address;
u32 in_buffer_size;
u32 out_buffer_size;
u32 flags;
} image_copy;
u8 raw_data[0x1C];
};
2014-05-17 21:26:45 +01:00
};
static_assert(sizeof(GXCommand) == 0x20, "GXCommand struct has incorrect size");
2014-05-17 21:26:45 +01:00
2014-04-17 01:46:05 +01:00
/// Interface to "srv:" service
class Interface : public Service::Interface {
public:
Interface();
~Interface();
/**
* Gets the string port name used by CTROS for the service
* @return Port name of service
*/
const char *GetPortName() const {
return "gsp::Gpu";
}
};
} // namespace