iris: Add mechanism for iris-specific driconf options

Based on Nicolai's 0f8c5de869.

Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
This commit is contained in:
Kenneth Graunke 2019-04-18 22:13:41 -07:00
parent ccb25aaeaf
commit faa52e328e
11 changed files with 75 additions and 8 deletions

View File

@ -74,7 +74,7 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
{
.driver_name = "iris",
.create_screen = pipe_iris_create_screen,
.configuration = pipe_default_configuration_query,
.configuration = pipe_iris_configuration_query,
},
{
.driver_name = "nouveau",

View File

@ -68,10 +68,28 @@ pipe_iris_create_screen(int fd, const struct pipe_screen_config *config)
{
struct pipe_screen *screen;
screen = iris_drm_screen_create(fd);
screen = iris_drm_screen_create(fd, config);
return screen ? debug_screen_wrap(screen) : NULL;
}
const struct drm_conf_ret *
pipe_iris_configuration_query(enum drm_conf conf)
{
static const struct drm_conf_ret xml_options_ret = {
.type = DRM_CONF_POINTER,
.val.val_pointer =
#include "iris/iris_driinfo.h"
};
switch (conf) {
case DRM_CONF_XML_OPTIONS:
return &xml_options_ret;
default:
break;
}
return pipe_default_configuration_query(conf);
}
#else
struct pipe_screen *
@ -81,6 +99,12 @@ pipe_iris_create_screen(int fd, const struct pipe_screen_config *config)
return NULL;
}
const struct drm_conf_ret *
pipe_iris_configuration_query(enum drm_conf conf)
{
return NULL;
}
#endif
#ifdef GALLIUM_NOUVEAU

View File

@ -12,6 +12,8 @@ pipe_i915_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_iris_create_screen(int fd, const struct pipe_screen_config *config);
const struct drm_conf_ret *
pipe_iris_configuration_query(enum drm_conf conf);
struct pipe_screen *
pipe_nouveau_create_screen(int fd, const struct pipe_screen_config *config);

View File

@ -125,6 +125,24 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libmesa_pipe_iris
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
intermediates := $(call local-generated-sources-dir)
LOCAL_GENERATED_SOURCES := $(addprefix $(intermediates)/iris/,$(GENERATED_SOURCES))
GEN_DRIINFO_INPUTS := \
$(MESA_TOP)/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h \
$(LOCAL_PATH)/driinfo_iris.h
MERGE_DRIINFO := $(MESA_TOP)/src/util/merge_driinfo.py
$(intermediates)/iris/si_driinfo.h: $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS)
@mkdir -p $(dir $@)
@echo "Gen Header: $(PRIVATE_MODULE) <= $(notdir $(@))"
$(hide) $(MESA_PYTHON2) $(MERGE_DRIINFO) $(GEN_DRIINFO_INPUTS) > $@ || ($(RM) $@; false)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
LOCAL_SRC_FILES := \
$(IRIS_C_SOURCES)

View File

@ -20,7 +20,12 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
GENERATED_SOURCES := \
iris_driinfo.h
IRIS_C_SOURCES = \
$(GENERATED_SOURCES) \
driinfo_iris.h \
iris_batch.c \
iris_batch.h \
iris_binder.c \

View File

@ -0,0 +1 @@
// iris specific driconf options

View File

@ -552,7 +552,7 @@ iris_shader_perf_log(void *data, const char *fmt, ...)
}
struct pipe_screen *
iris_screen_create(int fd)
iris_screen_create(int fd, const struct pipe_screen_config *config)
{
struct iris_screen *screen = rzalloc(NULL, struct iris_screen);
if (!screen)

View File

@ -74,7 +74,8 @@ struct iris_screen {
struct iris_bo *workaround_bo;
};
struct pipe_screen *iris_screen_create(int fd);
struct pipe_screen *
iris_screen_create(int fd, const struct pipe_screen_config *config);
boolean
iris_is_format_supported(struct pipe_screen *pscreen,

View File

@ -19,6 +19,7 @@
# SOFTWARE.
files_libiris = files(
'driinfo_iris.h',
'iris_batch.c',
'iris_batch.h',
'iris_binder.c',
@ -46,6 +47,17 @@ files_libiris = files(
'iris_screen.h',
)
iris_driinfo_h = custom_target(
'iris_driinfo.h',
input : files(
'../../../util/merge_driinfo.py',
'../../auxiliary/pipe-loader/driinfo_gallium.h', 'driinfo_iris.h'
),
output : 'iris_driinfo.h',
command : [prog_python, '@INPUT@'],
capture : true,
)
iris_gen_libs = []
foreach v : ['80', '90', '100', '110']
iris_gen_libs += static_library(
@ -62,7 +74,8 @@ endforeach
libiris = static_library(
'iris',
[files_libiris, gen_xml_pack, nir_opcodes_h, nir_builder_opcodes_h],
[files_libiris, gen_xml_pack, nir_opcodes_h, nir_builder_opcodes_h,
iris_driinfo_h],
include_directories : [
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_intel, inc_nir,
inc_gallium_drivers,
@ -80,5 +93,6 @@ libiris = static_library(
driver_iris = declare_dependency(
compile_args : '-DGALLIUM_IRIS',
sources : iris_driinfo_h,
link_with : [libiris, libiriswinsys],
)

View File

@ -25,7 +25,9 @@
#define IRIS_DRM_PUBLIC_H
struct pipe_screen;
struct pipe_screen_config;
struct pipe_screen *iris_drm_screen_create(int drm_fd);
struct pipe_screen *
iris_drm_screen_create(int drm_fd, const struct pipe_screen_config *config);
#endif /* IRIS_DRM_PUBLIC_H */

View File

@ -28,7 +28,7 @@
#include "iris/iris_screen.h"
struct pipe_screen *
iris_drm_screen_create(int fd)
iris_drm_screen_create(int fd, const struct pipe_screen_config *config)
{
return iris_screen_create(fcntl(fd, F_DUPFD_CLOEXEC, 3));
return iris_screen_create(fcntl(fd, F_DUPFD_CLOEXEC, 3), config);
}