> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SetPredication

> Establece un predicado de representación.

Establece un predicado de representación.

## Sintaxis

```cpp theme={null}
void SetPredication(
    ID3D12Resource  pBuffer,
    UINT64 AlignedBufferOffset,
    D3D12_PREDICATION_OP Operation
)
```

### Parámetros

*pBuffer \[in, optional]*\
Tipo: ID3D12Resource \*

El búfer, como un objeto [ID3D12Resource](/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs), que debe estar en el estado [**D3D12\_RESOURCE\_STATE\_PREDICATION**](/reference/graphics/d3d12_x/enums/d3d12_resource_states) o [**D3D21\_RESOURCE\_STATE\_INDIRECT\_ARGUMENT**](/reference/graphics/d3d12_x/enums/d3d12_resource_states) (ambos valores son idénticos y se proporcionan como alias para mayor claridad), o **NULL** para deshabilitar la predicación.

*AlignedBufferOffset \[in]*\
Tipo: UINT64

El desplazamiento alineado del búfer, como UINT64.

*Operation \[in]*\
Tipo: D3D12\_PREDICATION\_OP

Especifica un valor de [D3D12\_PREDICATION\_OP](/reference/graphics/d3d12/enums/d3d12_predication_op_public), como D3D12\_PREDICATION\_OP\_EQUAL\_ZERO o D3D12\_PREDICATION\_OP\_NOT\_EQUAL\_ZERO.

### Valor devuelto

Tipo: void

Ninguno.

## Comentarios

Use este método para indicar que los comandos posteriores de representación y de manipulación de recursos no se ejecutan realmente si los datos de predicado resultantes del predicado son iguales a la operación especificada.

A diferencia de Direct3D 11, en Direct3D 12 el estado de predicación no lo heredan las listas de comandos directas, y la predicación siempre se respeta (no hay sugerencias de predicación).
Todas las listas de comandos directas comienzan con la predicación deshabilitada.
Los lotes (bundles) sí heredan el estado de predicación.
Es válido enlazar el mismo predicado varias veces.

Las llamadas a la API no válidas harán que [Close](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_close_public) devuelva un error,
o que [ID3D12CommandQueue::ExecuteCommandLists](/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_executecommandlists) descarte la lista de comandos y quite el dispositivo.

La capa de depuración emitirá errores siempre que la validación del entorno de ejecución produzca errores.

Consulte [Predicación](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/predication) para obtener más información.

#### Ejemplos

El ejemplo [D3D12PredicationQueries](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/working-samples) usa **ID3D12GraphicsCommandList::SetPredication** de la siguiente manera:

```cpp theme={null}
// Fill the command list with all the render commands and dependent state.
void D3D12PredicationQueries::PopulateCommandList()
{
// Command list allocators can only be reset when the associated
// command lists have finished execution on the GPU; apps should use
// fences to determine GPU execution progress.
ThrowIfFailed(m_commandAllocators[m_frameIndex]->Reset());

// However, when ExecuteCommandList() is called on a particular command
// list, that command list can then be reset at any time and must be before
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_commandAllocators[m_frameIndex].Get(), m_pipelineState.Get()));

// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());

ID3D12DescriptorHeap* ppHeaps[] = { m_cbvHeap.Get() };
m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);

m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);

// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));

CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, &dsvHandle);

// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->ClearDepthStencilView(dsvHandle, D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);

// Draw the quads and perform the occlusion query.
{
CD3DX12_GPU_DESCRIPTOR_HANDLE cbvFarQuad(m_cbvHeap->GetGPUDescriptorHandleForHeapStart(), m_frameIndex * CbvCountPerFrame, m_cbvSrvDescriptorSize);
CD3DX12_GPU_DESCRIPTOR_HANDLE cbvNearQuad(cbvFarQuad, m_cbvSrvDescriptorSize);

m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);

// Draw the far quad conditionally based on the result of the occlusion query
// from the previous frame.
m_commandList->SetGraphicsRootDescriptorTable(0, cbvFarQuad);
m_commandList->SetPredication(m_queryResult.Get(), 0, D3D12_PREDICATION_OP_EQUAL_ZERO);
m_commandList->DrawInstanced(4, 1, 0, 0);

// Disable predication and always draw the near quad.
m_commandList->SetPredication(nullptr, 0, D3D12_PREDICATION_OP_EQUAL_ZERO);
m_commandList->SetGraphicsRootDescriptorTable(0, cbvNearQuad);
m_commandList->DrawInstanced(4, 1, 4, 0);

// Run the occlusion query with the bounding box quad.
m_commandList->SetGraphicsRootDescriptorTable(0, cbvFarQuad);
m_commandList->SetPipelineState(m_queryState.Get());
m_commandList->BeginQuery(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0);
m_commandList->DrawInstanced(4, 1, 8, 0);
m_commandList->EndQuery(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0);

// Resolve the occlusion query and store the results in the query result buffer
// to be used on the subsequent frame.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_queryResult.Get(), D3D12_RESOURCE_STATE_PREDICATION, D3D12_RESOURCE_STATE_COPY_DEST));
m_commandList->ResolveQueryData(m_queryHeap.Get(), D3D12_QUERY_TYPE_BINARY_OCCLUSION, 0, 1, m_queryResult.Get(), 0);
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_queryResult.Get(), D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_PREDICATION));
}

// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));

ThrowIfFailed(m_commandList->Close());
}

```

Consulte [Código de ejemplo en la referencia de D3D12](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/notes-on-example-code).

<div class="code" />

## Requisitos

**Encabezado:** d3d12\_xs.h o d3d12\_x.h\
**Biblioteca:** d3d12\_xs.lib o d3d12\_x.lib\
**Plataformas compatibles**: consolas XBOX Series y familia XBOX One

## Consulte también

[ID3D12GraphicsCommandList](/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/id3d12graphicscommandlist_xs)

[Tutorial de consultas de predicación](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/predication-queries)


## Related topics

- [D3D12_PREDICATION_OP](/es/reference/graphics/d3d12/enums/d3d12_predication_op_public.md)
- [EndQuery](/es/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_endquery_public.md)
- [BeginQuery](/es/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_beginquery_public.md)
- [ID3D12QueryHeap](/es/reference/graphics/d3d12/interfaces/id3d12queryheap/id3d12queryheap_public.md)
- [CreateQueryHeap](/es/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createqueryheap_public.md)
