summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/vc4/vc4_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_screen.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_screen.c81
1 files changed, 40 insertions, 41 deletions
diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
index 40d49cc6b0c..6da53d63a65 100644
--- a/src/gallium/drivers/vc4/vc4_screen.c
+++ b/src/gallium/drivers/vc4/vc4_screen.c
@@ -27,7 +27,6 @@
#include "pipe/p_screen.h"
#include "pipe/p_state.h"
-#include "util/u_cpu_detect.h"
#include "util/u_debug.h"
#include "util/u_memory.h"
#include "util/format/u_format.h"
@@ -70,11 +69,11 @@ static const struct debug_named_value vc4_debug_options[] = {
{ "dump", VC4_DEBUG_DUMP,
"Write a GPU command stream trace file" },
#endif
- { NULL }
+ DEBUG_NAMED_VALUE_END
};
DEBUG_GET_ONCE_FLAGS_OPTION(vc4_debug, "VC4_DEBUG", vc4_debug_options, 0)
-uint32_t vc4_debug;
+uint32_t vc4_mesa_debug;
static const char *
vc4_screen_get_name(struct pipe_screen *pscreen)
@@ -141,7 +140,6 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
/* Supported features (boolean caps). */
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
- case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
@@ -157,14 +155,9 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return vc4_has_feature(screen,
DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER);
- /* lying for GL 2.0 */
- case PIPE_CAP_OCCLUSION_QUERY:
- case PIPE_CAP_POINT_SPRITE:
- return 1;
-
- case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
- case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
+ case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT:
+ case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
+ case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL:
return 1;
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
@@ -177,8 +170,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
return VC4_MAX_MIP_LEVELS;
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
- /* Note: Not supported in hardware, just faking it. */
- return 5;
+ return 0;
case PIPE_CAP_MAX_VARYINGS:
return 8;
@@ -202,6 +194,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
case PIPE_CAP_TWO_SIDED_COLOR:
case PIPE_CAP_TEXRECT:
+ case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 0;
case PIPE_CAP_SUPPORTED_PRIM_MODES:
@@ -216,12 +209,22 @@ static float
vc4_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
{
switch (param) {
+ case PIPE_CAPF_MIN_LINE_WIDTH:
+ case PIPE_CAPF_MIN_LINE_WIDTH_AA:
+ case PIPE_CAPF_MIN_POINT_SIZE:
+ case PIPE_CAPF_MIN_POINT_SIZE_AA:
+ return 1;
+
+ case PIPE_CAPF_POINT_SIZE_GRANULARITY:
+ case PIPE_CAPF_LINE_WIDTH_GRANULARITY:
+ return 0.1;
+
case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAPF_MAX_LINE_WIDTH_AA:
return 32;
- case PIPE_CAPF_MAX_POINT_WIDTH:
- case PIPE_CAPF_MAX_POINT_WIDTH_AA:
+ case PIPE_CAPF_MAX_POINT_SIZE:
+ case PIPE_CAPF_MAX_POINT_SIZE_AA:
return 512.0f;
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
@@ -266,11 +269,11 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen,
return shader == PIPE_SHADER_FRAGMENT ? 1 : 8;
case PIPE_SHADER_CAP_MAX_TEMPS:
return 256; /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
- case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:
+ case PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE:
return 16 * 1024 * sizeof(float);
case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
return 1;
- case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
+ case PIPE_SHADER_CAP_CONT_SUPPORTED:
return 0;
case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
@@ -290,25 +293,15 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen,
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
case PIPE_SHADER_CAP_INT16:
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
- case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
- case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
- case PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED:
- case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
return 0;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
return VC4_MAX_TEXTURE_SAMPLERS;
- case PIPE_SHADER_CAP_PREFERRED_IR:
- return PIPE_SHADER_IR_NIR;
case PIPE_SHADER_CAP_SUPPORTED_IRS:
return 1 << PIPE_SHADER_IR_NIR;
- case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
- return 32;
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:
- case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
- case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS:
return 0;
@@ -539,8 +532,17 @@ vc4_get_chip_info(struct vc4_screen *screen)
return true;
}
+static int
+vc4_screen_get_fd(struct pipe_screen *pscreen)
+{
+ struct vc4_screen *screen = vc4_screen(pscreen);
+
+ return screen->fd;
+}
+
struct pipe_screen *
-vc4_screen_create(int fd, struct renderonly *ro)
+vc4_screen_create(int fd, const struct pipe_screen_config *config,
+ struct renderonly *ro)
{
struct vc4_screen *screen = rzalloc(NULL, struct vc4_screen);
uint64_t syncobj_cap = 0;
@@ -550,6 +552,7 @@ vc4_screen_create(int fd, struct renderonly *ro)
pscreen = &screen->base;
pscreen->destroy = vc4_screen_destroy;
+ pscreen->get_screen_fd = vc4_screen_get_fd;
pscreen->get_param = vc4_screen_get_param;
pscreen->get_paramf = vc4_screen_get_paramf;
pscreen->get_shader_param = vc4_screen_get_shader_param;
@@ -581,15 +584,11 @@ vc4_screen_create(int fd, struct renderonly *ro)
if (!vc4_get_chip_info(screen))
goto fail;
- util_cpu_detect();
-
slab_create_parent(&screen->transfer_pool, sizeof(struct vc4_transfer), 16);
vc4_fence_screen_init(screen);
- vc4_debug = debug_get_option_vc4_debug();
- if (vc4_debug & VC4_DEBUG_SHADERDB)
- vc4_debug |= VC4_DEBUG_NORAST;
+ vc4_mesa_debug = debug_get_option_vc4_debug();
#ifdef USE_VC4_SIMULATOR
vc4_simulator_init(screen);
@@ -610,13 +609,13 @@ vc4_screen_create(int fd, struct renderonly *ro)
}
/* Generate the bitmask of supported draw primitives. */
- screen->prim_types = BITFIELD_BIT(PIPE_PRIM_POINTS) |
- BITFIELD_BIT(PIPE_PRIM_LINES) |
- BITFIELD_BIT(PIPE_PRIM_LINE_LOOP) |
- BITFIELD_BIT(PIPE_PRIM_LINE_STRIP) |
- BITFIELD_BIT(PIPE_PRIM_TRIANGLES) |
- BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP) |
- BITFIELD_BIT(PIPE_PRIM_TRIANGLE_FAN);
+ screen->prim_types = BITFIELD_BIT(MESA_PRIM_POINTS) |
+ BITFIELD_BIT(MESA_PRIM_LINES) |
+ BITFIELD_BIT(MESA_PRIM_LINE_LOOP) |
+ BITFIELD_BIT(MESA_PRIM_LINE_STRIP) |
+ BITFIELD_BIT(MESA_PRIM_TRIANGLES) |
+ BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP) |
+ BITFIELD_BIT(MESA_PRIM_TRIANGLE_FAN);
return pscreen;