PFND3DDDI_CREATERESOURCE función de devolución de llamada (d3dumddi.h)

La función CreateResource crea un recurso.

Sintaxis

PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;

HRESULT Pfnd3dddiCreateresource(
  HANDLE hDevice,
  D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}

Parámetros

hDevice

Identificador del dispositivo de visualización (contexto de gráficos) que se usa para crear el recurso.

unnamedParam2

pResource [in, out]

Puntero a una estructura de D3DDDIARG_CREATERESOURCE que describe el recurso que se crea.

Valor devuelto

CreateResource devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK El recurso se crea correctamente.
E_OUTOFMEMORY CreateResource no pudo asignar la memoria necesaria para que se complete.
D3DERR_NOTAVAILABLE CreateResource no pudo crear el recurso por motivos distintos de no poder asignar memoria. CreateResourcecan devuelve este error solo al crear búferes de vértices o índices.

Comentarios

La llamada a CreateResource puede contener una lista de superficies. El miembro SurfCount de la estructura D3DDDIARG_CREATERESOURCE especificada por el parámetro pResource especifica el número de superficies(incluidos los niveles de mapa miP) que se van a crear. Por ejemplo, un recurso MIP-map de textura 256x9 de 256x9 contiene una lista de nueve superficies donde el miembro SurfCount y el número de niveles de mapa MIP se establecen en 9. Un mapa de cubo que contenga nueve niveles de mapa MIP debe tener el número de niveles de mapa MIP establecidos en 9 y SurfCount establecido en 54. Una cadena de intercambio de tres superficies debe tener SurfCount establecido en 3 y el número de niveles de mapa MIP establecidos en 0. Tenga en cuenta que el número de niveles de mapa MIP siempre es menor o igual que el valor de SurfCount.

En respuesta a la llamada a CreateResource , el controlador de pantalla en modo de usuario puede llamar a la función pfnAllocateCb para crear una o varias asignaciones de memoria. El controlador de pantalla en modo de usuario debe determinar si debe crear varias asignaciones por superficie, una asignación para todas las superficies o una asignación por superficie. Para obtener más información sobre las asignaciones, consulte Administración de memoria de vídeo y programación de GPU.

Nota La función CreateResource del controlador no es necesaria para llamar a pfnAllocateCb antes de devolver; en su lugar, el controlador puede aplazar la creación de la asignación.
 
Nota Un recurso solo se puede compartir si todas las asignaciones del recurso se realizan de forma atómica en una sola llamada a pfnAllocateCb.
 
El miembro hResource de la estructura D3DDDIARG_CREATERESOURCE es un identificador que se usa para identificar el recurso. El controlador de visualización en modo de usuario debe almacenar el valor de hResource que se pasó en la llamada CreateResource y sobrescribir el valor con otro valor que el tiempo de ejecución de Microsoft Direct3D puede usar cuando se devuelve la llamada CreateResource . En otras palabras, en las llamadas al tiempo de ejecución, el controlador de visualización en modo de usuario usa el valor hResource que se pasó a CreateResource; en llamadas al controlador de visualización en modo de usuario (por ejemplo, en llamadas a las funciones SetTexture o SetStreamSource ), el tiempo de ejecución usa el valor hResource que se devolvió desde CreateResource. Tenga en cuenta que cada superficie no tiene un identificador explícito; si se debe hacer referencia a la superficie individualmente (por ejemplo, en una llamada a la función Blt ), se hace referencia a ella mediante un identificador y un índice. El índice identifica la superficie dentro del recurso. El índice es el mismo que el índice de la superficie de la matriz contenida en el miembro pSurfList de D3DDDIARG_CREATERESOURCE.

Los recursos se pueden compartir mediante varios dispositivos (hDevice) y procesos. El tiempo de ejecución especifica que un recurso se comparte estableciendo la marca de campo de bits SharedResource en el miembro Flags de D3DDDIARG_CREATERESOURCE. Si se establece esta marca de campo de bits, el controlador de pantalla en modo de usuario debe cumplir las siguientes restricciones en los recursos compartidos:

  • El controlador de pantalla en modo de usuario puede llamar a las funciones pfnAllocateCb y pfnDeallocateCb exactamente una vez cada una.
  • El controlador de visualización en modo de usuario no puede crear asignaciones adicionales para el recurso después de crear el recurso inicialmente y, del mismo modo, puede destruir las asignaciones de recursos solo en el momento en que se destruye el propio recurso.
  • Cuando se llama a la función DestroyResource del controlador de visualización en modo de usuario para un recurso compartido que se creó o abrió a través de una llamada a la función CreateResource o OpenResource del controlador, el controlador debe establecer el miembro hResource de la estructura D3DDDICB_DEALLOCATE en no NULL y el miembro NumAllocations de D3DDDICB_DEALLOCATE a cero en una llamada a la función pfnDeallocateCb para destruir o cerrar el recurso. Es decir, las asignaciones asociadas a un recurso compartido no se pueden destruir ni cerrar individualmente; el recurso se debe destruir o cerrar de forma atómica en una llamada a pfnDeallocateCb.
  • El número de asignaciones debe ser coherente para el tipo de recurso (es decir, otro proceso que crea el mismo tipo de recurso debe generar el mismo número y tipo de asignaciones). Además, no se permite cambiar el nombre de estos recursos.
Las marcas de campo de bits especificadas en la estructura D3DDDI_RESOURCEFLAGS se pasan en el miembro Flags de D3DDDIARG_CREATERESOURCE.
Nota Se puede crear un recurso sin especificar ninguna marca. Las superficies asociadas a este recurso pueden bloquearse y pueden ser un origen o destino en una operación de transferencia de bloques de bits (bitblt). Sin embargo, estas superficies no se pueden usar para nada más.
 
Nota Las superficies sin formato se diferencian de texturas o destinos de representación independientes por la ausencia de la marca textura o campo de bits principal . Por ejemplo, la presencia de la marca de campo de bits principal indica un destino de representación independiente y la ausencia de esta marca indica un destino de representación que es un búfer de reserva.
 
Nota Para asegurarse de que los cambios en tiempo de ejecución no interrumpen los controladores existentes, los controladores no deben usar los siguientes miembros reservados de la estructura de D3DDDIARG_CREATERESOURCE en las llamadas a su función CreateResource para afectar al comportamiento de los controladores:
  • Los bits no definidos del miembro Flags están reservados .
  • Si la marca de campo de bits principal no está establecida en Marcas, se reservan los miembros RefreshRate y Output .
  • Si la marca de campo de bits RenderTarget, DecodeRenderTarget o VideoProcessRenderTarget no está establecida en Flags, se reservan los miembros MultisampleType y MultisampleQuality .
  • Si la marca de campo de bits VertexBuffer no está establecida en Marcas, se reserva el miembro Fvf .
  • Si las marcas de campo de bits Texture, CubeMap y Volume no se establecen en Flags, se reserva el miembro MipLevels .
 
Para obtener más información sobre cómo crear y destruir recursos, consulte Control de la creación y destrucción de recursos.

El nuevo DDI CreateResource difiere de DDI DdCreateSurface para el modelo de controlador de pantalla de Microsoft Windows 2000 de las siguientes maneras:

  • En la nueva DDI CreateResource , las superficies nunca se adjuntan explícitamente. Todos los datos adjuntos están implícitos en la creación atómica.
  • En la nueva DDI CreateResource , no se permite la creación parcial de asignaciones de cubos.
Para un recurso de memoria del sistema, el controlador de minipuerto de pantalla puede optar por encapsular una asignación alrededor de la memoria del sistema si la memoria del sistema está alineada correctamente para el acceso directo por la unidad de procesamiento gráfico (GPU). El controlador de minipuerto de pantalla ajusta una asignación alrededor de la memoria del sistema estableciendo la marca ExistingSysMem en el miembro Flags de la estructura DXGK_ALLOCATIONINFO al crear la asignación mediante su función DxgkDdiCreateAllocation . Si el controlador de minipuerto de pantalla no puede encapsular una asignación alrededor de la memoria del sistema o se produce un error en el ajuste, el controlador todavía debe tener éxito en la creación del recurso y usar la CPU para acceder al recurso.

Si el tiempo de ejecución solicita crear un búfer de vértices o índices y si el controlador de pantalla en modo de usuario no puede crear el búfer por motivos distintos de la memoria insuficiente (por ejemplo, falta de compatibilidad de hardware), el controlador debe producir un error en D3DERR_NOTAVAILABLE.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Escritorio
Encabezado d3dumddi.h (incluya D3dumddi.h)

Consulte también

Blt

D3DDDIARG_CREATERESOURCE

D3DDDI_DEVICEFUNCS

D3DDDI_RESOURCEFLAGS

SetStreamSource

SetTexture

pfnAllocateCb

pfnDeallocateCb