VirtualBox

Changeset 94928 in vbox for trunk/src/VBox/Devices/Graphics


Ignore:
Timestamp:
May 9, 2022 6:56:53 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
151336
Message:

Devices/Graphics: shader parser update; minor fixes: bugref:9830

Location:
trunk/src/VBox/Devices/Graphics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp

    r94449 r94928  
    29172917{
    29182918#ifdef VMSVGA3D_DX
    2919     DEBUG_BREAKPOINT_TEST();
     2919    //DEBUG_BREAKPOINT_TEST();
    29202920    RT_NOREF(cbCmd);
    29212921    return vmsvga3dDXDestroyBlendState(pThisCC, idDXContext, pCmd);
     
    29452945{
    29462946#ifdef VMSVGA3D_DX
    2947     DEBUG_BREAKPOINT_TEST();
     2947    //DEBUG_BREAKPOINT_TEST();
    29482948    RT_NOREF(cbCmd);
    29492949    return vmsvga3dDXDestroyDepthStencilState(pThisCC, idDXContext, pCmd);
     
    29732973{
    29742974#ifdef VMSVGA3D_DX
    2975     DEBUG_BREAKPOINT_TEST();
     2975    //DEBUG_BREAKPOINT_TEST();
    29762976    RT_NOREF(cbCmd);
    29772977    return vmsvga3dDXDestroyRasterizerState(pThisCC, idDXContext, pCmd);
     
    30013001{
    30023002#ifdef VMSVGA3D_DX
    3003     DEBUG_BREAKPOINT_TEST();
     3003    //DEBUG_BREAKPOINT_TEST();
    30043004    RT_NOREF(cbCmd);
    30053005    return vmsvga3dDXDestroySamplerState(pThisCC, idDXContext, pCmd);
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp

    r94832 r94928  
    3131#include "DevVGA-SVGA3d-dx-shader.h"
    3232
     33#include <d3d11TokenizedProgramFormat.hpp>
    3334
    3435/*
     
    15151516
    15161517        pOpcode->cOpcodeToken = opcode.instructionLength;
     1518        uint32_t cOpcode = 1; /* Opcode token + extended opcode tokens. */
    15171519        if (opcode.extended)
    15181520        {
    1519             ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
    15201521            if (   pOpcode->opcodeType == VGPU10_OPCODE_DCL_FUNCTION_BODY
    15211522                || pOpcode->opcodeType == VGPU10_OPCODE_DCL_FUNCTION_TABLE
     
    15251526            {
    15261527                /* "next DWORD contains ... the actual instruction length in DWORD since it may not fit into 7 bits" */
     1528                ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
    15271529                pOpcode->cOpcodeToken = dxbcTokenReaderRead32(r);
     1530                ++cOpcode;
    15281531            }
    15291532            else
    15301533            {
    15311534                VGPU10OpcodeToken1 opcode1;
    1532                 opcode1.value = dxbcTokenReaderRead32(r);
    1533                 ASSERT_GUEST(opcode1.opcodeType == VGPU10_EXTENDED_OPCODE_SAMPLE_CONTROLS);
     1535                do
     1536                {
     1537                    ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
     1538                    opcode1.value = dxbcTokenReaderRead32(r);
     1539                    ++cOpcode;
     1540                    ASSERT_GUEST(   opcode1.opcodeType == VGPU10_EXTENDED_OPCODE_SAMPLE_CONTROLS
     1541                                 || opcode1.opcodeType == D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM
     1542                                 || opcode1.opcodeType == D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE);
     1543                } while(opcode1.extended);
    15341544            }
    15351545        }
    15361546
    15371547        ASSERT_GUEST_RETURN(pOpcode->cOpcodeToken >= 1 && pOpcode->cOpcodeToken < 256, VERR_INVALID_PARAMETER);
    1538         ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, pOpcode->cOpcodeToken - 1), VERR_INVALID_PARAMETER);
     1548        ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, pOpcode->cOpcodeToken - cOpcode), VERR_INVALID_PARAMETER);
    15391549
    15401550#ifdef LOG_ENABLED
     
    24242434int DXShaderUpdateResourceTypes(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceType, uint32_t cResourceType)
    24252435{
     2436    if (pInfo->fGuestSignatures)
     2437        return VINF_SUCCESS;
     2438
    24262439    for (uint32_t i = 0; i < pInfo->cDclResource; ++i)
    24272440    {
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp

    r94833 r94928  
    902902    SVGA3dBlendStateId const blendId = pCmd->blendId;
    903903
    904     ASSERT_GUEST_RETURN(pDXContext->cot.paBlendState, VERR_INVALID_STATE);
    905     ASSERT_GUEST_RETURN(blendId < pDXContext->cot.cBlendState, VERR_INVALID_PARAMETER);
     904    ASSERT_GUEST_RETURN(   blendId == SVGA3D_INVALID_ID
     905                        || blendId < pDXContext->cot.cBlendState, VERR_INVALID_PARAMETER);
    906906    RT_UNTRUSTED_VALIDATED_FENCE();
    907907
     
    930930    SVGA3dDepthStencilStateId const depthStencilId = pCmd->depthStencilId;
    931931
    932     ASSERT_GUEST_RETURN(pDXContext->cot.paDepthStencil, VERR_INVALID_STATE);
    933     ASSERT_GUEST_RETURN(depthStencilId < pDXContext->cot.cDepthStencil, VERR_INVALID_PARAMETER);
     932    ASSERT_GUEST_RETURN(   depthStencilId == SVGA3D_INVALID_ID
     933                        || depthStencilId < pDXContext->cot.cDepthStencil, VERR_INVALID_PARAMETER);
    934934    RT_UNTRUSTED_VALIDATED_FENCE();
    935935
     
    954954    AssertRCReturn(rc, rc);
    955955
    956     ASSERT_GUEST_RETURN(rasterizerId < pDXContext->cot.cRasterizerState, VERR_INVALID_PARAMETER);
     956    ASSERT_GUEST_RETURN(   rasterizerId == SVGA3D_INVALID_ID
     957                        || rasterizerId < pDXContext->cot.cRasterizerState, VERR_INVALID_PARAMETER);
    957958    RT_UNTRUSTED_VALIDATED_FENCE();
    958959
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette