mirror of
https://github.com/yawut/SDL.git
synced 2026-07-06 19:54:20 -05:00
render: Add loads of GX2 texture formats
This commit is contained in:
parent
81a111c5c0
commit
df73c8d08b
|
|
@ -210,13 +210,36 @@ SDL_RenderDriver WIIU_RenderDriver = {
|
|||
.info = {
|
||||
.name = "WiiU GX2",
|
||||
.flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE,
|
||||
.num_texture_formats = 1, //5,
|
||||
.num_texture_formats = 13, //21,
|
||||
.texture_formats = {
|
||||
/* TODO: Alpha-less (X) formats */
|
||||
SDL_PIXELFORMAT_RGBA8888,
|
||||
/* SDL_PIXELFORMAT_RGBA4444,
|
||||
// SDL_PIXELFORMAT_RGBX8888,
|
||||
|
||||
// SDL_PIXELFORMAT_RGB444,
|
||||
SDL_PIXELFORMAT_ARGB4444,
|
||||
SDL_PIXELFORMAT_RGBA4444,
|
||||
SDL_PIXELFORMAT_ABGR4444,
|
||||
SDL_PIXELFORMAT_BGRA4444,
|
||||
|
||||
// SDL_PIXELFORMAT_RGB555,
|
||||
SDL_PIXELFORMAT_ARGB1555,
|
||||
// SDL_PIXELFORMAT_BGR555,
|
||||
SDL_PIXELFORMAT_ABGR1555,
|
||||
SDL_PIXELFORMAT_RGBA5551,
|
||||
SDL_PIXELFORMAT_RGB565,*/
|
||||
SDL_PIXELFORMAT_BGRA5551,
|
||||
|
||||
/* TODO: RGB565 doesn't seem to work right, endian issue? */
|
||||
// SDL_PIXELFORMAT_RGB565,
|
||||
// SDL_PIXELFORMAT_BGR565,
|
||||
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_BGRA8888,
|
||||
// SDL_PIXELFORMAT_BGRX8888,
|
||||
SDL_PIXELFORMAT_ABGR8888,
|
||||
// SDL_PIXELFORMAT_BGR888,
|
||||
|
||||
SDL_PIXELFORMAT_ARGB2101010,
|
||||
},
|
||||
.max_texture_width = 0,
|
||||
.max_texture_height = 0,
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#define SDL_render_wiiu_h
|
||||
|
||||
#include "../SDL_sysrender.h"
|
||||
#include "SDL_pixels.h"
|
||||
#include <gx2/context.h>
|
||||
#include <gx2/sampler.h>
|
||||
|
||||
|
|
@ -117,24 +118,113 @@ static inline Uint32 TextureNextPow2(Uint32 w) {
|
|||
return n;
|
||||
}
|
||||
|
||||
//TODO: This could return a compMap to support stuff like ARGB or ABGR
|
||||
static inline GX2SurfaceFormat PixelFormatToWIIUFMT(Uint32 format) {
|
||||
typedef struct WIIUPixFmt {
|
||||
GX2SurfaceFormat fmt;
|
||||
uint32_t compMap;
|
||||
} WIIUPixFmt;
|
||||
|
||||
static inline WIIUPixFmt SDLFormatToWIIUFormat(Uint32 format) {
|
||||
WIIUPixFmt outFmt = { /* sane defaults? */
|
||||
.fmt = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8,
|
||||
.compMap = 0x00010203,
|
||||
};
|
||||
switch (format) {
|
||||
/* packed16 formats: 4 bits/channel */
|
||||
case SDL_PIXELFORMAT_RGB444: /* aka XRGB4444 */
|
||||
case SDL_PIXELFORMAT_ARGB4444: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
|
||||
outFmt.compMap = 0x01020300;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_RGBA4444: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
|
||||
outFmt.compMap = 0x00010203;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_ABGR4444: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
|
||||
outFmt.compMap = 0x03020100;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_BGRA4444: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
|
||||
outFmt.compMap = 0x02010003;
|
||||
break;
|
||||
}
|
||||
|
||||
/* packed16 formats: 5 bits/channel */
|
||||
case SDL_PIXELFORMAT_RGB555: /* aka XRGB1555 */
|
||||
case SDL_PIXELFORMAT_ARGB1555: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1;
|
||||
outFmt.compMap = 0x01020300;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_BGR555: /* aka XRGB1555 */
|
||||
case SDL_PIXELFORMAT_ABGR1555: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1;
|
||||
outFmt.compMap = 0x03020100;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_RGBA5551: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1;
|
||||
outFmt.compMap = 0x00010203;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_BGRA5551: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1;
|
||||
outFmt.compMap = 0x02010003;
|
||||
break;
|
||||
}
|
||||
|
||||
/* packed16 formats: 565 */
|
||||
case SDL_PIXELFORMAT_RGB565: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G6_B5;
|
||||
outFmt.compMap = 0x00010203;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_BGR565: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R5_G6_B5;
|
||||
outFmt.compMap = 0x02010003;
|
||||
break;
|
||||
}
|
||||
|
||||
/* packed32 formats */
|
||||
case SDL_PIXELFORMAT_RGBA8888:
|
||||
return GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
case SDL_PIXELFORMAT_RGBA4444:
|
||||
return GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
|
||||
case SDL_PIXELFORMAT_ABGR1555:
|
||||
return GX2_SURFACE_FORMAT_UNORM_A1_B5_G5_R5;
|
||||
case SDL_PIXELFORMAT_RGBA5551:
|
||||
return GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1;
|
||||
case SDL_PIXELFORMAT_RGB565:
|
||||
return GX2_SURFACE_FORMAT_UNORM_R5_G6_B5;
|
||||
default:
|
||||
return GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
case SDL_PIXELFORMAT_RGBX8888: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
outFmt.compMap = 0x00010203;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_ARGB8888: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
outFmt.compMap = 0x01020300;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_BGRA8888:
|
||||
case SDL_PIXELFORMAT_BGRX8888: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
outFmt.compMap = 0x02010003;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_ABGR8888:
|
||||
case SDL_PIXELFORMAT_BGR888: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
outFmt.compMap = 0x03020100;
|
||||
break;
|
||||
}
|
||||
case SDL_PIXELFORMAT_ARGB2101010: {
|
||||
outFmt.fmt = GX2_SURFACE_FORMAT_UNORM_R10_G10_B10_A2;
|
||||
outFmt.compMap = 0x01020300;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
/* TODO return an error */
|
||||
printf("SDL: WiiU format not recognised (SDL: %08X)\n", format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8;
|
||||
|
||||
return outFmt;
|
||||
}
|
||||
|
||||
|
||||
#endif //SDL_render_wiiu_h
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
int WIIU_SDL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
{
|
||||
WIIUPixFmt gx2_fmt;
|
||||
WIIU_TextureData *tdata = (WIIU_TextureData *) SDL_calloc(1, sizeof(*tdata));
|
||||
if (!tdata)
|
||||
return SDL_OutOfMemory();
|
||||
|
|
@ -49,9 +50,13 @@ int WIIU_SDL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
|||
// Setup sampler
|
||||
GX2InitSampler(&tdata->sampler, GX2_TEX_CLAMP_MODE_CLAMP, GX2_TEX_XY_FILTER_MODE_LINEAR);
|
||||
|
||||
gx2_fmt = SDLFormatToWIIUFormat(texture->format);
|
||||
|
||||
printf("Tex %s, using GX2 %08X %08X\n", SDL_GetPixelFormatName(texture->format), gx2_fmt.fmt, gx2_fmt.compMap);
|
||||
|
||||
tdata->texture.surface.width = texture->w;
|
||||
tdata->texture.surface.height = texture->h;
|
||||
tdata->texture.surface.format = PixelFormatToWIIUFMT(texture->format);
|
||||
tdata->texture.surface.format = gx2_fmt.fmt;
|
||||
tdata->texture.surface.depth = 1; //?
|
||||
tdata->texture.surface.dim = GX2_SURFACE_DIM_TEXTURE_2D;
|
||||
tdata->texture.surface.tileMode = GX2_TILE_MODE_LINEAR_ALIGNED;
|
||||
|
|
@ -59,7 +64,7 @@ int WIIU_SDL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
|||
tdata->texture.surface.mipLevels = 1;
|
||||
tdata->texture.viewNumMips = 1;
|
||||
tdata->texture.viewNumSlices = 1;
|
||||
tdata->texture.compMap = 0x00010203;
|
||||
tdata->texture.compMap = gx2_fmt.compMap;
|
||||
GX2CalcSurfaceSizeAndAlignment(&tdata->texture.surface);
|
||||
GX2InitTextureRegs(&tdata->texture);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user