| [[vertexpostproc-viewportwscaling]] |
| == Controlling Viewport W Scaling |
| |
| If viewport *W* scaling is enabled, the *W* component of the clip coordinate |
| is modified by the provided coefficients from the corresponding viewport as |
| follows. |
| |
| :: [eq]#w~c~' = x~coeff~ x~c~ {plus} y~coeff~ y~c~ {plus} w~c~# |
| |
| [open,refpage='VkPipelineViewportWScalingStateCreateInfoNV',desc='Structure specifying parameters of a newly created pipeline viewport W scaling state',type='structs'] |
| -- |
| |
| The sname:VkPipelineViewportWScalingStateCreateInfoNV structure is defined |
| as: |
| |
| include::../../api/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to an extension-specific structure. |
| * pname:viewportWScalingEnable controls whether viewport *W* scaling is |
| enabled. |
| * pname:viewportCount is the number of viewports used by *W* scaling, and |
| must: match the number of viewports in the pipeline if viewport *W* |
| scaling is enabled. |
| * pname:pViewportWScalings is a pointer to an array of |
| sname:VkViewportWScalingNV structures, which define the *W* scaling |
| parameters for the corresponding viewport. |
| If the viewport *W* scaling state is dynamic, this member is ignored. |
| |
| include::../../validity/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[] |
| -- |
| |
| The sname:VkPipelineViewportWScalingStateCreateInfoNV state is set by adding |
| an instance of this structure to the pname:pNext chain of an instance of the |
| sname:VkPipelineViewportStateCreateInfo structure and setting the graphics |
| pipeline state with flink:vkCreateGraphicsPipelines. |
| |
| [open,refpage='vkCmdSetViewportWScalingNV',desc='Set the viewport W scaling on a command buffer',type='protos'] |
| -- |
| |
| If the bound pipeline state object was not created with the |
| ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, viewport |
| *W* scaling parameters are specified using the pname:pViewportWScalings |
| member of slink:VkPipelineViewportWScalingStateCreateInfoNV in the pipeline |
| state object. |
| If the pipeline state object was created with the |
| ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled, the |
| viewport transformation parameters are dynamically set and changed with the |
| command: |
| |
| include::../../api/protos/vkCmdSetViewportWScalingNV.txt[] |
| |
| * pname:commandBuffer is the command buffer into which the command will be |
| recorded. |
| * pname:firstViewport is the index of the first viewport whose parameters |
| are updated by the command. |
| * pname:viewportCount is the number of viewports whose parameters are |
| updated by the command. |
| * pname:pViewportWScalings is a pointer to an array of |
| slink:VkViewportWScalingNV structures specifying viewport parameters. |
| |
| The viewport parameters taken from element [eq]#i# of |
| pname:pViewportWScalings replace the current state for the viewport index |
| [eq]#pname:firstViewport {plus} i#, for [eq]#i# in [eq]#[0, |
| pname:viewportCount)#. |
| |
| .Valid Usage |
| **** |
| * [[VUID-vkCmdSetViewportWScalingNV-None-01322]] |
| The bound graphics pipeline must: have been created with the |
| ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled |
| * [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01323]] |
| pname:firstViewport must: be less than |
| slink:VkPhysicalDeviceLimits::pname:maxViewports |
| * [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01324]] |
| The sum of pname:firstViewport and pname:viewportCount must: be between |
| `1` and slink:VkPhysicalDeviceLimits::pname:maxViewports, inclusive |
| **** |
| |
| include::../../validity/protos/vkCmdSetViewportWScalingNV.txt[] |
| -- |
| |
| Both slink:VkPipelineViewportWScalingStateCreateInfoNV and |
| flink:vkCmdSetViewportWScalingNV use sname:VkViewportWScalingNV to set the |
| viewport transformation parameters. |
| |
| [open,refpage='VkViewportWScalingNV',desc='Structure specifying a viewport',type='structs'] |
| -- |
| |
| The sname:VkViewportWScalingNV structure is defined as: |
| |
| include::../../api/structs/VkViewportWScalingNV.txt[] |
| |
| * pname:xcoeff and pname:ycoeff are the viewport's W scaling factor for x |
| and y respectively. |
| |
| include::../../validity/structs/VkViewportWScalingNV.txt[] |
| -- |