Updated compute shader support

This commit is contained in:
turanszkij
2016-03-27 00:09:45 +01:00
parent e12fae70ab
commit e138a60ca0
20 changed files with 359 additions and 127 deletions
+2 -2
View File
@@ -110,7 +110,7 @@ void DeferredRenderableComponent::RenderScene(GRAPHICSTHREAD threadID){
dtDepthCopy.CopyFrom(*rtGBuffer.depth, threadID);
wiRenderer::GetDevice()->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), threadID);
@@ -177,7 +177,7 @@ void DeferredRenderableComponent::RenderScene(GRAPHICSTHREAD threadID){
if (getSSSEnabled())
{
//wiRenderer::UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
//wiRenderer::UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
fx.stencilRef = STENCILREF_SKIN;
fx.stencilComp = COMPARISON_LESS;
fx.quality = QUALITY_BILINEAR;
+3 -3
View File
@@ -268,7 +268,7 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende
if (getVolumeLightsEnabled())
{
wiRenderer::GetDevice()->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
rtVolumeLight.Activate(threadID, mainRT.depth);
wiRenderer::DrawVolumeLights(wiRenderer::getCamera(), threadID);
}
@@ -286,7 +286,7 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende
wiRenderer::DrawWaterRipples(threadID);
}
wiRenderer::GetDevice()->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
rtTransparent.Activate(threadID, mainRT.depth); {
wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), shadedSceneRT.GetTexture(), rtReflection.GetTexture()
, rtWaterRipple.GetTexture(), threadID);
@@ -354,7 +354,7 @@ void Renderable3DComponent::RenderLightShafts(wiRenderTarget& mainRT, GRAPHICSTH
wiImageEffects fx((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight());
wiRenderer::GetDevice()->UnbindTextures(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID);
rtSun[0].Activate(threadID, mainRT.depth); {
wiRenderer::DrawSun(threadID);
}
+4 -4
View File
@@ -978,13 +978,13 @@
</FxCompile>
<FxCompile Include="computeCS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='WinRT|Win32'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='WinRT|Win32'">4.1</ShaderModel>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='WinRT|Win32'">5.0</ShaderModel>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4.1</ShaderModel>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">5.0</ShaderModel>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4.1</ShaderModel>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">5.0</ShaderModel>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release_RT|Win32'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release_RT|Win32'">4.1</ShaderModel>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release_RT|Win32'">5.0</ShaderModel>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">shaders/%(Filename).cso</ObjectFileOutput>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Release_RT|Win32'">shaders/%(Filename).cso</ObjectFileOutput>
<ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='WinRT|Win32'">shaders/%(Filename).cso</ObjectFileOutput>
+16 -2
View File
@@ -1,4 +1,18 @@
[numthreads(1, 1, 1)]
void main( uint3 DTid : SV_DispatchThreadID )
//struct CSBUFFER
//{
// float x, y;
//};
//
//RWStructuredBuffer<CSBUFFER> BufferOut : register(u0);
RWTexture2D<float4> tex;
[numthreads(32, 32, 1)]
void main(
uint3 groupId : SV_GroupID,
uint3 groupThreadId : SV_GroupThreadID,
uint3 dispatchThreadId : SV_DispatchThreadID, //
uint groupIndex : SV_GroupIndex)
{
tex[dispatchThreadId.xy] = float4((float2)dispatchThreadId.xy / 1024.0f, 0, 1);
}
+2 -2
View File
@@ -250,7 +250,7 @@ void wiEmittedParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID, int FLAG)
wiRenderer::GetDevice()->BindVS(vertexShader,threadID);
wiRenderer::GetDevice()->BindGS(geometryShader,threadID);
//wiRenderer::GetDevice()->BindTexturePS(depth,1,threadID);
//wiRenderer::GetDevice()->BindResourcePS(depth,1,threadID);
static thread_local ConstantBuffer* cb = new ConstantBuffer;
(*cb).mAdd.x = additive;
@@ -269,7 +269,7 @@ void wiEmittedParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID, int FLAG)
wiRenderer::GetDevice()->BindVertexBuffer(vertexBuffer,0,sizeof(Point),threadID);
if(!wireRender && material->texture)
wiRenderer::GetDevice()->BindTexturePS(material->texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindResourcePS(material->texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->Draw(renderPoints.size(),threadID);
+1
View File
@@ -1,5 +1,6 @@
#pragma once
#include "wiParticle.h"
#include "ConstantBufferMapping.h"
struct Material;
struct AABB;
+1 -1
View File
@@ -284,7 +284,7 @@ void wiFont::Draw(GRAPHICSTHREAD threadID){
wiRenderer::GetDevice()->BindVertexBuffer(vertexBuffer,0,sizeof(Vertex),threadID);
wiRenderer::GetDevice()->BindIndexBuffer(indexBuffer,threadID);
wiRenderer::GetDevice()->BindTexturePS(fontStyles[style].texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindResourcePS(fontStyles[style].texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->DrawIndexed(text.length()*6,threadID);
}
}
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "CommonInclude.h"
#include "wiGraphicsAPI.h"
#include "ConstantBufferMapping.h"
#define MAX_TEXT 20000
// Do not alter order because it is bound to lua manually
+75 -18
View File
@@ -6,8 +6,6 @@
#include <d3d11_2.h>
#include <DXGI1_2.h>
#include "ConstantBufferMapping.h"
namespace wiGraphicsTypes
{
@@ -263,6 +261,14 @@ namespace wiGraphicsTypes
FORMAT_A8P8,
FORMAT_B4G4R4A4_UNORM,
FORMAT_FORCE_UINT = 0xffffffff,
};
enum MAP
{
MAP_READ,
MAP_WRITE,
MAP_READ_WRITE,
MAP_WRITE_DISCARD,
MAP_WRITE_NO_OVERWRITE
};
// Flags ////////////////////////////////////////////
@@ -292,6 +298,7 @@ namespace wiGraphicsTypes
RESOURCE_MISC_GENERATE_MIPS = 0x1L,
RESOURCE_MISC_SHARED = 0x2L,
RESOURCE_MISC_TEXTURECUBE = 0x4L,
RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x20L,
RESOURCE_MISC_BUFFER_STRUCTURED = 0x40L,
RESOURCE_MISC_TILED = 0x40000L,
};
@@ -425,6 +432,12 @@ namespace wiGraphicsTypes
UINT SysMemPitch;
UINT SysMemSlicePitch;
};
struct MappedSubresource
{
void *pData;
UINT RowPitch;
UINT DepthPitch;
};
@@ -539,20 +552,57 @@ namespace wiGraphicsTypes
SamplerDesc GetDesc() { return desc; }
};
class GPUBuffer
class GPUResource
{
friend class GraphicsDevice_DX11;
private:
ID3D11Buffer* resource_DX11;
ID3D11ShaderResourceView* shaderResourceView_DX11;
protected:
GPUResource()
{
SAFE_INIT(shaderResourceView_DX11);
}
virtual ~GPUResource()
{
SAFE_RELEASE(shaderResourceView_DX11);
}
};
class GPUUnorderedResource
{
friend class GraphicsDevice_DX11;
private:
ID3D11UnorderedAccessView* unorderedAccessView_DX11;
protected:
GPUUnorderedResource()
{
SAFE_INIT(unorderedAccessView_DX11);
}
virtual ~GPUUnorderedResource()
{
SAFE_RELEASE(unorderedAccessView_DX11);
}
};
class GPUBuffer : public GPUResource, public GPUUnorderedResource
{
friend class GraphicsDevice_DX11;
private:
ID3D11Buffer* resource_DX11;
ID3D11UnorderedAccessView* unorderedAccessView_DX11;
GPUBufferDesc desc;
public:
GPUBuffer()
GPUBuffer() : GPUResource(), GPUUnorderedResource()
{
SAFE_INIT(resource_DX11);
SAFE_INIT(unorderedAccessView_DX11);
}
~GPUBuffer()
virtual ~GPUBuffer()
{
SAFE_RELEASE(resource_DX11);
SAFE_RELEASE(unorderedAccessView_DX11);
}
bool IsValid() { return resource_DX11 != nullptr; }
@@ -655,19 +705,21 @@ namespace wiGraphicsTypes
}
};
class Texture
class Texture : public GPUResource, public GPUUnorderedResource
{
friend class GraphicsDevice_DX11;
private:
ID3D11ShaderResourceView* shaderResourceView_DX11;
private:
ID3D11RenderTargetView* renderTargetView_DX11;
ID3D11DepthStencilView* depthStencilView_DX11;
public:
Texture() :shaderResourceView_DX11(nullptr), renderTargetView_DX11(nullptr), depthStencilView_DX11(nullptr) {}
Texture() : GPUResource(), GPUUnorderedResource()
{
SAFE_INIT(renderTargetView_DX11);
SAFE_INIT(depthStencilView_DX11);
}
virtual ~Texture()
{
SAFE_RELEASE(shaderResourceView_DX11);
SAFE_RELEASE(renderTargetView_DX11);
SAFE_RELEASE(depthStencilView_DX11);
}
@@ -751,13 +803,15 @@ namespace wiGraphicsTypes
virtual void BindRenderTargets(UINT NumViews, Texture2D* const *ppRenderTargetViews, Texture2D* depthStencilTexture, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void ClearRenderTarget(Texture2D* pTexture, const FLOAT ColorRGBA[4], GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void ClearDepthStencil(Texture2D* pTexture, UINT ClearFlags, FLOAT Depth, UINT8 Stencil, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTexturePS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTextureVS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTextureGS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTextureDS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTextureHS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindTextureCS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void UnbindTextures(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourcePS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourceVS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourceGS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourceDS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourceHS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindResourceCS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void UnBindResources(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void UnBindUnorderedAccessResources(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindSamplerPS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindSamplerVS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void BindSamplerGS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
@@ -793,6 +847,9 @@ namespace wiGraphicsTypes
virtual void GenerateMips(Texture* texture, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void CopyTexture2D(Texture2D* pDst, const Texture2D* pSrc, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void UpdateBuffer(GPUBuffer* buffer, const void* data, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE, int dataSize = -1) = 0;
virtual GPUBuffer* DownloadBuffer(GPUBuffer* buffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void Map(GPUBuffer* resource, UINT subResource, MAP mapType, UINT mapFlags, MappedSubresource* mappedResource, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual void Unmap(GPUBuffer* resource, UINT subResource = 0, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
virtual HRESULT CreateTextureFromFile(const wstring& fileName, Texture2D **ppTexture, bool mipMaps = true, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0;
+86 -8
View File
@@ -223,6 +223,8 @@ inline UINT _ParseResourceMiscFlags(UINT value)
_flag |= D3D11_RESOURCE_MISC_SHARED;
if (value & RESOURCE_MISC_TEXTURECUBE)
_flag |= D3D11_RESOURCE_MISC_TEXTURECUBE;
if (value & RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS)
_flag |= D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS;
if (value & RESOURCE_MISC_BUFFER_STRUCTURED)
_flag |= D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
if (value & RESOURCE_MISC_TILED)
@@ -1013,6 +1015,67 @@ HRESULT GraphicsDevice_DX11::CreateBuffer(const GPUBufferDesc *pDesc, const Subr
ppBuffer->desc = *pDesc;
HRESULT hr = device->CreateBuffer(&desc, data, &ppBuffer->resource_DX11);
assert(SUCCEEDED(hr) && "GPUBuffer Creation failed!");
if (SUCCEEDED(hr))
{
// Create resource views if needed
if (desc.BindFlags & D3D11_BIND_SHADER_RESOURCE)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc;
ZeroMemory(&srv_desc, sizeof(srv_desc));
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;
srv_desc.BufferEx.FirstElement = 0;
if (desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS)
{
// This is a Raw Buffer
srv_desc.Format = DXGI_FORMAT_R32_TYPELESS;
srv_desc.BufferEx.Flags = D3D11_BUFFEREX_SRV_FLAG_RAW;
srv_desc.BufferEx.NumElements = desc.ByteWidth / 4;
}
else if (desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED)
{
// This is a Structured Buffer
srv_desc.Format = DXGI_FORMAT_UNKNOWN;
srv_desc.BufferEx.NumElements = desc.ByteWidth / desc.StructureByteStride;
}
hr = device->CreateShaderResourceView(ppBuffer->resource_DX11, &srv_desc, &ppBuffer->shaderResourceView_DX11);
assert(SUCCEEDED(hr) && "ShaderResourceView of the GPUBuffer could not be created!");
}
if (desc.BindFlags & D3D11_BIND_UNORDERED_ACCESS)
{
D3D11_UNORDERED_ACCESS_VIEW_DESC uav_desc;
ZeroMemory(&uav_desc, sizeof(uav_desc));
uav_desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
uav_desc.Buffer.FirstElement = 0;
if (desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS)
{
// This is a Raw Buffer
uav_desc.Format = DXGI_FORMAT_R32_TYPELESS; // Format must be DXGI_FORMAT_R32_TYPELESS, when creating Raw Unordered Access View
uav_desc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_RAW;
uav_desc.Buffer.NumElements = desc.ByteWidth / 4;
}
else if (desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED)
{
// This is a Structured Buffer
uav_desc.Format = DXGI_FORMAT_UNKNOWN; // Format must be must be DXGI_FORMAT_UNKNOWN, when creating a View of a Structured Buffer
uav_desc.Buffer.NumElements = desc.ByteWidth / desc.StructureByteStride;
}
hr = device->CreateUnorderedAccessView(ppBuffer->resource_DX11, &uav_desc, &ppBuffer->unorderedAccessView_DX11);
assert(SUCCEEDED(hr) && "UnorderedAccessView of the GPUBuffer could not be created!");
}
}
return hr;
}
HRESULT GraphicsDevice_DX11::CreateTexture1D()
@@ -1035,9 +1098,24 @@ HRESULT GraphicsDevice_DX11::CreateTexture2D(const Texture2DDesc* pDesc, const S
if (FAILED(hr))
return hr;
CreateRenderTargetView(*ppTexture2D);
CreateShaderResourceView(*ppTexture2D);
CreateDepthStencilView(*ppTexture2D);
hr = CreateRenderTargetView(*ppTexture2D);
hr = CreateShaderResourceView(*ppTexture2D);
hr = CreateDepthStencilView(*ppTexture2D);
if (desc.BindFlags & D3D11_BIND_UNORDERED_ACCESS)
{
D3D11_UNORDERED_ACCESS_VIEW_DESC uav_desc;
ZeroMemory(&uav_desc, sizeof(uav_desc));
uav_desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
uav_desc.Buffer.FirstElement = 0;
uav_desc.Format = desc.Format;
uav_desc.Buffer.NumElements = desc.Width * desc.Height;
hr = device->CreateUnorderedAccessView((*ppTexture2D)->texture2D_DX11, &uav_desc, &(*ppTexture2D)->unorderedAccessView_DX11);
assert(SUCCEEDED(hr) && "UnorderedAccessView of the Texture2D could not be created!");
}
return hr;
}
@@ -1066,9 +1144,9 @@ HRESULT GraphicsDevice_DX11::CreateTextureCube(const Texture2DDesc* pDesc, const
if (FAILED(hr))
return hr;
CreateRenderTargetView(*ppTextureCube);
CreateShaderResourceView(*ppTextureCube);
CreateDepthStencilView(*ppTextureCube);
hr = CreateRenderTargetView(*ppTextureCube);
hr = CreateShaderResourceView(*ppTextureCube);
hr = CreateDepthStencilView(*ppTextureCube);
return hr;
}
@@ -1327,7 +1405,7 @@ void GraphicsDevice_DX11::PresentEnd()
deviceContexts[GRAPHICSTHREAD_IMMEDIATE]->OMSetRenderTargets(0, nullptr, nullptr);
UnbindTextures(0, TEXSLOT_COUNT, GRAPHICSTHREAD_IMMEDIATE);
UnBindResources(0, TEXSLOT_COUNT, GRAPHICSTHREAD_IMMEDIATE);
FRAMECOUNT++;
@@ -1344,7 +1422,7 @@ void GraphicsDevice_DX11::ExecuteDeferredContexts()
commandLists[i]->Release();
commandLists[i] = nullptr;
UnbindTextures(0, TEXSLOT_COUNT, (GRAPHICSTHREAD)i);
UnBindResources(0, TEXSLOT_COUNT, (GRAPHICSTHREAD)i);
}
}
}
+94 -23
View File
@@ -105,39 +105,44 @@ namespace wiGraphicsTypes
deviceContexts[threadID]->ClearDepthStencilView(pTexture->depthStencilView_DX11, _flags, Depth, Stencil);
}
}
virtual void BindTexturePS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->PSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourcePS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->PSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void BindTextureVS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->VSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourceVS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->VSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void BindTextureGS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->GSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourceGS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->GSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void BindTextureDS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->DSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourceDS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->DSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void BindTextureHS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->HSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourceHS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->HSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void BindTextureCS(const Texture* texture, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && texture != nullptr) {
deviceContexts[threadID]->CSSetShaderResources(slot, 1, &texture->shaderResourceView_DX11);
virtual void BindResourceCS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->CSSetShaderResources(slot, 1, &resource->shaderResourceView_DX11);
}
}
virtual void UnbindTextures(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE)
virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* buffer, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && buffer != nullptr) {
deviceContexts[threadID]->CSSetUnorderedAccessViews(slot, 1, &buffer->unorderedAccessView_DX11, nullptr);
}
}
virtual void UnBindResources(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE)
{
assert(num <= 32 && "UnbindTextures limit of 32 reached!");
assert(num <= 32 && "UnBindResources limit of 32 reached!");
if (deviceContexts[threadID] != nullptr)
{
static ID3D11ShaderResourceView* empties[32] = {
@@ -154,6 +159,20 @@ namespace wiGraphicsTypes
deviceContexts[threadID]->CSSetShaderResources(slot, num, empties);
}
}
virtual void UnBindUnorderedAccessResources(int slot, int num, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE)
{
assert(num <= 32 && "UnBindResources limit of 32 reached!");
if (deviceContexts[threadID] != nullptr)
{
static ID3D11UnorderedAccessView* empties[32] = {
nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,
nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,
nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,
nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,
};
deviceContexts[threadID]->CSSetUnorderedAccessViews(slot, num, empties, 0);
}
}
virtual void BindSamplerPS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && sampler != nullptr && sampler->resource_DX11 != nullptr) {
deviceContexts[threadID]->PSSetSamplers(slot, 1, &sampler->resource_DX11);
@@ -384,10 +403,8 @@ namespace wiGraphicsTypes
{
if (buffer->desc.Usage == USAGE_DYNAMIC) {
static thread_local D3D11_MAPPED_SUBRESOURCE mappedResource;
void* dataPtr;
hr = deviceContexts[threadID]->Map(buffer->resource_DX11, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
dataPtr = (void*)mappedResource.pData;
memcpy(dataPtr, data, (dataSize >= 0 ? dataSize : buffer->desc.ByteWidth));
memcpy(mappedResource.pData, data, (dataSize >= 0 ? dataSize : buffer->desc.ByteWidth));
deviceContexts[threadID]->Unmap(buffer->resource_DX11, 0);
}
else {
@@ -396,6 +413,60 @@ namespace wiGraphicsTypes
}
}
}
virtual GPUBuffer* DownloadBuffer(GPUBuffer* buffer, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] == nullptr)
return nullptr;
GPUBuffer* debugbuf = new GPUBuffer;
GPUBufferDesc desc = buffer->GetDesc();
desc.CPUAccessFlags = CPU_ACCESS_READ;
desc.Usage = USAGE_STAGING;
desc.BindFlags = 0;
desc.MiscFlags = 0;
if (SUCCEEDED(CreateBuffer(&desc, nullptr, debugbuf)))
{
deviceContexts[threadID]->CopyResource(debugbuf->resource_DX11, buffer->resource_DX11);
}
return debugbuf;
}
virtual void Map(GPUBuffer* resource, UINT subResource, MAP mapType, UINT mapFlags, MappedSubresource* mappedResource, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
assert(mapFlags == 0 && "MapFlags not implemented!");
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
D3D11_MAPPED_SUBRESOURCE d3dMappedResource;
D3D11_MAP d3dMapType = D3D11_MAP_WRITE_DISCARD;
switch (mapType)
{
case wiGraphicsTypes::MAP_READ:
d3dMapType = D3D11_MAP_READ;
break;
case wiGraphicsTypes::MAP_WRITE:
d3dMapType = D3D11_MAP_WRITE;
break;
case wiGraphicsTypes::MAP_READ_WRITE:
d3dMapType = D3D11_MAP_READ_WRITE;
break;
case wiGraphicsTypes::MAP_WRITE_DISCARD:
d3dMapType = D3D11_MAP_WRITE_DISCARD;
break;
case wiGraphicsTypes::MAP_WRITE_NO_OVERWRITE:
d3dMapType = D3D11_MAP_WRITE_NO_OVERWRITE;
break;
default:
break;
}
HRESULT hr = deviceContexts[threadID]->Map(resource->resource_DX11, subResource, d3dMapType, mapFlags, &d3dMappedResource);
mappedResource->pData = d3dMappedResource.pData;
mappedResource->DepthPitch = d3dMappedResource.DepthPitch;
mappedResource->RowPitch = d3dMappedResource.RowPitch;
}
}
virtual void Unmap(GPUBuffer* resource, UINT subResource, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) {
if (deviceContexts[threadID] != nullptr && resource != nullptr) {
deviceContexts[threadID]->Unmap(resource->resource_DX11, subResource);
}
}
virtual HRESULT CreateTextureFromFile(const wstring& fileName, Texture2D **ppTexture, bool mipMaps = true, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE);
+2 -2
View File
@@ -395,8 +395,8 @@ void wiHairParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID)
wiRenderer::GetDevice()->BindVS(vs,threadID);
if(texture){
wiRenderer::GetDevice()->BindTexturePS(texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindTextureGS(texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindResourcePS(texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindResourceGS(texture,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindBlendState(bs,threadID);
}
+1
View File
@@ -1,5 +1,6 @@
#pragma once
#include "wiParticle.h"
#include "ConstantBufferMapping.h"
class wiSPTree;
struct Material;
+9 -9
View File
@@ -222,7 +222,7 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
wiRenderer::GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLESTRIP, threadID);
wiRenderer::GetDevice()->BindRasterizerState(rasterizerState, threadID);
wiRenderer::GetDevice()->BindTexturePS(texture, TEXSLOT_ONDEMAND0, threadID);
wiRenderer::GetDevice()->BindResourcePS(texture, TEXSLOT_ONDEMAND0, threadID);
if (effects.blendFlag == BLENDMODE_ALPHA)
wiRenderer::GetDevice()->BindBlendState(blendState, threadID);
@@ -373,9 +373,9 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
wiRenderer::GetDevice()->UpdateBuffer(processCb,prcb,threadID);
}
wiRenderer::GetDevice()->BindTexturePS(effects.maskMap, TEXSLOT_ONDEMAND1, threadID);
wiRenderer::GetDevice()->BindTexturePS(effects.distortionMap, TEXSLOT_ONDEMAND2, threadID);
wiRenderer::GetDevice()->BindTexturePS(effects.refractionSource, TEXSLOT_ONDEMAND3, threadID);
wiRenderer::GetDevice()->BindResourcePS(effects.maskMap, TEXSLOT_ONDEMAND1, threadID);
wiRenderer::GetDevice()->BindResourcePS(effects.distortionMap, TEXSLOT_ONDEMAND2, threadID);
wiRenderer::GetDevice()->BindResourcePS(effects.refractionSource, TEXSLOT_ONDEMAND3, threadID);
}
else{ //BLUR
wiRenderer::GetDevice()->BindVS(screenVS,threadID);
@@ -453,11 +453,11 @@ void wiImage::DrawDeferred(Texture2D* texture
wiRenderer::GetDevice()->BindVS(screenVS,threadID);
wiRenderer::GetDevice()->BindPS(deferredPS,threadID);
//wiRenderer::GetDevice()->BindTexturePS(depth,0,threadID);
//wiRenderer::GetDevice()->BindTexturePS(normal,1,threadID);
//wiRenderer::GetDevice()->BindTexturePS(texture,6,threadID);
wiRenderer::GetDevice()->BindTexturePS(lightmap,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindTexturePS(ao,TEXSLOT_ONDEMAND1,threadID);
//wiRenderer::GetDevice()->BindResourcePS(depth,0,threadID);
//wiRenderer::GetDevice()->BindResourcePS(normal,1,threadID);
//wiRenderer::GetDevice()->BindResourcePS(texture,6,threadID);
wiRenderer::GetDevice()->BindResourcePS(lightmap,TEXSLOT_ONDEMAND0,threadID);
wiRenderer::GetDevice()->BindResourcePS(ao,TEXSLOT_ONDEMAND1,threadID);
wiRenderer::GetDevice()->BindBlendState(blendStateNoBlend,threadID);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "CommonInclude.h"
#include "wiGraphicsAPI.h"
#include "ConstantBufferMapping.h"
class wiImageEffects;
enum BLENDMODE;
+3 -3
View File
@@ -44,13 +44,13 @@ void wiLensFlare::Draw(GRAPHICSTHREAD threadID, const XMVECTOR& lightPos, vector
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilState,1,threadID);
wiRenderer::GetDevice()->BindBlendState(blendState,threadID);
//wiRenderer::GetDevice()->BindTextureGS(depthMap,0,threadID);
//wiRenderer::GetDevice()->BindResourceGS(depthMap,0,threadID);
int i=0;
for(Texture2D* x : rims){
if(x!=nullptr){
wiRenderer::GetDevice()->BindTexturePS(x, TEXSLOT_ONDEMAND0 + i, threadID);
wiRenderer::GetDevice()->BindTextureGS(x, TEXSLOT_ONDEMAND0 + i, threadID);
wiRenderer::GetDevice()->BindResourcePS(x, TEXSLOT_ONDEMAND0 + i, threadID);
wiRenderer::GetDevice()->BindResourceGS(x, TEXSLOT_ONDEMAND0 + i, threadID);
i++;
}
}
+1
View File
@@ -2,6 +2,7 @@
#define LENSFLARE
#include "CommonInclude.h"
#include "wiGraphicsAPI.h"
#include "ConstantBufferMapping.h"
class wiLensFlare
{
+50 -50
View File
@@ -1570,14 +1570,14 @@ void wiRenderer::DrawTrails(GRAPHICSTHREAD threadID, Texture2D* refracRes){
GetDevice()->BindPS(pixelShaders[PSTYPE_TRAIL],threadID);
GetDevice()->BindVS(vertexShaders[VSTYPE_TRAIL],threadID);
GetDevice()->BindTexturePS(refracRes,TEXSLOT_ONDEMAND0,threadID);
GetDevice()->BindResourcePS(refracRes,TEXSLOT_ONDEMAND0,threadID);
for (Object* o : objectsWithTrails)
{
if(o->trailBuff.IsValid() && o->trail.size()>=4){
GetDevice()->BindTexturePS(o->trailDistortTex, TEXSLOT_ONDEMAND1, threadID);
GetDevice()->BindTexturePS(o->trailTex, TEXSLOT_ONDEMAND2, threadID);
GetDevice()->BindResourcePS(o->trailDistortTex, TEXSLOT_ONDEMAND1, threadID);
GetDevice()->BindResourcePS(o->trailTex, TEXSLOT_ONDEMAND2, threadID);
vector<RibbonVertex> trails;
@@ -1690,9 +1690,9 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID, unsigned in
GetDevice()->BindPrimitiveTopology(TRIANGLELIST,threadID);
//BindTexturePS(depth,0,threadID);
//BindTexturePS(normal,1,threadID);
//BindTexturePS(material,2,threadID);
//BindResourcePS(depth,0,threadID);
//BindResourcePS(normal,1,threadID);
//BindResourcePS(material,2,threadID);
GetDevice()->BindBlendState(blendStates[BSTYPE_ADDITIVE],threadID);
@@ -1753,7 +1753,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID, unsigned in
for (unsigned int shmap = 0; shmap < l->shadowMaps_dirLight.size(); ++shmap){
(*lcb).mShM[shmap]=l->shadowCam[shmap].getVP();
if(l->shadowMaps_dirLight[shmap].depth)
GetDevice()->BindTexturePS(l->shadowMaps_dirLight[shmap].depth->GetTexture(),TEXSLOT_SHADOW0+shmap,threadID);
GetDevice()->BindResourcePS(l->shadowMaps_dirLight[shmap].depth->GetTexture(),TEXSLOT_SHADOW0+shmap,threadID);
}
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_DIRLIGHT],lcb,threadID);
@@ -1771,7 +1771,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID, unsigned in
{
(*lcb).enerdis.w = 1.f;
if(Light::shadowMaps_pointLight[l->shadowMap_index].depth)
GetDevice()->BindTexturePS(Light::shadowMaps_pointLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW_CUBE, threadID);
GetDevice()->BindResourcePS(Light::shadowMaps_pointLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW_CUBE, threadID);
}
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_POINTLIGHT], lcb, threadID);
@@ -1802,7 +1802,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID, unsigned in
{
(*lcb).mShM = l->shadowCam[0].getVP();
if(Light::shadowMaps_spotLight[l->shadowMap_index].depth)
GetDevice()->BindTexturePS(Light::shadowMaps_spotLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW0, threadID);
GetDevice()->BindResourcePS(Light::shadowMaps_spotLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW0, threadID);
}
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_SPOTLIGHT], lcb, threadID);
@@ -1944,7 +1944,7 @@ void wiRenderer::DrawLensFlares(GRAPHICSTHREAD threadID){
void wiRenderer::ClearShadowMaps(GRAPHICSTHREAD threadID){
if (GetGameSpeed())
{
GetDevice()->UnbindTextures(TEXSLOT_SHADOW0, 1 + TEXSLOT_SHADOW_CUBE - TEXSLOT_SHADOW0, threadID);
GetDevice()->UnBindResources(TEXSLOT_SHADOW0, 1 + TEXSLOT_SHADOW_CUBE - TEXSLOT_SHADOW0, threadID);
for (unsigned int index = 0; index < Light::shadowMaps_pointLight.size(); ++index) {
Light::shadowMaps_pointLight[index].Activate(threadID);
@@ -2080,7 +2080,7 @@ void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
for (Material* iMat : mesh->materials) {
if (!wireRender && !iMat->isSky && !iMat->water && iMat->cast_shadow) {
GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
@@ -2181,7 +2181,7 @@ void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
for (Material* iMat : mesh->materials) {
if (!wireRender && !iMat->isSky && !iMat->water && iMat->cast_shadow) {
GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
@@ -2287,7 +2287,7 @@ void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
int m = 0;
for (Material* iMat : mesh->materials) {
if (!wireRender && !iMat->isSky && !iMat->water && iMat->cast_shadow) {
GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
static thread_local MaterialCB* mcb = new MaterialCB;
(*mcb).Create(*iMat, m);
@@ -2394,8 +2394,8 @@ void wiRenderer::DrawWorld(Camera* camera, bool DX11Eff, int tessF, GRAPHICSTHRE
envProbeCB->mTransform.r[1] = XMLoadFloat3(&envMapPositions[1]);
envProbeCB->mTransform = XMMatrixTranspose(envProbeCB->mTransform);
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], envProbeCB, threadID);
GetDevice()->BindTexturePS(envMaps[0], TEXSLOT_ENV0, threadID);
GetDevice()->BindTexturePS(envMaps[1], TEXSLOT_ENV1, threadID);
GetDevice()->BindResourcePS(envMaps[0], TEXSLOT_ENV0, threadID);
GetDevice()->BindResourcePS(envMaps[1], TEXSLOT_ENV1, threadID);
@@ -2456,14 +2456,14 @@ void wiRenderer::DrawWorld(Camera* camera, bool DX11Eff, int tessF, GRAPHICSTHRE
if(!wireRender) {
if (enviroMap != nullptr)
{
GetDevice()->BindTexturePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
}
else
{
GetDevice()->UnbindTextures(TEXSLOT_ENV_GLOBAL, 1, threadID);
GetDevice()->UnBindResources(TEXSLOT_ENV_GLOBAL, 1, threadID);
}
if(refRes != nullptr)
GetDevice()->BindTexturePS(refRes,TEXSLOT_ONDEMAND5,threadID);
GetDevice()->BindResourcePS(refRes,TEXSLOT_ONDEMAND5,threadID);
}
@@ -2518,12 +2518,12 @@ void wiRenderer::DrawWorld(Camera* camera, bool DX11Eff, int tessF, GRAPHICSTHRE
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MATERIAL], mcb, threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->refMap, TEXSLOT_ONDEMAND1,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->normalMap, TEXSLOT_ONDEMAND2,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->specularMap, TEXSLOT_ONDEMAND3,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->refMap, TEXSLOT_ONDEMAND1,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->normalMap, TEXSLOT_ONDEMAND2,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->specularMap, TEXSLOT_ONDEMAND3,threadID);
if(DX11Eff)
GetDevice()->BindTextureDS(iMat->displacementMap, TEXSLOT_ONDEMAND4,threadID);
GetDevice()->BindResourceDS(iMat->displacementMap, TEXSLOT_ONDEMAND4,threadID);
GetDevice()->DrawIndexedInstanced(mesh->indices.size(),visibleInstances.size(),threadID);
}
@@ -2582,16 +2582,16 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, Texture2D* refracRes, Text
if (enviroMap != nullptr)
{
GetDevice()->BindTexturePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
}
else
{
GetDevice()->UnbindTextures(TEXSLOT_ENV_GLOBAL, 1, threadID);
GetDevice()->UnBindResources(TEXSLOT_ENV_GLOBAL, 1, threadID);
}
GetDevice()->BindTexturePS(refRes, TEXSLOT_ONDEMAND5,threadID);
GetDevice()->BindTexturePS(refracRes, TEXSLOT_ONDEMAND6,threadID);
//BindTexturePS(depth,7,threadID);
GetDevice()->BindTexturePS(waterRippleNormals, TEXSLOT_ONDEMAND7, threadID);
GetDevice()->BindResourcePS(refRes, TEXSLOT_ONDEMAND5,threadID);
GetDevice()->BindResourcePS(refracRes, TEXSLOT_ONDEMAND6,threadID);
//BindResourcePS(depth,7,threadID);
GetDevice()->BindResourcePS(waterRippleNormals, TEXSLOT_ONDEMAND7, threadID);
}
@@ -2658,10 +2658,10 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, Texture2D* refracRes, Text
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MATERIAL], mcb, threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->refMap, TEXSLOT_ONDEMAND1,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->normalMap, TEXSLOT_ONDEMAND2,threadID);
if(!wireRender) GetDevice()->BindTexturePS(iMat->specularMap, TEXSLOT_ONDEMAND3,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->refMap, TEXSLOT_ONDEMAND1,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->normalMap, TEXSLOT_ONDEMAND2,threadID);
if(!wireRender) GetDevice()->BindResourcePS(iMat->specularMap, TEXSLOT_ONDEMAND3,threadID);
if (iMat->IsTransparent() && lastRenderType != RENDERTYPE_TRANSPARENT)
{
@@ -2710,7 +2710,7 @@ void wiRenderer::DrawSky(GRAPHICSTHREAD threadID, bool isReflection)
GetDevice()->BindPS(pixelShaders[PSTYPE_SKY_REFLECTION], threadID);
}
GetDevice()->BindTexturePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindVertexBuffer(nullptr,0,0,threadID);
GetDevice()->BindVertexLayout(nullptr, threadID);
@@ -2745,7 +2745,7 @@ void wiRenderer::DrawDecals(Camera* camera, GRAPHICSTHREAD threadID)
GetDevice()->BindConstantBufferPS(constantBuffers[CBTYPE_DECAL], CB_GETBINDSLOT(DecalCB),threadID);
}
//BindTexturePS(depth, 1, threadID);
//BindResourcePS(depth, 1, threadID);
GetDevice()->BindVS(vertexShaders[VSTYPE_DECAL], threadID);
GetDevice()->BindPS(pixelShaders[PSTYPE_DECAL], threadID);
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_BACK], threadID);
@@ -2758,8 +2758,8 @@ void wiRenderer::DrawDecals(Camera* camera, GRAPHICSTHREAD threadID)
if ((decal->texture || decal->normal) && camera->frustum.CheckBox(decal->bounds.corners)) {
GetDevice()->BindTexturePS(decal->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindTexturePS(decal->normal, TEXSLOT_ONDEMAND1, threadID);
GetDevice()->BindResourcePS(decal->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindResourcePS(decal->normal, TEXSLOT_ONDEMAND1, threadID);
static thread_local MiscCB* dcbvs = new MiscCB;
(*dcbvs).mTransform =XMMatrixTranspose(XMLoadFloat4x4(&decal->world)*camera->GetViewProjection());
@@ -2845,21 +2845,21 @@ void wiRenderer::SetClipPlane(XMFLOAT4 clipPlane, GRAPHICSTHREAD threadID)
}
void wiRenderer::UpdateGBuffer(Texture2D* slot0, Texture2D* slot1, Texture2D* slot2, Texture2D* slot3, Texture2D* slot4, GRAPHICSTHREAD threadID)
{
GetDevice()->BindTexturePS(slot0, TEXSLOT_GBUFFER0, threadID);
GetDevice()->BindTexturePS(slot1, TEXSLOT_GBUFFER1, threadID);
GetDevice()->BindTexturePS(slot2, TEXSLOT_GBUFFER2, threadID);
GetDevice()->BindTexturePS(slot3, TEXSLOT_GBUFFER3, threadID);
GetDevice()->BindTexturePS(slot4, TEXSLOT_GBUFFER4, threadID);
GetDevice()->BindResourcePS(slot0, TEXSLOT_GBUFFER0, threadID);
GetDevice()->BindResourcePS(slot1, TEXSLOT_GBUFFER1, threadID);
GetDevice()->BindResourcePS(slot2, TEXSLOT_GBUFFER2, threadID);
GetDevice()->BindResourcePS(slot3, TEXSLOT_GBUFFER3, threadID);
GetDevice()->BindResourcePS(slot4, TEXSLOT_GBUFFER4, threadID);
}
void wiRenderer::UpdateDepthBuffer(Texture2D* depth, Texture2D* linearDepth, GRAPHICSTHREAD threadID)
{
GetDevice()->BindTexturePS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindTextureVS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindTextureGS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindResourcePS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindResourceVS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindResourceGS(depth, TEXSLOT_DEPTH, threadID);
GetDevice()->BindTexturePS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
GetDevice()->BindTextureVS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
GetDevice()->BindTextureGS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
GetDevice()->BindResourcePS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
GetDevice()->BindResourceVS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
GetDevice()->BindResourceGS(linearDepth, TEXSLOT_LINEARDEPTH, threadID);
}
void wiRenderer::FinishLoading()
@@ -3307,7 +3307,7 @@ void wiRenderer::PutEnvProbe(const XMFLOAT3& position, int resolution)
else
GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEFAULT], mesh->stencilRef, threadID);
GetDevice()->BindTexturePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
GetDevice()->BindResourcePS(iMat->texture, TEXSLOT_ONDEMAND0, threadID);
static thread_local MaterialCB* mcb = new MaterialCB;
(*mcb).Create(*iMat, m);
@@ -3335,7 +3335,7 @@ void wiRenderer::PutEnvProbe(const XMFLOAT3& position, int resolution)
GetDevice()->BindPS(pixelShaders[PSTYPE_ENVMAP_SKY], threadID);
GetDevice()->BindGS(geometryShaders[GSTYPE_ENVMAP_SKY], threadID);
GetDevice()->BindTexturePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID);
GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID);
GetDevice()->BindVertexLayout(nullptr, threadID);
+1
View File
@@ -4,6 +4,7 @@
#include "wiGraphicsAPI.h"
#include "skinningDEF.h"
#include "SamplerMapping.h"
#include "ConstantBufferMapping.h"
#include "wiSPTree.h"
struct Transform;
+6
View File
@@ -213,6 +213,9 @@ float wiSoundEffect::GetVolume(){
}
HRESULT wiSoundEffect::Initialize()
{
if (INITIALIZED)
return S_OK;
HRESULT hr;
pXAudio2 = nullptr;
if(FAILED( hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ))
@@ -287,6 +290,9 @@ float wiMusic::GetVolume(){
}
HRESULT wiMusic::Initialize()
{
if (INITIALIZED)
return S_OK;
HRESULT hr;
pXAudio2 = nullptr;
if(FAILED( hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ))