Skip to content

Commit

Permalink
AGS 6.1
Browse files Browse the repository at this point in the history
  • Loading branch information
rys committed Jan 27, 2023
1 parent 7d2d1a2 commit 003b453
Show file tree
Hide file tree
Showing 70 changed files with 3,189 additions and 324 deletions.
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ In addition to the library itself, the AGS SDK includes several samples to demon
<a href="https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/releases/latest/"><img src="http://gpuopen-librariesandsdks.github.io/media/latest-release-button.svg" alt="Latest release" title="Latest release"></a>
</div>

### What's new in AGS 6.1
Version 6.1 includes RDNA3 GPU detection.

The DLL version of AGS now statically links against the runtime library, and there are now versions of the static library built with the VS 2022 toolchain.

There is also a DX12 extensions sample to demonstrate how to use the extensions mechanism.

### What's new in AGS 6.0.1
Version 6.0.1 is a bugfix release that corrects symbols for some of the DX11 shader intrinsics, and removes a rogue non-ASCII character from a comment in the library header which could cause a warning with Visual Studio.

Expand Down
2 changes: 1 addition & 1 deletion ags_lib/LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Binary file modified ags_lib/doc/amd_ags.chm
Binary file not shown.
110 changes: 1 addition & 109 deletions ags_lib/hlsl/ags_shader_intrinsics_dx11.hlsl

Large diffs are not rendered by default.

167 changes: 29 additions & 138 deletions ags_lib/hlsl/ags_shader_intrinsics_dx12.hlsl

Large diffs are not rendered by default.

107 changes: 60 additions & 47 deletions ags_lib/inc/amd_ags.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -34,6 +34,12 @@
/// \endinternal
///
/// ---------------------------------------
/// What's new in AGS 6.1 since version 6.0
/// ---------------------------------------
/// AGS 6.1 includes the following updates:
/// * RDNA3 detection
///
/// ---------------------------------------
/// What's new in AGS 6.0 since version 5.4.2
/// ---------------------------------------
/// AGS 6.0 includes the following updates:
Expand Down Expand Up @@ -105,8 +111,8 @@
#define AMD_AGS_H

#define AMD_AGS_VERSION_MAJOR 6 ///< AGS major version
#define AMD_AGS_VERSION_MINOR 0 ///< AGS minor version
#define AMD_AGS_VERSION_PATCH 1 ///< AGS patch version
#define AMD_AGS_VERSION_MINOR 1 ///< AGS minor version
#define AMD_AGS_VERSION_PATCH 0 ///< AGS patch version

#ifdef __cplusplus
extern "C" {
Expand All @@ -122,6 +128,7 @@ extern "C" {

#define AGS_MAKE_VERSION( major, minor, patch ) ( ( major << 22 ) | ( minor << 12 ) | patch ) ///< Macro to create the app and engine versions for the fields in \ref AGSDX12ExtensionParams and \ref AGSDX11ExtensionParams and the Radeon Software Version
#define AGS_UNSPECIFIED_VERSION 0xFFFFAD00 ///< Use this to specify no version
#define AGS_CURRENT_VERSION AGS_MAKE_VERSION( AMD_AGS_VERSION_MAJOR, AMD_AGS_VERSION_MINOR, AMD_AGS_VERSION_PATCH ) ///< Macro to return the current AGS version as defined by the AGS header file
/// @}

#if !defined (AGS_DIRECTX_TYPES_INCLUDED)
Expand Down Expand Up @@ -252,6 +259,7 @@ typedef struct AGSDeviceInfo
AsicFamily_Vega, ///< AMD Vega architecture, including Raven Ridge (ie AMD Ryzen CPU + AMD Vega GPU).
AsicFamily_RDNA, ///< AMD RDNA architecture
AsicFamily_RDNA2, ///< AMD RDNA2 architecture
AsicFamily_RDNA3, ///< AMD RDNA3 architecture

AsicFamily_Count ///< Number of enumerated ASIC families
} AsicFamily;
Expand Down Expand Up @@ -385,14 +393,14 @@ AMD_AGS_API int agsGetVersionNumber();

///
/// Function used to initialize the AGS library.
/// agsVersion must be specified as AGS_MAKE_VERSION( AMD_AGS_VERSION_MAJOR, AMD_AGS_VERSION_MINOR, AMD_AGS_VERSION_PATCH ) or the call will return \ref AGS_INVALID_ARGS.
/// agsVersion must be specified as AGS_CURRENT_VERSION or the call will return \ref AGS_INVALID_ARGS.
/// Must be called prior to any of the subsequent AGS API calls.
/// Must be called prior to ID3D11Device or ID3D12Device creation.
/// \note The caller of this function should handle the possibility of the call failing in the cases below. One option is to do a vendor id check and only call \ref agsInitialize if there is an AMD GPU present.
/// \note This function will fail with \ref AGS_NO_AMD_DRIVER_INSTALLED if there is no AMD driver found on the system.
/// \note This function will fail with \ref AGS_LEGACY_DRIVER in Catalyst versions before 12.20.
///
/// \param [in] agsVersion The API version specified using the \ref AGS_MAKE_VERSION macro. If this does not match the version in the binary this initialization call will fail.
/// \param [in] agsVersion The API version specified using the \ref AGS_CURRENT_VERSION macro. If this does not match the version in the binary this initialization call will fail.
/// \param [in] config Optional pointer to a AGSConfiguration struct to override the default library configuration.
/// \param [out] context Address of a pointer to a context. This function allocates a context on the heap which is then required for all subsequent API calls.
/// \param [out] gpuInfo Optional pointer to a AGSGPUInfo struct which will get filled in for all the GPUs in the system.
Expand Down Expand Up @@ -425,6 +433,39 @@ AMD_AGS_API AGSReturnCode agsSetDisplayMode( AGSContext* context, int deviceInde

/// @}

/// @}


/// \defgroup dxappreg App Registration
/// @{
/// This extension allows an application to voluntarily register itself with the driver, providing a more robust app detection solution and avoid the issue of the driver relying on exe names to match the app to a driver profile.
/// It is available when creating the device for both DirectX11 and DirectX12 via \ref agsDriverExtensionsDX11_CreateDevice and \ref agsDriverExtensionsDX12_CreateDevice respectively.
/// This feature is supported in Radeon Software Version 17.9.2 onwards.
/// Rules:
/// * AppName or EngineName must be set, but both are not required. Engine profiles will be used only if app specific profiles do not exist.
/// * In an engine, the EngineName should be set, so a default profile can be built. If an app modifies the engine, the AppName should be set, to allow a profile for the specific app.
/// * Version number is not mandatory, but recommended. The use of which can prevent the use of profiles for incompatible versions (for instance engine versions that introduce or change features), and can help prevent older profiles from being used (and introducing new bugs) before the profile is tested with new app builds.
/// * If Version numbers are used and a new version is introduced, a new profile will not be enabled until an AMD engineer has been able to update a previous profile, or make a new one.
///
/// The cases for profile selection are as follows:
///
/// |Case|Profile Applied|
/// |----|---------------|
/// | App or Engine Version has profile | The profile is used. |
/// | App or Engine Version num < profile version num | The closest profile > the version number is used. |
/// | App or Engine Version num > profile version num | No profile selected/The previous method is used. |
/// | App and Engine Version have profile | The App's profile is used. |
/// | App and Engine Version num < profile version | The closest App profile > the version number is used. |
/// | App and Engine Version, no App profile found | The Engine profile will be used. |
/// | App/Engine name but no Version, has profile | The latest profile is used. |
/// | No name or version, or no profile | The previous app detection method is used. |
///
/// As shown above, if an App name is given, and a profile is found for that app, that will be prioritized. The Engine name and profile will be used only if no app name is given, or no viable profile is found for the app name.
/// In the case that App nor Engine have a profile, the previous app detection methods will be used. If given a version number that is larger than any profile version number, no profile will be selected.
/// This is specifically to prevent cases where an update to an engine or app will cause catastrophic breaks in the profile, allowing an engineer to test the profile before clearing it for public use with the new engine/app update.
///
/// @}

/// \defgroup dx12 DirectX12 Extensions
/// DirectX12 driver extensions
/// @{
Expand Down Expand Up @@ -482,7 +523,7 @@ const unsigned int AGS_DX12_SHADER_INSTRINSICS_SPACE_ID = 0x7FFF0ADE; // 2147420
/// Function used to create a D3D12 device with additional AMD-specific initialization parameters.
///
/// When using the HLSL shader extensions please note:
/// * The shader compiler should not use the D3DCOMPILE_SKIP_OPTIMIZATION (/Od) option, otherwise it will not work.
/// * The shader compiler should not use the D3DCOMPILE_SKIP_OPTIMIZATION (/Od) option or /O0, otherwise it will not work.
/// * The shader compiler needs D3DCOMPILE_ENABLE_STRICTNESS (/Ges) enabled.
/// * The intrinsic instructions require a 5.1 shader model.
/// * The Root Signature will need to reserve an extra UAV resource slot. This is not a real resource that requires allocating, it is just used to encode the intrinsic instructions.
Expand Down Expand Up @@ -528,7 +569,7 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX12_DestroyDevice( AGSContext* con
///
/// \param [in] context Pointer to a context.
/// \param [in] commandList Pointer to the command list.
/// \param [in] data The marker string.
/// \param [in] data The UTF-8 marker string.
///
AMD_AGS_API AGSReturnCode agsDriverExtensionsDX12_PushMarker( AGSContext* context, ID3D12GraphicsCommandList* commandList, const char* data );

Expand All @@ -547,7 +588,7 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX12_PopMarker( AGSContext* context
///
/// \param [in] context Pointer to a context.
/// \param [in] commandList Pointer to the command list.
/// \param [in] data The marker string.
/// \param [in] data The UTF-8 marker string.
///
AMD_AGS_API AGSReturnCode agsDriverExtensionsDX12_SetMarker( AGSContext* context, ID3D12GraphicsCommandList* commandList, const char* data );

Expand Down Expand Up @@ -663,37 +704,6 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_DestroyDevice( AGSContext* con

/// @}


/// \defgroup dx11appreg App Registration
/// @{
/// This extension allows an apllication to voluntarily register itself with the driver, providing a more robust app detection solution and avoid the issue of the driver
/// relying on exe names to match the app to a driver profile.
/// This feature is supported in Radeon Software Version 17.9.2 onwards.
/// Rules:
/// * AppName or EngineName must be set, but both are not required. Engine profiles will be used only if app specific profiles do not exist.
/// * In an engine, the EngineName should be set, so a default profile can be built. If an app modifies the engine, the AppName should be set, to allow a profile for the specific app.
/// * Version number is not mandatory, but heavily suggested. The use of which can prevent the use of profiles for incompatible versions (for instance engine versions that introduce or change features), and can help prevent older profiles from being used (and introducing new bugs) before the profile is tested with new app builds.
/// * If Version numbers are used and a new version is introduced, a new profile will not be enabled until an AMD engineer has been able to update a previous profile, or make a new one.
///
/// The cases for profile selection are as follows:
///
/// |Case|Profile Applied|
/// |----|---------------|
/// | App or Engine Version has profile | The profile is used. |
/// | App or Engine Version num < profile version num | The closest profile > the version number is used. |
/// | App or Engine Version num > profile version num | No profile selected/The previous method is used. |
/// | App and Engine Version have profile | The App's profile is used. |
/// | App and Engine Version num < profile version | The closest App profile > the version number is used. |
/// | App and Engine Version, no App profile found | The Engine profile will be used. |
/// | App/Engine name but no Version, has profile | The latest profile is used. |
/// | No name or version, or no profile | The previous app detection method is used. |
///
/// As shown above, if an App name is given, and a profile is found for that app, that will be prioritized. The Engine name and profile will be used only if no app name is given, or no viable profile is found for the app name.
/// In the case that App nor Engine have a profile, the previous app detection methods will be used. If given a version number that is larger than any profile version number, no profile will be selected.
/// This is specifically to prevent cases where an update to an engine or app will cause catastrophic breaks in the profile, allowing an engineer to test the profile before clearing it for public use with the new engine/app update.
///
/// @}

/// \defgroup breadcrumbs Breadcrumb API
/// API for writing top-of-pipe and bottom-of-pipe markers to help track down GPU hangs.
///
Expand Down Expand Up @@ -907,11 +917,11 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_WriteBreadcrumb( AGSContext* c
/// @{

/// Additional topologies supported via extensions
typedef enum AGSPrimitiveTopology
typedef enum AGSPrimitiveTopologyDX11
{
AGS_PRIMITIVE_TOPOLOGY_QUADLIST = 7, ///< Quad list
AGS_PRIMITIVE_TOPOLOGY_SCREENRECTLIST = 9 ///< Screen rect list
} AGSPrimitiveTopology;
} AGSPrimitiveTopologyDX11;

///
/// Function used to set the primitive topology. If you are using any of the extended topology types, then this function should
Expand All @@ -936,12 +946,11 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_IASetPrimitiveTopology( AGSCon

/// \defgroup dx11UAVOverlap UAV Overlap
/// API for enabling overlapping UAV writes
/// @{

///
/// Function used indicate to the driver that it doesn't need to sync the UAVs bound for the subsequent set of back-to-back dispatches.
/// When calling back-to-back draw calls or dispatch calls that write to the same UAV, the AMD DX11 driver will automatically insert a barrier to ensure there are no write after write (WAW) hazards.
/// If the app can guarantee there is no overlap between the writes between these calls, then this extension will remove those barriers allowing the work to run in parallel on the GPU.
/// The AMD DX11 driver will automatically track resource usage and insert barriers as necessary to clear read-after-write (RAW) and write-after-write (WAW)
/// hazards. The UAV overlap extension allows applications to indicate to the driver it can skip inserting barriers for UAV resources used in
/// dispatches and draws within the \ref agsDriverExtensionsDX11_BeginUAVOverlap/ \ref agsDriverExtensionsDX11_EndUAVOverlap calls. This can be useful for applications to allow
/// multiple back-to-back dispatches or draws in flight even if they are accessing the same UAV resource but the data written or read does not overlap within the resource.
///
/// Usage would be as follows:
/// \code{.cpp}
Expand All @@ -958,6 +967,10 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_IASetPrimitiveTopology( AGSCon
/// // Reenable automatic WAW syncs
/// agsDriverExtensionsDX11_EndUAVOverlap( m_agsContext );
/// \endcode
/// @{

///
/// Function used indicate to the driver the start of the overlap scope.
///
/// \param [in] context Pointer to a context.
/// \param [in] dxContext Pointer to the DirectX device context. If this is to work using the non-immediate context, then you need to check support. If nullptr is specified, then the immediate context is assumed.
Expand All @@ -966,7 +979,7 @@ AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_IASetPrimitiveTopology( AGSCon
AMD_AGS_API AGSReturnCode agsDriverExtensionsDX11_BeginUAVOverlap( AGSContext* context, ID3D11DeviceContext* dxContext );

///
/// Function used indicate to the driver it can no longer overlap the batch of back-to-back dispatches that has been submitted.
/// Function used indicate to the driver the end of the overlap scope.
///
/// \param [in] context Pointer to a context.
/// \param [in] dxContext Pointer to the DirectX device context. If this is to work using the non-immediate context, then you need to check support. If nullptr is specified, then the immediate context is assumed.
Expand Down
Binary file modified ags_lib/lib/amd_ags_x64.dll
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2015_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2015_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2015_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2015_MTd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2017_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2017_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2017_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2017_MTd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2019_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2019_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2019_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x64_2019_MTd.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x64_2022_MD.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x64_2022_MDd.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x64_2022_MT.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x64_2022_MTd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86.dll
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2015_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2015_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2015_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2015_MTd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2017_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2017_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2017_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2017_MTd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2019_MD.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2019_MDd.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2019_MT.lib
Binary file not shown.
Binary file modified ags_lib/lib/amd_ags_x86_2019_MTd.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x86_2022_MD.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x86_2022_MDd.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x86_2022_MT.lib
Binary file not shown.
Binary file added ags_lib/lib/amd_ags_x86_2022_MTd.lib
Binary file not shown.
6 changes: 3 additions & 3 deletions ags_sample/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ set(CMAKE_GENERATOR_PLATFORM x64)
set(CMAKE_CONFIGURATION_TYPES Debug Release)

if(AGS_INTERNAL_DEBUG)
project(ags_sample_internal VERSION 6.0.1)
project(ags_sample_internal VERSION 6.1.0)
else()
project(ags_sample VERSION 6.0.1)
project(ags_sample VERSION 6.1.0)
endif()

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
Expand All @@ -20,7 +20,7 @@ set(AGS_PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/../ags_lib/inc/amd_ags.h)
if(AGS_INTERNAL_DEBUG)
add_subdirectory(../ags_lib ags_internal)
add_executable(${PROJECT_NAME} ${AGS_SOURCES} ${AGS_PUBLIC_HEADER})
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ags_lib/lib/amd_ags_x64_2019_MDd.lib)
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ags_lib/lib/amd_ags_x64_2022_MDd.lib)

else()
add_library(amd_ags SHARED IMPORTED GLOBAL)
Expand Down
6 changes: 3 additions & 3 deletions ags_sample/build/GenerateSolutions.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
mkdir VS2019
cd VS2019
cmake ..\.. -G "Visual Studio 16 2019" -A x64
mkdir VS2022
cd VS2022
cmake ..\.. -G "Visual Studio 17 2022" -A x64
cd ..
8 changes: 3 additions & 5 deletions ags_sample/src/AGSSample.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//
// Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
Expand All @@ -25,9 +25,6 @@
//-----------------------------------------------------------------------------

#define WIN32_LEAN_AND_MEAN
// normally you would have already included d3d header files so forward declaring the DX types is not necessary
#define AGS_FORWARD_DECLARE_DIRECTX_TYPES

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -70,7 +67,8 @@ void PrintDisplayInfo( const AGSGPUInfo& gpuInfo )
"GCN Gen4",
"Vega",
"RDNA",
"RDNA2"
"RDNA2",
"RDNA3"
};

static_assert( _countof( asicFamily ) == AGSDeviceInfo::AsicFamily_Count, "asic family table out of date" );
Expand Down
2 changes: 1 addition & 1 deletion crossfire_sample/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15)
set(CMAKE_GENERATOR_PLATFORM x64)
set(CMAKE_CONFIGURATION_TYPES Debug Release)

project(crossfire_sample VERSION 6.0.1)
project(crossfire_sample VERSION 6.1.0)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
Expand Down
2 changes: 1 addition & 1 deletion crossfire_sample/Readme.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
Expand Down
6 changes: 3 additions & 3 deletions crossfire_sample/build/GenerateSolutions.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
mkdir VS2019
cd VS2019
cmake ..\.. -G "Visual Studio 16 2019" -A x64
mkdir VS2022
cd VS2022
cmake ..\.. -G "Visual Studio 17 2022" -A x64
cd ..
Loading

0 comments on commit 003b453

Please sign in to comment.