#include "etnaviv_debug.h"
#include "etnaviv_format.h"
-#include "etnaviv_tiling.h"
#include "etnaviv_util.h"
#include "hw/cmdstream.xml.h"
+#include "hw/common_3d.xml.h"
#include "hw/state.xml.h"
#include "hw/state_3d.xml.h"
#include "util/u_format.h"
#include "util/u_math.h"
-#include <stdio.h>
-
/* Returned when there is no match of pipe value to etna value */
#define ETNA_NO_MATCH (~0)
/* render target format for MSAA */
static inline uint32_t
-translate_msaa_format(enum pipe_format fmt)
+translate_ts_format(enum pipe_format fmt)
{
/* Note: Pipe format convention is LSB to MSB, VIVS is MSB to LSB */
switch (fmt) {
case PIPE_FORMAT_B4G4R4X4_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_A4R4G4B4;
case PIPE_FORMAT_B4G4R4A4_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_A4R4G4B4;
+ return COMPRESSION_FORMAT_A4R4G4B4;
case PIPE_FORMAT_B5G5R5X1_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_A1R5G5B5;
+ return COMPRESSION_FORMAT_A1R5G5B5;
case PIPE_FORMAT_B5G5R5A1_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_A1R5G5B5;
+ return COMPRESSION_FORMAT_A1R5G5B5;
case PIPE_FORMAT_B5G6R5_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_R5G6B5;
+ return COMPRESSION_FORMAT_R5G6B5;
case PIPE_FORMAT_B8G8R8X8_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_X8R8G8B8;
+ case PIPE_FORMAT_B8G8R8X8_SRGB:
+ case PIPE_FORMAT_R8G8B8X8_UNORM:
+ return COMPRESSION_FORMAT_X8R8G8B8;
case PIPE_FORMAT_B8G8R8A8_UNORM:
- return VIVS_TS_MEM_CONFIG_MSAA_FORMAT_A8R8G8B8;
+ case PIPE_FORMAT_B8G8R8A8_SRGB:
+ case PIPE_FORMAT_R8G8B8A8_UNORM:
+ return COMPRESSION_FORMAT_A8R8G8B8;
+ case PIPE_FORMAT_S8_UINT_Z24_UNORM:
+ return COMPRESSION_FORMAT_D24S8;
+ case PIPE_FORMAT_X8Z24_UNORM:
+ return COMPRESSION_FORMAT_D24X8;
+ case PIPE_FORMAT_Z16_UNORM:
+ return COMPRESSION_FORMAT_D16;
/* MSAA with YUYV not supported */
default:
return ETNA_NO_MATCH;
}
}
-static inline void etna_adjust_rs_align(unsigned num_pixelpipes,
- unsigned *paddingX, unsigned *paddingY)
-{
- unsigned alignX = ETNA_RS_WIDTH_MASK + 1;
- unsigned alignY = (ETNA_RS_HEIGHT_MASK + 1) * num_pixelpipes;
-
- if (paddingX)
- *paddingX = align(*paddingX, alignX);
- if (paddingY)
- *paddingY = align(*paddingY, alignY);
-}
-
static inline uint32_t
translate_clear_depth_stencil(enum pipe_format format, float depth,
unsigned stencil)
return true;
}
+static inline uint32_t
+translate_texture_target(unsigned target)
+{
+ switch (target) {
+ case PIPE_TEXTURE_1D:
+ return TEXTURE_TYPE_1D;
+ case PIPE_TEXTURE_2D:
+ case PIPE_TEXTURE_RECT:
+ case PIPE_TEXTURE_1D_ARRAY:
+ return TEXTURE_TYPE_2D;
+ case PIPE_TEXTURE_CUBE:
+ return TEXTURE_TYPE_CUBE_MAP;
+ case PIPE_TEXTURE_3D:
+ case PIPE_TEXTURE_2D_ARRAY:
+ return TEXTURE_TYPE_3D;
+ default:
+ DBG("Unhandled texture target: %i", target);
+ return ETNA_NO_MATCH;
+ }
+}
+
+static inline uint32_t
+translate_texture_compare(enum pipe_compare_func compare_func)
+{
+ switch (compare_func) {
+ case PIPE_FUNC_NEVER:
+ return TEXTURE_COMPARE_FUNC_NEVER;
+ case PIPE_FUNC_LESS:
+ return TEXTURE_COMPARE_FUNC_LESS;
+ case PIPE_FUNC_EQUAL:
+ return TEXTURE_COMPARE_FUNC_EQUAL;
+ case PIPE_FUNC_LEQUAL:
+ return TEXTURE_COMPARE_FUNC_LEQUAL;
+ case PIPE_FUNC_GREATER:
+ return TEXTURE_COMPARE_FUNC_GREATER;
+ case PIPE_FUNC_NOTEQUAL:
+ return TEXTURE_COMPARE_FUNC_NOTEQUAL;
+ case PIPE_FUNC_GEQUAL:
+ return TEXTURE_COMPARE_FUNC_GEQUAL;
+ case PIPE_FUNC_ALWAYS:
+ return TEXTURE_COMPARE_FUNC_ALWAYS;
+ default:
+ unreachable("Invalid compare func");
+ }
+}
+
#endif