summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/v3d/v3d_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/v3d/v3d_screen.c')
-rw-r--r--src/gallium/drivers/v3d/v3d_screen.c296
1 files changed, 206 insertions, 90 deletions
diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c
index a3abf5bca8c..e479aaa1546 100644
--- a/src/gallium/drivers/v3d/v3d_screen.c
+++ b/src/gallium/drivers/v3d/v3d_screen.c
@@ -54,9 +54,10 @@ v3d_screen_get_name(struct pipe_screen *pscreen)
if (!screen->name) {
screen->name = ralloc_asprintf(screen,
- "V3D %d.%d",
+ "V3D %d.%d.%d",
screen->devinfo.ver / 10,
- screen->devinfo.ver % 10);
+ screen->devinfo.ver % 10,
+ screen->devinfo.rev);
}
return screen->name;
@@ -83,6 +84,12 @@ v3d_screen_destroy(struct pipe_screen *pscreen)
v3d_simulator_destroy(screen->sim_file);
v3d_compiler_free(screen->compiler);
+
+#ifdef ENABLE_SHADER_CACHE
+ if (screen->disk_cache)
+ disk_cache_destroy(screen->disk_cache);
+#endif
+
u_transfer_helper_destroy(pscreen->transfer_helper);
close(screen->fd);
@@ -111,36 +118,45 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
- case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
case PIPE_CAP_TEXTURE_MULTISAMPLE:
case PIPE_CAP_TEXTURE_SWIZZLE:
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
case PIPE_CAP_START_INSTANCE:
- case PIPE_CAP_TGSI_INSTANCEID:
+ case PIPE_CAP_VS_INSTANCEID:
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
- case PIPE_CAP_VERTEX_SHADER_SATURATE:
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
case PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART:
case PIPE_CAP_PRIMITIVE_RESTART:
case PIPE_CAP_OCCLUSION_QUERY:
- case PIPE_CAP_POINT_SPRITE:
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
case PIPE_CAP_DRAW_INDIRECT:
case PIPE_CAP_MULTI_DRAW_INDIRECT:
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
- case PIPE_CAP_TGSI_CAN_READ_OUTPUTS:
- case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
+ case PIPE_CAP_SHADER_CAN_READ_OUTPUTS:
+ case PIPE_CAP_SHADER_PACK_HALF_FLOAT:
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
- case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
+ case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL:
case PIPE_CAP_TGSI_TEXCOORD:
case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE:
+ case PIPE_CAP_SAMPLER_VIEW_TARGET:
+ case PIPE_CAP_ANISOTROPIC_FILTER:
+ case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
+ case PIPE_CAP_INDEP_BLEND_FUNC:
+ case PIPE_CAP_CONDITIONAL_RENDER:
+ case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
+ case PIPE_CAP_CUBE_MAP_ARRAY:
+ case PIPE_CAP_TEXTURE_BARRIER:
return 1;
+ case PIPE_CAP_POLYGON_OFFSET_CLAMP:
+ return screen->devinfo.ver >= 42;
+
+
case PIPE_CAP_TEXTURE_QUERY_LOD:
return screen->devinfo.ver >= 42;
break;
@@ -155,7 +171,7 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
return 0;
- case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
+ case PIPE_CAP_TEXTURE_TRANSFER_MODES:
/* XXX perf: we don't want to emit these extra blits for
* glReadPixels(), since we still have to do an uncached read
* from the GPU of the result after waiting for the TFU blit
@@ -164,23 +180,21 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
* dEQP-GLES31.functional.image_load_store.early_fragment_tests.*
* and corruption in chromium's rendering.
*/
- return 1;
+ return PIPE_TEXTURE_TRANSFER_BLIT;
case PIPE_CAP_COMPUTE:
- return screen->has_csd && screen->devinfo.ver >= 41;
+ return screen->has_csd && screen->devinfo.ver >= 42;
case PIPE_CAP_GENERATE_MIPMAP:
return v3d_has_feature(screen, DRM_V3D_PARAM_SUPPORTS_TFU);
case PIPE_CAP_INDEP_BLEND_ENABLE:
- return screen->devinfo.ver >= 40;
+ return 1;
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
- return 256;
+ return V3D_NON_COHERENT_ATOM_SIZE;
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
- if (screen->devinfo.ver < 40)
- return 0;
return 4;
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
@@ -198,23 +212,16 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
return 140;
- case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
+ case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT:
return 1;
- case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
+ case PIPE_CAP_FS_COORD_ORIGIN_LOWER_LEFT:
return 0;
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
- if (screen->devinfo.ver >= 40)
- return 0;
- else
- return 1;
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
- if (screen->devinfo.ver >= 40)
- return 1;
- else
- return 0;
+ case PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER:
+ return 0;
+ case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
+ return 1;
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
- case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
return 1;
@@ -226,24 +233,18 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
/* Texturing. */
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
- if (screen->devinfo.ver < 40)
- return 2048;
- else if (screen->nonmsaa_texture_size_limit)
+ if (screen->nonmsaa_texture_size_limit)
return 7680;
else
- return 4096;
+ return V3D_MAX_IMAGE_DIMENSION;
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
- if (screen->devinfo.ver < 40)
- return 12;
- else
- return V3D_MAX_MIP_LEVELS;
+ return V3D_MAX_MIP_LEVELS;
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
- return 2048;
+ return V3D_MAX_ARRAY_LAYERS;
- /* Render targets. */
case PIPE_CAP_MAX_RENDER_TARGETS:
- return 4;
+ return V3D_MAX_RENDER_TARGETS(screen->devinfo.ver);
case PIPE_CAP_VENDOR_ID:
return 0x14E4;
@@ -282,6 +283,18 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART:
return screen->prim_types;
+ case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
+ return true;
+
+ case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
+ return V3D_TMU_TEXEL_ALIGN;
+
+ case PIPE_CAP_IMAGE_STORE_FORMATTED:
+ return false;
+
+ case PIPE_CAP_NATIVE_FENCE_FD:
+ return true;
+
default:
return u_pipe_screen_get_param_defaults(pscreen, param);
}
@@ -291,16 +304,26 @@ static float
v3d_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 V3D_MAX_LINE_WIDTH;
- 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 V3D_MAX_POINT_SIZE;
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
- return 0.0f;
+ return 16.0f;
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return 16.0f;
@@ -315,7 +338,7 @@ v3d_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
}
static int
-v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
+v3d_screen_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader,
enum pipe_shader_cap param)
{
struct v3d_screen *screen = v3d_screen(pscreen);
@@ -329,7 +352,7 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
return 0;
break;
case PIPE_SHADER_GEOMETRY:
- if (screen->devinfo.ver < 41)
+ if (screen->devinfo.ver < 42)
return 0;
break;
default:
@@ -365,14 +388,14 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
return V3D_MAX_FS_INPUTS / 4;
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:
/* Note: Limited by the offset size in
* v3d_unit_data_create().
*/
return 16 * 1024 * sizeof(float);
case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
return 16;
- case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
+ case PIPE_SHADER_CAP_CONT_SUPPORTED:
return 0;
case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
/* We don't currently support this in the backend, but that is
@@ -400,10 +423,6 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
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:
case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
@@ -411,7 +430,7 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
return 0;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
- return V3D_OPENGL_MAX_TEXTURE_SAMPLERS;
+ return V3D_MAX_TEXTURE_SAMPLERS;
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
if (screen->has_cache_flush) {
@@ -426,7 +445,7 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:
if (screen->has_cache_flush) {
- if (screen->devinfo.ver < 41)
+ if (screen->devinfo.ver < 42)
return 0;
else
return PIPE_MAX_SHADER_IMAGES;
@@ -434,16 +453,8 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
return 0;
}
- 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:
- /* We use NIR's loop unrolling */
- return 0;
- case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
- case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
- return 0;
default:
fprintf(stderr, "unknown shader param %d\n", param);
return 0;
@@ -523,9 +534,12 @@ v3d_get_compute_param(struct pipe_screen *pscreen, enum pipe_shader_ir ir_type,
case PIPE_COMPUTE_CAP_IMAGES_SUPPORTED:
RET((uint32_t []) { 1 });
- case PIPE_COMPUTE_CAP_SUBGROUP_SIZE:
+ case PIPE_COMPUTE_CAP_SUBGROUP_SIZES:
RET((uint32_t []) { 16 });
+ case PIPE_COMPUTE_CAP_MAX_SUBGROUPS:
+ RET((uint32_t []) { 0 });
+
}
return 0;
@@ -566,12 +580,15 @@ v3d_screen_is_format_supported(struct pipe_screen *pscreen,
case PIPE_FORMAT_R32G32_SSCALED:
case PIPE_FORMAT_R32_SSCALED:
case PIPE_FORMAT_R16G16B16A16_UNORM:
+ case PIPE_FORMAT_R16G16B16A16_FLOAT:
case PIPE_FORMAT_R16G16B16_UNORM:
case PIPE_FORMAT_R16G16_UNORM:
case PIPE_FORMAT_R16_UNORM:
+ case PIPE_FORMAT_R16_FLOAT:
case PIPE_FORMAT_R16G16B16A16_SNORM:
case PIPE_FORMAT_R16G16B16_SNORM:
case PIPE_FORMAT_R16G16_SNORM:
+ case PIPE_FORMAT_R16G16_FLOAT:
case PIPE_FORMAT_R16_SNORM:
case PIPE_FORMAT_R16G16B16A16_USCALED:
case PIPE_FORMAT_R16G16B16_USCALED:
@@ -642,22 +659,41 @@ v3d_screen_is_format_supported(struct pipe_screen *pscreen,
return false;
}
+ if (usage & PIPE_BIND_SHADER_IMAGE) {
+ switch (format) {
+ /* FIXME: maybe we can implement a swizzle-on-writes to add
+ * support for BGRA-alike formats.
+ */
+ case PIPE_FORMAT_A4B4G4R4_UNORM:
+ case PIPE_FORMAT_A1B5G5R5_UNORM:
+ case PIPE_FORMAT_B5G6R5_UNORM:
+ case PIPE_FORMAT_B8G8R8A8_UNORM:
+ case PIPE_FORMAT_X8Z24_UNORM:
+ case PIPE_FORMAT_Z16_UNORM:
+ return false;
+ default:
+ return true;
+ }
+ }
+
return true;
}
static const nir_shader_compiler_options v3d_nir_options = {
+ .compact_arrays = true,
.lower_uadd_sat = true,
+ .lower_usub_sat = true,
.lower_iadd_sat = true,
.lower_all_io_to_temps = true,
.lower_extract_byte = true,
.lower_extract_word = true,
.lower_insert_byte = true,
.lower_insert_word = true,
- .lower_bitfield_insert_to_shifts = true,
- .lower_bitfield_extract_to_shifts = true,
+ .lower_bitfield_insert = true,
+ .lower_bitfield_extract = true,
.lower_bitfield_reverse = true,
.lower_bit_count = true,
- .lower_cs_local_id_from_index = true,
+ .lower_cs_local_id_to_index = true,
.lower_ffract = true,
.lower_fmod = true,
.lower_pack_unorm_2x16 = true,
@@ -668,6 +704,9 @@ static const nir_shader_compiler_options v3d_nir_options = {
.lower_unpack_snorm_4x8 = true,
.lower_pack_half_2x16 = true,
.lower_unpack_half_2x16 = true,
+ .lower_pack_32_2x16 = true,
+ .lower_pack_32_2x16_split = true,
+ .lower_unpack_32_2x16_split = true,
.lower_fdiv = true,
.lower_find_lsb = true,
.lower_ffma16 = true,
@@ -682,8 +721,9 @@ static const nir_shader_compiler_options v3d_nir_options = {
.lower_ldexp = true,
.lower_mul_high = true,
.lower_wpos_pntc = true,
- .lower_rotate = true,
.lower_to_scalar = true,
+ .lower_int64_options = nir_lower_imul_2x32_64,
+ .lower_fquantize2f16 = true,
.has_fsub = true,
.has_isub = true,
.divergence_analysis_options =
@@ -694,11 +734,12 @@ static const nir_shader_compiler_options v3d_nir_options = {
* limit register pressure impact.
*/
.max_unroll_iterations = 16,
+ .force_indirect_unrolling_sampler = true,
};
static const void *
v3d_screen_get_compiler_options(struct pipe_screen *pscreen,
- enum pipe_shader_ir ir, unsigned shader)
+ enum pipe_shader_ir ir, enum pipe_shader_type shader)
{
return &v3d_nir_options;
}
@@ -719,9 +760,39 @@ v3d_screen_query_dmabuf_modifiers(struct pipe_screen *pscreen,
int i;
int num_modifiers = ARRAY_SIZE(v3d_available_modifiers);
- /* Expose DRM_FORMAT_MOD_BROADCOM_SAND128 only for PIPE_FORMAT_NV12 */
- if (format != PIPE_FORMAT_NV12)
+ switch (format) {
+ case PIPE_FORMAT_P030:
+ /* Expose SAND128, but not LINEAR or UIF */
+ *count = 1;
+ if (modifiers && max > 0) {
+ modifiers[0] = DRM_FORMAT_MOD_BROADCOM_SAND128;
+ if (external_only)
+ external_only[0] = true;
+ }
+ return;
+
+ case PIPE_FORMAT_NV12:
+ /* Expose UIF, LINEAR and SAND128 */
+ break;
+
+ case PIPE_FORMAT_R8_UNORM:
+ case PIPE_FORMAT_R8G8_UNORM:
+ case PIPE_FORMAT_R16_UNORM:
+ case PIPE_FORMAT_R16G16_UNORM:
+ /* Expose UIF, LINEAR and SAND128 */
+ if (!modifiers) break;
+ *count = MIN2(max, num_modifiers);
+ for (i = 0; i < *count; i++) {
+ modifiers[i] = v3d_available_modifiers[i];
+ if (external_only)
+ external_only[i] = modifiers[i] == DRM_FORMAT_MOD_BROADCOM_SAND128;
+ }
+ return;
+
+ default:
+ /* Expose UIF and LINEAR, but not SAND128 */
num_modifiers--;
+ }
if (!modifiers) {
*count = num_modifiers;
@@ -743,18 +814,28 @@ v3d_screen_is_dmabuf_modifier_supported(struct pipe_screen *pscreen,
bool *external_only)
{
int i;
- bool is_sand_col128 = (format == PIPE_FORMAT_NV12) &&
- (fourcc_mod_broadcom_mod(modifier) == DRM_FORMAT_MOD_BROADCOM_SAND128);
-
- if (is_sand_col128) {
- if (external_only)
- *external_only = true;
- return true;
+ if (fourcc_mod_broadcom_mod(modifier) == DRM_FORMAT_MOD_BROADCOM_SAND128) {
+ switch(format) {
+ case PIPE_FORMAT_NV12:
+ case PIPE_FORMAT_P030:
+ case PIPE_FORMAT_R8_UNORM:
+ case PIPE_FORMAT_R8G8_UNORM:
+ case PIPE_FORMAT_R16_UNORM:
+ case PIPE_FORMAT_R16G16_UNORM:
+ if (external_only)
+ *external_only = true;
+ return true;
+ default:
+ return false;
+ }
+ } else if (format == PIPE_FORMAT_P030) {
+ /* For PIPE_FORMAT_P030 we don't expose LINEAR or UIF. */
+ return false;
}
/* We don't want to generally allow DRM_FORMAT_MOD_BROADCOM_SAND128
* modifier, that is the last v3d_available_modifiers. We only accept
- * it in the case of having a PIPE_FORMAT_NV12.
+ * it in the case of having a PIPE_FORMAT_NV12 or PIPE_FORMAT_P030.
*/
assert(v3d_available_modifiers[ARRAY_SIZE(v3d_available_modifiers) - 1] ==
DRM_FORMAT_MOD_BROADCOM_SAND128);
@@ -770,6 +851,34 @@ v3d_screen_is_dmabuf_modifier_supported(struct pipe_screen *pscreen,
return false;
}
+static enum pipe_format
+v3d_screen_get_compatible_tlb_format(struct pipe_screen *screen,
+ enum pipe_format format)
+{
+ switch (format) {
+ case PIPE_FORMAT_R16G16_UNORM:
+ return PIPE_FORMAT_R16G16_UINT;
+ default:
+ return format;
+ }
+}
+
+static struct disk_cache *
+v3d_screen_get_disk_shader_cache(struct pipe_screen *pscreen)
+{
+ struct v3d_screen *screen = v3d_screen(pscreen);
+
+ return screen->disk_cache;
+}
+
+static int
+v3d_screen_get_fd(struct pipe_screen *pscreen)
+{
+ struct v3d_screen *screen = v3d_screen(pscreen);
+
+ return screen->fd;
+}
+
struct pipe_screen *
v3d_screen_create(int fd, const struct pipe_screen_config *config,
struct renderonly *ro)
@@ -780,12 +889,14 @@ v3d_screen_create(int fd, const struct pipe_screen_config *config,
pscreen = &screen->base;
pscreen->destroy = v3d_screen_destroy;
+ pscreen->get_screen_fd = v3d_screen_get_fd;
pscreen->get_param = v3d_screen_get_param;
pscreen->get_paramf = v3d_screen_get_paramf;
pscreen->get_shader_param = v3d_screen_get_shader_param;
pscreen->get_compute_param = v3d_get_compute_param;
pscreen->context_create = v3d_context_create;
pscreen->is_format_supported = v3d_screen_is_format_supported;
+ pscreen->get_canonical_format = v3d_screen_get_compatible_tlb_format;
screen->fd = fd;
screen->ro = ro;
@@ -819,18 +930,23 @@ v3d_screen_create(int fd, const struct pipe_screen_config *config,
v3d_has_feature(screen, DRM_V3D_PARAM_SUPPORTS_CACHE_FLUSH);
screen->has_perfmon = v3d_has_feature(screen, DRM_V3D_PARAM_SUPPORTS_PERFMON);
- v3d_fence_init(screen);
+ v3d_fence_screen_init(screen);
v3d_process_debug_variable();
v3d_resource_screen_init(pscreen);
- screen->compiler = v3d_compiler_init(&screen->devinfo);
+ screen->compiler = v3d_compiler_init(&screen->devinfo, 0);
+
+#ifdef ENABLE_SHADER_CACHE
+ v3d_disk_cache_init(screen);
+#endif
pscreen->get_name = v3d_screen_get_name;
pscreen->get_vendor = v3d_screen_get_vendor;
pscreen->get_device_vendor = v3d_screen_get_vendor;
pscreen->get_compiler_options = v3d_screen_get_compiler_options;
+ pscreen->get_disk_shader_cache = v3d_screen_get_disk_shader_cache;
pscreen->query_dmabuf_modifiers = v3d_screen_query_dmabuf_modifiers;
pscreen->is_dmabuf_modifier_supported =
v3d_screen_is_dmabuf_modifier_supported;
@@ -841,17 +957,17 @@ v3d_screen_create(int fd, const struct pipe_screen_config *config,
}
/* 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) |
- BITFIELD_BIT(PIPE_PRIM_LINES_ADJACENCY) |
- BITFIELD_BIT(PIPE_PRIM_LINE_STRIP_ADJACENCY) |
- BITFIELD_BIT(PIPE_PRIM_TRIANGLES_ADJACENCY) |
- BITFIELD_BIT(PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY);
+ 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) |
+ BITFIELD_BIT(MESA_PRIM_LINES_ADJACENCY) |
+ BITFIELD_BIT(MESA_PRIM_LINE_STRIP_ADJACENCY) |
+ BITFIELD_BIT(MESA_PRIM_TRIANGLES_ADJACENCY) |
+ BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP_ADJACENCY);
return pscreen;