; b288.asm - las/mercury [BITS 32] ;--- %define WIDTH 1280 %define HEIGHT 720 %ifdef DEBUG %else %define FULLSCREEN %endif ;--- %include "inc/macros.inc" %include "inc/windows.inc" %include "inc/dxgi.inc" %include "inc/d3d11.inc" ;--- struc TEXTURE_2D_SRV_UAV_RTV .TEX: resd 1 .SRV: resd 1 .UAV: resd 1 .RTV: resd 1 endstruc ;--- DATA_SECTION WFMTEX _waveFormatEx: istruc WAVEFORMATEX at WAVEFORMATEX.wFormatTag, dw WAVE_FORMAT_IEEE_FLOAT at WAVEFORMATEX.nChannels, dw 2 at WAVEFORMATEX.nSamplesPerSec, dd 44100 at WAVEFORMATEX.nAvgBytesPerSec, dd 44100*4*2 at WAVEFORMATEX.nBlockAlign, dw 4*2 at WAVEFORMATEX.wBitsPerSample, dw 4*8 at WAVEFORMATEX.cbSize, dw 0 iend DATA_SECTION WHDR _waveHdr: istruc WAVEHDR at WAVEHDR.lpData, dd _sndBuffer at WAVEHDR.dwBufferLength, dd _sndBufferEnd-_sndBuffer at WAVEHDR.dwBytesRecorded, dd 0 at WAVEHDR.dwUser, dd 0 at WAVEHDR.dwFlags, dd WHDR_PREPARED at WAVEHDR.dwLoops, dd 0 at WAVEHDR.lpNext, dd 0 at WAVEHDR.reserved, dd 0 iend DATA_SECTION TIME _mmTime: istruc MMTIME at MMTIME.wType, dd TIME_SAMPLES at MMTIME.data, dd 0 iend DATA_SECTION SC_DESC _swapChainDesc: istruc DXGI_SWAP_CHAIN_DESC at DXGI_SWAP_CHAIN_DESC.Width, dd WIDTH at DXGI_SWAP_CHAIN_DESC.Height, dd HEIGHT at DXGI_SWAP_CHAIN_DESC.Numerator, dd 0 at DXGI_SWAP_CHAIN_DESC.Denominator, dd 1 at DXGI_SWAP_CHAIN_DESC.Format, dd DXGI_FORMAT_R16G16B16A16_FLOAT at DXGI_SWAP_CHAIN_DESC.ScanlineOrdering, dd DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED at DXGI_SWAP_CHAIN_DESC.Scaling, dd DXGI_MODE_SCALING_UNSPECIFIED at DXGI_SWAP_CHAIN_DESC.Count, dd 1 at DXGI_SWAP_CHAIN_DESC.Quality, dd 0 at DXGI_SWAP_CHAIN_DESC.BufferUsage, dd DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS | DXGI_USAGE_SHADER_INPUT at DXGI_SWAP_CHAIN_DESC.BufferCount, dd 1 at DXGI_SWAP_CHAIN_DESC.OutputWindow, dd 0 %ifdef FULLSCREEN at DXGI_SWAP_CHAIN_DESC.Windowed, dd 0 %else at DXGI_SWAP_CHAIN_DESC.Windowed, dd 0xffffffff %endif at DXGI_SWAP_CHAIN_DESC.SwapEffect, dd DXGI_SWAP_EFFECT_DISCARD at DXGI_SWAP_CHAIN_DESC.Flags, dd 0 iend DATA_SECTION TEX_DESC _textureDesc: istruc D3D11_TEXTURE2D_DESC at D3D11_TEXTURE2D_DESC.Width, dd 0 at D3D11_TEXTURE2D_DESC.Height, dd 0 at D3D11_TEXTURE2D_DESC.MipLevels, dd 0 at D3D11_TEXTURE2D_DESC.ArraySize, dd 1 at D3D11_TEXTURE2D_DESC.Format, dd DXGI_FORMAT_R16G16B16A16_FLOAT at D3D11_TEXTURE2D_DESC.Count, dd 1 at D3D11_TEXTURE2D_DESC.Quality, dd 0 at D3D11_TEXTURE2D_DESC.Usage, dd D3D11_USAGE_DEFAULT at D3D11_TEXTURE2D_DESC.BindFlags, dd D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS at D3D11_TEXTURE2D_DESC.CPUAccessFlags, dd 0 at D3D11_TEXTURE2D_DESC.MiscFlags, dd D3D11_RESOURCE_MISC_GENERATE_MIPS iend DATA_SECTION UUID _uuidTexture2D: dd 0x6f15aaf2 dw 0xd208 dw 0x4e89 db 0x9a,0xb4,0x48,0x95,0x35,0xd3,0x4f,0x9c DATA_SECTION SHADER _src: incbin "gpu/b288.hlsl" db 0 _srcEnd: _entrypoint: db "cs", 0 _target: db "cs_5_0", 0 _null: dd 0 BSS_SECTION SND _sndBuffer: resd 16384*4 _sndBufferEnd: _waveHandle: resd 1024 BSS_SECTION D3D _device: resd 1 _context: resd 1 _swapChain: resd 1 _backBufferTexture: resd 1 _backBufferUAV: resd 1 _computeShader: resd 1 _blob: resd 1 BSS_SECTION RES _textureSRVUAVRTV: resb TEXTURE_2D_SRV_UAV_RTV_size TEXT_SECTION SUR _createSRVUAVRTV: ; target, width, height pop eax pop edi pop dword [_textureDesc + D3D11_TEXTURE2D_DESC.Width] pop dword [_textureDesc + D3D11_TEXTURE2D_DESC.Height] push eax lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.TEX] push eax push byte 0 push dword _textureDesc com _device, ID3D11Device.CreateTexture2D lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.SRV] push eax push byte 0 push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX] com _device, ID3D11Device.CreateShaderResourceView lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.UAV] push eax push byte 0 push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX] com _device, ID3D11Device.CreateUnorderedAccessView lea eax, [edi + TEXTURE_2D_SRV_UAV_RTV.RTV] push eax push byte 0 push dword [edi + TEXTURE_2D_SRV_UAV_RTV.TEX] com _device, ID3D11Device.CreateRenderTargetView ret TEXT_SECTION MAINLOOP global _start _start: %ifdef FULLSCREEN push byte 0 push byte 0 push byte 0 push byte 0 push byte 0 push byte 0 push byte 0 push byte 0 push byte 0 push dword WS_POPUP | WS_VISIBLE | WS_MAXIMIZE push byte 0 push dword ATOM_STATIC push byte 0 %else push byte 0 push byte 0 push byte 0 push byte 0 push dword HEIGHT push dword WIDTH push byte 0 push byte 0 push dword WS_POPUP | WS_VISIBLE push byte 0 push dword ATOM_STATIC push byte 0 %endif call _CreateWindowExA@48 mov [_swapChainDesc + DXGI_SWAP_CHAIN_DESC.OutputWindow], eax %ifdef FULLSCREEN call _ShowCursor@4 %endif push dword _context push byte 0 push dword _device push dword _swapChain push dword _swapChainDesc push byte D3D11_SDK_VERSION push byte 0 push byte 0 push byte 0 push byte 0 push byte D3D_DRIVER_TYPE_HARDWARE push byte 0 call _D3D11CreateDeviceAndSwapChain@48 push byte 0 push dword _blob push byte 0 push dword D3DCOMPILE_OPTIMIZATION_LEVEL3 push dword _target push dword _entrypoint push byte 0 push byte 0 push byte 0 push dword _srcEnd-_src push dword _src call _D3DCompile@44 push dword _computeShader push byte 0 com _blob, ID3D10Blob.GetBufferSize push eax com _blob, ID3D10Blob.GetBufferPointer push eax com _device, ID3D11Device.CreateComputeShader push dword _backBufferTexture push dword _uuidTexture2D push byte 0 com _swapChain, IDXGISwapChain.GetBuffer push dword _backBufferUAV push byte 0 push dword [_backBufferTexture] com _device, ID3D11Device.CreateUnorderedAccessView push byte 0 push byte 0 push dword [_computeShader] com _context, ID3D11DeviceContext.CSSetShader push dword WIDTH push dword HEIGHT push dword _textureSRVUAVRTV call _createSRVUAVRTV _initSound: push byte 0 push byte 0 push byte 0 push dword _waveFormatEx push byte WAVE_MAPPER push dword _waveHandle call _waveOutOpen@24 push byte WAVEHDR_size push dword _waveHdr push dword [_waveHandle] call _waveOutWrite@12 _mainloop: push byte MMTIME_size push dword _mmTime push dword [_waveHandle] call _waveOutGetPosition@12 push byte 0 push dword _backBufferUAV push byte 1 push byte 0 com _context, ID3D11DeviceContext.CSSetUnorderedAccessViews push byte 1 push byte 45 push byte 80 com _context, ID3D11DeviceContext.Dispatch push byte 0 push byte 1 com _swapChain, IDXGISwapChain.Present push byte VK_ESCAPE call _GetAsyncKeyState@4 dec eax js short _mainloop _end: push eax call _ExitProcess@4