mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
anv: Start to move i915 specific code from anv_device to i915/anv_device
More code re-organization to separate i915_drm.h specific code from the rest. No behavior changes here. Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Rohan Garg <rohan.garg@intel.com> Acked-by: Marcin Ślusarz <marcin.slusarz@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20428>
This commit is contained in:
parent
8084b412ca
commit
80c89c4606
7 changed files with 247 additions and 196 deletions
|
|
@ -55,10 +55,11 @@
|
|||
#include "vk_deferred_operation.h"
|
||||
#include "vk_drm_syncobj.h"
|
||||
#include "common/intel_aux_map.h"
|
||||
#include "common/intel_defines.h"
|
||||
#include "common/intel_uuid.h"
|
||||
#include "perf/intel_perf.h"
|
||||
|
||||
#include "i915/anv_device.h"
|
||||
|
||||
#include "genxml/gen7_pack.h"
|
||||
#include "genxml/genX_bits.h"
|
||||
|
||||
|
|
@ -762,68 +763,6 @@ anv_physical_device_init_queue_families(struct anv_physical_device *pdevice)
|
|||
pdevice->queue.family_count = family_count;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
anv_i915_physical_device_get_parameters(struct anv_physical_device *device)
|
||||
{
|
||||
VkResult result = VK_SUCCESS;
|
||||
int val, fd = device->local_fd;
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_WAIT_TIMEOUT, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing gem wait");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXECBUF2, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing execbuf2");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!device->info.has_llc &&
|
||||
(!intel_gem_get_param(fd, I915_PARAM_MMAP_VERSION, &val) || val < 1)) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing wc mmap");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_SOFTPIN, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing softpin");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_FENCE_ARRAY, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing syncobj support");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_ASYNC, &val))
|
||||
device->has_exec_async = val;
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_CAPTURE, &val))
|
||||
device->has_exec_capture = val;
|
||||
|
||||
/* Start with medium; sorted low to high */
|
||||
const VkQueueGlobalPriorityKHR priorities[] = {
|
||||
VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR,
|
||||
};
|
||||
device->max_context_priority = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR;
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(priorities); i++) {
|
||||
if (!anv_gem_has_context_priority(fd, priorities[i]))
|
||||
break;
|
||||
device->max_context_priority = priorities[i];
|
||||
}
|
||||
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_TIMELINE_FENCES, &val))
|
||||
device->has_exec_timeline = val;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
anv_physical_device_get_parameters(struct anv_physical_device *device)
|
||||
{
|
||||
|
|
@ -3174,86 +3113,6 @@ static struct intel_mapped_pinned_buffer_alloc aux_map_allocator = {
|
|||
|
||||
static VkResult anv_device_check_status(struct vk_device *vk_device);
|
||||
|
||||
static VkResult
|
||||
anv_device_setup_context(struct anv_device *device,
|
||||
const VkDeviceCreateInfo *pCreateInfo,
|
||||
const uint32_t num_queues)
|
||||
{
|
||||
struct anv_physical_device *physical_device = device->physical;
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
if (device->physical->engine_info) {
|
||||
/* The kernel API supports at most 64 engines */
|
||||
assert(num_queues <= 64);
|
||||
enum intel_engine_class engine_classes[64];
|
||||
int engine_count = 0;
|
||||
for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++) {
|
||||
const VkDeviceQueueCreateInfo *queueCreateInfo =
|
||||
&pCreateInfo->pQueueCreateInfos[i];
|
||||
|
||||
assert(queueCreateInfo->queueFamilyIndex <
|
||||
physical_device->queue.family_count);
|
||||
struct anv_queue_family *queue_family =
|
||||
&physical_device->queue.families[queueCreateInfo->queueFamilyIndex];
|
||||
|
||||
for (uint32_t j = 0; j < queueCreateInfo->queueCount; j++)
|
||||
engine_classes[engine_count++] = queue_family->engine_class;
|
||||
}
|
||||
if (!intel_gem_create_context_engines(device->fd,
|
||||
physical_device->engine_info,
|
||||
engine_count, engine_classes,
|
||||
(uint32_t *)&device->context_id))
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel context creation failed");
|
||||
} else {
|
||||
assert(num_queues == 1);
|
||||
if (!intel_gem_create_context(device->fd, &device->context_id))
|
||||
result = vk_error(device, VK_ERROR_INITIALIZATION_FAILED);
|
||||
}
|
||||
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
/* Here we tell the kernel not to attempt to recover our context but
|
||||
* immediately (on the next batchbuffer submission) report that the
|
||||
* context is lost, and we will do the recovery ourselves. In the case
|
||||
* of Vulkan, recovery means throwing VK_ERROR_DEVICE_LOST and letting
|
||||
* the client clean up the pieces.
|
||||
*/
|
||||
anv_gem_set_context_param(device->fd, device->context_id,
|
||||
I915_CONTEXT_PARAM_RECOVERABLE, false);
|
||||
|
||||
/* Check if client specified queue priority. */
|
||||
const VkDeviceQueueGlobalPriorityCreateInfoKHR *queue_priority =
|
||||
vk_find_struct_const(pCreateInfo->pQueueCreateInfos[0].pNext,
|
||||
DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR);
|
||||
|
||||
VkQueueGlobalPriorityKHR priority =
|
||||
queue_priority ? queue_priority->globalPriority :
|
||||
VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR;
|
||||
|
||||
/* As per spec, the driver implementation may deny requests to acquire
|
||||
* a priority above the default priority (MEDIUM) if the caller does not
|
||||
* have sufficient privileges. In this scenario VK_ERROR_NOT_PERMITTED_KHR
|
||||
* is returned.
|
||||
*/
|
||||
if (physical_device->max_context_priority >= VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) {
|
||||
int err = anv_gem_set_context_param(device->fd, device->context_id,
|
||||
I915_CONTEXT_PARAM_PRIORITY,
|
||||
priority);
|
||||
if (err != 0 && priority > VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) {
|
||||
result = vk_error(device, VK_ERROR_NOT_PERMITTED_KHR);
|
||||
goto fail_context;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
fail_context:
|
||||
intel_gem_destroy_context(device->fd, device->context_id);
|
||||
return result;
|
||||
}
|
||||
|
||||
VkResult anv_CreateDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo* pCreateInfo,
|
||||
|
|
@ -3367,7 +3226,7 @@ VkResult anv_CreateDevice(
|
|||
for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++)
|
||||
num_queues += pCreateInfo->pQueueCreateInfos[i].queueCount;
|
||||
|
||||
result = anv_device_setup_context(device, pCreateInfo, num_queues);
|
||||
result = anv_i915_device_setup_context(device, pCreateInfo, num_queues);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_fd;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include <fcntl.h>
|
||||
|
||||
#include "anv_private.h"
|
||||
#include "common/intel_defines.h"
|
||||
#include "common/intel_gem.h"
|
||||
|
||||
/**
|
||||
|
|
@ -279,42 +278,6 @@ anv_gem_set_tiling(struct anv_device *device,
|
|||
return ret;
|
||||
}
|
||||
|
||||
bool
|
||||
anv_gem_has_context_priority(int fd, VkQueueGlobalPriorityKHR priority)
|
||||
{
|
||||
return !anv_gem_set_context_param(fd, 0, I915_CONTEXT_PARAM_PRIORITY,
|
||||
priority);
|
||||
}
|
||||
|
||||
static int
|
||||
vk_priority_to_i915(VkQueueGlobalPriorityKHR priority)
|
||||
{
|
||||
switch (priority) {
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR:
|
||||
return INTEL_CONTEXT_LOW_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR:
|
||||
return INTEL_CONTEXT_MEDIUM_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR:
|
||||
return INTEL_CONTEXT_HIGH_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR:
|
||||
return INTEL_CONTEXT_REALTIME_PRIORITY;
|
||||
default:
|
||||
unreachable("Invalid priority");
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value)
|
||||
{
|
||||
if (param == I915_CONTEXT_PARAM_PRIORITY)
|
||||
value = vk_priority_to_i915(value);
|
||||
|
||||
int err = 0;
|
||||
if (!intel_gem_set_context_param(fd, context, param, value))
|
||||
err = -errno;
|
||||
return err;
|
||||
}
|
||||
|
||||
int
|
||||
anv_gem_context_get_reset_stats(int fd, int context,
|
||||
uint32_t *active, uint32_t *pending)
|
||||
|
|
|
|||
|
|
@ -118,18 +118,6 @@ anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value)
|
||||
{
|
||||
unreachable("Unused");
|
||||
}
|
||||
|
||||
bool
|
||||
anv_gem_has_context_priority(int fd, VkQueueGlobalPriorityKHR priority)
|
||||
{
|
||||
unreachable("Unused");
|
||||
}
|
||||
|
||||
int
|
||||
anv_gem_context_get_reset_stats(int fd, int context,
|
||||
uint32_t *active, uint32_t *pending)
|
||||
|
|
|
|||
|
|
@ -1352,9 +1352,6 @@ int anv_gem_execbuffer(struct anv_device *device,
|
|||
struct drm_i915_gem_execbuffer2 *execbuf);
|
||||
int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle,
|
||||
uint32_t stride, uint32_t tiling);
|
||||
bool anv_gem_has_context_priority(int fd, VkQueueGlobalPriorityKHR priority);
|
||||
int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param,
|
||||
uint64_t value);
|
||||
int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle);
|
||||
int anv_gem_context_get_reset_stats(int fd, int context,
|
||||
uint32_t *active, uint32_t *pending);
|
||||
|
|
|
|||
206
src/intel/vulkan/i915/anv_device.c
Normal file
206
src/intel/vulkan/i915/anv_device.c
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Copyright © 2022 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "i915/anv_device.h"
|
||||
#include "anv_private.h"
|
||||
|
||||
#include "common/intel_defines.h"
|
||||
|
||||
#include "drm-uapi/i915_drm.h"
|
||||
|
||||
static int
|
||||
vk_priority_to_i915(VkQueueGlobalPriorityKHR priority)
|
||||
{
|
||||
switch (priority) {
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR:
|
||||
return INTEL_CONTEXT_LOW_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR:
|
||||
return INTEL_CONTEXT_MEDIUM_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR:
|
||||
return INTEL_CONTEXT_HIGH_PRIORITY;
|
||||
case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR:
|
||||
return INTEL_CONTEXT_REALTIME_PRIORITY;
|
||||
default:
|
||||
unreachable("Invalid priority");
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value)
|
||||
{
|
||||
if (param == I915_CONTEXT_PARAM_PRIORITY)
|
||||
value = vk_priority_to_i915(value);
|
||||
|
||||
int err = 0;
|
||||
if (!intel_gem_set_context_param(fd, context, param, value))
|
||||
err = -errno;
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool
|
||||
anv_gem_has_context_priority(int fd, VkQueueGlobalPriorityKHR priority)
|
||||
{
|
||||
return !anv_gem_set_context_param(fd, 0, I915_CONTEXT_PARAM_PRIORITY,
|
||||
priority);
|
||||
}
|
||||
|
||||
VkResult
|
||||
anv_i915_physical_device_get_parameters(struct anv_physical_device *device)
|
||||
{
|
||||
VkResult result = VK_SUCCESS;
|
||||
int val, fd = device->local_fd;
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_WAIT_TIMEOUT, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing gem wait");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXECBUF2, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing execbuf2");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!device->info.has_llc &&
|
||||
(!intel_gem_get_param(fd, I915_PARAM_MMAP_VERSION, &val) || val < 1)) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing wc mmap");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_SOFTPIN, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing softpin");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_FENCE_ARRAY, &val) || !val) {
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel missing syncobj support");
|
||||
return result;
|
||||
}
|
||||
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_ASYNC, &val))
|
||||
device->has_exec_async = val;
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_CAPTURE, &val))
|
||||
device->has_exec_capture = val;
|
||||
|
||||
/* Start with medium; sorted low to high */
|
||||
const VkQueueGlobalPriorityKHR priorities[] = {
|
||||
VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR,
|
||||
VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR,
|
||||
};
|
||||
device->max_context_priority = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR;
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(priorities); i++) {
|
||||
if (!anv_gem_has_context_priority(fd, priorities[i]))
|
||||
break;
|
||||
device->max_context_priority = priorities[i];
|
||||
}
|
||||
|
||||
if (intel_gem_get_param(fd, I915_PARAM_HAS_EXEC_TIMELINE_FENCES, &val))
|
||||
device->has_exec_timeline = val;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
VkResult
|
||||
anv_i915_device_setup_context(struct anv_device *device,
|
||||
const VkDeviceCreateInfo *pCreateInfo,
|
||||
const uint32_t num_queues)
|
||||
{
|
||||
struct anv_physical_device *physical_device = device->physical;
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
if (device->physical->engine_info) {
|
||||
/* The kernel API supports at most 64 engines */
|
||||
assert(num_queues <= 64);
|
||||
enum intel_engine_class engine_classes[64];
|
||||
int engine_count = 0;
|
||||
for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++) {
|
||||
const VkDeviceQueueCreateInfo *queueCreateInfo =
|
||||
&pCreateInfo->pQueueCreateInfos[i];
|
||||
|
||||
assert(queueCreateInfo->queueFamilyIndex <
|
||||
physical_device->queue.family_count);
|
||||
struct anv_queue_family *queue_family =
|
||||
&physical_device->queue.families[queueCreateInfo->queueFamilyIndex];
|
||||
|
||||
for (uint32_t j = 0; j < queueCreateInfo->queueCount; j++)
|
||||
engine_classes[engine_count++] = queue_family->engine_class;
|
||||
}
|
||||
if (!intel_gem_create_context_engines(device->fd,
|
||||
physical_device->engine_info,
|
||||
engine_count, engine_classes,
|
||||
(uint32_t *)&device->context_id))
|
||||
result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED,
|
||||
"kernel context creation failed");
|
||||
} else {
|
||||
assert(num_queues == 1);
|
||||
if (!intel_gem_create_context(device->fd, &device->context_id))
|
||||
result = vk_error(device, VK_ERROR_INITIALIZATION_FAILED);
|
||||
}
|
||||
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
/* Here we tell the kernel not to attempt to recover our context but
|
||||
* immediately (on the next batchbuffer submission) report that the
|
||||
* context is lost, and we will do the recovery ourselves. In the case
|
||||
* of Vulkan, recovery means throwing VK_ERROR_DEVICE_LOST and letting
|
||||
* the client clean up the pieces.
|
||||
*/
|
||||
anv_gem_set_context_param(device->fd, device->context_id,
|
||||
I915_CONTEXT_PARAM_RECOVERABLE, false);
|
||||
|
||||
/* Check if client specified queue priority. */
|
||||
const VkDeviceQueueGlobalPriorityCreateInfoKHR *queue_priority =
|
||||
vk_find_struct_const(pCreateInfo->pQueueCreateInfos[0].pNext,
|
||||
DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR);
|
||||
|
||||
VkQueueGlobalPriorityKHR priority =
|
||||
queue_priority ? queue_priority->globalPriority :
|
||||
VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR;
|
||||
|
||||
/* As per spec, the driver implementation may deny requests to acquire
|
||||
* a priority above the default priority (MEDIUM) if the caller does not
|
||||
* have sufficient privileges. In this scenario VK_ERROR_NOT_PERMITTED_KHR
|
||||
* is returned.
|
||||
*/
|
||||
if (physical_device->max_context_priority >= VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) {
|
||||
int err = anv_gem_set_context_param(device->fd, device->context_id,
|
||||
I915_CONTEXT_PARAM_PRIORITY,
|
||||
priority);
|
||||
if (err != 0 && priority > VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR) {
|
||||
result = vk_error(device, VK_ERROR_NOT_PERMITTED_KHR);
|
||||
goto fail_context;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
fail_context:
|
||||
intel_gem_destroy_context(device->fd, device->context_id);
|
||||
return result;
|
||||
}
|
||||
36
src/intel/vulkan/i915/anv_device.h
Normal file
36
src/intel/vulkan/i915/anv_device.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright © 2022 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vulkan/vulkan_core.h"
|
||||
|
||||
struct anv_device;
|
||||
struct anv_physical_device;
|
||||
|
||||
VkResult
|
||||
anv_i915_physical_device_get_parameters(struct anv_physical_device *device);
|
||||
|
||||
VkResult
|
||||
anv_i915_device_setup_context(struct anv_device *device,
|
||||
const VkDeviceCreateInfo *pCreateInfo,
|
||||
const uint32_t num_queues);
|
||||
|
|
@ -132,6 +132,8 @@ foreach g : [['90', ['gfx8_cmd_buffer.c']],
|
|||
endforeach
|
||||
|
||||
libanv_files = files(
|
||||
'i915/anv_device.c',
|
||||
'i915/anv_device.h',
|
||||
'layers/anv_doom64.c',
|
||||
'layers/anv_hitman3.c',
|
||||
'anv_allocator.c',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue