diff --git a/hw/xbox/nv2a.c b/hw/xbox/nv2a.c index 6ccd34d87f..97b29dc0f8 100644 --- a/hw/xbox/nv2a.c +++ b/hw/xbox/nv2a.c @@ -493,10 +493,12 @@ # define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_X8R8G8B8 0x07 # define NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT1_A1R5G5B5 0x0C # define NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT23_A8R8G8B8 0x0E +# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_R5G6B5 0x11 # define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8R8G8B8 0x12 # define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8 0x19 # define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_X8R8G8B8 0x1E # define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_Y16_FIXED 0x30 +# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8B8G8R8 0x3F # define NV097_SET_TEXTURE_FORMAT_MIPMAP_LEVELS 0x000F0000 # define NV097_SET_TEXTURE_FORMAT_BASE_SIZE_U 0x00F00000 # define NV097_SET_TEXTURE_FORMAT_BASE_SIZE_V 0x0F000000 @@ -603,6 +605,8 @@ static const ColorFormatInfo kelvin_color_format_map[66] = { [NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT23_A8R8G8B8] = {4, false, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0, GL_RGBA}, + [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_R5G6B5] = + {2, true, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8R8G8B8] = {4, true, GL_RGBA, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, /* TODO: how do opengl alpha textures work? */ @@ -612,6 +616,8 @@ static const ColorFormatInfo kelvin_color_format_map[66] = { {4, true, GL_RGB, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_Y16_FIXED] = {2, true, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_SHORT}, + [NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8B8G8R8] = + {4, true, GL_RGBA, GL_ABGR_EXT, GL_UNSIGNED_BYTE } }; diff --git a/hw/xbox/nv2a_psh.c b/hw/xbox/nv2a_psh.c index 1775eab0b1..0ac0b9bb20 100644 --- a/hw/xbox/nv2a_psh.c +++ b/hw/xbox/nv2a_psh.c @@ -578,7 +578,7 @@ static QString* psh_convert(struct PixelShader *ps) ps->cur_stage = i; qstring_append_fmt(ps->code, "// Stage %d\n", i); add_stage_code(ps, ps->stage[i].rgb_input, ps->stage[i].rgb_output, "rgb", false); - add_stage_code(ps, ps->stage[i].alpha_input, ps->stage[i].alpha_output, "a", false); + add_stage_code(ps, ps->stage[i].alpha_input, ps->stage[i].alpha_output, "a", true); } if (ps->final_input.enabled) {