summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-09-30 14:03:14 +0200
committerLucas Stach <l.stach@pengutronix.de>2014-07-28 12:33:37 +0200
commitfc6a00cf6dde2531bd17bb534f5e5b576632b08e (patch)
tree60a087f8acfaf2c39cec5e41b9558079647790a2
parent4f4cccf8e63b96c42e7740252df4148c4905e033 (diff)
downloadmesa-fc6a00cf6dde2531bd17bb534f5e5b576632b08e.tar.gz
mesa-fc6a00cf6dde2531bd17bb534f5e5b576632b08e.tar.xz
sync etna driver to 6e4d4cb
-rw-r--r--src/gallium/drivers/etna/etna_debug.h1
-rw-r--r--src/gallium/drivers/etna/etna_internal.h2
-rw-r--r--src/gallium/drivers/etna/etna_pipe.c9
-rw-r--r--src/gallium/drivers/etna/etna_resource.c7
-rw-r--r--src/gallium/drivers/etna/etna_screen.c7
5 files changed, 22 insertions, 4 deletions
diff --git a/src/gallium/drivers/etna/etna_debug.h b/src/gallium/drivers/etna/etna_debug.h
index f75ae71dff..1274ffcba6 100644
--- a/src/gallium/drivers/etna/etna_debug.h
+++ b/src/gallium/drivers/etna/etna_debug.h
@@ -47,6 +47,7 @@
#define ETNA_DBG_MSAA_4X 0x40000 /* Force 4X MSAA for screen */
#define ETNA_DBG_FINISH_ALL 0x80000 /* Finish on every flush */
#define ETNA_DBG_FLUSH_ALL 0x100000 /* Flush after every rendered primitive */
+#define ETNA_DBG_ZERO 0x200000 /* Zero all resources after allocation */
extern uint32_t etna_mesa_debug; /* set in etna_screen.c from ETNA_DEBUG */
diff --git a/src/gallium/drivers/etna/etna_internal.h b/src/gallium/drivers/etna/etna_internal.h
index 7e534a171d..d9eaaafade 100644
--- a/src/gallium/drivers/etna/etna_internal.h
+++ b/src/gallium/drivers/etna/etna_internal.h
@@ -39,6 +39,8 @@
#define ETNA_RS_WIDTH_MASK (16-1)
/* RS tiled operations must have height%4 = 0 */
#define ETNA_RS_HEIGHT_MASK (3)
+/* PE render targets must be aligned to 64 bytes */
+#define ETNA_PE_ALIGNMENT (64)
/* GPU chip 3D specs */
struct etna_pipe_specs
diff --git a/src/gallium/drivers/etna/etna_pipe.c b/src/gallium/drivers/etna/etna_pipe.c
index fd7e4c34eb..e5b20a0f3e 100644
--- a/src/gallium/drivers/etna/etna_pipe.c
+++ b/src/gallium/drivers/etna/etna_pipe.c
@@ -939,7 +939,6 @@ static void etna_pipe_set_framebuffer_state(struct pipe_context *pipe,
int nr_samples_color = -1;
int nr_samples_depth = -1;
-
/* Set up TS as well. Warning: this state is used by both the RS and PE */
uint32_t ts_mem_config = 0;
if(sv->nr_cbufs > 0) /* at least one color buffer? */
@@ -953,6 +952,14 @@ static void etna_pipe_set_framebuffer_state(struct pipe_context *pipe,
(color_supertiled ? VIVS_PE_COLOR_FORMAT_SUPER_TILED : 0);
/* XXX VIVS_PE_COLOR_FORMAT_OVERWRITE and the rest comes from blend_state / depth_stencil_alpha */
/* merged with depth_stencil_alpha */
+ if((cbuf->surf.address & 63) || (((cbuf->surf.stride*4) & 63) && cbuf->surf.height > 4))
+ {
+ /* XXX Must get temporary surface here.
+ */
+ printf("%s: Alignment error, trying to render to %08x with tile stride %i\n", __func__,
+ cbuf->surf.address, cbuf->surf.stride*4);
+ }
+
if (priv->ctx->conn->chip.pixel_pipes == 1)
{
cs->PE_COLOR_ADDR = cbuf->surf.address;
diff --git a/src/gallium/drivers/etna/etna_resource.c b/src/gallium/drivers/etna/etna_resource.c
index 6d52a925d5..3a2272da26 100644
--- a/src/gallium/drivers/etna/etna_resource.c
+++ b/src/gallium/drivers/etna/etna_resource.c
@@ -203,7 +203,7 @@ static struct pipe_resource * etna_screen_resource_create(struct pipe_screen *sc
mip->layer_stride = align(mip->padded_width, divSizeX)/divSizeX *
align(mip->padded_height, divSizeY)/divSizeY * element_size;
mip->size = templat->array_size * mip->layer_stride;
- offset += mip->size;
+ offset += align(mip->size, ETNA_PE_ALIGNMENT); /* align mipmaps to 64 bytes to be able to render to them */
if(ix == max_mip_level || (x == 1 && y == 1))
break; // stop at last level
x = (x+1)>>1;
@@ -249,6 +249,11 @@ static struct pipe_resource * etna_screen_resource_create(struct pipe_screen *sc
resource->ts = 0; /* TS is only created when first bound to surface */
pipe_reference_init(&resource->base.reference, 1);
+ if(DBG_ENABLED(ETNA_DBG_ZERO))
+ {
+ memset(resource->surface->logical, 0, rt_size);
+ }
+
for(unsigned ix=0; ix<=resource->base.last_level; ++ix)
{
struct etna_resource_level *mip = &resource->levels[ix];
diff --git a/src/gallium/drivers/etna/etna_screen.c b/src/gallium/drivers/etna/etna_screen.c
index f9c8420b8e..d62b11190c 100644
--- a/src/gallium/drivers/etna/etna_screen.c
+++ b/src/gallium/drivers/etna/etna_screen.c
@@ -65,7 +65,8 @@ static void etna_set_debug_flags(const char *str)
{ "msaa2x", ETNA_DBG_MSAA_2X },
{ "msaa4x", ETNA_DBG_MSAA_4X },
{ "finish_all", ETNA_DBG_FINISH_ALL },
- { "flush_all", ETNA_DBG_FLUSH_ALL }
+ { "flush_all", ETNA_DBG_FLUSH_ALL },
+ { "zero", ETNA_DBG_ZERO }
};
int i;
@@ -315,6 +316,7 @@ static int etna_screen_get_shader_param( struct pipe_screen *screen, unsigned sh
static int etna_screen_get_video_param( struct pipe_screen *screen,
enum pipe_video_profile profile,
+ enum pipe_video_entrypoint entrypoint,
enum pipe_video_cap param )
{
DBG("unimplemented etna_screen_get_video_param");
@@ -419,7 +421,8 @@ static boolean etna_screen_is_format_supported( struct pipe_screen *screen,
static boolean etna_screen_is_video_format_supported( struct pipe_screen *screen,
enum pipe_format format,
- enum pipe_video_profile profile )
+ enum pipe_video_profile profile,
+ enum pipe_video_entrypoint entrypoint )
{
DBG("unimplemented etna_screen_is_video_format_supported");
return false;