nvc0: add support for BGRA8 images
This is useful for pbo downloads, which are now accelerated with images. BGRA8 is a moderately common format to do that in. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
905d7dc4d1
commit
8e7893eb53
|
@ -1012,6 +1012,8 @@ const struct TexInstruction::ImgFormatDesc TexInstruction::formatTable[] =
|
|||
{ "RG8_SNORM", 2, { 8, 8, 0, 0 }, SNORM },
|
||||
{ "R16_SNORM", 1, { 16, 0, 0, 0 }, SNORM },
|
||||
{ "R8_SNORM", 1, { 8, 0, 0, 0 }, SNORM },
|
||||
|
||||
{ "BGRA8", 4, { 8, 8, 8, 8 }, UNORM, true },
|
||||
};
|
||||
|
||||
void
|
||||
|
|
|
@ -412,6 +412,8 @@ enum ImgFormat
|
|||
FMT_R16_SNORM,
|
||||
FMT_R8_SNORM,
|
||||
|
||||
FMT_BGRA8,
|
||||
|
||||
IMG_FORMAT_COUNT,
|
||||
};
|
||||
|
||||
|
@ -967,6 +969,7 @@ public:
|
|||
uint8_t components;
|
||||
uint8_t bits[4];
|
||||
ImgType type;
|
||||
bool bgra;
|
||||
};
|
||||
|
||||
static const struct ImgFormatDesc formatTable[IMG_FORMAT_COUNT];
|
||||
|
|
|
@ -508,6 +508,8 @@ static nv50_ir::ImgFormat translateImgFormat(uint format)
|
|||
FMT_CASE(R8G8_SNORM, RG8_SNORM);
|
||||
FMT_CASE(R16_SNORM, R16_SNORM);
|
||||
FMT_CASE(R8_SNORM, R8_SNORM);
|
||||
|
||||
FMT_CASE(B8G8R8A8_UNORM, BGRA8);
|
||||
}
|
||||
|
||||
assert(!"Unexpected format");
|
||||
|
|
|
@ -1940,6 +1940,10 @@ NVC0LoweringPass::convertSurfaceFormat(TexInstruction *su)
|
|||
bld.mkCvt(OP_CVT, TYPE_F32, typedDst[i], TYPE_F16, typedDst[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (format->bgra) {
|
||||
std::swap(typedDst[0], typedDst[2]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -177,6 +177,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define GK104_IMAGE_FORMAT_RG32_FLOAT 0x0000000d
|
||||
#define GK104_IMAGE_FORMAT_RG32_SINT 0x0000000e
|
||||
#define GK104_IMAGE_FORMAT_RG32_UINT 0x0000000f
|
||||
#define GK104_IMAGE_FORMAT_BGRA8_UNORM 0x00000011
|
||||
#define GK104_IMAGE_FORMAT_RGB10_A2_UNORM 0x00000013
|
||||
#define GK104_IMAGE_FORMAT_RGB10_A2_UINT 0x00000015
|
||||
#define GK104_IMAGE_FORMAT_RGBA8_UNORM 0x00000018
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#define U_IB PIPE_BIND_BLENDABLE | U_IR
|
||||
#define U_TD PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | U_TB
|
||||
#define U_TZ PIPE_BIND_DEPTH_STENCIL | U_T
|
||||
#define U_ID U_TD | U_I
|
||||
#if NOUVEAU_DRIVER == 0xc0
|
||||
# define U_TC U_TB
|
||||
# define U_IC U_IB
|
||||
|
@ -122,7 +123,7 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
|
|||
const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
|
||||
#endif
|
||||
{
|
||||
C4(A, B8G8R8A8_UNORM, BGRA8_UNORM, B, G, R, A, UNORM, A8B8G8R8, TD),
|
||||
C4(A, B8G8R8A8_UNORM, BGRA8_UNORM, B, G, R, A, UNORM, A8B8G8R8, ID),
|
||||
F3(A, B8G8R8X8_UNORM, BGRX8_UNORM, B, G, R, xx, UNORM, A8B8G8R8, TD),
|
||||
C4(A, B8G8R8A8_SRGB, BGRA8_SRGB, B, G, R, A, UNORM, A8B8G8R8, TD),
|
||||
F3(A, B8G8R8X8_SRGB, BGRX8_SRGB, B, G, R, xx, UNORM, A8B8G8R8, TD),
|
||||
|
|
|
@ -1158,6 +1158,7 @@ static const uint8_t nve4_su_format_map[PIPE_FORMAT_COUNT] =
|
|||
[PIPE_FORMAT_R16G16B16A16_SNORM] = GK104_IMAGE_FORMAT_RGBA16_SNORM,
|
||||
[PIPE_FORMAT_R16G16B16A16_SINT] = GK104_IMAGE_FORMAT_RGBA16_SINT,
|
||||
[PIPE_FORMAT_R16G16B16A16_UINT] = GK104_IMAGE_FORMAT_RGBA16_UINT,
|
||||
[PIPE_FORMAT_B8G8R8A8_UNORM] = GK104_IMAGE_FORMAT_BGRA8_UNORM,
|
||||
[PIPE_FORMAT_R8G8B8A8_UNORM] = GK104_IMAGE_FORMAT_RGBA8_UNORM,
|
||||
[PIPE_FORMAT_R8G8B8A8_SNORM] = GK104_IMAGE_FORMAT_RGBA8_SNORM,
|
||||
[PIPE_FORMAT_R8G8B8A8_SINT] = GK104_IMAGE_FORMAT_RGBA8_SINT,
|
||||
|
@ -1212,6 +1213,7 @@ static const uint16_t nve4_su_format_aux_map[PIPE_FORMAT_COUNT] =
|
|||
|
||||
[PIPE_FORMAT_R10G10B10A2_UNORM] = 0x2a24,
|
||||
[PIPE_FORMAT_R10G10B10A2_UINT] = 0x2a24,
|
||||
[PIPE_FORMAT_B8G8R8A8_UNORM] = 0x2a24,
|
||||
[PIPE_FORMAT_R8G8B8A8_UNORM] = 0x2a24,
|
||||
[PIPE_FORMAT_R8G8B8A8_SNORM] = 0x2a24,
|
||||
[PIPE_FORMAT_R8G8B8A8_SINT] = 0x2a24,
|
||||
|
|
Loading…
Reference in New Issue