X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgallium%2Fdrivers%2Firis%2Firis_screen.c;h=e92685d4ae67abc8606446892ed503fb2feb84b7;hb=de2efd5ea7fafba09a596beba68436c33ebe912e;hp=d9d70fcc89bc4fbdfd4c41365d2b1926556a1cdf;hpb=9c81db8adb1bb33db618e9d4160da263583d5fe3;p=mesa.git diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c index d9d70fcc89b..e92685d4ae6 100644 --- a/src/gallium/drivers/iris/iris_screen.c +++ b/src/gallium/drivers/iris/iris_screen.c @@ -52,6 +52,8 @@ #include "iris_resource.h" #include "iris_screen.h" #include "intel/compiler/brw_compiler.h" +#include "intel/common/gen_gem.h" +#include "iris_monitor.h" static void iris_flush_frontbuffer(struct pipe_screen *_screen, @@ -97,7 +99,7 @@ static uint64_t get_aperture_size(int fd) { struct drm_i915_gem_get_aperture aperture = {}; - drm_ioctl(fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture); + gen_ioctl(fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture); return aperture.aper_size; } @@ -116,7 +118,9 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TEXTURE_SWIZZLE: case PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE: case PIPE_CAP_BLEND_EQUATION_SEPARATE: - case PIPE_CAP_SM3: + case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD: + case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES: + case PIPE_CAP_VERTEX_SHADER_SATURATE: case PIPE_CAP_PRIMITIVE_RESTART: case PIPE_CAP_INDEP_BLEND_ENABLE: case PIPE_CAP_INDEP_BLEND_FUNC: @@ -188,11 +192,14 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_LOAD_CONSTBUF: case PIPE_CAP_NIR_COMPACT_ARRAYS: case PIPE_CAP_DRAW_PARAMETERS: + case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL: case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL: case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES: case PIPE_CAP_INVALIDATE_BUFFER: case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS: case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED: + case PIPE_CAP_TEXTURE_SHADOW_LOD: + case PIPE_CAP_SHADER_SAMPLES_IDENTICAL: return true; case PIPE_CAP_FBFETCH: /* TODO: Support non-coherent FB fetch on Broadwell */ @@ -203,6 +210,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_SHADER_STENCIL_EXPORT: case PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE: case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK: + case PIPE_CAP_ATOMIC_FLOAT_MINMAX: return devinfo->gen >= 9; case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: return 1; @@ -223,9 +231,8 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS: return BRW_MAX_SOL_BINDINGS; case PIPE_CAP_GLSL_FEATURE_LEVEL: - return 460; case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: - return 140; + return 460; case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: /* 3DSTATE_CONSTANT_XS requires the start of UBOs to be 32B aligned */ return 32; @@ -245,7 +252,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT: return 16; // XXX: u_screen says 256 is the minimum value... case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER: - return true; // XXX: ????? + return true; case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE: return IRIS_MAX_TEXTURE_BUFFER_SIZE; case PIPE_CAP_MAX_VIEWPORTS: @@ -410,8 +417,6 @@ iris_get_shader_param(struct pipe_screen *pscreen, 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_TGSI_DROUND_SUPPORTED: case PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED: return 1; @@ -421,6 +426,7 @@ iris_get_shader_param(struct pipe_screen *pscreen, 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_UNROLL_ITERATIONS_HINT: return 0; default: unreachable("unknown shader param"); @@ -502,7 +508,7 @@ iris_get_timestamp(struct pipe_screen *pscreen) iris_reg_read(screen->bufmgr, TIMESTAMP | 1, &result); - result = iris_timebase_scale(&screen->devinfo, result); + result = gen_device_info_timebase_scale(&screen->devinfo, result); result &= (1ull << TIMESTAMP_BITS) - 1; return result; @@ -611,17 +617,15 @@ iris_screen_create(int fd, const struct pipe_screen_config *config) return NULL; screen->fd = fd; - screen->pci_id = iris_getparam_integer(screen, I915_PARAM_CHIPSET_ID); - if (!gen_get_device_info(screen->pci_id, &screen->devinfo)) + if (!gen_get_device_info_from_fd(fd, &screen->devinfo)) return NULL; + screen->pci_id = screen->devinfo.chipset_id; + screen->no_hw = screen->devinfo.no_hw; if (screen->devinfo.gen < 8 || screen->devinfo.is_cherryview) return NULL; - screen->devinfo.timestamp_frequency = - iris_getparam_integer(screen, I915_PARAM_CS_TIMESTAMP_FREQUENCY); - screen->aperture_bytes = get_aperture_size(fd); if (getenv("INTEL_NO_HW") != NULL) @@ -680,6 +684,8 @@ iris_screen_create(int fd, const struct pipe_screen_config *config) pscreen->flush_frontbuffer = iris_flush_frontbuffer; pscreen->get_timestamp = iris_get_timestamp; pscreen->query_memory_info = iris_query_memory_info; + pscreen->get_driver_query_group_info = iris_get_monitor_group_info; + pscreen->get_driver_query_info = iris_get_monitor_info; return pscreen; }