summaryrefslogtreecommitdiff
path: root/native/driver/etna_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'native/driver/etna_screen.c')
-rw-r--r--native/driver/etna_screen.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/native/driver/etna_screen.c b/native/driver/etna_screen.c
index 09e1e5e..cd174bb 100644
--- a/native/driver/etna_screen.c
+++ b/native/driver/etna_screen.c
@@ -35,6 +35,7 @@
#include "util/u_format.h"
#include "util/u_transfer.h"
#include "util/u_math.h"
+#include "util/u_inlines.h"
#include <stdio.h>
@@ -57,7 +58,7 @@ static const char *etna_screen_get_vendor( struct pipe_screen *screen )
static int etna_screen_get_param( struct pipe_screen *screen, enum pipe_cap param )
{
- /* struct etna_screen *priv = etna_screen(screen); */
+ struct etna_screen *priv = etna_screen(screen);
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_TWO_SIDED_STENCIL:
@@ -135,7 +136,7 @@ static int etna_screen_get_param( struct pipe_screen *screen, enum pipe_cap para
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
return 0;
case PIPE_CAP_MAX_COMBINED_SAMPLERS:
- return 12; /* XXX depends on caps */
+ return priv->specs.fragment_sampler_count + priv->specs.vertex_sampler_count;
case PIPE_CAP_CUBE_MAP_ARRAY:
return 0;
case PIPE_CAP_MIN_TEXEL_OFFSET:
@@ -192,6 +193,7 @@ static float etna_screen_get_paramf( struct pipe_screen *screen, enum pipe_capf
static int etna_screen_get_shader_param( struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param )
{
+ struct etna_screen *priv = etna_screen(screen);
switch(shader)
{
case PIPE_SHADER_FRAGMENT:
@@ -245,7 +247,8 @@ static int etna_screen_get_shader_param( struct pipe_screen *screen, unsigned sh
case PIPE_SHADER_CAP_INTEGERS: /* XXX supported on gc2000 */
return 0;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
- return shader==PIPE_SHADER_FRAGMENT ? 16 : 8;
+ return shader==PIPE_SHADER_FRAGMENT ? priv->specs.fragment_sampler_count :
+ priv->specs.vertex_sampler_count;
case PIPE_SHADER_CAP_PREFERRED_IR:
return PIPE_SHADER_IR_TGSI;
default:
@@ -566,6 +569,7 @@ static struct pipe_resource * etna_screen_resource_create(struct pipe_screen *sc
resource->layout = layout;
resource->surface = rt;
resource->ts = rt_ts;
+ pipe_reference_init(&resource->base.reference, 1);
for(unsigned ix=0; ix<=resource->base.last_level; ++ix)
{
@@ -610,6 +614,8 @@ etna_screen_create(struct viv_conn *dev)
screen->specs.bits_per_tile = VIV_FEATURE(dev, chipMinorFeatures0, 2BITPERTILE)?2:4;
screen->specs.ts_clear_value = VIV_FEATURE(dev, chipMinorFeatures0, 2BITPERTILE)?0x55555555:0x11111111;
screen->specs.vertex_sampler_offset = 8; /* vertex and fragment samplers live in one address space */
+ screen->specs.fragment_sampler_count = 8;
+ screen->specs.vertex_sampler_count = 4;
screen->specs.vs_need_z_div = dev->chip.chip_model < 0x1000 && dev->chip.chip_model != 0x880;
screen->specs.vertex_output_buffer_size = dev->chip.vertex_output_buffer_size;
screen->specs.vertex_cache_size = dev->chip.vertex_cache_size;