Метод ID3D11Device::CreateGeometryShader (d3d11.h)
Создание геометрического шейдера.
Синтаксис
HRESULT CreateGeometryShader(
[in] const void *pShaderBytecode,
[in] SIZE_T BytecodeLength,
[in, optional] ID3D11ClassLinkage *pClassLinkage,
[out, optional] ID3D11GeometryShader **ppGeometryShader
);
Параметры
[in] pShaderBytecode
Тип: const void*
Указатель на скомпилированный шейдер.
[in] BytecodeLength
Тип: SIZE_T
Размер скомпилированного геометрического шейдера.
[in, optional] pClassLinkage
Тип: ID3D11ClassLinkage*
Указатель на интерфейс компоновки класса (см . ID3D11ClassLinkage); значение может иметь значение NULL.
[out, optional] ppGeometryShader
Тип: ID3D11GeometryShader**
Адрес указателя на интерфейс ID3D11GeometryShader . Если значение равно NULL, будут проверены все остальные параметры, а если все параметры проходят проверку, этот API вернет S_FALSE вместо S_OK.
Возвращаемое значение
Тип: HRESULT
Этот метод возвращает один из следующих кодов возврата Direct3D 11.
Комментарии
После создания шейдер можно задать для устройства, вызвав ID3D11DeviceContext::GSSetShader.
Среда выполнения Direct3D 11.1, доступная начиная с Windows 8, предоставляет следующие новые функции для CreateGeometryShader.
Следующие инструкции по модели шейдера 5.0 доступны только для шейдеров текстуры и вычислительных шейдеров в среде выполнения Direct3D 11.0. Для среды выполнения Direct3D 11.1, так как неупорядоченные представления доступа (UAV) доступны на всех этапах шейдера, эти инструкции можно использовать на всех этапах шейдера.
Таким образом, если вы используете следующие инструкции модели шейдера 5.0 в геометрическом шейдере, можно успешно передать скомпилированный геометрический шейдер в pShaderBytecode. То есть вызов CreateGeometryShader завершается успешно.
При передаче скомпилированного шейдера в pShaderBytecode , использующего любую из следующих инструкций, на устройстве, которое не поддерживает БПЛА на каждом этапе шейдера (включая существующие драйверы, которые не реализованы для поддержки БПЛА на каждом этапе шейдера), createGeometryShader завершается сбоем. CreateGeometryShader также завершается сбоем, если шейдер пытается использовать слот UAV за пределами набора слотов UAV, поддерживаемых оборудованием.
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- Все атомарные и непосредственные атомары (например, atomic_and и imm_atomic_and)
Примеры
Пример использования
ID3D11GeometryShader* g_pGeometryShader11 = NULL;
ID3DBlob* pGeometryShaderBuffer = NULL;
ID3DBlob * errorbuffer = NULL;
D3DX11CompileFromFile( str, NULL, NULL, "GS", "gs_4_0", dwShaderFlags, 0, NULL,
&pGeometryShaderBuffer, &errorbuffer, NULL );
pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(),
pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader11 );
Требования
Целевая платформа | Windows |
Header | d3d11.h |
Библиотека | D3D11.lib |