VirtualBox

Changeset 96376 in vbox


Ignore:
Timestamp:
Aug 20, 2022 8:33:58 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
153193
Message:

Devices/Graphics: set component types for shader input signature. bugref:9830

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

Legend:

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

    r95742 r96376  
    39503950                /* The 3d subsystem must be shut down from the fifo thread. */
    39513951                PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
    3952                 pSVGAState->pFuncs3D->pfnTerminate(pThisCC);
     3952                if (pSVGAState->pFuncs3D && pSVGAState->pFuncs3D->pfnTerminate)
     3953                    pSVGAState->pFuncs3D->pfnTerminate(pThisCC);
    39533954            }
    39543955# endif
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp

    r95135 r96376  
    20892089                }
    20902090                pSignatureEntry->mask          = opcode.aValOperand[0].mask;
    2091                 pSignatureEntry->componentType = SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN; /// @todo Proper value? Seems that it is not important.
     2091                pSignatureEntry->componentType = SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN; // Will be updated by vboxDXUpdateVSInputSignature
    20922092                pSignatureEntry->minPrecision  = SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT;
    20932093            }
     
    26092609}
    26102610
     2611
     2612SVGA3dDXSignatureRegisterComponentType DXShaderComponentTypeFromFormat(SVGA3dSurfaceFormat format)
     2613{
     2614    /** @todo This is auto-generated from format names and needs a review. */
     2615    switch (format)
     2616    {
     2617        case SVGA3D_R32G32B32A32_UINT:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2618        case SVGA3D_R32G32B32A32_SINT:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2619        case SVGA3D_R32G32B32_FLOAT:               return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2620        case SVGA3D_R32G32B32_UINT:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2621        case SVGA3D_R32G32B32_SINT:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2622        case SVGA3D_R16G16B16A16_UINT:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2623        case SVGA3D_R16G16B16A16_SNORM:            return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2624        case SVGA3D_R16G16B16A16_SINT:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2625        case SVGA3D_R32G32_UINT:                   return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2626        case SVGA3D_R32G32_SINT:                   return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2627        case SVGA3D_D32_FLOAT_S8X24_UINT:          return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2628        case SVGA3D_R32_FLOAT_X8X24:               return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2629        case SVGA3D_X32_G8X24_UINT:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2630        case SVGA3D_R10G10B10A2_UINT:              return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2631        case SVGA3D_R11G11B10_FLOAT:               return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2632        case SVGA3D_R8G8B8A8_UNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2633        case SVGA3D_R8G8B8A8_UNORM_SRGB:           return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2634        case SVGA3D_R8G8B8A8_UINT:                 return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2635        case SVGA3D_R8G8B8A8_SINT:                 return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2636        case SVGA3D_R16G16_UINT:                   return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2637        case SVGA3D_R16G16_SINT:                   return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2638        case SVGA3D_D32_FLOAT:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2639        case SVGA3D_R32_UINT:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2640        case SVGA3D_R32_SINT:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2641        case SVGA3D_D24_UNORM_S8_UINT:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2642        case SVGA3D_R24_UNORM_X8:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2643        case SVGA3D_X24_G8_UINT:                   return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2644        case SVGA3D_R8G8_UNORM:                    return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2645        case SVGA3D_R8G8_UINT:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2646        case SVGA3D_R8G8_SINT:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2647        case SVGA3D_R16_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2648        case SVGA3D_R16_UINT:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2649        case SVGA3D_R16_SNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2650        case SVGA3D_R16_SINT:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2651        case SVGA3D_R8_UNORM:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2652        case SVGA3D_R8_UINT:                       return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2653        case SVGA3D_R8_SNORM:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2654        case SVGA3D_R8_SINT:                       return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2655        case SVGA3D_R8G8_B8G8_UNORM:               return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2656        case SVGA3D_G8R8_G8B8_UNORM:               return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2657        case SVGA3D_BC1_UNORM_SRGB:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2658        case SVGA3D_BC2_UNORM_SRGB:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2659        case SVGA3D_BC3_UNORM_SRGB:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2660        case SVGA3D_BC4_SNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2661        case SVGA3D_BC5_SNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2662        case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM:    return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2663        case SVGA3D_B8G8R8A8_UNORM_SRGB:           return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2664        case SVGA3D_B8G8R8X8_UNORM_SRGB:           return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2665        case SVGA3D_R32G32B32A32_FLOAT:            return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2666        case SVGA3D_R16G16B16A16_FLOAT:            return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2667        case SVGA3D_R16G16B16A16_UNORM:            return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2668        case SVGA3D_R32G32_FLOAT:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2669        case SVGA3D_R10G10B10A2_UNORM:             return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2670        case SVGA3D_R8G8B8A8_SNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2671        case SVGA3D_R16G16_FLOAT:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2672        case SVGA3D_R16G16_UNORM:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2673        case SVGA3D_R16G16_SNORM:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2674        case SVGA3D_R32_FLOAT:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2675        case SVGA3D_R8G8_SNORM:                    return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
     2676        case SVGA3D_R16_FLOAT:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2677        case SVGA3D_D16_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2678        case SVGA3D_A8_UNORM:                      return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2679        case SVGA3D_BC1_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2680        case SVGA3D_BC2_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2681        case SVGA3D_BC3_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2682        case SVGA3D_B5G6R5_UNORM:                  return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2683        case SVGA3D_B5G5R5A1_UNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2684        case SVGA3D_B8G8R8A8_UNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2685        case SVGA3D_B8G8R8X8_UNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2686        case SVGA3D_BC4_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2687        case SVGA3D_BC5_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2688        case SVGA3D_B4G4R4A4_UNORM:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2689        case SVGA3D_BC7_UNORM:                     return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2690        case SVGA3D_BC7_UNORM_SRGB:                return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
     2691        case SVGA3D_R9G9B9E5_SHAREDEXP:            return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2692        default:
     2693            break;
     2694    }
     2695    return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
     2696}
     2697
     2698
    26112699int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension,
    26122700                            VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources)
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h

    r95032 r96376  
    3535#include "vmsvga_headers_end.h"
    3636
     37/* SVGA3dDXSignatureRegisterComponentType */
     38#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32  1
     39#define SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32  2
     40#define SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32 3
     41
    3742typedef struct DXShaderAttributeSemantic
    3843{
     
    6671                            VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources);
    6772VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format);
     73SVGA3dDXSignatureRegisterComponentType DXShaderComponentTypeFromFormat(SVGA3dSurfaceFormat format);
    6874int DXShaderCreateDXBC(DXShaderInfo const *pInfo, void **ppvDXBC, uint32_t *pcbDXBC);
    6975char const *DXShaderGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, SVGA3dDXSignatureSemanticName *pSemanticName);
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r95782 r96376  
    58465846
    58475847
     5848static void vboxDXUpdateVSInputSignature(PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
     5849{
     5850    SVGA3dElementLayoutId const elementLayoutId = pDXContext->svgaDXContext.inputAssembly.layoutId;
     5851    if (elementLayoutId != SVGA3D_INVALID_ID)
     5852    {
     5853        SVGACOTableDXElementLayoutEntry const *pElementLayout = &pDXContext->cot.paElementLayout[elementLayoutId];
     5854        for (uint32_t i = 0; i < RT_MIN(pElementLayout->numDescs, pDXShader->shaderInfo.cInputSignature); ++i)
     5855        {
     5856            SVGA3dInputElementDesc const *pElementDesc = &pElementLayout->descs[i];
     5857            SVGA3dDXSignatureEntry *pSignatureEntry = &pDXShader->shaderInfo.aInputSignature[i];
     5858            pSignatureEntry->componentType = DXShaderComponentTypeFromFormat(pElementDesc->format);
     5859        }
     5860    }
     5861}
     5862
     5863
    58485864static void dxCreateInputLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, DXSHADER *pDXShader)
    58495865{
     
    63186334                    rc = DXShaderUpdateResources(&pDXShader->shaderInfo, aResourceDimension, aResourceReturnType, cResources);
    63196335                    AssertRC(rc); /* Ignore rc because the shader will most likely work anyway. */
     6336                }
     6337
     6338                if (shaderType == SVGA3D_SHADERTYPE_VS)
     6339                {
     6340                    /* Update componentType of the vertex shader input signature to correspond to the input declaration. */
     6341                    vboxDXUpdateVSInputSignature(pDXContext, pDXShader);
    63206342                }
    63216343
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